關于RSA加密

  • 生成密鑰
    1. 隨機選擇兩個不相等的質數p和q。
      例:61和53。(實際應用中,這兩個質數越大,就越難破解。)
    2. 計算p和q的乘積n。
      把61和53相乘:
        n = 61×53 = 3233
      n的長度就是密鑰長度。3233寫成二進制是110010100001,一共有12位,所以這個密鑰就是12位。實際應用中,RSA密鑰一般是1024位,要求較高的時候則為2048位。
    3. 計算n的歐拉函數φ(n)。
      根據公式:
        φ(n) = (p-1)(q-1)
      算出φ(3233)等于60×52,即3120。
    4. 隨機選擇一個整數e,條件是1< e < φ(n),且e與φ(n) 互質。
      那么在1到3120之間,隨機選擇17。(實際應用中,常常選擇65537。)
    5. 計算e對于φ(n)的模反元素d。
      所謂"模反元素"就是指有一個整數d,可以使得ed被φ(n)除的余數為1。
        ed ≡ 1 (mod φ(n))
      這個式子等價于
        ed - 1 = kφ(n)
      于是,找到模反元素d,實質上就是對下面這個二元一次方程求解。
        ex + φ(n)y = 1
      已知 e=17, φ(n)=3120,
        17x + 3120y = 1
      這個方程可以用"擴展歐幾里得算法"求解,此處省略具體過程??傊瑦埯惤z算出一組整數解為 (x,y)=(2753,-15),即 d=2753。
      至此所有計算完成。
    6. 將n和e封裝成公鑰,n和d封裝成私鑰。
      在愛麗絲的例子中,n=3233,e=17,d=2753,所以公鑰就是 (3233,17),私鑰就是(3233, 2753)。
      實際應用中,公鑰和私鑰的數據都采用ASN.1格式表達(實例)。
  • RSA加密算法的可靠性

回顧上面的密鑰生成步驟,一共出現六個數字:p,q,n,φ(n),e,d
這六個數字之中,公鑰用到了兩個(n和e),其余四個數字都是不公開的。其中最關鍵的是d,因為n和d組成了私鑰,一旦d泄漏,就等于私鑰泄漏。
那么,有無可能在已知n和e的情況下,推導出d?

  1. ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。  
  2. φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
  3. n=pq。只有將n因數分解,才能算出p和q。

結論:如果n可以被因數分解,d就可以算出,也就意味著私鑰被破解。
可是,大整數的因數分解,是一件非常困難的事情。目前,除了暴力破解,還沒有發現別的有效方法。維基百科這樣寫道:

"對極大整數做因數分解的難度決定了RSA算法的可靠性。換言之,對一極大整數做因數分解愈困難,RSA算法愈可靠。
  假如有人找到一種快速因數分解的算法,那么RSA的可靠性就會極度下降。但找到這樣的算法的可能性是非常小的。今天只有短的RSA密鑰才可能被暴力破解。到2008年為止,世界上還沒有任何可靠的攻擊RSA算法的方式。
  只要密鑰長度足夠長,用RSA加密的信息實際上是不能被解破的。"

事實上,人類已經分解的最大整數大概是232個十進制位,768個二進制位。比它更大的因數分解,還沒有被報道過,因此目前被破解的最長RSA密鑰就是768位。

  • 加密和解密
    1. 使用公鑰加密(n,e)
      假設要發送加密信息m,就要用公鑰 (n,e) 對m進行加密。這里需要注意,m必須是整數(字符串可以取ascii值或unicode值),且m必須小于n。
      所謂"加密",就是算出下式的c:
        me ≡ c (mod n)
      愛麗絲的公鑰是 (3233, 17),鮑勃的m假設是65,那么可以算出下面的等式:
        6517 ≡ 2790 (mod 3233)
      于是,c等于2790,鮑勃就把2790發給了愛麗絲。
      (2)解密要用私鑰(n,d)
      愛麗絲拿到鮑勃發來的2790以后,就用自己的私鑰(3233, 2753) 進行解密??梢宰C明,下面的等式一定成立:
        cd ≡ m (mod n)
      也就是說,c的d次方除以n的余數為m。現在,c等于2790,私鑰是(3233, 2753),那么,愛麗絲算出
        27902753 ≡ 65 (mod 3233)
      因此,愛麗絲知道了鮑勃加密前的原文就是65。
      至此,"加密--解密"的整個過程全部完成。
      我們可以看到,如果不知道d,就沒有辦法從c求出m。而前面已經說過,要知道d就必須分解n,這是極難做到的,所以RSA算法保證了通信安全。
      你可能會問,公鑰(n,e) 只能加密小于n的整數m,那么如果要加密大于n的整數,該怎么辦?有兩種解決方法:一種是把長信息分割成若干段短消息,每段分別加密;另一種是先選擇一種"對稱性加密算法"(比如DES),用這種算法的密鑰加密信息,再用RSA公鑰加密DES密鑰。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容

  • 姓名:于川皓 學號:16140210089 轉載自:https://baike.baidu.com/item/RS...
    道無涯_cc76閱讀 2,589評論 0 1
  • 前言 本文的RSA例子代碼更新在我的github上。 RSA算法是最重要算法之一,它是計算機通信安全的基石,保證了...
    game3108閱讀 11,745評論 2 53
  • 公鑰密碼系統及RSA公鑰算法 本文簡單介紹了公開密鑰密碼系統的思想和特點,并具體介紹了RSA算法的理論基礎,工作原...
    火狼o閱讀 4,310評論 2 15
  • Base64 base64是一種基于64個可打印字符來表示二進制數據的表示方法.嚴格來說它只能算作一種編碼方式.B...
    miku醬啦閱讀 1,212評論 0 3
  • 今天下午,瀏覽了幾所同類高校的科研網,頗有收獲。我們在對外宣傳這部分,做得不夠。 一、網頁要分類清晰,亮點突出有的...
    容玲閱讀 165評論 0 1