偶然看到一篇密码学的文章,之前都没有了解过,趁着午休时间,匆匆一瞥被其中的智慧震撼了,随手记录一下,以后有时间再接着补充
一、历史
对称加密算法VS非对称加密算法
在1976年以前,所有的加密方式都是同一种模式:对称加密算法。
我简单举个栗子:小明写了个小纸条打算传递 i love you(也就是信息)这句话给他的女朋友小红,但是老师们防早恋抓得比较紧,所以他打算对这句话加密,让老师截获小纸条也不知道想表达什么。所以小明使用一个简单加密规则:所有字母使用字母表顺序后二位字母代替。
然后 i love you 就变成了j mpwf zpv
显然老师截获小纸条也不会马上猜出来是什么意思。但是小明告诉他女朋友加密规则,小红收到小纸条后就开始解密:所有字母用前两位代替,成功领悟到了小明的心思。由于加密和解密使用同样规则(简称"密钥"),这被称为"对称加密算法"
当然,还可以使用更加复杂而加密规则,但这种加密模式有一个很大的弱点:小明必须要把加密规则告诉小红,否则无法解密。传递和保存密钥就成了一个很头疼的问题。
所以就有了非对称加密算法。
我们可以设想一种方法,小明使用了一个算法,产生了一个加密方法,这个加密方法(公钥)可以加密信息,但直接解密要花很多时间很困难,但加密算法是小明创建的,他知道这个方法有个捷径解法可以很快解密。
随后小明把这种方法广播出去,小红也收到了。小红把悄悄话用这个加密方法加密,也广播了出去。
虽然老师截获了小红加密后的内容也知道了加密规则,但是太难解密了。可能等解密出来小明和小红都毕业了,于是老师放弃。
小明收到小红的发送内容后,使用了捷径解法,很快就解出来了小红的信息:你是个好人,但是我们不合适,我们分手吧。(狗头)
这个故事就是非对称加密算法的方式了。可能有的人会问,这种解密很难但是捷径解密的方法是不是很复杂,但其实我们也经常接触,举个栗子:y = sinx^5 + cosx + ln(x)arctan(x)x^5.
在这个公式中,已知x求y是非常容易的,但已知y想求x是非常困难的。公钥就相当于已知y,私钥就相当于x。
回归到正史:
976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为"Diffie-Hellman密钥交换算法"。这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即可,这样就避免了直接传递密钥。
如果公钥加密的信息只有私钥解得开,那么只要私钥不泄漏,通信就是安全的。因为甲方只要获得公钥就行了,不存在私钥需要传递的问题,私钥自始至终都在信息接受者的手中,所以通信是安全的。
1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。从那时直到现在,RSA算法一直是最广为使用的"非对称加密算法"。毫不夸张地说,只要有计算机网络的地方,就有RSA算法。
这种算法非常可靠,密钥越长,它就越难破解。根据已经披露的文献,目前被破解的最长RSA密钥是768个二进制位。也就是说,长度超过768位的密钥,还无法破解(至少没人公开宣布)。因此可以认为,1024位的RSA密钥基本安全,2048位的密钥极其安全。
接下去,进入正题,解释RSA算法的原理。文章共分成两部分,今天是第一部分,介绍要用到的四个数学概念。你可以看到,RSA算法并不难,只需要一点数论知识就可以理解。