Diffie Hellman-Implementierung - NodeJS
Diffie Hellman ist ein Schlüsselaustauschalgorithmus, bei dem Client und Server sowohl öffentliche als auch private Schlüssel generieren, ihren öffentlichen Schlüssel austauschen und diesen Schlüssel mit seinem eigenen privaten Schlüssel kombinieren, um denselben geheimen Schlüssel zu generieren.
Aber hier ist eine Verwirrung in der Implementierung. Hier ist der 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);
Zunächst erstellt der Server eine DiffieHellmanKlasseninstanz, um einen Schlüssel zu generieren. Der Client benötigt jedoch die Primzahl (.getPrime ()) und den Generator (.getGenerator ()) des Servers , um eine weitere Instanz der DiffieHellmanKlasse zum Generieren des Schlüssels zu generieren.
Der Server muss also den Wert von server.getPrime()und server.getGenerator()an den Client übergeben. Was passiert, wenn in dieser Zeit ein Mittelmann-Angriff auftritt? Denn wenn Hacker diese beiden Dinge irgendwie bekommen, können sie auch denselben geheimen Schlüssel generieren. (-_-)
Irgendeine Lösungsmöglichkeit? Denken Sie an dieses System ohne TLS.
Antworten
Sie gehen davon aus, dass dies generateKeyseine deterministische Operation ist, sodass ein Angreifer, der die DH-Parameter kennt, genau dieselben Schlüssel generiert. Dies ist jedoch eine falsche Annahme. Der Angreifer erhält auch bei Verwendung derselben DH-Parameter unterschiedliche Schlüssel, da beim Generieren der Schlüssel eine Zufälligkeit auftritt und der Angreifer die vom Client verwendete Zufälligkeit nicht replizieren kann.