RSA詳解 原理及部分推論

2021-10-24 03:54:12 字數 3597 閱讀 4717

目錄

公鑰私鑰

rsa理論

安全性rsa 1024

一、公鑰加密 

假設一下,我找了兩個數字,乙個是1,乙個是2。我喜歡2這個數字,就保留起來,不告訴你們(私鑰),然後我告訴大家,1是我的公鑰。

我有乙個檔案,不能讓別人看,我就用1加密了。別人找到了這個檔案,但是他不知道2就是解密的私鑰啊,所以他解不開,只有我可以用

數字2,就是我的私鑰,來解密。這樣我就可以保護資料了。

我的好朋友x用我的公鑰1加密了字元a,加密後成了b,放在網上。別人偷到了這個檔案,但是別人解不開,因為別人不知道2就是我的私鑰,

只有我才能解密,解密後就得到a。這樣,我們就可以傳送加密的資料了。

二、私鑰簽名

如果我用私鑰加密一段資料(當然只有我可以用私鑰加密,因為只有我知道2是我的私鑰),結果所有的人都看到我的內容了,因為他們都知

道我的公鑰是1,那麼這種加密有什麼用處呢?

但是我的好朋友x說有人冒充我給他發信。怎麼辦呢?我把我要發的信,內容是c,用我的私鑰2,加密,加密後的內容是d,發給x,再告訴他

解密看是不是c。他用我的公鑰1解密,發現果然是c。

這個時候,他會想到,能夠用我的公鑰解密的資料,必然是用我的私鑰加的密。只有我知道我得私鑰,因此他就可以確認確實是我發的東西。

這樣我們就能確認傳送方身份了。這個過程叫做數字簽名。當然具體的過程要稍微複雜一些。用私鑰來加密資料,用途就是數字簽名

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

公鑰加密,私鑰解密。

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

1、什麼是rsa

rsa公鑰加密演算法是2023年由羅納德·李維斯特(ron rivest)、阿迪·薩莫爾(adi shamir)和倫納德·阿德曼(leonard adleman)一起提出的。2023年首次公布,當時他們三人都在麻省理工學院工作。rsa就是他們三人姓氏開頭字母拼在一起組成的。

rsa是目前最有影響力的公鑰加密演算法,它能夠抵抗到目前為止已知的絕大多數密碼攻擊,已被iso推薦為公鑰資料加密標準。

今天只有短的rsa鑰匙才可能被強力方式解破。到2023年為止,世界上還沒有任何可靠的攻擊rsa演算法的方式。只要其鑰匙的長度足夠長,用rsa加密的資訊實際上是不能被解破的。但在分布式計算和量子計算機理論日趨成熟的今天,rsa加密安全性受到了挑戰。

rsa演算法基於乙個十分簡單的數論事實:將兩個大質數相乘十分容易,但是想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密金鑰。

rsa演算法是現今使用最廣泛的公鑰密碼演算法,也是號稱地球上最安全的加密演算法。在了解rsa演算法之前,先熟悉下幾個術語

根據金鑰的使用方法,可以將密碼分為對稱密碼和公鑰密碼

對稱密碼:加密和解密使用同一種金鑰的方式

公鑰密碼:加密和解密使用不同的密碼的方式,因此公鑰密碼通常也稱為非對稱密碼。

2.rsa加密

rsa的加密過程可以使用乙個通式來表達

密文=明文^e (mod n)

也就是說rsa加密是對明文的e次方後除以n後求餘數的過程。

從通式可知,只要知道e和n任何人都可以進行rsa加密了,所以說e、n是rsa加密的金鑰,也就是說e和n的組合就是公鑰,我們用(e,n)來表示公鑰

公鑰 = (e,n)

不過e和n不並不是隨便什麼數都可以的,它們都是經過嚴格的數學計算得出的,關於e和n擁有什麼樣的要求及其特性後面會講到。e是加密(encryption)的首字母,n是數字(number)的首字母。

3.rsa解密

