導航:首頁 > 源碼編譯 > rsa演算法公鑰私鑰生成

rsa演算法公鑰私鑰生成

發布時間:2023-03-27 07:41:56

⑴ RSA 演算法

演算法1.1 RSA密鑰對生成

輸入:安全參數l.

輸出:RSA公鑰(n,e)和私鑰d.

1、隨機選擇兩個素數p和q,p和q的長度同為l/2

2、計算n=pq和z=(p-1)(q-1)

3、任意選擇整數e,迅襲e滿足1<e<z,且gcd(e,z)=1

4、計算整數d,d滿足1<d<z,且ed=1 (mod z).

5、返回(n,e,d)

演算法1.2 基本RSA加密型旦

輸入:RSA公鑰(n,e),明文m屬於[0,n-1]

輸出:密文c

1、計算c=m^e mod n

2、返回m

演算法1.3 基本RSA解密

輸入:RSA公鑰(n,e),RSA私鑰d,密文c

輸出:明文m

1、計算m=c^d mod n

2、返回m

演算法1.4 基本RSA簽名生成

輸入:RSA公鑰(n,e),RSA私鑰d,消息m.

輸出:簽名s.

1、計畝租兄算h=H(m)

2、計算s=h^d mod n

3、返回s.

演算法1.5 基本RSA簽名驗證

輸入:RSA公鑰(n,e),消息m,簽名s.

輸出:接受或拒接簽名

1、計算h=H(m)

2、計算h'=s^e mod n.

3、若h=h',則返回『接受簽名』,否則返回『不接受簽名』

⑵ RSA公鑰和私鑰的生成以及PKCS#1與PKCE#8格式的轉換

首先需要電腦安裝openssl,這個搜一下安裝就行了。
然後運行命令行輸入命令:

回車,可以看到命令行執行的文件夾多了一個rsa_private_key.pem私鑰文件

然後執行生成公鑰命令:

回車,可以看到命令行執行的文件夾多了一個rsa_public_key.pem公鑰文件

PKCS#1格式私鑰轉換成PKCS#8格式私鑰(一般java用的都是PKCS#8格式私鑰)

回車,可以看到命令行列印出了PKCS#8格式的私鑰,右鍵復制就行了。

用記事本開打密鑰文件看看
以-----BEGIN RSA PRIVATE KEY-----開頭
以-----END RSA PRIVATE KEY-----結束
的就是PKCS#1格式

以-----BEGIN PRIVATE KEY-----開頭
以-----END PRIVATE KEY-----結束
的就是PKCS#8格式

最後附上pyhton和java語言實現RSA和AES加密的文章:
python實現RSA與AES混合加密
java實現RSA與AES混合加密
python,java跨語言RSA+AES混合加密解密以及踩過的那些坑

⑶ RSA加密原理

RSA加密是一種非對稱加密。可以在不直接傳遞密鑰的情況下,完成解密。這能夠確保信息的安全性,避免了直接傳遞密鑰所造成的被破解的風險。是由一對密鑰來進行加解密的過程,分別稱為公鑰和私鑰。公鑰加密--私鑰解密,私鑰加密--公鑰解密

在 整數 中, 離散對數 是一種基於 同餘 運算和 原根 的一種 對數 運算。而在實數中對數的定義 log b a 是指對於給定的 a b ,有一個數 x ,使得 b x = a 。相同地在任何群 G 中可為所有整數 k 定義一個冪數為 b K ,而 離散對數 log b a 是指使得 b K = a 的整數 k

當3為17的 原根 時,我們會發現一個規律

對 正整數 n,歐拉函數是小於或等於n的正整數中與n 互質 的數的數目(因此φ(1)=1)。有以下幾個特點

服務端根據生成一個隨機數15,根據 3 15 mod 17 計算出6,服務端將6傳遞給客戶端,客戶端生成一個隨機數13,根據 3 13 mod 17 計算出12後,將12再傳回給服務端,客戶端收到服務端傳遞的6後,根據 6 13 mod 17 計算出 10 ,服務端收到客戶端傳遞的12後,根據 12 15 mod 17 計算出 10 ,我們會發現我們通過 迪菲赫爾曼密鑰交換 將 10 進行了加密傳遞

