密碼學學習筆記二:RSA加密法

淺析RSA加密法

    本文介紹RSA加密算法的基本原理,首先我們先來了解一些基本的數學知識,然後瞭解一些密碼學基本知識,最後再來了解RSA加密算法。

1、基本數學知識

1.1、什麼是“素數”?

  在百度百科中,素數是這樣定義的:質數(prime number)又稱素數,有無限個。質數定義爲在大於1的自然數中,除了1和它本身以外不再有其他因數。

例如:15=1*15=3*5,因此15的因數有1、3、5、15,所以15不是素數;
13=1*13,因此13的因數有1和13,按照定義13是素數。

1.2、什麼是“互質數”?

  照例,百度百科中對互質數的解釋:互質數爲數學中的一種概念,即兩個或多個整數的公因數只有1的非零自然數。公因數只有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的約數,這兩個數爲互質數。等等。

1.3、什麼是“歐拉函數”?

  百度百科中對歐拉函數的解釋:在數論,對正整數n,歐拉函數是小於n的正整數中與n互質的數的數目(φ(1)=1)。
  歐拉函數的通式爲:

在這裏插入圖片描述
  p1、p2…pn是x的質因數,質因數:在數論裏是指能整除給定正整數的質數。
  舉個例子:假設x=16,那麼16的質因數爲2,所以φ(16)=16*(1-1/2)=8;那麼比16小,與16互質的正整數有:1、3、5、7、9、11、13、15;個數正好爲8個。

1.4、什麼是“模指數運算”?

  模運算是整數運算,有一個整數m,以n爲模做模運算,即m mod n。m被n整除,只取所得的餘數作爲結果,就叫做模運算。例如:10 mod 3 = 1;6 mod 2 = 0。
  模指數運算就是先做指數運算,取其結果再做模運算。例如:

在這裏插入圖片描述

2、密碼學基本知識

2.1、什麼是“明文和密文”?

  明文是加密之前的原始數據,密文是通過密碼運算後得到的結果成爲密文。

  密鑰是一種參數,它是在使用密碼算法過程中輸入的參數。同一個明文在相同的密碼算法和不同的密鑰計算下會產生不同的密文。

  很多知名的密碼算法都是公開的,密鑰纔是決定密文是否安全的重要參數,通常密鑰越長,破解的難度越大,比如一個8位的密鑰最多有256種情況,使用窮舉法,能非常輕易的破解,知名的DES算法使用56位的密鑰,目前已經不是一種安全的加密算法了,主要還是因爲56位的密鑰太短,在數小時內就可以被破解。

  密鑰分爲對稱密鑰與非對稱密鑰。

2.2、什麼是“對稱加密”?

  對稱密鑰在加密和解密的過程中使用的密鑰是相同的,常見的對稱加密算法有DES、3DES、AES、RC5、RC6。

  對稱密鑰的優點是計算速度快,缺點是密鑰需要在通訊的兩端共享,讓彼此知道密鑰是什麼對方纔能正確解密,如果所有客戶端都共享同一個密鑰,那麼這個密鑰就像萬能鑰匙一樣,可以憑藉一個密鑰破解所有人的密文了,如果每個客戶端與服務端單獨維護一個密鑰,那麼服務端需要管理的密鑰將是成千上萬。

2.3、什麼是“非對稱加密”?

  非對稱加密又稱公鑰加密,服務端會生成一對密鑰,一個私鑰保存在服務端,僅自己知道,另一個是公鑰,公鑰可以自由發佈供任何人使用。客戶端的明文通過公鑰加密後的密文需要用私鑰解密。

  非對稱密鑰在加密和解密的過程的使用的密鑰是不同的密鑰,加密和解密是不對稱的,所以稱之爲非對稱加密。與對稱密鑰加密相比,非對稱加密無需在客戶端和服務端之間共享密鑰,只要私鑰不發給任何用戶,即使公鑰在網上被截獲,也無法被解密,僅有被竊取的公鑰是沒有任何用處的。常見的非對稱加密有RSA加密算法。

3、RSA加密算法

  在講算法理論之前,我們先舉一個簡單的例子,主人公名字叫愛麗絲、鮑勃和伊芙。RSA算法是非對稱加密,因此會有兩把鑰匙。

  愛麗絲要設計出一把公開的鑰匙,之所以公開,是爲了讓每個人都能複製這把鑰匙,用來給自己發信息加密用。但是這把鑰匙,又一定不能解開加密過的信息。這就是公鑰。所以這一步,需要一種不可逆的函數運算,只能加密不能解密,這個就可以用我們前面提到的模運算來實現。

  同時,愛麗絲本人還得有一把鑰匙,它是不公開的。而這把鑰匙,可以解開她的公開鑰匙加密過的信息。這就是私鑰。

  愛麗絲給出的公鑰,是通過兩個比較大的素數p和q相乘得到的一個更大的數N得到的。p和q一定要保密,只能愛麗絲自己知道,不能告訴別人,而乘積N是公開的,誰都可以知道,也就是產生的公鑰。

  凡是給愛麗絲髮消息的人,都需要用N來加密。加密的過程依然用模運算,模是N。數學過程保證這個模運算不可逆,因此伊芙就算知道這個N也沒有用。

  愛麗絲的解密過程:愛麗絲解密不需要N,而是用p和q的值(p和q別人都不知道,只有愛麗絲自己知道)。愛麗絲私下做的另外一個模運算中的模,這個值爲(p-1)*(q-1)。

  下面,總結RSA算法的過程:
  算法關鍵步驟
  先給出一張表:
在這裏插入圖片描述
過程描述:
(1)選擇一對不同的、足夠大的素數p,q,p、q保密不能讓任何人知道。
(2)計算N = pq;
(3)計算f(N) = (p-1)(q-1);
(4)找一個與f(n)互質的數e,且1<e<f(N);
(5)計算d,
在這裏插入圖片描述
(6)那麼,公鑰(e,N),私鑰(d,N)
  舉個例子:
(1)隨機選擇兩個不相等的質數p=3,q=11,
(2)在在1 ~ (p-1)(q-1) 隨機選擇一個整數e,並且要與(p-1)(q-1)互質(最大公約數爲1)
   (p-1)(q-1)=2*10= 20,與20互質,隨便選一個3;
   N = 3*11=33; e = 3;
  公鑰(e,N)=(3,33);
(3)
  ≡是數論中表示同餘的符號。公式中,≡符號的左邊必須和符號右邊同餘,也就是兩邊模運算結果相同。顯而易見,不管f(n)取什麼值,符號右邊1 mod f(n)的結果都等於1;符號的左邊d與e的乘積做模運算後的結果也必須等於1。e×d≡1 mod f(n)

窮舉法求解d:
在這裏插入圖片描述
求解d = 7;  私鑰(d,N)=(7,33);

(4)加密:假設要加密的密文m = 5;
在這裏插入圖片描述
C = 26;
(5)同理,用私鑰解密只有,得到信息m = 5;此處難點在於理解同餘的計算方法。(關於同餘的計算,會單獨寫一篇文章仔細講解。)

  RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章