Implementasi Diffie Hellman- NodeJS
Diffie Hellman adalah algoritma pertukaran kunci di mana klien dan server menghasilkan kunci publik dan pribadi, menukar kunci publik mereka dan menggabungkan kunci ini dengan kunci pribadinya sendiri untuk menghasilkan kunci rahasia yang sama.
Tapi, di sini ada kebingungan dalam implementasinya. Ini kodenya ...
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);
Pertama-tama, server membuat instance DiffieHellman
kelas untuk menghasilkan kunci. Namun, klien membutuhkan prime (.getPrime ()) server dan Generator (.getGenerator ()) server untuk menghasilkan instance DiffieHellman
kelas lain untuk menghasilkan kunci.
Jadi, server harus meneruskan nilai dari server.getPrime()
dan server.getGenerator()
ke klien. Apa yang terjadi jika ada serangan perantara yang meningkat saat ini? Sebab, jika entah bagaimana peretas mendapatkan dua hal ini maka mereka juga dapat menghasilkan kunci rahasia yang sama. (-_-)
Ada solusi? Pikirkan sistem ini tanpa TLS.
Jawaban
Anda berasumsi bahwa itu generateKeys
adalah operasi deterministik sehingga penyerang yang mengetahui parameter DH akan menghasilkan kunci yang persis sama. Tapi ini anggapan yang salah. Penyerang akan berakhir dengan kunci yang berbeda bahkan ketika menggunakan parameter DH yang sama karena keacakan terlibat saat membuat kunci dan penyerang tidak dapat mereplikasi keacakan yang digunakan oleh klien.