說明:

安全性:
除了 公鑰 用到 n 和 e ,其餘的4個數字是 不公開 的(p1、p2、φ(n)、d)
目前破解RSA得到的方式如下:

缺點
RSA加密 效率不高 ,因為是純粹的數學演算法,大數據不適合RSA加密,所以我們在加密大數據的時候,我們先用 對稱加密 演算法加密大數據得到 KEY ,然後再用 RSA 加密 KEY ,再把大數據和KEY一起進行傳遞

因為Mac系統內置了OpenSSL(開源加密庫),所以我們開源直接在終端進行RSA加密解密

生成RSA私鑰,密鑰名為private.pem,密鑰長度為1024bit

因為在iOS中是無法使用 .pem 文件進行加密和解密的,需要進行下面幾個步驟

生成一個10年期限的crt證書

crt證書格式轉換成der證書

⑷ rsa演算法原理

RSA演算法是最常用的非對稱加密演算法,它既能用於加密,也能用於數字簽名。RSA的安全基於大數分解的難度。其公鑰和私鑰是一對大素數(100到200位十進制數或更大)的函數。從一個公鑰和密文恢復出明文的難度,等價於分解兩個大素數之積。

我們可以通過一個簡單的例子來理解RSA的工作原理。為了便於計算。在以下實例中只選取小數值的素數p,q,以及e,假設用戶A需要將明文「key」通過RSA加密後傳遞給用戶B,過程如下:設計公私密鑰(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=7時,e×d≡1 mod f(n)同餘等式成立。因此,可令d=7。從而我們可以設計出一對公私密鑰,加密密鑰(公鑰)為:KU =(e,n)=(3,33),解密密鑰(私鑰)為:KR =(d,n)=(7,33)。

英文數字化。將明文信息數字化,並將每塊兩個數字分組。假定明文英文字母編碼表為按字母順序排列數值。則得到分組後的key的明文信息為:11,05,25。

明文加密。用戶加密密鑰(3,33) 將數字化明文分組信息加密成密文。由C≡Me(mod n)得:
C1(密文)≡M1(明文)^e (mod n) == 11≡11^3 mod 33 ;
C2(密文)≡M2(明文)^e (mod n) == 26≡05^3 mod 33;
C3(密文)≡M3(明文)^e (mod n) == 16≡25^3 mod 33;
所以密文為11.26.16。

密文解密。用戶B收到密文,若將其解密,只需要計算,即:
M1(明文)≡C1(密文)^d (mod n) == 11≡11^7 mod 33;
M2(明文)≡C2(密文)^d (mod n) == 05≡26^7 mod 33;
M3(明文)≡C3(密文)^d (mod n) == 25≡16^7 mod 33;
轉成明文11.05.25。根據上面的編碼表將其轉換為英文,我們又得到了恢復後的原文「key」。

當然,實際運用要比這復雜得多,由於RSA演算法的公鑰私鑰的長度(模長度)要到1024位甚至2048位才能保證安全,因此,p、q、e的選取、公鑰私鑰的生成,加密解密模指數運算都有一定的計算程序,需要仰仗計算機高速完成。

⑸ iOS RSA加密生成公鑰私鑰

該命令生成一個模長 2048 位,名字為 rsa_private_key.pem 、 PKCS1 格式的 RSA 私鑰文件.

genrsa :指定生成演算法使用 RSA
-out :後面參數是生成的私鑰的文件名
2048 :生成私鑰的模長,單位位元組(bits)

根據生成的私鑰 rsa_private_key.pem 文件,生成公鑰 rsa_public_key.pem 文件

生成名字為 rsa_pkcs8_private_key.pem 的私鑰文件
Java Android 用到的密鑰:
公鑰: rsa_public_key.pem
私鑰: rsa_pkcs8_private_key.pem

終端會提示輸入國家、省市、所在地、組織、組織單位、常用名稱、郵箱地址等信息,按要求填寫(可以隨便填寫), 輸入完對應信息後會提示輸入一個密碼 :

最終會生成 rsacert.csr 文件

用最開始生成的私鑰 rsa_private_key.pem 和 rsacert.csr 證書請求文件生成一個數字證書 rsacert.crt

使用 x509 工具自建CA。由於 x509 無法建立證書請求文件,所以只能使用 openssl req 來生成請求文件,然後使用 x509 來自簽署, 也可以用來簽署他人的證書請求,即為他人頒發證書。

知識點 :
終端會提示設置密碼,該密碼是 .p12 私鑰的密碼(用 private_key.p12 私鑰解密時, 要用到該密碼, 需要記錄下 ), 會提示再次輸入檢驗剛才輸入的密碼.

⑹ 簡述RSA體制密鑰的生成及其加密、解密演算法。

RSA體制密鑰的生成:
1. 選擇兩個大素數,p 和q 。

2. 計算: n = p * q (p,q分別為兩個互異的大素數,p,q 必須保密,一般要求p,q為安全素數,n的長度大於512bit ,這主要是因為RSA演算法的安全性依賴於因子分解大數問題)。有歐拉函數 (n)=(p-1)(q-1)。

3. 然後隨機選擇加密密鑰e,要求 e 和 ( p - 1 ) * ( q - 1 ) 互質。

4. 最後,利用Euclid 演算法計算解密密鑰d, 滿足de≡1(mod φ(n))。其中n和d也要互質。數e和n是公鑰,d是私鑰。兩個素數p和q不再需要,應該丟棄,不要讓任何人知道。

加密、解密演算法:

1. 加密信息 m(二進製表示)時,首先把m分成等長數據塊 m1 ,m2,..., mi ,塊長s,其中 2^s <= n, s 盡可能的大。

2. 對應的密文是:ci ≡mi^e ( mod n ) ( a )

3. 解密時作如下計算:mi ≡ci^d ( mod n ) ( b ) RSA 可用於數字簽名,方案是用 ( a ) 式簽名, ( b )式驗證。

⑺ 公鑰密碼系統及RSA公鑰演算法

公鑰密碼系統及RSA公鑰演算法

本文簡單介紹了公開密鑰密碼系統的思想和特點,並具體介紹了RSA演算法的理論基礎,工作原理和具體實現過程,並通過一個簡單例子說明了該演算法是如何實現。在本文的最後,概括說明了RSA演算法目前存在的一些缺點和解決方法。

關鍵詞:公鑰密碼體制 , 公鑰 ,私鑰 ,RSA

§1引言

隨著計算機聯網的逐步實現,Internet前景越來越美好,全球經濟發展正在進入信息經濟時代,知識經濟初見端倪。計算機信息的保密問題顯得越來越重要,無論是個人信息通信還是電子商務發展,都迫切需要保證Internet網上信息傳輸的安全,需要保證信息安全。信息安全技術是一門綜合學科,它涉及資訊理論、計算機科學和密碼學等多方面知識,它的主要任務是研究計算機系統和通信網路內信息的保護方法以實現系統內信息的安全、保密、真實和完整。其中,信息安全的核心是密碼技術。密碼技術是集數學、計算機科學、電子與通信等諸多學科於一身的交叉學科。它不僅能夠保證機密性信息的加密,而且能夠實現數字簽名、身份驗證、系統安全等功能。是現代化發展的重要科學之一。本文將對公鑰密碼系統及該系統中目前最廣泛流行的RSA演算法做一些簡單介紹。

§2公鑰密碼系統

要說明公鑰密碼系統,首先來了解一下不同的加密演算法:目前的加密演算法按密鑰方式可分為單鑰密碼演算法和公鑰密碼演算法。

2.1.單鑰密碼

又稱對稱式密碼,是一種比較傳統的加密方式,其加密運算、解密運算使用的是同樣的密鑰,信息的發送者和信息的接收者在進行信息的傳輸與處理時,必須共同持有該密碼(稱為對稱密碼)。因此,通信雙方都必須獲得這把鑰匙,並保持鑰匙的秘密。

單鑰密碼系統的安全性依賴於以下兩個因素:第一,加密演算法必須是足夠強的,僅僅基於密文本身去解密信息在實踐上是不可能的;第二,加密方法的安全性依賴於密鑰的秘密性,而不是演算法的秘密性,因此,我們沒有必要確保演算法的秘密性(事實上,現實中使用的很多單鑰密碼系統的演算法都是公開的),但是我們一定要保證密鑰的秘密性。

從單鑰密碼的這些特點我們容易看出它的主要問題有兩點:第一,密鑰量問題。在單鑰密碼系統中,每一對通信者就需要一對密鑰,當用戶增加時,必然會帶來密鑰量的成倍增長,因此在網路通信中,大量密鑰的產生﹑存放和分配將是一個難以解決的問題。第二,密鑰分發問題。單鑰密碼系統中,加密的安全性完全依賴於對密鑰的保護,但是由於通信雙方使用的是相同的密鑰,人們又不得不相互交流密鑰,所以為了保證安全,人們必須使用一些另外的安全信道來分發密鑰,例如用專門的信使來傳送密鑰,這種做法的代價是相當大的,甚至可以說是非常不現實的,尤其在計算機網路環境下,人們使用網路傳送加密的文件,卻需要另外的安全信道來分發密鑰,顯而易見,這是非常不智是甚至是荒謬可笑的。

2.2公鑰密碼

正因為單鑰密碼系統存在如此難以解決的缺點,發展一種新的﹑更有效﹑更先進的密碼體制顯得更為迫切和必要。在這種情況下,出現了一種新的公鑰密碼體制,它突破性地解決了困擾著無數科學家的密鑰分發問題,事實上,在這種體制中,人們甚至不用分發需要嚴格保密的密鑰,這次突破同時也被認為是密碼史上兩千年來自單碼替代密碼發明以後最偉大的成就。

這一全新的思想是本世紀70年代,美國斯坦福大學的兩名學者Diffie和Hellman提出的,該體制與單鑰密碼最大的不同是:

在公鑰密碼系統中,加密和解密使用的是不同的密鑰(相對於對稱密鑰,人們把它叫做非對稱密鑰),這兩個密鑰之間存在著相互依存關系:即用其中任一個密鑰加密的信息只能用另一個密鑰進行解密。這使得通信雙方無需事先交換密鑰就可進行保密通信。其中加密密鑰和演算法是對外公開的,人人都可以通過這個密鑰加密文件然後發給收信者,這個加密密鑰又稱為公鑰;而收信者收到加密文件後,它可以使用他的解密密鑰解密,這個密鑰是由他自己私人掌管的,並不需要分發,因此又成稱為私鑰,這就解決了密鑰分發的問題。

為了說明這一思想,我們可以考慮如下的類比:

兩個在不安全信道中通信的人,假設為Alice(收信者)和Bob(發信者),他們希望能夠安全的通信而不被他們的敵手Oscar破壞。Alice想到了一種辦法,她使用了一種鎖(相當於公鑰),這種鎖任何人只要輕輕一按就可以鎖上,但是只有Alice的鑰匙(相當於私鑰)才能夠打開。然後Alice對外發送無數把這樣的鎖,任何人比如Bob想給她寄信時,只需找到一個箱子,然後用一把Alice的鎖將其鎖上再寄給Alice,這時候任何人(包括Bob自己)除了擁有鑰匙的Alice,都不能再打開箱子,這樣即使Oscar能找到Alice的鎖,即使Oscar能在通信過程中截獲這個箱子,沒有Alice的鑰匙他也不可能打開箱子,而Alice的鑰匙並不需要分發,這樣Oscar也就無法得到這把「私人密鑰」。

從以上的介紹可以看出,公鑰密碼體制的思想並不復雜,而實現它的關鍵問題是如何確定公鑰和私鑰及加/解密的演算法,也就是說如何找到「Alice的鎖和鑰匙」的問題。我們假設在這種體制中, PK是公開信息,用作加密密鑰,而SK需要由用戶自己保密,用作解密密鑰。加密演算法E和解密演算法D也都是公開的。雖然SK與PK是成對出現,但卻不能根據PK計算出SK。它們須滿足條件:

①加密密鑰PK對明文X加密後,再用解密密鑰SK解密,即可恢復出明文,或寫為:DSK(EPK(X))=X

②加密密鑰不能用來解密,即DPK(EPK(X))≠X

③在計算機上可以容易地產生成對的PK和SK。

④從已知的PK實際上不可能推導出SK。

⑤加密和解密的運算可以對調,即:EPK(DSK(X))=X

從上述條件可看出,公開密鑰密碼體制下,加密密鑰不等於解密密鑰。加密密鑰可對外公開,使任何用戶都可將傳送給此用戶的信息用公開密鑰加密發送,而該用戶唯一保存的私人密鑰是保密的,也只有它能將密文復原、解密。雖然解密密鑰理論上可由加密密鑰推算出來,但這種演算法設計在實際上是不可能的,或者雖然能夠推算出,但要花費很長的時間而成為不可行的。所以將加密密鑰公開也不會危害密鑰的安全。

這種體制思想是簡單的,但是,如何找到一個適合的演算法來實現這個系統卻是一個真正困擾密碼學家們的難題,因為既然Pk和SK是一對存在著相互關系的密鑰,那麼從其中一個推導出另一個就是很有可能的,如果敵手Oscar能夠從PK推導出SK,那麼這個系統就不再安全了。因此如何找到一個合適的演算法生成合適的Pk和SK,並且使得從PK不可能推導出SK,正是迫切需要密碼學家們解決的一道難題。這個難題甚至使得公鑰密碼系統的發展停滯了很長一段時間。

為了解決這個問題,密碼學家們考慮了數學上的陷門單向函數,下面,我們可以給出它的非正式定義:

Alice的公開加密函數應該是容易計算的,而計算其逆函數(即解密函數)應該是困難的(對於除Alice以外的人)。許多形式為Y=f(x)的函數,對於給定的自變數x值,很容易計算出函數Y的值;而由給定的Y值,在很多情況下依照函數關系f (x)計算x值十分困難。這樣容易計算但難於求逆的函數,通常稱為單向函數。在加密過程中,我們希望加密函數E為一個單項的單射函數,以便可以解密。雖然目前還沒有一個函數能被證明是單向的,但是有很多單射函數被認為是單向的。

例如,有如下一個函數被認為是單向的,假定n為兩個大素數p和q的乘積,b為一個正整數,那麼定義f:

f (x )= x b mod n

(如果gcd(b,φ(n))=1,那麼事實上這就是我們以下要說的RSA加密函數)

如果我們要構造一個公鑰密碼體制,僅給出一個單向的單射函數是不夠的。從Alice的觀點來看,並不需要E是單向的,因為它需要用有效的方式解密所收到的信息。因此,Alice應該擁有一個陷門,其中包含容易求出E的你函數的秘密信息。也就是說,Alice可以有效解密,因為它有額外的秘密知識,即SK,能夠提供給你解密函數D。因此,我們稱一個函數為一個陷門單向函數,如果它是一個單向函數,並在具有特定陷門的知識後容易求出其逆。

考慮上面的函數f (x) = xb mod n。我們能夠知道其逆函數f -1有類似的形式f (x ) = xa mod n,對於合適的取值a。陷門就是利用n的因子分解,有效的算出正確的指數a(對於給定的b)。

為方便起見,我們把特定的某類陷門單向函數計為?。那麼隨機選取一個函數f屬於?,作為公開加密函數;其逆函數f-1是秘密解密函數。那麼公鑰密碼體制就能夠實現了。

根據以上關於陷門單向函數的思想,學者們提出了許多種公鑰加密的方法,它們的安全性都是基於復雜的數學難題。根據所基於的數學難題,至少有以下三類系統目前被認為是安全和有效的:大整數因子分解系統(代表性的有RSA)、橢園曲線離散對數系統(ECC)和離散對數系統(代表性的有DSA)。

§3 RSA演算法

3.1簡介

當前最著名、應用最廣泛的公鑰系統RSA是在1978年,由美國麻省理工學院(MIT)的Rivest、Shamir和Adleman在題為《獲得數字簽名和公開鑰密碼系統的方法》的論文中提出的。它是一個基於數論的非對稱(公開鑰)密碼體制,是一種分組密碼體制。其名稱來自於三個發明者的姓名首字母。它的安全性是基於大整數素因子分解的困難性,而大整數因子分解問題是數學上的著名難題,至今沒有有效的方法予以解決,因此可以確保RSA演算法的安全性。RSA系統是公鑰系統的最具有典型意義的方法,大多數使用公鑰密碼進行加密和數字簽名的產品和標准使用的都是RSA演算法。

RSA演算法是第一個既能用於數據加密也能用於數字簽名的演算法,因此它為公用網路上信息的加密和鑒別提供了一種基本的方法。它通常是先生成一對RSA密鑰,其中之一是保密密鑰,由用戶保存;另一個為公開密鑰,可對外公開,甚至可在網路伺服器中注冊,人們用公鑰加密文件發送給個人,個人就可以用私鑰解密接受。為提高保密強度,RSA密鑰至少為500位長,一般推薦使用1024位。

該演算法基於下面的兩個事實,這些事實保證了RSA演算法的安全有效性:

1)已有確定一個數是不是質數的快速演算法;

