公钥密码学兴起于上个世纪七十年代。为了解决密钥配送的问题。一定要记住,密钥和明文其实是等效的,如果不能保证密钥的安全性,那么就无法保证密文的安全性,因为我们追求的是公开的安全。
举一个例子,你在图书馆预定了一个Locker,图书馆把钥匙寄到你的寝室,任何截获钥匙的人都能打开Locker然后看里面的东西。這面的问题就是对称密码学的密钥配送问题。而现在的Locker都是这样的,你投一个硬币进去,柜子会给你一个二维码(私钥),这样就不存在密钥配送的问题了,你直接用硬币就可以打开柜子,而不是用钥匙,这样就解决了密钥配送的问题。
下面我们拿RSA公钥加密算法来举一个例子。
上面两个公式是RSA的加密和解密公式。我们可以发现有三个数字是关键的在这个算法的。(E,D,N) 那这样的话我们接着讨论如何生成这三个数字。
通过上图我们可以想到我们如何求出(E,D,N)
这个算法里面,我们要关注的就是gcd
int gcd(int a,int b)
{
int r;
while(b>0)
{
r=a%b;
a=b;
b=r;
}
return a;
}
辗转相除法。
这样的话我们可以构建了RSA的保密算法。
通过以上的算法我们可以看到,算法的核心在于公钥-私钥算法对
而公钥私钥算法对是密切相关的,(E,N) (D,N) ,由于一个公钥和一个私钥是配对的,所以想实现密钥之间解耦是不可能的。
那么我们看一下如何保证算法的安全。
大数mod算法
五个可能针对RSA的算法。
攻击方法