Implémentation Diffie Hellman - NodeJS

Aug 19 2020

Diffie Hellman est un algorithme d'échange de clés dans lequel le client et le serveur génèrent à la fois une clé publique et une clé privée, échangent leur clé publique et combinent cette clé avec sa propre clé privée pour générer la même clé secrète.

Mais, voici une confusion dans la mise en œuvre. Voici le code ...

const crypto = require('crypto');
const express = require('express');
const app = express();

// Generate server's keys...
const server = crypto.createDiffieHellman(139);
const serverKey = server.generateKeys();

// Generate client's keys...
const client = crypto.createDiffieHellman(server.getPrime(), server.getGenerator());
const clientKey = client.generateKeys();

// Exchange and generate the secret...
const serverSecret = server.computeSecret(clientKey);
const clientSecret = client.computeSecret(serverKey);  

Tout d'abord, le serveur crée une instance de DiffieHellmanclasse pour générer la clé. Mais le client a besoin du serveur principal (.getPrime ()) et du générateur (.getGenerator ()) pour générer une autre instance de DiffieHellmanclasse afin de générer la clé.

Ainsi, le serveur doit transmettre la valeur de server.getPrime()et server.getGenerator()au client. Que se passe-t-il si une attaque d'intermédiaire survient pendant cette période? Parce que, si un pirate informatique obtient ces deux choses, il peut également générer la même clé secrète. (-_-)

Toute solution? Pensez à ce système sans TLS.

Réponses

2 SteffenUllrich Aug 19 2020 at 00:04

Vous supposez qu'il generateKeyss'agit d'une opération déterministe de sorte qu'un attaquant connaissant les paramètres DH générera exactement les mêmes clés. Mais c'est une hypothèse erronée. L'attaquant se retrouvera avec des clés différentes même s'il utilise les mêmes paramètres DH car le caractère aléatoire est impliqué lors de la génération des clés et l'attaquant ne peut pas reproduire le caractère aléatoire utilisé par le client.