1. 程式人生 > >RSA加密演算法簡單分析

RSA加密演算法簡單分析

 

      

預備知識

      1)RSA是第一個比較完善的公開金鑰演算法,它既能用於加密,也能用於數字簽名。RSA以它的三個發明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,這個演算法經受住了多年深入的密碼分析,雖然密碼分析者既不能證明也不能否定RSA的安全性,但這恰恰說明該演算法有一定的可信性,目前它已經成為最流行的公開金鑰演算法。

      2) 什麼是“素數”?

      素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15=3*5,所以15不是素數;又如,12=6*2=4*3,所以12也不是素數。另一方面,13除了等於13*1以外,不能表示為其它任何兩個整數的乘積,所以13是一個素數。素數也稱為“質數”。

      3)什麼是“互質數”(或“互素數”)?

      數學教材對互質數是這樣定義的:“公約數只有1的兩個數,叫做互質數。”這裡所說的“兩個數”是指自然數。

  •             判別方法主要有以下幾種(不限於此):

     (1)兩個質數一定是互質數。例如,2與7、13與19。

    (2)一個質數如果不能整除另一個合數,這兩個數為互質數。例如,3與10、5與26。

         (3)1不是質數也不是合數,它和任何一個自然數在一起都是互質數。如1和9908。

              (4)相鄰的兩個自然數是互質數。如15與16。

              (5)相鄰的兩個奇數是互質數。如49與51。

              (6)大數是質數的兩個數是互質數。如97與88。

              (7)小數是質數,大數不是小數的倍數的兩個數是互質數。如7和16。

              (8)兩個數都是合數(二數差又較大),小數所有的質因數,都不是大數的約數,這兩個數是互質數。如357與715,357=3×7×17,而3、7和17都不是715的約數,這兩個數為互質數。等等。

      4)非對稱加密演算法(asymmetric cryptographic algorithm)又名“公開金鑰加密演算法”,非對稱加密演算法需要兩個金鑰:公開金鑰(publickey)和私有金鑰(privatekey)。公開金鑰與私有金鑰是一對,如果用公開金鑰對資料進行加密,只有用對應的私有金鑰才能解密;如果用私有金鑰對資料進行加密,那麼只有用對應的公開金鑰才能解密。因為加密和解密使用的是兩個不同的金鑰,所以這種演算法叫作非對稱加密演算法。

      5) 什麼是模指數運算?

      模運算是整數運算,有一個整數m,以n為模做模運算,即m mod n。怎樣做呢?讓m去被n整除,只取所得的餘數作為結果,就叫做模運算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。模指數運算就是先做指數運算,取其結果再做模運算。如53 mod 7=125 mod 7=6。

      6)RSA安全性分析

      在公佈RSA演算法之後,在使用RSA密碼體制和分析RSA演算法發現了一系列的演算法本身脆弱性及其存在的問題。

      (1)RSA公鑰密碼體制在加密或解密變化中涉及大量的數值計算,其加密和解密的運算時間比較長,這比資料加密標準DES的計算量開銷大,在一定程度上限制了它的應用範圍,以致於實際使用RSA密碼體制無法用軟體產品,必須用超大規模積體電路的硬體產品。

      (2)雖然提高N=P*Q的位數會大大提高RSA密碼體制的安全性,但其計算量呈指數增長,以致使其實現的難度增大,實用性降低。

      (3)RSA公鑰密碼體制的演算法完整性(指金鑰控制加密或解密變換的唯一性)和安全性(指密碼演算法除金鑰本身外,不應該存在其它可破譯密碼體制的可能性)沿有等進一步完善。

      (4)RSA演算法面臨著數學方法的進步和計算機技術飛躍發展帶來的破譯密碼能力日趨增強的嚴重挑戰。因子分解問題有了長跑的發展,1995年人類成功地分解了128位十進位制數RSA密碼演算法,破譯512位長的RSA指日可待。

     儘管如此,自1978年RSA演算法公佈以來,公開金鑰密碼已從理論研究進入實際應用研究階段。RSA公開金鑰密碼演算法在資訊交換過程中使用比較廣泛,安全性比較高。以當前的計算機水平,如選擇1024位長的金鑰(相當於300位十進位制數字)就認為是無法攻破的。

      7)CAP(Cryptographic Analysis Program)是由DR. Richard Spillman專門為教學而研製的密碼製作與分析工具,已經在美國的很多高校得到了廣泛地使用,受到了密碼學習者的普遍歡迎。

 

 

