用實例給新手講解RSA加密算法

2020-12-12 和訊銀行


圖為 RSA公開密鑰算法的發明人,從左到右Ron Rivest, Adi Shamir, Leonard Adleman. 照片攝於1978年

(和訊財經原創)

   RSA加密算法是最常用的非對稱加密算法,CFCA在證書服務中離不了它。但是有不少新來的同事對它不太了解,恰好看到一本書中作者用實例對它進行了簡化而生動的描述,使得高深的數學理論能夠被容易地理解。我們經過整理和改寫特別推薦給大家閱讀,希望能夠對時間緊張但是又想了解它的同事有所幫助。
   RSA是第一個比較完善的公開密鑰算法,它既能用於加密,也能用於數字籤名。RSA以它的三個發明者Ron Rivest, Adi Shamir, Leonard Adleman的名字首字母命名,這個算法經受住了多年深入的密碼分析,雖然密碼分析者既不能證明也不能否定RSA的安全性,但這恰恰說明該算法有一定的可信性,目前它已經成為最流行的公開密鑰算法。
  RSA的安全基於大數分解的難度。其公鑰和私鑰是一對大素數(100到200位十進位數或更大)的函數。從一個公鑰和密文恢復出明文的難度,等價於分解兩個大素數之積(這是公認的數學難題)。
  RSA的公鑰、私鑰的組成,以及加密、解密的公式可見於下表:


  可能各位同事好久沒有接觸數學了,看了這些公式不免一頭霧水。別急,在沒有正式講解RSA加密算法以前,讓我們先複習一下數學上的幾個基本概念,它們在後面的介紹中要用到:

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

二、什麼是「互質數」(或「互素數」)?
  小學數學教材對互質數是這樣定義的:「公約數只有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的約數,這兩個數為互質數。等等。

三、什麼是模指數運算?
  指數運算誰都懂,不必說了,先說說模運算。模運算是整數運算,有一個整數m,以n為模做模運算,即m mod n。怎樣做呢?讓m去被n整除,只取所得的餘數作為結果,就叫做模運算。例如,10 mod 3=1;26 mod 6=2;28 mod 2 =0等等。
  模指數運算就是先做指數運算,取其結果再做模運算。如
  好,現在開始正式講解RSA加密算法。
算法描述:
(1)選擇一對不同的、足夠大的素數p,q。
(2)計算n=pq。
(3)計算f(n)=(p-1)(q-1),同時對p, q嚴加保密,不讓任何人知道。
(4)找一個與f(n)互質的數e,且1<e<f(n)。
(5)計算d,使得de≡1 mod f(n)。這個公式也可以表達為d ≡e-1 mod f(n)
這裡要解釋一下,≡是數論中表示同餘的符號。公式中,≡符號的左邊必須和符號右邊同餘,也就是兩邊模運算結果相同。顯而易見,不管f(n)取什麼值,符號右邊1 mod f(n)的結果都等於1;符號的左邊d與e的乘積做模運算後的結果也必須等於1。這就需要計算出d的值,讓這個同餘等式能夠成立。
(6)公鑰KU=(e,n),私鑰KR=(d,n)。
(7)加密時,先將明文變換成0至n-1的一個整數M。若明文較長,可先分割成適當的組,然後再進行交換。設密文為C,則加密過程為:
(8)解密過程為:

實例描述:
  在這篇科普小文章裡,不可能對RSA算法的正確性作嚴格的數學證明,但我們可以通過一個簡單的例子來理解RSA的工作原理。為了便於計算。在以下實例中只選取小數值的素數p,q,以及e,假設用戶A需要將明文「key」通過RSA加密後傳遞給用戶B,過程如下:
(1)設計公私密鑰(e,n)和(d,n)。
令p=3,q=11,得出n=p×q=3×11=33;f(n)=(p-1)(q-1)=2×10=20;取e=3,(3與20互質)則e×d≡1 mod f(n),即3×d≡1 mod 20。
d怎樣取值呢?可以用試算的辦法來尋找。試算結果見下表:

  通過試算我們找到,當d=7時,e×d≡1 mod f(n)同餘等式成立。因此,可令d=7。從而我們可以設計出一對公私密鑰,加密密鑰(公鑰)為:KU =(e,n)=(3,33),解密密鑰(私鑰)為:KR =(d,n)=(7,33)。
(2)英文數位化。
  將明文信息數位化,並將每塊兩個數字分組。假定明文英文字母編碼表為按字母順序排列數值,即:

  則得到分組後的key的明文信息為:11,05,25。
(3)明文加密
  用戶加密密鑰(3,33) 將數位化明文分組信息加密成密文。由C≡Me(mod n)得:

  因此,得到相應的密文信息為:11,31,16。