2)尚未找到確定一個合數的質因子的快速演算法。

3.2工作原理

1)任意選取兩個不同的大質數p和q,計算乘積r=p*q;

2)任意選取一個大整數e,e與(p-1)*(q-1)互質,整數e用做加密密鑰。注意:e的選取是很容易的,例如,所有大於p和q的質數都可用。

3)確定解密密鑰d:d * e = 1 molo(p - 1)*(q - 1) 根據e、p和q可以容易地計算出d。

4)公開整數r和e,但是不公開d;

5)將明文P (假設P是一個小於r的整數)加密為密文C,計算方法為:

C = Pe molo r

6)將密文C解密為明文P,計算方法為:

P = Cd molo r

然而只根據r和e(不是p和q)要計算出d是不可能的。因此,任何人都可對明文進行加密,但只有授權用戶(知道d)才可對密文解密。

3.3簡單實例

為了說明該演算法的工作過程,我們下面給出一個簡單例子,顯然我們在這只能取很小的數字,但是如上所述,為了保證安全,在實際應用上我們所用的數字要大的多得多。

例:選取p=3, q=5,則r=15,(p-1)*(q-1)=8。選取e=11(大於p和q的質數),通過d * 11 = 1 molo 8,計算出d =3。

假定明文為整數13。則密文C為

