X: / Chat est une application Web qui utilise HTML, CSS et JavaScript sur le front-end et Node.js sur le back-end. Il permet aux utilisateurs de communiquer entre eux de manière sécurisée (bien que je sois nouveau dans Node.js et ne peut garantir ladite sécurité).
JavaScript et le stockage local sont absolument obligatoires pour que l'application Web fonctionne. Le stockage local est utilisé pour stocker des clés publiques, des clés privées, des paramètres et bien plus encore.
Si vous utilisez la fonction "CHAT anonyme", rien n'est stocké par le serveur. Je voulais faire la forme de communication la plus sécurisée à laquelle je pouvais penser, et j'ai fini par choisir de ne même pas stocker des journaux de conversation via le chat anonyme. Lorsque vous cliquez sur le bouton "CHAT anonyme", vous êtes redirigé vers "/ anonyme", où un ID est généré pour vous, ainsi qu'une clé publique et une clé privée. Ceux-ci sont uniquement enregistrés sur votre navigateur (dans le stockage local). Le serveur ne stocke aucune de ces informations. La seule chose que le serveur stocke est l'ID de conversation et le temps de création. Ceci est fait pour que les conversations puissent expirer après une heure. Une fois le chargement terminé, vous pouvez envoyer votre URL à toute personne que vous souhaitez et les faire se connecter à vous. Une fois qu'ils le font, ils obtiennent également une paire de clés publique / privée générée pour eux, ainsi qu'un ID. Vous êtes ensuite fourni avec leur clé publique et leur identifiant. Lorsque vous envoyez un message, vous le cryptez en utilisant leur clé publique RSA-2048, qu'ils décryptent ensuite de leur côté (localement) en utilisant leur clé privée. Étant donné que le message est crypté du côté client, le serveur ne sait jamais ce qui est dit. Le rafraîchissement de la page supprime les messages pour quiconque a actualisé, car les messages ne sont stockés nulle part . En raison du fait que rien n'est stocké sur le serveur, cela signifie que les utilisateurs peuvent facilement modifier leurs ID et autres, c'est pourquoi ce projet a été fait pour être utilisé par les petits groupes, plutôt que le grand public. Le fait que le serveur stockait des conversations anonymes fournirait le bénéfice que les conversations sont immuables par les utilisateurs, mais cela signifierait que le serveur peut les modifier et que les journaux existeraient. Alors, préférez-vous faire confiance à votre ami ou à un serveur aléatoire?
Le chat normal ressemble plus à votre application de chat générique. Les messages sont toujours cryptés du côté client avec RSA-2048, et les clés privées des utilisateurs sont chiffrées avec AES-256-CTR, qui utilise le hachage SHA512 du mot de passe de l'utilisateur comme clé de décryptage. Le mot de passe de l'utilisateur est stocké à l'aide de BCrypt avec 10 tours de sel. En bref, à moins que le code du serveur ne soit modifié ou quelque chose pour capturer la clé privée de l'utilisateur, il n'y a absolument aucun moyen d'obtenir le contenu d'une conversation. Les paramètres, les contacts et les autres données de l'utilisateur sont stockés au format JSON dans des fichiers texte pour un accès facile. Ceux-ci sont stockés en texte clair, mais il serait facile de les crypter avec le mot de passe et les AES de l'utilisateur. Si vous souhaitez en faire une réalité, n'oubliez pas, il y a déjà des fonctions écrites pour le rendre plus facile. Vous pouvez utiliser les fonctions "Aes_Encrypt (PlainText, mot de passe)" et "AES_DECRYPT (ECRYPTED, mot de passe)" que j'ai écrit pour crypter / décrypter facilement ce que vous voulez.
Il peut y avoir des bogues ou des comportements inattendus, mais c'est à prévoir, c'est, après tout, mon premier projet Node.js. Si vous essayez de briser l'application, vous réussirez très probablement. Il n'y a pas autant de chèques de validation et comme je le souhaite, mais il y en a assez pour protéger les comptes et les conversations de l'utilisateur. Je m'excuse à l'avance si quelque chose se passe mal.