私钥加密体系的实际应用中存在三个问题:
- 密钥的分发
- 存储和管理大量的密钥
- 私钥加密体系在开放系统中的不适用性
密钥分发中心(Key-Distribution Center, KDC)
KDC的运行机制:
- 首先,Alice和KDC共享一个密钥kA,Bob和KDC共享一个密钥kB
- Alice向KDC发送一条信息:“I, Alice, want to talk to Bob”
- KDC接收到消息后选择一个会话密钥k,然后用kA将k进行加密后发送给Alice,同样的,用密钥kB将k加密后发送给Bob
- 只要Alice和Bob恢复了会话密钥,他们就可以进行私密的会话了
- 会话结束后,需要擦拭掉会话密钥
KDC的图示:
KDC的优点:
- 每个用户只需要与KDC维持一个长期的密钥,而且用户需要管理并存储会话密钥,但这个会话密钥时短期的
- KDC需要保存很多密钥,然而,KDC可以放在安全的地方,并且有抵抗网络攻击的安全手段
- 每当一个用户加入时,只需要添加一个该用户与KDC之间的密钥
KDC的缺点:
- 如果成功攻击了KDC,那么着整个系统都会被破解
- KDC是单点故障:如果KDC停机,则暂时无法进行安全通信
KDC的密钥分发协议
这个协议其实就是在原来KDC的运行机制的基础上做了一点改进:
当Alice向KDC发起与Bob会话的请求后,KDC用kA将会话密钥加密发送给Alice,然后又用kB将会话密钥发送给Alice,然后Alice在向Bob发起会话,并同时将EnckB(k)发送给Bob。
图示如下:
KDC的密钥分发协议的优点:
- 该协议减少了KDC上的通信负担。
- KDC不需要启动到Bob的第二个连接,也不需要担心Alice启动协议时Bob是否在线。
- 此外,如果Alice保留了票据(以及会话密钥副本),那么就可以通过简单地将票据重新发送给Bob来重新启动与Bob的安全通信,而需要再次向KDC发起请求。
然而密钥分发协议并没有降低KDC的安全隐患问题
密钥交换与迪菲-赫尔曼(Diffie-Hellman)协议
KDC体系中还存在一个问题就是需要用一条私密的信道来分享用户与KDC之间的密钥
Diffie和Hellman意识到不对称现象可以被用于推导安全密钥交换的交互协议,允许双方通过一条公共信道来分享一个密钥,并且允许双方执行他们可以逆转但窃听者不能逆转的操作。
密钥交换协议的安全性:协议执行过程中,窃听者无法区分由协议生成的密钥和一个随机的二进制串
密钥交换协议的安全实验:KEeavA,Π(n):
- 通信双方在执行协议的时候需要维护一个安全参数1n,这将生成一个包含各方发送的所有消息的文本trans,以及各方输出的密钥k。
- 随机的选择一个比特b,如果b = 0,则令k^ = k;如果b = 1,则随机的选择k^∈{0, 1}n
- 将trans和k^发送给敌手,然后敌手输出一个比特b‘
- 如果b' = b,则这个实验输出1;否则输出0
定义:如果存在一个可忽略函数negl对所有运行在PPT上的敌手都有Pr[KEeavA, Π(n)=1] ≤ 1/2 + negl(n),则称这个密钥交换协议是安全的。
Diffie-Hellman协议
Diffie-Hellman协议的构造方法:
首先通信双方都需要输入一个安全参数1n,然后运行协议:
- Alice运行 ç(1n) 从而获得(G, q, g)
- Alice随机的在Zq中选择一个x,然后计算hA := gx
- Alice发送(G, q, g, hA)给Bob
- Bob收到(G, q, g, hA)后,随机的在Zq中选择一个y,然后计算hB := gy,并将hB发送给Alice,然后输出密钥kB := hAy
- Alice收到hB后输出密钥kA := hBx
Diffie-Hellman协议的图示:
离散对数问题的难度对于协议的安全性来说是必要的,但不是充分的,因为有可能存在其他方法来计算密钥kA=kB,而不需要显式地计算x或y。
密钥交换协议所要求的是共享密钥gxy对于给定g、gx和gy的任何敌手都应该与某个随机的数不可区分,而这正是DDH(Decision Diffie-Hellman)假设。
DDH问题,假设存在一个可忽略函数对所有PPT上的敌手 A 都有:
|Pr[A(G, q, g, gx, gy, gz)=1] - Pr[A(G, q, g, gx, gy, gxy)=1]| ≤ negl(n)
定理:如果DDH问题在群G中是难以解决的,那么Diffie-Hellman密钥交换协议在被动攻击下是安全的。
证明.
在开始证明之前需要将前面的KEeavA,Π实验进行一定的修改:当b=1时,随机的选择一个群G中的元素,而不是一个n比特长的随机二进制串,则:
Pr[KEeavA,Π(n)=1]
=1/2(Pr[KEeavA,Π(n)=1 | b=0] + Pr[KEeavA,Π(n)=1 | b=1])
=1/2(Pr[A(G, q, g, gx, gy, gxy)=0] + Pr[A(G, q, g, gx, gy, gz)=1])
=1/2(1-Pr[A(G, q, g, gx, gy, gxy)=1] + Pr[A(G, q, g, gx, gy, gz)=1])
=1/2(1-(Pr[A(G, q, g, gx, gy, gxy)=1] - Pr[A(G, q, g, gx, gy, gz)=1]))
=1/2(1 - negl(n))
=1/2 - 1/2negl(n)
所以Diffie-Hellman密钥交换协议是安全的。
然而在实际应用中,Diffie-Hellman协议对于中间人攻击是完全不安全的。