C = Pe molo r

= 1311 molo 15

= 1,792,160,394,037 molo 15

= 7

復原明文P為:

P = Cd molo r

= 73 molo 15

= 343 molo 15

= 13

因為e和d互逆,公開密鑰加密方法也允許採用這樣的方式對加密信息進行"簽名",以便接收方能確定簽名不是偽造的。

假設A和B希望通過公開密鑰加密方法進行數據傳輸,A和B分別公開加密演算法和相應的密鑰,但不公開解密演算法和相應的密鑰。A和B的加密演算法分別是ECA和ECB,解密演算法分別是DCA和DCB,ECA和DCA互逆,ECB和DCB互逆。 若A要向B發送明文P,不是簡單地發送ECB(P),而是先對P施以其解密演算法DCA,再用加密演算法ECB對結果加密後發送出去。

密文C為:

C = ECB(DCA(P))

B收到C後,先後施以其解密演算法DCB和加密演算法ECA,得到明文P:

ECA(DCB(C))

= ECA(DCB(ECB(DCA(P))))

= ECA(DCA(P))/*DCB和ECB相互抵消*/

=

P          /*DCB和ECB相互抵消*/

這樣B就確定報文確實是從A發出的,因為只有當加密過程利用了DCA演算法,用ECA才能獲得P,只有A才知道DCA演算法,沒 有人,即使是B也不能偽造A的簽名。

