什么是RSA加密算法?
RSA加密算法属于非对称加密算法的一种,用于对数据进行加密、解密和数字签名。其可靠性依赖于计算极大整数做因数分解的难度,就是说如果有一天出现了一种可以快速对极大整数做因数分解的算法、方法的话,RSA加密算法的安全性将大打折扣,甚至失效。
RSA工作原理
设用户A、B需要在公网上进行加密通讯,明文为P(Plain Text)密文为C(Cipher Text)
加密解密通讯实现
首先用户A生成对外公开的公钥(Public Key)和私密存放的私钥(Private Key),简称UAPub(User A Public Key)和UAPri(User A Private Key)。
用户B同用户A一样生成公钥和私钥,设为UBPub与UBPri。
此时A与B通讯,
用户A使用用户B对外公开的公钥,即UBPub加密Pa得到密文Ca,将Ca传送给用户B,用户B使用UBPri进行解密得到Pa。也就是说Ca即便是加密方A也无法进行解密。
同理,若B回复A则
B取UAPub加密Pb得Cb发送给A,A使用UAPri解密得Pb。
数字签名实现
如上所述生成UAPub、UAPri与UBPub、UBPri。
此时A与B通讯
A使用UBPub加密Pa得Ca,再使用自己的私钥即UAPri签名(加密)得CSa
B得到CSa后使用A公开的UAPub进行验证(解密),若无法完成则证明被修改或非真正A所发送
什么是Diffie-Hellman密钥交换算法?
Diffie-Hellman密钥交换算法(以下简称DH)并不能用于加密数据,其仅仅是为了相对安全的传输用于加、解密数据用途的密钥的。其可靠性赖于计算离散对数的难度,同RSA加密算法一样,如果有一天出现了一种可以快速计算离散对数的算法、方法的话,DH也会面临可靠性大打折扣甚至失效。
Diffie-Hellman工作原理
设两个全局公开的参数,一个素数q和一个整数a,a是q的一个原根.
假设用户A和B希望交换一个密钥,用户A选择一个作为私有密钥的随机数XA(XA<q),并计算公开密钥YA=a^XA mod q。A对XA的值保密存放而使YA能被B公开获得。
同理,用户B选择一个私有的随机数XB<q,并计算公开密钥YB=a^XB mod q。B对XB的值保密存放而使YB能被A公开获得.
用户A产生共享秘密密钥的计算方式是K = (YB)^XA mod q.同样,用户B产生共享秘密密钥的计算是K = (YA)^XB mod q.这两个计算产生相同的结果: K = (YB)^XA mod q = (a^XB mod q)^XA mod q = (a^XB)^XA mod q (根据取模运算规则得到) = a^(XBXA) mod q = (a^XA)^XB mod q = (a^XA mod q)^XB mod q = (YA)^XB mod q 因此相当于双方已经交换了一个相同的秘密密钥.
中间人攻击
有些人认为RSA算法支持签名而比DH算法更加安全,其实对于中间人攻击来说并不存在这样的事情。下面分别演示两算法的中间人攻击实现:
RSA算法:
UAPub、UAPri与UBPub、UBPri
设用户A、用户B与中间人C,明文P,密文C
用户A的UAPub被中间人C截获并模拟A向B发送自己的公钥UCPub
同理截获B的UBPub并模拟B向A发送UCPub
此时中间人即可使用自己的UCPri解密得到双方明文,根据需求拦截或修改再模仿发件人发送至接收人,
此情况下即便是数字签名也无济于事。
Diffie-Hellman算法:
同RSA算法,其全局公开数a、q、X、Y更是因没有验证机制,则中间人攻击的问题更为突出。
常见的中间人攻击的应用
一般企业或学校会用的上网行为管理器即为一种中间人攻击的应用方式,用户的https证书交换被上网行为管理器劫持篡改,从而得到SSL、TSL通讯的明文数据。
发表回复