1. 程式人生 > >公鑰密碼學 RSA演算法

公鑰密碼學 RSA演算法

整個RSA過程大體是 生成祕鑰、加密、解密3個步驟

 

第一步 生成祕鑰

選兩個素數 p,q 保密,然後計算 n=pq 公開,                    

在1<e<Ø(n)範圍內選擇一個數e作為公鑰,e要與Ø(n)互素就行,即gcd(Ø(n),e)=1

求出私鑰 d≡e^-1 mod Ø(n)       

所以 公鑰PU={e,n}, 私鑰 PR={d,n}

 

第二步 加密(sender)

C=M^e mod n=

 

第三步 解密(receiver)

M=C^d mod n=

 

下面一起舉個例子看看:

  • 得出公鑰和私鑰
  1. 選擇兩個素數,p=17, q=11
  2. 計算 n=pq=17*11=187
  3. 計算Ø(n)=(p-1)(q-1)=160
  4. 選擇e使其與Ø(n)互素且小於Ø(n), 我們隨便選個e=7
  5. 確定d使得de≡1 (mod 160) 且d<160, 因為23*7=161,所以d=23, 這裡d可以利用擴充套件的歐幾里得演算法求出

所以 公鑰PU={7, 187}  私鑰 PR={23, 187}

  • 加密

如果明文M=88, 則

密文 C=M^e mod n=88^7 mod 187=

88^1 mod 187=88

88^2 mod 187=7744 mod 187=77

88^4 mod 187= 59969536 mod 187= 132

88^7 mod 187=(88^4* 88^2 *88^1) mod 187=(132*77*88) mod 187= 894432 mod 1877=11

  • 解密

M=C^d mod n= 11^23 mod 187=  

11^1 mod 187=11

11^2 mod 187=121

11^4 mod 187= 121*121 mod 187=55

11^8 mod 187= 55*55 mod 187=33

11^16 mod 187= 33*33 mod 187=154

11^23 mod 187= (11^16* 11^4 *11^2 *11^1) mod 187= 154*55*121*11 mod 187=88

 

RSA演算法保密性分析:

傳送方C=M^e mod n知道 e, n

接收方M=C^d mod n 知道 d , n

要想得出e,那麼傳送方一定知道 Ø(n), 要想知道 Ø(n)傳送方一定知道 p,q ,所有當然知道n

接收方要想得出 d,

 

上面是簡潔的介紹,下面再強調一些細節:

RSA體制是一種分組密碼,其明文和密文均是0到n-1之間的整數,通常n的大小為1024位二進位制或者309位十進位制,也就是n<2^1024。

 

RSA演算法使用乘方演算法,明文以分組為單位進行加密,每個分組的二進位制均小於n,也就是說分組的大小必須小於或等於log2(n+1) +1, 在實際應用中,分組的大小是i位,其中 2^i<n<=2^(i+1), 對於明文分組 M 和密文分組 C進行加解密。

 

解密公式化簡一下是  M=C^d mod n= (M^e)^d mod n= M^(ed) mod n

 

其中收發雙方都知道n,傳送方知道e,接收方知道d

 

RSA演算法成立的條件是什麼?

  • 可以找到e,d,n, 使得對所有M<n, 有M^(ed) mod n=M
  • 對所有M<n, 計算 M^e mod n 和 C^d是比較容易的
  • 由e和n確定d是不可行的