3.4優缺點

3.4.1優點

RSA演算法是第一個能同時用於加密和數字簽名的演算法,也易於理解和操作。RSA是被研究得最廣泛的公鑰演算法,從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。該演算法的加密密鑰和加密演算法分開,使得密鑰分配更為方便。它特別符合計算機網路環境。對於網上的大量用戶,可以將加密密鑰用電話簿的方式印出。如果某用戶想與另一用戶進行保密通信,只需從公鑰簿上查出對方的加密密鑰,用它對所傳送的信息加密發出即可。對方收到信息後,用僅為自己所知的解密密鑰將信息脫密,了解報文的內容。由此可看出,RSA演算法解決了大量網路用戶密鑰管理的難題,這是公鑰密碼系統相對於對稱密碼系統最突出的優點。

3.4.2缺點

1)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。

2)安全性, RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價,而且密碼學界多數人士傾向於因子分解不是NPC問題。目前,人們已能分解140多個十進制位的大素數,這就要求使用更長的密鑰,速度更慢;另外,目前人們正在積極尋找攻擊RSA的方法,如選擇密文攻擊,一般攻擊者是將某一信息作一下偽裝(Blind),讓擁有私鑰的實體簽署。然後,經過計算就可得到它所想要的信息。實際上,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘冪保留了輸入的乘法結構:

