系列目录:html
假如,明明和丽丽相互不认识,明明想给丽丽写一封情书,让隔壁老王送去程序员
程序员之网络安全系列(二):如何安全保存用户密码及哈希算法 咱们保证了数据的完整性算法
程序员之网络安全系列(三):数据加密之对称加密算法
咱们对数据进行了加密安全
可是上面的问题是明明和丽丽必须提早知道秘钥,可是若是双方提早不知道秘钥,那么明明就须要“隔壁的王叔叔" 把秘钥告诉丽丽,这个显然是风险太大了,由于”隔壁王叔叔“有了秘钥和密文,那么就等于有了明文。网络
1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,容许在不安全的媒体上的通信双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫作“非对称加密算法”。加密
与对称加密算法不一样,非对称加密算法须要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,若是用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;若是用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。由于加密和解密使用的是两个不一样的密钥,因此这种算法叫做非对称加密算法。code
明明和丽丽分别选择秘密密钥XA=36和XB=58,并计算各自的公开密钥,而后让隔壁的王叔叔帮忙交换公开秘钥。htm
YA=a^XA mod p=5^36 mod 97=50 YB=a^XB mod p=5^58 mod 97=44
明明和丽丽交换了公开密钥以后,计算共享密钥以下:blog
明明:K=(YB) ^XA mod p=44^36 mod 97=75 丽丽:K=(YA) ^XB mod p=50^58 mod 97=75
因为只有明明知道XA, 而只有丽丽知道XB, 那么“隔壁的王叔叔” 是不可能经过 P, A, YA, YB来获得最终密码K的。网络安全
DiffieˉHellman不是加密算法,它只是生成可用做对称密钥的秘密数值。
与对称加密算法不一样,非对称加密算法须要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,若是 用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;若是用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。由于加密和解密使用的是两个不一样的密钥,因此这种算法叫做非对称加密算法。
那么若是甲(收信方)想收到只有本身才能解读的加密信息,那么须要把本身的公钥告诉乙(发送发), 乙经过甲的公钥加密,把加密后的密文告诉甲,因为只有甲有私钥,那么也就只有甲才能加密。
因而可知,非对称加密只须要保存一对公钥和私钥,大大方便了秘钥管理。可是因为要作更多的计算,非对称加密只适合一些小数据量加密,通常状况都是用非对称加密算法来交换秘钥,随后经过对称加密算法来加密数据。
RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)。
使用最普遍的是RSA算法,Elgamal是另外一种经常使用的非对称加密算法。
咱们对数据的完整性使用Hash进行了保证,用DH算法交换了秘钥,使用RSA算法对数进行了加密,那么若是王叔叔在交换秘钥的过程当中作了手脚呢?
如何作手脚?看下图:
至此,邮件内容又赤裸裸地被王叔叔看到了,怎么办呢?咱们下文继续解释。