4)密文解密。
  用戶B收到密文,若將其解密,只需要計算,即:

  用戶B得到明文信息為:11,05,25。根據上面的編碼表將其轉換為英文,我們又得到了恢復後的原文「key」。
   你看,它的原理就可以這麼簡單地解釋!
   當然,實際運用要比這複雜得多,由於RSA算法的公鑰私鑰的長度(模長度)要到1024位甚至2048位才能保證安全,因此,p、q、e的選取、公鑰私鑰的生成,加密解密模指數運算都有一定的計算程序,需要仰仗計算機高速完成。

最後簡單談談RSA的安全性

   首先,我們來探討為什麼RSA密碼難於破解?
   在RSA密碼應用中,公鑰KU是被公開的,即e和n的數值可以被第三方竊聽者得到。破解RSA密碼的問題就是從已知的e和n的數值(n等於pq),想法求出d的數值,這樣就可以得到私鑰來破解密文。從上文中的公式:d ≡e-1 (mod((p-1)(q-1)))或de≡1 (mod((p-1)(q-1))) 我們可以看出。密碼破解的實質問題是:從Pq的數值,去求出(p-1)和(q-1)。換句話說,只要求出p和q的值,我們就能求出d的值而得到私鑰。
   當p和q是一個大素數的時候,從它們的積pq去分解因子p和q,這是一個公認的數學難題。比如當pq大到1024位時,迄今為止還沒有人能夠利用任何計算工具去完成分解因子的任務。因此,RSA從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。
  然而,雖然RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何。
  此外,RSA的缺點還有:A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。B)分組長度太大,為保證安全性,n 至少也要 600 bits 以上,使運算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數量級;且隨著大數分解技術的發展,這個長度還在增加,不利於數據格式的標準化。因此,使用RSA只能加密少量數據,大量的數據加密還要靠對稱密碼算法。

(和訊財經原創)

