Diffie Hellman uygulaması - NodeJS

Aug 19 2020

Diffie Hellman, istemci ve sunucunun hem genel hem de özel anahtar ürettiği, açık anahtarlarını değiştirdikleri ve bu anahtarı kendi özel anahtarıyla birleştirerek aynı gizli anahtarı oluşturdukları bir anahtar değişim algoritmasıdır.

Ancak burada uygulamada bir kafa karışıklığı var. İşte kod ...

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

Öncelikle sunucu, DiffieHellmananahtar oluşturmak için bir sınıf örneği oluşturur. Ancak, istemcinin anahtar oluşturmak için başka bir sınıf örneği oluşturması için sunucunun prime (.getPrime ()) ve Generator (.getGenerator ()) 'a ihtiyacı vardır DiffieHellman.

Bu nedenle, sunucunun değerini server.getPrime()ve server.getGenerator()istemciye iletmesi gerekir . Bu zamanda herhangi bir orta adam saldırısı yükselirse ne olur? Çünkü hacker bir şekilde bu iki şeyi alırsa aynı gizli anahtarı da üretebilir. (-_-)

Herhangi bir çözüm? Bu sistemi TLS'siz düşünün.

Yanıtlar

2 SteffenUllrich Aug 19 2020 at 00:04

generateKeysDH parametrelerini bilen bir saldırganın tam olarak aynı anahtarları oluşturması için bunun deterministik bir işlem olduğunu varsayarsınız . Ancak bu yanlış bir varsayımdır. Saldırgan, aynı DH parametrelerini kullanırken bile farklı anahtarlarla sonuçlanacaktır, çünkü anahtarları oluştururken rastgelelik söz konusudur ve saldırgan istemci tarafından kullanılan rastgeleliği kopyalayamaz.