l976年,Diffie和Hellman首次提非对称加密出公开密钥加密体制,即每个人都有一对密钥,其中一个为公开的,一个为私有的。
发送信息时用对方的公开密钥加密,收信者用自己的私用密钥进行解密。公开密钥加密算法的核心是运用一种特殊的数学函数一单向陷门函数,即从一个方向求值是容易的。但其逆向计算却很困难,从而在实际上成为不可行的。公开密钥加密技术它不仅保证了安全性又易于管理。其不足是加密和解密的时间长。
公有密钥技术依赖于两个不同的密钥,一个公有密钥和一个私有密钥。公有密钥用于加密信息,私有密钥用于解密它们。下图是一种非对称加密技术:
实现原理:
Diffie–Hellman key exchange:
现在假设A和B分别是参与DH式密钥交换过程的两方,他们一开始会商议确定一个小质数(一般是2,3,5这样的小数字)和一个大质数(有300位以上)作为加密的原始信息。小质数和大质数都可以直接传输,不必担心交换过程中的不安全。需要明白的是,A和B各自都持有着自己的私钥(100多位的数),而且也永远不应该共享自己的私钥。不光是两人之间,也包括其他不相关的人都不应该拥有这两组私钥。网络中传输的是他们的私钥、小质数和大质数混合运算得到的结果。更确切来说,就是:
• A的结果 = (小质数A的密码)% 大质数
• B的结果 = (小质数B的密码)% 大质数
• (“%” 符号表示取模运算,即取得除法运算的余数)
所以A使用大质数和小质数加上自己的私钥运算,就会得出结果,而B做同样的计算,也能得到相同的结果。当他们接收到对方的运算结果时,他们可以由数学计算导出会话中所要传输的信息,也就是说:
A计算的是
• (B的结果Alice的密码)% 大质数
而Bob则计算
• (A的结果Bob的密码)% 大质数
最后,A和B计算出的结果相同。
3.RSA算法(质数猜想),真是D-H交换的实现,这是一种强大的单向函数。
把wikipedia上的例子直接搬过来了:
A working example[edit source | editbeta]
Here is an example of RSA encryption and decryption. The parameters used here are artificially small, but one can also use OpenSSL to generate and examine a real keypair.
公开密钥加密技术的发展是整个密码编码学历史上最大的而且也许是唯一真正的革命。公开密钥密码编码学与传统的方法不同:一方面它是基于数学函数;更为重要的是,它是非对称的。公钥系统对于保密通信、密钥分配和鉴别等领域有着深远的影响。