Diffie-Hellman 密钥交换
回顾一下,前面几篇文章,首先介绍了几种经典的对称加密算法(如DES、3DES、AES和RC4),然后介绍了用于消息认证的SHA算法族,上一篇文章又开启了非对称加密算法的大门(介绍了RSA公钥加密算法)。到这里,相信大家已经对密码学中加解密的方式有了大致的了解。在这些加密算法中,我们都默认通信双方已经“安全”地掌握了加密通信时需要的密钥。那么,在加密通信开始之前,密钥到底是如何安全地在通信双方之间进行交换的呢?今天就介绍一种密钥交换算法——Diffie-Hellman。
Diffie-Hellman密钥协议算法是一种确保共享密钥KEY安全穿越不安全网络的方法,它是OAKLEY的一个组成部分,由Whitefield与Martin Hellman在1976年提出。这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥。然后可以用这个密钥进行加密和解密。但是注意,这个密钥交换协议/算法只能用于密钥的交换,而不能进行消息的加密和解密。双方确定要用的密钥后,要使用其他对称密钥操作加密算法实际加密和解密消息。
一. 本原根和离散对数
在正式开始介绍Diffie-Hellman算法之前,我们仍然需要先了解一下该算法的数论基础。
1.1 本原根
首先,我们定义质数 p p 的本原根为它的
~ p−1 p − 1 次幂能够生成 1 1 ~
之间的所有整数的数。即如果 a a 是质数
的一个本原根,则下列各个数:
各不相同,且它们组成了 1 1 ~ 之间整数的一个排列组合。 注意:一个质数的本原根不唯一。
举一个最简单的例子,2是3的一个本原根,因为 2=2mod3 2 = 2 m o d 3 , 1=22mod3 1 = 2 2 m o d 3 。
1.2 离散对数
对于任意小于 p p 的整数 ,和 p p 的本原根 ,我们能够找到唯一的指数 i i ,使得 ,其中