在服务器上仅保存口令在单向函数H下的镜像是应用多年的标准做法,即保存H(π)而不是π本身。这样泄露口令文件不会直接泄露口令,当一个声明的口令π′提交给服务器时,服务器验证H(π′)=H(π)是否成立。但是,口令文件泄露仍会遭到离线字典攻击,因为攻击者可对任何猜测的π′计算H(π′)再与存储的值比较。因此,这种方法的好处取决于应用。已经有很多基于口令的密钥建立协议仅需要服务器保存口令的镜像。
一些协议在计算口令镜像时还用到Salt。Salt是保护服务器中口令的另一种常用的机制。对每个口令π,服务器上存储(si,H(πi,si)),si是一个随机的Salt值。Salt的目的是防止攻击者对服务器泄露的口令文件进行成批猜测攻击。即使攻击者知道了Salt值,一次口令猜测也只能验证一个口令镜像。
原始的EKE协议要求服务器存储口令的明文,以便解密协议交换。接着,Bellovin和Merritt设计了一个改进的协议,如图4.57所示,它仅需在服务器上保存口令的镜像。
(www.daowen.com)
图4.57 改进的基于Diffie-Hellman的EKE协议
这个协议的前4条消息和图4.56所示协议几乎一样,只是用口令Hash值H1(π)代替口令明文π。仅有这4条消息是不够的,因为用户仅需要H1(π)来完成协议运行,也就对原始协议没作什么改进。因此,有必要在协议中添加消息5,它包含用π作为秘密密钥构造共享秘密的数字签名,这样B就可以得到相关的公钥。Bellovin和Merritt并未详细说明选择何种签名,只是用私钥为π、公共验证密钥为H2(π)=gπ的ElGamal签名作为例子(H1和H2可能相等,但本例中H2需要幂运算,如果H1是个简单的Hash函数,A的计算量将减小)。
Steiner等人指出能获得旧KAB的攻击者可以解密图4.57的最后一条消息,并试图用一个猜测的口令π′验证签名,从而发起字典攻击。因此,有争论说这个协议弱于原始协议,因为在通常情况下,旧会话密钥很可能被泄露。但是,这个问题可以用ZAB生成不同的密钥代替会话密钥KAB来保护协议消息,从而避免这个问题。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。