绕脑玩之读Metrix67的跨越千年的RSA算法
大学学过,学过就忘,忘了继续学,然后继续忘。就是因为不知道这个算法的精髓是为了个啥。这次终于看懂了。找虐的同学欢迎移步Matrix原文观看。觉得自己屌而不丝的,欢迎阅读Matrix的blog,一分钟让你认识到是白痴哦,五分钟感觉到每个字都认识但是每个句子都看不懂哦。
Matrix67的博客是一次为了查点资料搜到的,看着很不错就rss了。基本上属于一直在订阅,从来没看懂的状态囧rz……每次看都觉得自己像个白痴了。为了避免进入老年痴呆,为了曾经逃过的课,为了跟明白人吵架也不跟傻逼说话,为了部落,也为了联盟……废话多说了,花了n个小时通看了Matrix57的http://www.matrix67.com/blog/archives/5100 跨越千年的RSA算法。
Martix大神写的比较多,各种来龙去脉。下面总结个精简版……(下面提到的所有数都是正整数+0,这个好像叫自然数?)
精髓就是费马小定理(我嘞个去,小定理。费马哥不如改名叫费脑啊)。简单说这个定理就是:有俩质数p和q(怎么看都是俩好基友),它们的乘积是n。然后对于任意正整数a,a的i次方mod n的结果肯定会以(p-1)(q-1)为周期循环(这个循环周期可能不是最小的,但是肯定会以这个周期循环)。精髓结束。
这个明明费脑但是非要叫费马的小定理意思就是,a的一次方 mod n = a的(p-1)(q-1) + 1次方 mode n = a的(p-1)(q-1) * 随便一个整数 + 1 。所以这才叫做a的i次方mod n的结果以(p-1)(q-1)为周期循环。
(解释一下上面的连等式为什么要加1。因为a是a的一次方,周期是(p-1)(q-1),再加上个1才能跟a mod n相等。)
根据上面的牛逼定理。我们学计算机的恬不知耻不交专利费就这么猥琐的用来加密数据:
首先介绍一下上场的角色:m和n好基友,p和q俩质数好基友,e和d俩质数好基友。他们的关系是n=p*q。m=(p-1)(q-1)。(所以m就是那个随便怎么在次方里加上几个也不会改变mod结果的循环周期)。e*d mod m = 1。这里面p和q俩质数是找出来的。m和n是简单乘法算出来的,e和d确实比较麻烦,因为要求是质数,而且还要乘积mod m=1。总之有个什么定理说肯定是可以算出来(好基友,拉拉手,算出来,一起走)。
下面开始猥琐的加密过程:
1)公开e和n,称之为公钥。但是d一定要保密,d和n称之为私钥(从此e和d俩好基友只能通过加密解密苟且了)。a是要加密的数据,这个数肯定要小于n,这个其实问题不大,因为实际使用的时候n都是好几百上千位的整数。
2)加密方计算a的e次方 mod n,作为加密后的值,且称为是b吧。将b传递给解密方。
3)解密方则计算b的d次方 mod n,那么结果就肯定是a鸟。
推倒导如下:b的d次方 mod n = (a的e次方 mod n) 的d次方 mod n。反正都要最后mod n,次方无外乎就是乘法,所以无论有多少个n都是浮云,也就是 = a的e*d次方mod n = a的m+1次方 mod n。因为m就是那个周期,所以=a的1次方 mod n = a mod n。而a小于n,所以a mod n = a。解密鸟终于解密鸟。
所以这个RSA才叫做非对称加密,因为e和d俩好基友,一个用来加密,只能用另一个来解密。而对称加密算法则是用同一个数来加密解密。
下面分析一下为啥这个算法不容易被破解:
recall一下演员们。mn,pq,ed。公布出来的是e和n。而解密需要d和n。所以不容易破解就是不容易根据e和n计算出d来。p和q俩幕后的好基友才是关键。因为可以说所有的数都是从他俩来的。m和n是,e和d则是通过一个算法计算出来,算法不是秘密,也就是说如果知道p和q那么肯定可以得到e和d了。
n就=p*q呀。但是知道这个,还知道p和q是质数,就是不好算出p和q是啥。 其实也不是不能算,就是不好算出来而已。n是公开的,大不了循环一个个去从1到n算除法。所以n的大小决定了破解的难度。p和q要比较大的质数,n也会非常大。假设n是一千位的整数吧(我也不知道实际使用的是多少位……)。那么真正循环要多久才能破了p和q捏:
现在主流的CPU是3Ghz不错了。也就是说一秒钟计算大概10亿次=1后面9个0,一天不到9w秒,且算10w吧,5个0。也就是一天算大概是计算1后面14个0。一千位的整数是1后面999个零。14个0简直就是渣渣囧rz……。换算成多少年就不说了,没意义了。估计够宇宙湮灭又诞生好几次吧……
所以RSA难破的根儿就是俩很屌的质数的乘积给出来,很难被找出这俩很屌的质数到底是啥。质数就是这么屌。
不得不感叹一下,知识和智慧真心是俩玩意。其实通篇都只是整数的加减乘除法而已,小学生也能看懂。但是能看着这些规律,真的要智慧而不是知识。
不得不再感叹一下,钢琴曲啥的,真的可能有助于短期提升智力。反正我是睁着眼看了好久没看懂剩余定理,听着钢琴曲闭着眼想通了。
不得不再再感叹一下,早知道质数这么屌,就应该也装B在换手机号的时候非质数手机号不要。