( XM )d = Xd *Md mod n

前面已經提到,這個固有的問題來自於公鑰密碼系統的最有用的特徵--每個人都能使用公鑰。但從演算法上無法解決這一問題,主要措施有兩條:一條是採用好的公鑰協議,保證工作過程中實體不對其他實體任意產生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的隨機文檔簽名,簽名時首先使用One-Way Hash Function對文檔作HASH處理,或同時使用不同的簽名演算法。除了利用公共模數,人們還嘗試一些利用解密指數或φ(n)等等攻擊.

3)速度太慢,由於RSA的分組長度太大,為保證安全性,n至少也要600 bitx以上,使運算代價很高,尤其是速度較慢,較對稱密碼演算法慢幾個數量級;且隨著大數分解技術的發展,這個長度還在增加,不利於數據格式的標准化。目前,SET(Secure Electronic Transaction)協議中要求CA採用2048比特長的密鑰,其他實體使用1024比特的密鑰。為了速度問題,目前人們廣泛使用單,公鑰密碼結合使用的方法,優缺點互補:單鑰密碼加密速度快,人們用它來加密較長的文件,然後用RSA來給文件密鑰加密,極好的解決了單鑰密碼的密鑰分發問題。

§4結束語

目前,日益激增的電子商務和其它網際網路應用需求使公鑰體系得以普及,這些需求量主要包括對伺服器資源的訪問控制和對電子商務交易的保護,以及權利保護、個人隱私、無線交易和內容完整性(如保證新聞報道或股票行情的真實性)等方面。公鑰技術發展到今天,在市場上明顯的發展趨勢就是PKI與操作系統的集成,PKI是「Public

