Implementasi Diffie Hellman- NodeJS

Aug 19 2020

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 DiffieHellmankelas untuk menghasilkan kunci. Namun, klien membutuhkan prime (.getPrime ()) server dan Generator (.getGenerator ()) server untuk menghasilkan instance DiffieHellmankelas 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

2 SteffenUllrich Aug 19 2020 at 00:04

Anda berasumsi bahwa itu generateKeysadalah 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.