本文目錄一覽:
驗證DH密鑰交換演算法
我自己寫了個DH秘鑰的demo代碼, 以前加密用過AES的加密,全套代碼寫下來太費時間又沒技術含量。
如果你需要AES的加密代碼可以留個郵箱給我。
public class Test1 {
public static final int P=30;//公開的大家都知道的
public static final int G=9;//公開的大家都知道的
public static void main(String[] args) {
A x = new A();
int one = x.getV();
//分割 A 代表A這邊的系統加密 one 代表是給別人的值
B y = new B();
int two = y.getV();
//B 代表另外一邊加密 two 代表是給別人的值
System.out.println(x.getKey(two));
System.out.println(y.getKey(one));
}
}
class A{
private int a;//自己的私有密值,不會告訴任何人
public A() {
Random r = new Random(200);
a=r.nextInt();
}
public int getV(){
return (Test1.G^a)%Test1.P;
}
public int getKey(int v){
return (v^a)%Test1.P;
}
}
class B{
private int b;//自己的私有密值,不會告訴任何人
public B() {
Random r = new Random(200);
b=r.nextInt();
}
public int getV(){
return (Test1.G^b)%Test1.P;
}
public int getKey(int v){
return (v^b)%Test1.P;
}
}
DH 迪菲-赫爾曼密鑰交換
迪菲-赫爾曼密鑰交換 (英語:Diffie–Hellman key exchange,縮寫為 DH ) 是一種密鑰交換協議(不是加密演算法),雙方使用DH確定對稱密鑰後,要使用加密演算法實現加密和解密。
前向保密 (英語:Forward Secrecy, FS ),指的是如果長期使用的密鑰泄漏了,不會導致過去的會話被解密。比如你的一對公鑰/私鑰泄漏了,過去的會話就可以被解密出來。
g一般是2或者5,p是一個質數。一般來講 服務端 持有g與p,g與p一般放在xxx.dh文件中
如何生成dh文件
2048代表p是一個2048位的大數,可以指定:
(g a mod p ) b mod p 等價於 g ab mod p
(g b mod p ) a mod p 等價於 g ba mod p
所以服務端與客戶端計算得到的密鑰是相同的。
redis應用DH配置實踐
如何改進DH演算法,使其抵禦中間人攻擊
改進DH演算法使其抵禦中間人攻擊的方法是:在途中根據需要修改它們的密文,使得A和B都不知道他們在和C共享通信。
DH演算法的缺點是沒有提供雙方身份的任何信息.。它是計算密集性的,因此容易遭受阻塞性攻擊,即對手請求大量的密鑰。受攻擊者花費了相對多的計算資源來求解無用的冪係數而不是在做真正的工作.,沒辦法防止重演攻擊。
容易遭受中間人的攻擊,第三方C在和A通信時扮演B;和B通信時扮演A.A和B都與C協商了一個密鑰,然後C就可以監聽和傳遞通信量。
擴展資料:
基於原根的定義及性質,可以定義Diffie-Hellman密鑰交換演算法.該演算法描述如下:
1、有兩個全局公開的參數,一個素數q和一個整數a,a是q的一個原根。
2、假設用戶A和B希望交換一個密鑰,用戶A選擇一個作為私有密鑰的隨機數XA(XAq),並計算公開密鑰YA=a^XA mod q。A對XA的值保密存放而使YA能被B公開獲得。類似地用戶B選擇一個私有的隨機數XBq,並計算公開密鑰YB=a^XB mod q。B對XB的值保密存放而使YB能被A公開獲得。
3、用戶A產生共享秘密密鑰的計算方式是K = (YB)^XA mod q.同樣,用戶B產生共享秘密密鑰的計算是K = (YA)^XB mod q.這兩個計算產生相同的結果:
K = (YB)^XA mod q = (a^XB mod q)^XA mod q = (a^XB)^XA mod q = a^(XBXA) mod q = (a^XA)^XB mod q = (a^XA mod q)^XB mod q = (YA)^XB mod q 因此相當於雙方已經交換了一個相同的秘密密鑰。
參考資料來源:百度百科-Diffie-Hellman
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/303521.html