出處:http://www.cnblogs.com/bigmonkey
本文以學習、研究和分享爲主,如需轉載,請聯繫本人,標明做者和出處,非商業用途!
掃描二維碼關注公衆號「我是8位的」
上一篇文章介紹了RSA涉及的數學知識,本章將應用這些知識詳解RSA的加密與解密。html
密鑰的生成是RSA算法的核心,它的密鑰對生成過程以下:算法
1. 選擇兩個不相等的大素數p和q,計算出n=pq,n被稱爲RSA算法的公共模數;安全
2. 計算n的歐拉數φ(n),φ(n)=(p-1)(q-1);post
3. 隨機選擇一個整數e做爲公鑰加密密鑰指數,1< e < φ(n),且e與φ(n)互質;學習
4. 利用同餘方程ed≡1 (mod φ(n))計算e對應的私鑰解密指數d。因爲GCD(e, φ(n))=1,所以同餘方程有惟一解,d就是e對於模φ(n)的乘法逆元;加密
5. 將(e,n)封裝成公鑰,(d, n)封裝成私鑰,同時銷燬p和q。spa
因爲n已經被公開出去,剩下的d就成爲RSA有效性的關鍵,若是d被破解,那麼密碼系統也宣告失效。至於可否破解,後續再議,先來看看RSA是的加密和解密算法。3d
如今Bob經過上述過程生成了公鑰和私鑰,並把公鑰告知了Alice,若是Alice想和Bob通信,就須要用Bob的公鑰PKB對發送的明文X進行加密,從而獲得密文Y:視頻
在RSA中,Ee,n(X)是模冪運算,先計算X的e次方,再對其結果用n求餘:htm
Bob收到密文後,須要對其解密,還原出明文X,解密運算也是模冪運算:
全部信息(包括文字、語音、圖像、視頻等)在計算機中都是二進制數據,所以能夠將X和Y視爲整數,進而使用摸冪運算。
加密運算容易理解,解密運算爲什能還原出明文呢?若是a%n=b,則下面的表達是等同的:
所以加密過程在表達上等同於:
將密文代入解密運算:
繼續計算彷佛有點困難,不妨先把問題簡化,令a=Xe:
這裏有一個規律,展開式只有第一項不含有kn,這意味着(a-kn)d可否被n整除徹底取決於展開式的第一項,所以:
在生成密鑰的第4步,根據ed≡1 (mod φ(n))計算出了d,這意味着:
根據歐拉定理,若是a, n是正整數,且兩者互質,則:
所以,當X和n互質時:
根據①可知:
根據模運算的性質:
③可進一步簡化爲:
這裏有兩種狀況,X>=n或X <n 。當X<n 時,因爲已經假設了 互質,因此:
當X>=n是,狀況變得有些微妙,假設X=37,n=35:
這下可壞了,解密算法根本沒法還原出明文。難道是解密算法有誤?實際上RSA的加密是有前提條件的,根據RSA規範(https://tools.ietf.org/html/rfc2437),明文的取值範圍必須在0到n-1之間:
看來只能是 X<n,當X和n 互質時,解密算法有效,能夠還原出明文。
當X和n不互質時,它們必然有除了1之外的其它公約數;因爲n只有p和q兩個約數,所以p或q也必定是X的約數,也就是說X=kp或X=kq。假設X=kp,若是X與q不互質,q自己又是與p互質的素數,所以k必定是q的整數倍:
這裏用使了同餘的性質,若 a≡b mod m,則:an≡bn mod m 。
同餘符號兩側同時乘以 X:
根據②:
代入④中:
由於(kp)ed可以被p整除,因此kp+tq也能被p整除,同時kp也能被p整除,根據整除的性質,tq也能被p整除;因爲p和q互質,因此t必定是p的倍數:
如今能夠把這個結論代入①中繼續進行解密運算:
根據模運算規則:
解密運算進一步簡化爲:
因爲RSA規範限制X<n,所以:
如今能夠知道,在RSA規範的限制下,RSA的解密確實能夠還原出明文。
假設Bob選擇了兩個素數,p=113,q=59,由此計算出n=6667,φ(n)=112*58=6496;以後Bob選擇了一個與6496互質的小質數e=17做爲密密鑰指數,再使用前面介紹的擴展歐幾里德算法用extEculid(17, 6496)計算出乘法逆元d=3057;最後,Bob把(17, 6667)做爲公鑰發送給Alice,把(3057,6667)做爲私鑰留給了本身。
如今,Alice向Bob發送了一個520的數字,通過加密運算後生成了密文:
Bob收到後用本身的私鑰對其解密:
密碼體制的安全性依賴於密鑰的安全性,現代密碼學不追求加密算法的保密性,而是追求加密算法的完備,使攻擊者在不知道密鑰的狀況下,沒有辦法從算法找到突破口。
RSA算法的密鑰生成過程當中涉及到p,q,n, φ(n),e,d幾個數字,其中p和q在最後被銷燬,還剩下四個:n, φ(n),e,d,在這四個數中,n和e用於私鑰,對外公開,d用於私鑰要嚴格保密,一旦d泄露了,就等於加密系統被破解了。如今的問題是,可否經過公鑰n和e推算出d?
回顧RSA密鑰生成的過程,d是由ed≡1 (mod φ(n))計算得出的,只有知道e和φ(n)才能計算出d;φ(n)=(p-1)(q-1),只有知道p和q才能計算出φ(n);n=pq,GCD(p,q)=1,只有將n進行素因子分解才能計算出p和q,這就回到了RSA的原理——將兩個大素數相乘很容易,可是想要對它們的乘積進行素因子分解卻及其困難。反過來,若是n能夠被素因子分解,就能夠復原已經被銷燬的的p和q,進而計算出d,得到私鑰。
所謂將大整數進行素因子分解很困難,是指計算上的困難,對一極大整數作素因子分解越困難,RSA算法越可靠。假若有人找到一種快速的素因子分解算法,那麼用RSA加密的可靠性就將會極度降低。到目前爲止,只有短的RSA密鑰纔可能被解破,至今爲止,人們尚未發現一個有效的方法快速分解大整數。爲了確保RSA加密系統的安全性,應該隨機選擇兩很大的素數進行操做,以確保n的二進制達到上千位,以防護將來可能出現的素因子分解技術的近進步。目前能預測2030年以前足夠安全的RSA密鑰長度是2048位。
堅固的城堡每每是從內部被攻克的,再高明的加密體制也抵擋不住私鑰泄露的危險。
周武王在對主將頒佈「陰符」時曾明確告知,誰要是敢泄露「陰符」的暗語就剁了誰:「諸奉使行符,稽留者,若符事泄,聞者告者,皆誅之。八符者,主將祕聞,因此陰通言語不泄,中外相知之術。」然而一旦被俘,又有幾我的可以作到不泄密?所以諜戰片中不多有高端的密碼破解技術,更可能是嚴刑拷打,這比破譯密碼有效多了。現代特種部隊的「抗審」訓練也並不是是提升硬扛的能力,而是盡最大可能拖延泄密的時間,像擠牙膏同樣把信息一點一點透露出去,由於隨着時間的流逝,機密的等級也將變得愈來愈低。
竊取和平年代的商用密碼天然不能靠嚴刑拷打了,咱們平時接觸的密碼不少,好比最典型的公司門禁密碼和業務系統密碼。然而遺憾的是,絕大多數公司都過於注重技術上的安全性,輕視了脆弱的人心。
「銀河集團」最近上線了用於管理公司業務和客戶信息的「芒碭山系統」,這是由一個著名的軟件公司開發的,號稱可以安全運行100年。「芒碭山系統」在外網上公開了註冊客戶可以使用的一些功能。「銀河集團」特別注重系統的安全性,要求全部有權限登陸管理端的員工必須使用16位以上的密碼並按期更換。如今Mallory來了,他想要到系統中游蕩一番,順便篡改一下數據,他會怎麼作呢?
如下是Mallory的自述:
我必定要黑進「芒碭山系統」,爲此我作了大量的信息偵查,收集到了「銀河集團」一些人員的姓名和座機電話。
我不知道這個系統還有沒有其它名字,因此我一開始撥打了一個客服電話,說本身的公司也在使用一個相似的系統,我說:「咱們的系統在公司內部叫芒碭山,大家也叫這個名字嗎?」
「咱們叫芒碭山號。」客服小姐說。
這是個有用的信息,可以增長個人信譽度。而後,我給行政部門的打了一個電話,給了他們在信息偵查時找到的客服部經理的名字,說本身是一位剛剛入職的員工,須要分配一個郵箱。接電話的哥們立馬給我開通了郵箱,並告訴了我郵箱地址和初始密碼。
一小時後,我又撥打了行政部門的電話,接電話的仍是剛纔的人,我掛掉了電話。
又過了一會,我再次撥打行政部的電話,此次是一個叫趙信的人接聽的。「Hi,我是客務部新入職的員工,我須要登陸芒碭山號的客戶管理界面,能不能爲我開通一下帳號?」「好的,你的郵箱是什麼?」我給了他剛剛激活的郵箱。「好的,沒問題。你的賬號就是你的郵箱號,初始密碼須要你到我這裏領取。」
我試着問:「能夠把密碼發到我郵箱裏嗎?」
他回答說:「咱們不容許在電話和郵件中給你密碼,你的辦公室在哪裏?」
我說:「我立刻要去趕飛機。你能夠把密碼密封在一個信封裏,待會交給琪琳嗎?」 琪琳是我從信息偵查環節中發現的客服部祕書的名字。
他說「好的,祝你工做順利。」
過了一會,我打電話給琪琳,取回趙信留給個人信封,並讀取其中的信息給我,她照辦了。我告訴她把字條扔到垃圾桶裏,由於我再也不須要它了。
「芒碭山系統」就這樣對我敞開了大門。
Mallory使用了一種被稱爲「社會工程學」的知識取得了密碼,從而「光明正大」地走進了系統,並非Mallory的技術高深莫測,而是Mallory更懂人心。
注:Mallory的故事改編自世界頂級黑客凱文·米特尼克的《線上幽靈》。
RSA加密系統可以確保安全的前提是,沒有一個計算機可以在可接受的時間內分解一個極大整數,即便是超級計算機也要花費數年的時間。然而,隨着量子計算機體系結構的發展,過去的超強算力彷佛也並不是不可觸及。
二十世紀後期,美國學者提出了基於量子計算機的質因數分解算法——Shor算法,從理論上證實,在當前最快的計算機上須要上萬年才能完成的計算任務,量子計算機瞬間即能完成,嚴重地威脅到了基於這類數學難題的公鑰密碼系統的安全性。緊隨其後的Grover量子搜索算法,對於密碼破譯來講,至關於把密鑰的長度減小一半,種種跡象代表,通用量子計算機一旦實現,對目前普遍使用的RSA、EIGamal、ECC公鑰密碼和DH密鑰協商協議都構成了嚴重的威脅。
2016年,美國國家安全局建議全部美國政府機構放棄RSA加密算法,而改用其它技術。隨着量子技術的不斷成熟,實用量子計算機總會有到來的一天,到了那一天,密碼學,特別是基於NP困難問題的公鑰密碼系統會何去何從呢?
做者:我是8位的