相關焦點

  • CTF|玩轉RSA加密算法(一)
    RSA是一種非對稱加密算法,它由 公鑰(n/e),私鑰(n/d),明文M和密文C組成。
  • RSA 加密是什麼原理?
    非對稱加密的應用場景相當廣泛,隨處可見,像 https 傳輸,就是結合了對稱和非對稱兩種加密方法。想知道 https 傳輸是怎麼回事?先按下不表,後文再敘。(意思是還不趕緊關注?)這裡用一個例子說明RSA的原理,為了方便理解,例子中的數字都很小,但在實際的算法中使用的數字都很大。假設有這樣一個數據,「HELLO」。
  • CTF密碼學之RSA攻擊算法
    前言:學習完基本數論後,我們開始學習 RSA 的各種攻擊算法及其數學原理。希望大家在學習的過程中更多的去關注攻擊算法實現的原理,而不僅僅只在於 copy 攻擊代碼。:1.公鑰解析,籤名加密如果題目給了pem或者key後綴結尾的文件,用工具解析出n和e。
  • C Sharp程式語言如何實現MD5加密的一個實例分享
    ,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest開發出來, 經md2、md3和md4發展而來。
  • ECC+RSA雙證書解決方案
    和RSA算法一樣,ECC算法也屬於公開密鑰算法。最初由Koblitz和Miller兩人於1985年提出,其數學基礎是利用橢圓曲線上的有理點構成Abel加法群上橢圓離散對數的計算困難性。  ECC算法的數學理論非常深奧和複雜,在工程應用中比較難於實現,但它的單位安全強度相對較高,它的破譯或求解難度基本上是指數級的,黑客很難用通常使用的暴力破解的方法來破解。
  • TLS/SSL 協議-非對稱加密(RSA)原理
    前面文章學習過 對稱加密的原理,在通信雙方發送完加密的密文之後,需要發送密鑰給對方才能解密,這就要求發送密鑰的信息通道安全可靠
  • RSA加密算法數學原理和實現(筆記)
    如 53(mod7)=125(mod7)=6好,現在開始正式講解RSA加密算法。算法描述:(1)選擇一對不同的、足夠大的素數p,q。(2)計算n=pq。(3)計算f(n)=(p-1)(q-1),同時對p, q嚴加保密,不讓任何人知道。(4)找一個與f(n)互質的數e(5)計算d,使得de≡1 mod f(n)。
  • RSA 加密算法主要公式
    RSA 是非對稱的加密算法,其中它有一些相關的數學公式。讓我們從一道題開始了解 RSA 的數學公式。
  • PHP編程實例:自定義函數實現簡單數字加密和解密算法
    加密和解密一般用於電子商務,但是一般的網站開發中也會用涉及到到加密和解密,特別是文件處理上,今天為大家講解一個自定義函數簡單的數字加密/解密算法實例。3、定義加密數字和解密數字的函數。4、調用自定義函數處理用戶輸入的數據,輸出加密數字和解密數字。
  • 網絡安全加密——DES、AES、RSA、Base64、MD5加密原理介紹,代碼實現
    本專題將連續的、全方位的、深入地闡述網絡安全加密的原理及實用案例分析,希望對學習網絡安全的你有幫助,覺得有用記得轉發給身邊需要的朋友哈~~ 學好密碼技術變身信息安全保護神,科普式教學的《現代密碼學》全新上線,乾貨+視頻,學習效果槓槓滴,別說小編沒告訴你~特別感謝本期作者——時間已靜止。
  • 非對稱加密算法——RSA加密原理及數學推導
    百度百科是這麼說的:RSA是一種非對稱的加密機制。是一種公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種「由已知加密密鑰推導出解密密鑰在計算上是不可行的」密碼體制。是由該算法設計者「Rivest、Shamir、Adleman」的名字構成,(可能看之前還認識「RSA」三個字母,看完後迷糊了。下面將詳細介紹。)
  • JAVA實現非對稱加密
    一、概述非對稱加密算法概述,非對稱主要是相對於對稱加密算法而言的,對稱加密算法有一個密鑰和一個解鑰,非對稱算法有一個公鑰和一個私鑰,這兩個共同組成一個解鑰,才能實現解密。DH:密鑰交換算法,算是非對稱加密算法的起源。RSA:基於因子分解,應用最廣,RSA是可以雙向加密的,私鑰加密,公鑰解密;公鑰加密,私鑰解密,是目前世界上使用最廣的非對稱加密算法。ELGamal:基於離散對數。ECC:橢圓曲線加密。
  • 數據傳輸安全:RSA加密算法及其數學原理
    所以,明文傳輸在網絡中是非常不安全的.針對於此,數據加密就誕生了.RSA是計算機網絡中最常見的加密算法,它是一種非對稱加密算法.什麼是非對稱加密算法,先了解一個對稱加密算法.對稱加密算法計算機A在發送信息'Hello'之前,先把'Hello'進行加密.用最簡單的凱撒密碼(Caesar)加密.設置秘鑰為2,此時'Hello'就變成了'Jgnnq'「凱撒密碼(Caesar)加密時會將明文中的 每個字母 都按照其在字母表中的順序向後(或向前)移動固定數目(循環移動)作為密文
  • 非對稱加密——RSA
    本周先介紹RSA算法,希望能為非對稱加密的講解開個好頭~        在前兩篇文章中我們介紹了DES、AES、IDEA等多種對稱加密算法,雖然這些算法通過複雜的運算邏輯來保證其加密的安全性,但所有對稱加密算法都會存在密鑰配送問題。
  • 如何給產品經理解釋什麼是 RSA 加密(一)
    我們之前兩篇文章已經介紹了如何在 Python 下面使用 RSA 加密,以及 python-rsa
  • 圖解|什麼是RSA算法
    加密算法的一點歷史我們知道常見的加密算法有:對稱加密和非對稱加密,非對稱加密是我們今天的主角。非對稱加密不是一蹴而就的,它是1976年之後才出現的,可以說非對稱加密是對稱加密的優化。如果密鑰洩露那麼再強大的對稱加密算法也是徒勞的,所以如何安全地交換對稱加密的規則和密鑰是短板。
  • NSA聯手RSA造安全後門,控制世界加密算法規則
    RSA公司為全球海量商業公司和金融機構提供加密服務,其加密方案甚至成為北約國家國防安全標準的一部分。RSA賴以成名的RSA加密算法是全球網際網路安全的基石,很多非對稱加密方式都是在其理論基礎上衍生出來的。國內大部分用戶使用的網銀密碼盾即採用RSA加密算法。因此消息一經傳來,便引發國內熱議。很多人驚呼,「難道連RSA也不靠譜了?」
  • 什麼是 RSA 算法
    2. 加密算法的一點歷史我們知道常見的加密算法有:對稱加密和非對稱加密,非對稱加密是我們今天的主角。如果密鑰洩露那麼再強大的對稱加密算法也是徒勞的,所以如何安全地交換對稱加密的規則和密鑰是短板。非對稱加密算法RSA借鑑了這種思想,使用公鑰和私鑰來完成加解密,但是又避免了密鑰傳輸,RSA算法的公鑰是公開的,使用公鑰加密的信息,必須使用對應的私鑰才能解密。3. RSA算法RSA算法可以說是地球上最重要的算法之一,是數據通信和網絡安全的基石。
  • 谷歌最新研究:量子計算機能在8小時內破解2048位RSA加密
    早在 1994 年,美國數學家 Peter Shor 就發現了一種量子算法,其性能優於經典算法。Shor 的算法因子大,是破解基於陷門函數密碼的關鍵因素。 陷門函數是基於乘法過程的,它在一個方向上很容易執行,但在相反的方向上很難執行。例如,將兩個數字相乘很簡單:593 乘以 829 等於 491,597。
  • 對稱加密及AES加密算法
    2、對稱加密的工作過程 3、對稱加密的優點 4、對稱加密的兩大不足二、AES加密算法 1、什麼是AES加密算法及AES加密算法的形成過程 2、AES的加密流程(要理解AES的加密流程,會涉及到AES的五個關鍵詞:分組密碼體制、Padding、初始向量IV、密鑰、四種加密模式) 3、AES的加密原理(要理解AES的加密原理,會涉及到AES的四個關鍵詞:密鑰擴展、初始輪、重複輪、最終輪