Implementazione di Diffie Hellman - NodeJS

Aug 19 2020

Diffie Hellman è un algoritmo di scambio di chiavi in ​​cui client e server generano sia la chiave pubblica che quella privata, scambiano la loro chiave pubblica e combinano questa chiave con la propria chiave privata per generare la stessa chiave segreta.

Ma qui c'è una confusione nell'implementazione. Ecco il codice ...

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);  

Prima di tutto, il server crea un'istanza di DiffieHellmanclasse per generare la chiave. Tuttavia, il client necessita del server prime (.getPrime ()) e del generatore (.getGenerator ()) per generare un'altra istanza di DiffieHellmanclasse per generare la chiave.

Quindi, il server deve passare il valore di server.getPrime()e server.getGenerator()al client. Cosa succede se in questo lasso di tempo si verifica un attacco di intermediari? Perché, se in qualche modo un hacker ottiene queste due cose, può anche generare la stessa chiave segreta. (-_-)

Qualche soluzione? Pensa a questo sistema senza TLS.

Risposte

2 SteffenUllrich Aug 19 2020 at 00:04

Stai assumendo che generateKeyssia un'operazione deterministica in modo che un attaccante che conosce i parametri DH genererà esattamente le stesse chiavi. Ma questo è un presupposto sbagliato. L'attaccante si ritroverà con chiavi diverse anche quando utilizza gli stessi parametri DH poiché la casualità è coinvolta durante la generazione delle chiavi e l'attaccante non può replicare la casualità utilizzata dal client.