Key Infrastructure」的縮寫,意為「公鑰基礎設施」。公鑰體制廣泛地用於CA認證、數字簽名和密鑰交換等領域。

公鑰加密演算法中使用最廣的是RSA。RSA演算法研製的最初理念與目標是努力使互聯網安全可靠,旨在解決DES演算法秘密密鑰的利用公開信道傳輸分發的難題。而實際結果不但很好地解決了這個難題;還可利用RSA來完成對電文的數字簽名以抗對電文的否認與抵賴;同時還可以利用數字簽名較容易地發現攻擊者對電文的非法篡改,以保護數據信息的完整性。目前為止,很多種加密技術採用了RSA演算法,該演算法也已經在互聯網的許多方面得以廣泛應用,包括在安全介面層(SSL)標准(該標準是網路瀏覽器建立安全的互聯網連接時必須用到的)方面的應用。此外,RSA加密系統還可應用於智能IC卡和網路安全產品。

但目前RSA演算法的專利期限即將結束,取而代之的是基於橢圓曲線的密碼方案(ECC演算法)。較之於RSA演算法,ECC有其相對優點,這使得ECC的特性更適合當今電子商務需要快速反應的發展潮流。此外,一種全新的量子密碼也正在發展中。

至於在實際應用中應該採用何種加密演算法則要結合具體應用環境和系統,不能簡單地根據其加密強度來做出判斷。因為除了加密演算法本身之外,密鑰合理分配、加密效率與現有系統的結合性以及投入產出分析都應在實際環境中具體考慮。加密技術隨著網路的發展更新,將有更安全更易於實現的演算法不斷產生,為信息安全提供更有力的保障。今後,加密技術會何去何從,我們將拭目以待。

參考文獻:

[1] Douglas R.Stinson.《密碼學原理與實踐》.北京:電子工業出版社,2003,2:131-132

[2]西蒙.辛格.《密碼故事》.海口:海南出版社,2001,1:271-272

[3]嬴政天下.加密演算法之RSA演算法.http://soft.winzheng.com/infoView/Article_296.htm,2003

