今天在學習node.js的crypto的時候看到了DH祕鑰交換算法,於是從網上學習了下DH算法的原理,在此簡單的記錄下其實現。
數理基礎:在瞭解DH算法之前我們來了解一下其基於數論部分的基礎:(a^X mod p)^y mod p = a^(X*Y) mod p = (a^y mod p)^X mod p
DH算法在交換祕鑰時發生的運算:
前提:在客戶端和服務端約定一個素數p,一個有限域FP的生成階a
步驟:
- Client端選擇一個隨機數c,生成需發送至服務端的公鑰 CP=a^c mod p;
- Server端選擇一個隨機數s,生成需發送至客戶端的公鑰SP=a^s mod p;
- 客戶端計算祕鑰:CR = SP^c mod p;
- 服務端計算祕鑰:SR = CP^s mod p;
根據之前的公式可以的出:
CR = SP^c mod p=(a^s mod p)^c mod p=a^(s*c) mod p=(a^c mod p)^s mod p =CP^s mod p=SR;