公钥密码算法,DH算法原理,单向函数,离散对数函数

  • Post author:
  • Post category:其他


公钥密码算法,常见的有RSA、DH。


RSA原理,看这里

首先需要了解一个概念:单向函数


在知道 a、g、p 的情况下,可以计算出 A;

但是在知道 A、g、p(

很大的一个质数

) 的情况下,却不能计算出 a

。这就是单向函数,这个函数也叫做“


离散对数函数


”。

一般来说,大数分解问题被认为是比离散对数问题更困难的问题。

需要注意:DH的公钥私钥和RSA公钥私钥是有区别的。

DH算法涉及6个数字:

p 代表 prime 质数,

一个大的质数,

建议长度在1024比特以上;

g 代表 generator 发生器,g为p的原根,

g^(p-1) = 1 (mod p)

,求原根g目前的做法是从2开始枚举,直至找到一个满足条件的g。

原根一般都不大,所以可以暴力得到,比如p为97,因为2^(97-1) % 97 =1 所以g就是2,g这个值常见的就是2,5。

a 代表 Alice 的私钥,

一个随机数



b 代表 Bob 的私钥,

一个随机数



A 代表 Alice 产生的

公钥 A = g^a % p

,需要和 Bob 共享,即传递给 Bob;

B 代表 Bob 产生的

公钥 B = g^b % p

,需要和 Alice 共享,即传递给 Alice;

即使中间人即第三者截获了 Alice 和 Bob 的公钥 A 和 B,也无法计算出各自的私钥 a 和 b。

Alice 和 Bob 要协商出来的


对称秘钥


是 K

证明两个人算出的K相同:


计算第一个表达式:


计算第二个表达式:



最终得到:

这个 K 就是Alice和Bob之间⽤的

对称加密密钥

,可以作为会话密钥使⽤。



举个例子:


p为一个随机大质数:


97



g为p的原根,满足g^(p-1) = 1 (mod p),从2开始枚举,直至找到一个满足条件的g,所以g为:


2

a为Alice 的私钥,一个随机数:


23



b为Bob 的私钥,一个随机数:


81



A 代表 Alice 产生的公钥 A = g^a % p,所以计算得到A:


48



B 代表 Bob 产生的公钥 B = g^b % p,所以计算得到B:


70



经过网络明文传输后



Alice 知道的数为:p、g、a、A、B,并计算K的值为:K=B^a mod p =


18



Bob  知道的数为:p、g、b、A、B,并计算K的值为:K=A^b mod p =


18

参考:


通俗学习秘钥协商算法—DH算法 – 知乎


DH算法图解+数学证明_dh算法原理_叨陪鲤的博客-CSDN博客



版权声明:本文为u014644574原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。