RSA加解密演算法的原理

  首先產生金鑰,過程如下:

  隨機產生兩個長度為K/2位的素數P 和 Q;

  計算公鑰 publicKey=P*Q;(publicKey 是k位的長度)

  隨機產生一個加密金鑰 keyE, 2<=keyE<=Φ(n)-1其中GCD(keyE, Φ(n))=1;注:這是保證解密金鑰keyE *keyD mod Φ(n)=1 有解的充要條件,Φ(n)稱為n的尤拉函式,值為: Φ(n)=(P-1)*(Q-1)

  求解解密金鑰keyD=keyE-1 mod (n) ,keyE-1為解密金鑰keyD的逆元 ,此公式原方程為(keyE*keyD mod (n)=1)

  由此公鑰,加密金鑰,解密金鑰全部產生。

  其次,對明文加密或對密文進行解密,過程如下:

  (1) 加密: C = MkeyE mod publicKey;其中M表示明文,C表示密文

  (2) 解密: M = CkeyD mod publicKey. 其中M表示明文,C表示密文

 

 

 

 

  RSA加密學習的簡單例子(轉載)

我在網上看到一篇文章如下,通過簡單的舉例,我更理解了RSA演算法的神奇,作者的舉例很棒。

在RSA中,最大值(稱為max)由隨機挑選的兩個素數相乘而得。公鑰和金鑰在0和最大值之間挑選(稱為pub和priv)。為了加密一個數字,讓這個數字自己乘自己pub次,並確保當乘積大於最大值時能夠回折(像時鐘一樣)。解密時,再用這個加密得到的結果自己乘自己priv次,便能退回到原始的數字。這是一件很神奇的事情!但是它確實被實現了。

為了建立RSA金鑰對,首先得隨機的挑選兩個素數來計算出max。然後從0到max中再挑選出公鑰pub,只要知道兩個素數,那麼就能夠從pub中算出私鑰。這就是為什麼因式分解與破解RSA有關—對max的因式分解,可以得到兩個素數,這樣你便能夠通過pub計算出某人的私鑰,從而來解密訊息。

讓我們舉一個更加具體的例子吧。挑選素數13和7。他們積為91,也就是max。從0到91中挑選5作為pub來加密。利用演算法Extended Euclidean,輸入引數:7,13,5,得到私鑰是29。

三個引數(max:91,pub:5,priv:29)定義了RSA系統。這時,可以取一個數字,通過乘自己5次來加密自己,然後取這個結果乘自己29次來回到原來的數字。

讓我們來加密“CLOUD”。為了能夠用數學來表示一個訊息,我們必須將字母轉變為數字。一個常用的轉換方法是UTF-8。每個字母對應一個數字,如下圖:

經過編碼後的“CLOUD”是67,76,79,85,68。每個數字都小於最大值91,所以我們能夠各自對他們進行加密,為了簡便,我們以第一個字母為例:

我們讓67乘5次來加密自己:
67x67=4489=30(回折)

(回折:因為4489大於最大值max,所以我們必須回折它。我們將它除以91然後取餘數,

4489=91x49+30)

30x67=2010=8

8x67=536=81

81x67=5427=58

這個結果說明67加密後為58。

為每個字母重複這個過程,我們可以加密CLOUD。

為了解密,我們需要讓58乘自己29次。

58x58=3364=88

88x58=5104=8

9x58=522=67

神奇的事情發生了!我們變回了67。

RSA加密學習的簡單例子 原文地址:https://blog.csdn.net/dianqu6970/article/details/76527572

 兩道簡單的選擇題如下:

1、在密碼學中,對RSA的描述是正確的是?

        

                                                                                          

  • A:RSA是祕密金鑰演算法和對稱金鑰演算法
  • B:RSA是非對稱金鑰演算法和公鑰演算法
  • C:RSA是祕密金鑰演算法和非對稱金鑰演算法
  • D:RSA是公鑰演算法和對稱金鑰演算法           

RSA就是非對稱的金鑰演算法 ,也是公鑰演算法啊

2、在RSA公鑰密碼系統中,若A想給B傳送一封郵件,並且想讓B知道郵件是A發出的,則A應選用的簽名金鑰是A的私鑰,加密時用對方的公鑰,這種做法正確嗎?

  • A:正確
  • B:錯誤

私鑰用於數字簽名,公鑰用於驗證,讓B知道是A發出的當然得用A的私鑰啊~

公鑰和私鑰是成對的,它們互相解密。

公鑰加密,私鑰解密。

私鑰數字簽名,公鑰驗證。