Diffie-Hellman密钥交换协议
Diffie-Hellman密钥交换协议
一. 介绍
密钥交互协议是一种交互式的密码协议,通过该协议可以使没有任何共享密钥的双方,在公开网络上可以通过某些信息来产生一对共享的安全密钥,安全性是基于离散对数问题的难解性。
二. 数学原理
设p是一个大素数,g是p的原根(即数值g mod p, g^2 mod p, ...., g^(p-1) mod p是各不相同的整数,并且以某种排列顺序组成了从1到p-1的所有正整数)。离散对数问题就是在已知整数b和素数p的一个原根g,求解唯一的指数i,满足b=(g^i)modp。
三. 发展历程
1. 基础算法
- A选择一个大数x, 并发送X=(g^x)modp给B
- B选择一个大数y, 并计算Y=(g^y)modp给A
- A计算Ka=(Y^x)modp, B计算Kb=(X^y)modp
- Ka=Kb=(g^(x*y))modp即为双方的密钥
评价:
从gx和gy当中求解x或y是离散对数问题,从gx和gy当中得到g^(x*y)是CDH问题,都是难解问题。但是Diffie-Helleman算法没有身份验证机制,容易中间人攻击。
2. 站到站密钥交换协议
为解决中间人攻击的问题,采取签名认证Diffie-Hellman算法进行分析,基于签名认证来防止中间人攻击。
但是还是存在问题,未知密钥共享攻击可以实现身份的伪装。
攻击者将A中协议发送者的身份换成了E,然后通过转发消息和伪造签名来实现让B认为自己是真实的发送者,从而实施攻击。这个问题的关键就是没有对签名进行认证,对方之前并不知道签名的公钥是什么,所有人都可以伪造签名,从而实现身份的篡改。
为了解决这个问题,提出了STS(站到站协议),通过在签名上再进行一次加密实现避免身份被篡改。
核心就是在原来的基础上,对签名用共享密钥再进行了一次加密,实现身份的认证。
3. SIGMA密钥交换协议
基于Diffie-Hellman的站到站协议虽然实现了较好的安全性,但是上述协议当中核心是保证签名消息的机密性,而实际上目地应该是消息的完整性和验证性,有点本末倒置的感觉。
经过优化采取基于MAC校验实现消息的认证性,提出了著名的SIGMA(Sign and MAC)协议。
主要思想:
通过签名实现消息的认证性,同时利用MAC算法实现消息的完整性和会话密钥确认。在协议当中,响应方B利用k'计算消息(B, g^x, g^y)的MAC校验值,其中k'是k通过密钥生成函数生成的会话密钥,然后B使用私钥对MAC校验值进行签名。通过私钥签名证明自己身份,通过MAC校验证明未被修改,通过会话密钥计算MAC校验值证明其知道会话密钥Km。
对于中间人而已,可以篡改签名但是无法修改签名当中的内容,所以未知密钥共享攻击失效。