对称加密,经典算法 - AES
对称加密算法其实就是共享秘钥。在对称加密算法中,数据发信方将明文(原始数据)和加密密钥一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。
在对称加密算法中,使用的密钥只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。
对称加密算法的特点是算法公开、计算量小、加密速度快、加密效率高。不足之处是,交易双方都使用同样钥匙,安全性得不到保证。
此外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量成几何级数增长,密钥管理成为用户的负担,特别是在分布式网络系统应用上。
非对称加密,经典算法 - RSA
非对称加密算法需要两个密钥来进行加密和解密,这两个秘钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
公钥(Public Key)与私钥(Private Key)是通过一种算法(RSA)得到的一个密钥对。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。(注意这里的“必须”不是绝对的,也可以在理论上逆运算,但不具备实操性,原因如下)
RSA的基本原理:
密钥生成式:e*d =1 mod phi(n)
加密式:c=m^d mod n
解密式:m=c^e mod n
公钥(n,d),私钥(n,e)
其中n=p*q,p与q为两个大素数,phi(n) 是n的欧拉函数phi(n)=(p-1) (q-1), e是和phi(n) 互质的随机数,d是利用拓展欧几里得算法计算的e在mod phi(n) 下的逆元。
e和d一个作为私钥,一个作为公钥。m是要加密的明文,c是密文
RSA的公钥为什么不能逆推出私钥:
考虑密钥生成式:e*d =1 mod phi(n)
在已知公钥(n,e)的情况下,你还需要模数phi(n) 才能运行扩展欧几里得算法来得到d。
关键就在这里:要求出phi(n),如果不知道p和q,那么求phi(n) 的困难性不会低于对n进行质因数分解。而由于n是一个极大的数(2^1024或更长),因此对它进行质因数分解,在当下来说是计算上不可行的。当代的计算机没办法在有限时间内完成这一任务。
因此,也就是说已知公钥(n,e)求私钥(n,d) 是【计算上不可行】的。