[4]加密與數字簽名.http://www.njt.cn/yumdq/dzsw/a2.htm

[5]黑客中級教程系列之十.http://www.qqorg.i-p.com/jiaocheng/10.html

⑻ RSA的公鑰、私鑰

RSA的公鑰、私鑰

採用單鑰 密碼系統 的加密方法,同一個 密鑰 可以同時用作信息的加密和解密,這種加密方法稱為對稱加密,也稱為單 密鑰加密 。

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

一、舉個例子

1、發消息

   用對方的公鑰給對方發消息

2、發公告

  發公告的時候,用自己的私鑰形成簽名!

二、加密和簽名

RSA的公鑰、私鑰是互相對應的,RSA會生成兩個密鑰,你可以把任何一個用於公鑰,然後另一個就是你必須保護好的私鑰了。

RSA的公鑰、私鑰都可以加密,也都可以解密。

其中:

用公鑰加密需要私鑰解密,稱為「加密」。由於私鑰是不公開的,確保了內容的保密,沒有私鑰無法獲得內容;

用私鑰加密需要公鑰解密,稱為「簽名」。由於公鑰是公開的,任何人都可以解密內容,但只能用發布者的公鑰解密,驗證了內容是該發布者發出的。

所以:

如果用於加密解密,那就是用公鑰加密私鑰解密(僅你可讀但別人不可讀,任何人都可寫)

如果用於證書驗證,那就是用私鑰加密公鑰解密(僅你可寫但別人不可寫,任何人都可讀)

三、認證過程

標簽:  HTTP

⑼ python rsa模塊---生成公鑰和私鑰的方法

https://blog.csdn.net/six66hao/article/details/81814576
https://blog.csdn.net/whatday/article/details/97617461
https://blog.csdn.net/xiongzaiabc/article/details/88400748
https://blog.csdn.net/zhao3587717/article/details/83111082/

一.
非對稱加密演算法需要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)
對稱加密演算法大家共用一個密鑰

數字簽名: 就是為了證明該信件是確定的人發出的,而不是黑客冒充發出的
eg:
1.鮑勃給蘇珊回信,決定採用"數字簽名"。他寫完後先用Hash函數,生成信件的摘要(digest)。

二.用RSA庫可以生成公鑰和私鑰
到時候把公鑰給前端,後端保存公鑰和私鑰

三.在用戶注冊/登入時,輸入密碼後前端會用JS對密碼進行加密傳送到後端
一般現在對於密碼的加密解密都用RSA進行

⑽ 如何通過RSA生成唯一的公鑰和私鑰

在ubuntu上要使用openssl的話需要先並塵搜進行安裝,命令如下:

sudo apt-get install openssl

安裝完成就可以使用openssl了。

首先需要進入openssl的交互界面,在命令行了輸入openssl即可;

1)生成RSA私鑰:

genrsa -out rsa_private_key.pem 1024

該命令會絕歷生成1024位的私鑰,生成成功的界面如下:


3) 生成RSA公鑰兄消

輸入命令rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem,並回車

閱讀全文

與rsa演算法公鑰私鑰生成相關的資料

熱點內容
電腦文件夾打開畫面塊狀 瀏覽:790
固態硬碟與機械盤的加密方法 瀏覽:634
unix編譯軟體 瀏覽:563
影視製作中西書局中央編譯出版社 瀏覽:822
變數作用域是編譯器決定的嗎 瀏覽:755
linux結構分析 瀏覽:812
程序員記錄歷史 瀏覽:798
編譯器怎麼調用構造函數的 瀏覽:97
高質量cpdf 瀏覽:824
福建電信代理伺服器雲主機 瀏覽:618
美圖看看pdf 瀏覽:432
編譯後報錯 瀏覽:294
網路設備怎麼加密 瀏覽:789
hbuilderx文件夾有哪些 瀏覽:102
空調壓縮機生產板塊 瀏覽:616
開源多媒體伺服器都有什麼 瀏覽:396
反編譯了別人的app會被發現嗎 瀏覽:918
上海光裕汽車壓縮機有限公司 瀏覽:336
連接ps4伺服器地址 瀏覽:138
新神魔大陸三星賬號是什麼伺服器 瀏覽:679