最近算法课老师要求小组上台讲算法,我们就去学习了一下RSA算法。
以前的加密算法,大部分属于对称加密算法。通信双方只有掌握同一种规则,才能进行加密解密。这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。就好像一把钥匙单独对应一把锁。但是问题在于,当通信对象很多时,就会有很多把锁和钥匙,这时候保存和传递密钥就是很大的问题。
RSA是一种非对称加密,公开密钥算法。他利用了利用了单向函数正向求解很简单,反向求解很复杂的特性。
具体来说:
1.两个质数相乘很简单,将一个数分解成质数相乘很难
2.(m^e)modN=c 已知m求c很简单,已知c求m很难
而RSA加密算法,就是基于这样的一个正向简单逆向难的数论思路。上面的公式中,m是发送的原数字,c是加密后的数字,e、N是公开的公钥。即使有人截获了加密后的c,也很难破解,获得m。其难度就在于大整数的因式分解。
那么,我们获得了c之后,就需要有一套自己独特的方式进行解密,而我们自己的秘密武器,就是私钥d。我们需要有这样一个数d,可以让我们通过(c^d)modN=m推出m。而这个思路和推倒,就利用了欧拉公式,和欧拉定理。
介绍一下我们需要掌握的一些数学定理:
欧拉函数:在小于等于n的正整数之中,有多少个与n构成互质关系?以φ(n)表示。在1到8之中,与8形成互质关系的是1、3、5、7,所以
φ(8) = 4。
注意:如果n是质数,那么φ(n