Si vous voulez discuter tranquillou sur un petit bout de web avec vos potes sans qu’un Bernard ou un Jean Jacques ne s’invite dans la conversation, voici un nouveau service de chat 100% chiffré de bout en bout.

Ce projet est un travail en cours et n’a pas fait l’objet d’une vérification de la sécurité ou d’un examen par les pairs, alors ne l’utilisez pas pour tout ce qui est essentiel pour la sécurité.

Darkwire utilise l’API de cryptographie Web. Cryptocat et Signal sont à la fois géniaux, mais je voulais essayer de créer un service basé sur le Web (mobile-friendly) qui utilise la nouvelle API crypto Web et socket.io.

Étant donné que tout cryptage utilise des API natives, la base de code est légère et relativement simple, sans dépendances externes majeures.

Après avoir recherché OTR et d’autres sujets crypto, j’ai essayé de suivre les meilleures pratiques tout en respectant l’API crypto Web, mais c’est mon premier projet basé sur cryptographie, alors je cherche des vulnérabilités dans l’approche que j’ai prise. Le code source est ici.

Comment ça marche: (copié d’ici) Darkwire utilise une combinaison de cryptage asymétrique (RSA-OAEP), de signature asymétrique (RSASSA-PKCS1-v1_5) et de cryptage de session symétrique (AES-CBC) pour la sécurité.

Voici un aperçu d’une discussion entre Alice et Bob (s’applique également aux groupes de discussion):

Bob crée une pièce et crée immédiatement une paire de clés publiques / privées primaires (RSA-OAEP) et une paire de clés publiques / privées de signature (RSASSA-PKCS1-v1_5).

Alice se joint à la salle et crée également des paires de clés publiques et privées primaires. Elle reçoit les deux clés publiques de Bob et elle envoie Bob ses deux clés publiques.

Lorsque Bob va envoyer un message, deux choses sont créées: une clé de session (AES-CBC) et un vecteur d’initialisation (ceux-ci sont générés chaque fois qu’un nouveau message est envoyé).

Le message de Bob est chiffré avec la clé de session et le vecteur d’initialisation, et une signature est créée à l’aide de sa clé de signature privée.

La clé de session est chiffrée avec la clé publique de chaque destinataire (en l’occurrence uniquement Alice, mais dans un multiple de discussion de groupe).

Le message crypté, le vecteur d’initialisation, la signature et la clé de session cryptée sont envoyés à tous les destinataires (en l’occurrence Just Alice) en tant que paquet.

Alice reçoit le paquet et décrypte la clé de session à l’aide de sa clé privée. Elle déchiffre le message avec la clé de décryptage de la session et le vecteur, et vérifie la signature avec la clé de signature publique de Bob.

Les conversations de groupe fonctionnent de la même manière, car à l’étape 5, nous cryptons la clé de session avec la clé publique de tous.

Lorsqu’un message est envoyé, il comprend des clés chiffrées pour tous les membres de la salle, et les destinataires puis choisissent ceux pour eux en fonction de leur identifiant.

Lire La Suite Sur Korben