加密野史:從山本五十六到中本聰區(qū)塊鏈
中本聰被公認為非對稱加密年代沖刷出來的天才,而山本五十六卻被定格在對稱加密時代,一份密碼本讓它丟的不僅是四艘航母,還有自己的命。
偷襲珍珠港得手后,山本五十六決定偷襲中途島。
他派出四條先鋒航母,航母指揮官們踮起腳尖,舉起望遠鏡,爭相腦補美軍措手不及的畫面時,美軍轟炸機突然從云里穿出,遮住了天。
日軍措手不及,幾百架戰(zhàn)機還沒來得及飛、就被悶死在甲板上。
十分鐘內(nèi),先鋒航母全部噴火,王牌飛行員們直到被烤焦也沒想到,美國人早就截獲了他們的偷襲情報。
是誰走漏了風(fēng)聲?
一、對稱加密的軟肋
日軍通訊密碼以復(fù)雜出名,由一萬個五位數(shù)組成,而且,太平洋戰(zhàn)爭期間升級12次,看似牢不可破,卻難擋百密一疏。
這都怪美軍擊沉過一艘日本潛艇,從船艙里撈出來一份密碼本,上面記滿密語,美軍由此洞穿日軍80%的密電,并且得知:山本五十六正計劃偷襲AF,但AF究竟在哪里?
美軍翻到珍珠港被襲前夜的電報,山本五十六要求日本戰(zhàn)機從馬紹爾群島出發(fā),注意避開AF的空中偵察。
從地圖上看,AF只能是中途島。
為證實猜想,中途島美軍用明文假報淡水設(shè)備故障,日軍截獲情報,扭頭告訴主力部隊:帶上淡水凈化器,因為AF淡水匱乏。美軍截獲消息,確認AF就是中途島。
最終,山本五十六的全部機密像X光片一樣,攤在羅斯福總統(tǒng)的辦公桌上,美國未戰(zhàn)先勝。
物理戰(zhàn)場的贏家,無一不是信息戰(zhàn)場的勝者。就在同時,英國破譯出德軍的密碼,加速了二戰(zhàn)的結(jié)束。
二戰(zhàn)時期的國家,真正的家當不是飛機、不是航母,而應(yīng)該是密碼本。當守護機密的重擔(dān)全壓在密碼本上時,卻沒有東西能守護密碼本本身,這是對稱加密的軟肋。
可二戰(zhàn)之后就少有密碼被破的事跡,特別是80年代美蘇冷戰(zhàn)期間,兩國都使出奶勁破譯對方密電,最后卻都竹籃打水。
為什么會這樣?這要從非對稱加密的鼻祖RSA算法說起。
二、什么是RSA算法?
1977年,Rivest、Shamir和Adleman三位教授用名字的首字母命名一種新算法:RSA,可它居然不需要密碼本,這在當時就像吃飯不需要碗筷刀叉。
為什么會那樣清新脫俗?關(guān)鍵在于RSA把密碼本拆分成公鑰和私鑰:公鑰公開,用來加密;私鑰私藏,用來解密。
RSA的原理很簡單,但要先回憶三個初中數(shù)學(xué)小概念:質(zhì)數(shù)、互質(zhì)和取模。
質(zhì)數(shù):只能被它本身和1整除的自然數(shù)。比如:2、3、5、7、11、13、17……即:我們沒法把一個質(zhì)數(shù)拆成兩個自然數(shù)之積。
互質(zhì):公約數(shù)只有1的兩個正整數(shù),比如:5和72互質(zhì)。
取模:即除法中的余數(shù),運算符是mod,比如7 ÷ 3 = 2余1,所以,7 mod 3 = 1。
RSA用四步設(shè)定密鑰(公鑰和私鑰):
1、找兩個質(zhì)數(shù)P和Q,P和Q相乘得到Max,即 Max = P × Q
2、把兩個質(zhì)數(shù)分別減1,相乘得到M,即 M = (P-1) × (Q-1)
3、找一個正整數(shù)E,使E與M互質(zhì),且 E<M
4、找一個正整數(shù)D,使D × E 除以M余1,即(D × E) mod M = 1
E是公鑰,加密就是讓原文自乘(E-1)次,得到密文。
D是私鑰,解密就是讓密文自乘(D-1)次,得到原文。
我們挑兩個質(zhì)數(shù):P=7, Q=13
Max = P × Q = 91
M = (P-1) × (Q-1) = 72
隨機選公鑰E=5,因為5與72互質(zhì),且5小于72
找到私鑰D=29,因為5 × 29 ÷ 72 余 1
如果,你想把字符C傳給你朋友,怎么加密才能抵抗破解?
字符C在ASCII碼中對應(yīng)的數(shù)字是67,加密原理很簡單:
把原文67自乘4次(E-1次),注意:當自乘結(jié)果超過Max(Max = 91)時,需將結(jié)果取模后再乘。
活體演示:
原文67自乘第1次:
67 × 67 = 4489 > 91
所以,4489 mod 91 = 30
把上一步的結(jié)果30拿過來,自乘第2次:
30 × 67 = 2010 > 91
所以,2010 mod 91 = 8
自乘第3次:
8 × 67 = 536 > 91
所以,536 mod 91 = 81
自乘第4次:
81 × 67 = 5427 > 91
所以,5427 mod 91 = 58
自乘4次之后,加密結(jié)束,得到密文58。查ASCII碼表,58對應(yīng)” : “,把“ : ”發(fā)出去,即使被截獲,也不會泄露信息,因為對方?jīng)]有私鑰,解不了密。
那么,掌握私鑰的人如何解密?
很簡單,類似于加密,解密是用密文58自乘28次(D-1次),但每次相乘結(jié)果超過Max時,需取模后再乘:
密文58自乘第1次:
58 × 58 = 3364 > 91
所以,3364 mod 91 = 88
把上一步結(jié)果88拿過來,自乘第2次:
88 × 58 = 5104 > 91
所以,5104 mod 91 = 8
照葫蘆畫瓢,第3次:
8 × 58 = 464 > 91
所以,464 mod 91 = 9
第4次:
9 × 58 = 522 > 91
所以,522 mod 91 = 67
第5次:
67 × 58 = 3886 > 91
所以,3886 mod 91 = 64
第6次:
64 × 58 = 3712 > 91
所以,3712 mod 91 = 72
第7次:
72 × 58 = 4176 > 91
所以, 4176 mod 91 = 81
第8次:
81 × 58 = 4698 > 91
所以, 4698 mod 91 = 57
第9次:
57 × 58 = 3306 > 91
所以, 3306 mod 91 = 30
第10次:
30 × 58 = 1740 > 91
所以,1740 mod 91 = 11
第11次:
11 × 58 =638 > 91
所以, 638 mod 91 = 1
第12次:
1 × 58 = 58 < 91
58 < 91,所以不用取模,直接把58拖下來乘
第13次 :
58 × 58 =3364 > 91
所以, 3364 mod 91 = 88
我們發(fā)現(xiàn),從第13次開始重復(fù)第1次結(jié)果:
第14次:8
第15次:9
第16次:67
第17次:64
第18次:72
第19次:81
第20次:57
第21次:30
第22次:11
第23次:1
第24次:58
第25次:88
第26次:8
第27次:9
第28次:67
解密完成,67就是原文。
我們發(fā)現(xiàn),解密過程出現(xiàn)兩道輪回,實際只有12種可能,而且存在密文與原文相同的情形(第12次),那是因為我們用的是小質(zhì)數(shù):7和13,現(xiàn)實中的質(zhì)數(shù)稍微大一點:
P =
3388495837466721394368393204672181522815830368604993048084925840555281177
Q =
11658823406671259903148376558383270818131012258146392600439520994131344334162924536139
Max = P × Q =
39505874583265144526419767800614481996020776460304936454139376051579355626529450683609727842468219535093544305870490251995655335710209799226484977949442955603
選用大質(zhì)數(shù)后,解密過程出現(xiàn)的可能性將超千億,概率上不支持破解者發(fā)現(xiàn)規(guī)律。
另一方面,破解密文的唯一方式是破解密鑰,而Max和公鑰是公開信息,于是,破解私鑰唯一的方法是從Max中分解出P和Q。
已知P和Q計算乘積,普通電腦一瞬間就能算出Max,可如果想把Max拆成P和Q,那就應(yīng)了一句古話:沒有耕壞的地,只有累死的牛。
我國最拉風(fēng)的超級計算機神威·太湖之光,裝備4萬個處理器,占地足足一棟別墅,拆分1個200位數(shù)字,至少要等1000年。往前推1000年,那是北宋時期,我國歷史上最善于解密的包青天年方十八。
所以,與其說是在大海撈針,不如說是在太陽系中排查一顆原子,撞上大運的概率比原子還小。
正算容易倒推難,這在密碼學(xué)上稱為陷門函數(shù)(Trapdoor Function),是非對稱加密安全性的根基。陷門函數(shù)像是出站口的旋轉(zhuǎn)門:出門容易,但想進來,那只有把門拱壞一條路。
RSA是古典和現(xiàn)代加密技術(shù)的分水嶺,它的誕生堪稱歷史性突破,但和其他突破一樣,隨著歷史一路顛簸,RSA身上懸掛的缺陷也開始叮當作響。
比如:
有些算法已能拆分特定的大數(shù),所以為求安全,人們會用更大的質(zhì)數(shù),但這樣,密鑰長度會被拉長,最終拖慢加解密速度。
用戶陷入兩難:拉長密鑰吧不便捷,不拉長密鑰不安全。總得有種更出彩的算法,才能讓人有盼頭。
于是,地平線上又升起一種新算法:橢圓曲線加密。
三、什么是橢圓曲線加密?
橢圓曲線加密(Elliptic Curve Cryptography )即ECC,1985年由Koblitz和Miller兩位教授發(fā)明,被公認為最強的通用加密法。
和RSA一樣,ECC也是非對稱加密:公鑰加密,私鑰解密。但兩者生成公鑰和私鑰的機制不同,ECC比RSA更安全、更便捷。
為什么?我們從一個方程說起:
y2 = x3 ax b(a和b是常數(shù))
即使沒在教科書里見過,你也完全不必害怕,只要畫出來,你就會發(fā)現(xiàn)這不過是只插在竹簽上的章魚。
圖1 橢圓曲線
章魚的輪廓就是橢圓曲線,它的身體沿x軸對稱,而且,任何竹簽直插上去和章魚輪廓最多有三個交點。
如果你去查資料,你會發(fā)現(xiàn)ECC的公式天羅地網(wǎng),任何一個公式都會纏住你,但你馬上就會知道,即使ECC看起來艱澀,但本質(zhì)上不過是一局桌球游戲,只是桌球的彈射規(guī)律有點奇怪。
我們在橢圓曲線上任選一點A開球。
1、球打向B,彈往另一交點,再折向交點與x軸的對稱點C;
2、到C后會彈向A,途經(jīng)曲線交點時,球會折向交點的對稱點D;
3、到D后會沿AD方向,射向曲線與直線的另一交點,接著彈到交點的對稱點E;
3次撞擊過程,桌球叮叮咚咚撞n次后,停在終點。
如果你知道起點坐標和撞擊次數(shù)n,就能算出終點坐標。可是,這時有人跑進來,他知道起點和終點坐標,如果你問他,撞擊次數(shù)n是多少?他會和球一樣愣在原地,因為真的沒法算。
撞擊次數(shù)n就是你的私鑰,一個你選的超大整數(shù);桌球撞擊n次停下,而終點坐標相當于公鑰;如果你想再做一個公鑰,那么改變起點坐標即可。
橢圓曲線方程、起點和終點坐標完全公開,但計算球撞了幾次才停下來卻沒有捷徑、只能一次次試,這項事業(yè)比RSA中拆分Max的任務(wù)還要艱巨,都能把量子計算機們累出血,這就是為什么說ECC比RSA更安全的原因。
同樣面對228位長度的密鑰,如果破解RSA需要燒開一勺水的能量,那么破解ECC所需要的能量,足以燒開地球上所有的水。——德國數(shù)學(xué)家 Lenstra
ECC早已無處不在:我們的第二代身份證都基于ECC,美國政府部門也用ECC加密內(nèi)部通信,開源瀏覽器Foxfire、谷歌的Chrome、蘋果的iMessage服務(wù)都使用ECC。
除此之外,匿名網(wǎng)絡(luò)Tor用ECC保護使用者隱私。中本聰曾經(jīng)穿梭在各大論壇,但他的身份至今是謎,全靠Tor網(wǎng)絡(luò)底層的ECC。
而中本聰?shù)臉I(yè)余小發(fā)明——比特幣,也使用ECC的數(shù)字簽名算法ECDSA(Elliptic Curve Digital Signature Algorithm),不單安全性能好,而且ECDSA簽起名來要比RSA簽名快兩個數(shù)量級。準確地說,256位的私鑰用ECDSA要比2048位的RSA簽名算法快20倍,是四輪車和三輪車的差別。
盡管花好稻好,可ECC也非完美無缺。
ECC需要一些隨機數(shù),而隨機數(shù)的產(chǎn)生有賴于生成器里的“種子”,曾有人爆料:美國國家安全局(NSA)曾經(jīng)對隨機數(shù)生成器動過手腳,讓破解難度大幅降低,這樣就便于特工破譯采用ECC加密的數(shù)據(jù)。
爆料者的名字叫斯諾登,他是美國棱鏡門事件的主角。
根據(jù)曝光材料,NSA開發(fā)出一條偽隨機數(shù)曲線secp256r1。可幸運的是,中本聰并沒有選擇NSA的偽隨機數(shù)曲線secp256r1,而是使用了另一條非偽隨機數(shù)曲線secp256k1,帶著比特幣躲過密碼學(xué)歷史上的一支暗箭,否則只要暴露過公鑰的人都有一定概率被NSA內(nèi)部人士猜出私鑰。
結(jié)語
中本聰被公認為非對稱加密年代沖刷出來的天才,而山本五十六卻被定格在對稱加密時代,一份密碼本讓它丟的不僅是四艘航母,還有自己的命。
1943年4月18日,美國空軍穩(wěn)穩(wěn)擊落山本五十六的座機,解密文件顯示,美軍破譯出日軍JN25密碼本,提前獲知機密行程,讓他成為對稱加密時期最高級別的祭品。
和對稱加密相比,非對稱加密可以把秘密寫在明信片上,消滅了密碼本被破解的問題,但加密技術(shù)進化之路并非坦途,因為密碼攻防問題始終存在。
所以,并不存在絕對安全的加密方法,如果有種算法可以讓我們安全享用50年,就已經(jīng)足夠,至于進化中的問題,就讓進化本身來修補。
1.TMT觀察網(wǎng)遵循行業(yè)規(guī)范,任何轉(zhuǎn)載的稿件都會明確標注作者和來源;
2.TMT觀察網(wǎng)的原創(chuàng)文章,請轉(zhuǎn)載時務(wù)必注明文章作者和"來源:TMT觀察網(wǎng)",不尊重原創(chuàng)的行為TMT觀察網(wǎng)或?qū)⒆肪控?zé)任;
3.作者投稿可能會經(jīng)TMT觀察網(wǎng)編輯修改或補充。