开始本节之前先问个简单问题: 加密技术属于通信协议模型里的第几层里的应用? 答案:第六层表现层
Diffine-Hellman算法的功能只限制用于秘钥交换,是后面的ElGamal加密算法的重要组成部分.
公钥加密典型的有RSA加密还有就是ElGamal加密算法、椭圆曲线加密算法
公钥(public-key)分配机制
-Cannot be used to exchange an arbitrary message
-Rather it can establish a common key
-Known only to the two particaipants
Diffine-Hellman算法的设计原理是出于计算离散对数的难度比较大.
(注意区分专有名词: secret key 秘钥,private key 私密秘钥,public key公钥)
原理分析:
a mod p, a^2 mod p,....,a^(p-1) mod p 注: here, p is a prime.
这个过程每部各不相同,可以看成是1到p-1的一个置换.
用另一种表达式表示:
b ≡ a^i (mod) p, 0<=i<=(p-1)
Diffine-Hellman秘钥交换的过程大致如下: 先举个情景例子
如果Alice 和 Bob 正在通信,他们共享一个prime:q 和 integer: α (α<q) 以及α是q的本原根 (primitive root)
Alice 产生了一个私钥XA,XA<q, Bob产生一个私钥 XB,XB<q , Alice计算公钥 YA=α^XA mod q , Bob计算公钥 YB=α^XB mod q,
到这一步他们开始交换各自的公钥,Alice得到共享秘钥K=(YB)^XA mod q, Bob得到共享秘钥 K=(YA)^XB mod q, 以上就是整个秘钥交换的全过程.
注:什么叫本原根? b≡a^i mod p, 这里 a 是b和 p的本原根
那算法怎么实现? 看下面
prime : q 和 α 是两个公开的integer,也就是所有人都知道,如果上面的Alice 和 Bob 想交换秘钥,那么Alice 可以选择一个随机整数
XA<q (A是X的下标), 计算 YA=α^XA mod q, Bob也选择一个随机整数 XB<q, 计算 YB=α^XB mod q, 他们两个人都不告诉对方 X, 也就是Alice不知道XB,Bob不知道XA,但这里的YA和YB是什么? 是公钥,那么既然是公钥说明 YA,YB对与于方都是知道的,是公开的,也就是这两个公式里只有私钥XA、私钥XB不知道,别的变量大家都是知道的. 好了,那继续,Alice现在想产生共享秘钥 K=(YB)^ XA mod q, Bob也想产生共享公钥 K=(YA)^XB mod q, 这个过程他们交换了什么?交换的是各自的公钥 YA,YB,以上就算完成秘钥交换了!!!所以他们交换的秘钥是指的什么? 指的是公共秘钥!!
那这个共享秘钥一般干什么用的呢? 通常作为对称密码的秘钥. (公钥加密不是不对称的么,为什么这里又说是作为对称密码的秘钥呢?请自己先思考)
本节说的有点多请看下一节