明文 = 密文^d (mod n)

也就是說對密文進行d次方後除以n的餘數就是明文,這就是rsa解密過程。知道d和n就能進行解密密文了,所以d和n的組合就是私鑰

私鑰=(d,n)

從上述可以看出rsa的加密方式和解密方式是相同的,加密是求「e次方的mod n」;解密是求「d次方的mod n」 此處d是解密(decryption)的首字母;n是數字(number)的首字母。

4.生成金鑰對

生成金鑰對(e,d,n)的步驟:

4.1 求n

準備兩個質數p,q。這兩個數不能太小,太小則會容易破解,將p乘以q就是n

n = p * q

4.2 求φ(n)

φ(n) = (p-1) * (q-1) 

4.3 求e

1 < e < φ(n),且e與φ(n)互質

4.4 求d

數d是由數e計算出來的。d、e和φ(n)之間必須滿足以下關係:

1 < d < φ(n)

e*d mod φ(n) = 1

只要d滿足上述2個條件,則通過e和n進行加密的密文就可以用d和n進行解密。

簡單地說條件2是為了保證密文解密後的資料就是明文。 現在私鑰自然也已經生成了,金鑰對也就自然生成了。

具體原理主要依據尤拉定理

(1)ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d

(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。

(3)n=pq。只有將n因數分解,才能算出p和q。=>npc問題

當p和q是乙個大素數的時候,從它們的積pq去分解因子p和q,這是乙個公認的數學難題。比如當pq大到1024位時,迄今為止還沒有人能夠利用任何計算工具去完成分解因子的任務。因此,rsa從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。

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

此外,rsa的缺點還有:a)產生金鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。b)分組長度太大,為保證安全性,n 至少也要 600 bits 以上,使運算代價很高,尤其是速度較慢,較對稱密碼演算法慢幾個數量級;且隨著大數分解技術的發展,這個長度還在增加,不利於資料格式的標準化。因此,使用rsa只能加密少量資料,大量的資料加密還要靠對稱密碼演算法。

n為1024bit(n=p*q,mod n的這個n),一次可以加密的明文不能大於n,否則會產生迴繞,無法正確解密,因此明文和密文最大都可以達到1024/8=128b,但由於明文長度可以小於n,需要給二進位制乙個結束標誌,用到padding(填充),一般使用的padding標準有noppadding、oaeppadding、pkcs1padding等,其中pkcs#1建議的padding就占用了11個位元組。那麼真正的明文最大只有117位元組了。

對於填充規則,博主還不會,有大佬懂得麻煩指個路,感激不盡。

如有錯誤,感謝大家糾正。

公鑰私鑰:

rsa概念:

rsa原理:

rsa原理,推導,證明:

RSA演算法原理及應用示例

rsa演算法是一種基於公鑰和私鑰的加密演算法,是由ronald rivest,adi shamir和len adleman三人在diffie helman指數金鑰交換演算法的 基礎上於1977年設計出來的,rivest設計的加密系統利用了數學領域的乙個事實,那就是雖然把兩個大素數相乘生成乙個合數是件...

RSA演算法原理及加密解密簡介

素數又稱質數,指在乙個大於1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。公因數只有1的兩個數,叫做互質數 又稱互素,若n個整數的最大公因子是1,則稱這n個整數互質。rsa演算法 是根據數論中相關理論求出公鑰和私鑰 找出質數p和q 2.n p q l p 1 q 1 此為尤拉函式 數論...

rsa驗籤中文 RSA簽名及驗籤原理解析

一 名詞解釋 公鑰rsa 金鑰體系中對外公開的部分,通常用於資料加密 驗證數字簽名。私鑰rsa 金鑰體系中非公開的部分,通常用於資料解密 資料簽名。數字簽名 就是只有資訊的傳送者才能產生的,別人無法偽造的一段數字串,它同時也是對傳送者傳送的資訊的真實性的乙個證明。二 為什麼要使用簽名 在系統間報文互...