rsa演算法
『壹』 RSA演算法舉例
首先看下rsa演算法:
找兩素數p和q
計算n=p*q和
t=(p-1)*(q-1)
取小於n的一個數e,並且e與t互質,就是最大公約數是1
找一個數d,d滿足(ed-1)
mod
t
=0
公鑰取(n,e),私鑰取(n,d)
現在開始分析,
已知公鑰是(n=35,e=5),那麼
n=p*q,p與q只能是7和5
那麼t就是24
而(ed-1)%t=0
也就是(5d-1)%24=0,那麼可以取d為5
所以私鑰是
(d=5,n=35)
解密公式:m=c^d
mod
n
=10^5
mod
35
=5
所以明文m是5
『貳』 RSA演算法的基本含義
RSA公開密鑰密碼體制。所謂的公開密鑰密碼體制就是使用不同的加密密鑰與解密密鑰,是一種「由已知加密密鑰推導出解密密鑰在計算上是不可行的」密碼體制。
在公開密鑰密碼體制中,加密密鑰(即公開密鑰)PK是公開信息,而解密密鑰(即秘密密鑰)SK是需要保密的。加密演算法E和解密演算法D也都是公開的。雖然解密密鑰SK是由公開密鑰PK決定的,但卻不能根據PK計算出SK。
正是基於這種理論,1978年出現了著名的RSA演算法,它通常是先生成一對RSA 密鑰,其中之一是保密密鑰,由用戶保存;另一個為公開密鑰,可對外公開,甚至可在網路伺服器中注冊。為提高保密強度,RSA密鑰至少為500位長,一般推薦使用1024位。這就使加密的計算量很大。為減少計算量,在傳送信息時,常採用傳統加密方法與公開密鑰加密方法相結合的方式,即信息採用改進的DES或IDEA對話密鑰加密,然後使用RSA密鑰加密對話密鑰和信息摘要。對方收到信息後,用不同的密鑰解密並可核對信息摘要。
RSA演算法是第一個能同時用於加密和數字簽名的演算法,也易於理解和操作。RSA是被研究得最廣泛的公鑰演算法,從提出到現今的三十多年裡,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。
SET(Secure Electronic Transaction)協議中要求CA採用2048bits長的密鑰,其他實體使用1024比特的密鑰。RSA密鑰長度隨著保密級別提高,增加很快。下表列出了對同一安全級別所對應的密鑰長度。 保密級別 對稱密鑰長度(bit) RSA密鑰長度(bit) ECC密鑰長度(bit) 保密年限 80 80 1024 160 2010 112 112 2048 224 2030 128 128 3072 256 2040 192 192 7680 384 2080 256 256 15360 512 2120 這種演算法1978年就出現了,它是第一個既能用於數據加密也能用於數字簽名的演算法。它易於理解和操作,也很流行。演算法的名字以發明者的名字命名:Ron Rivest, Adi Shamir 和 Leonard Adleman。早在1973年,英國國家通信總局的數學家Clifford Cocks就發現了類似的演算法。但是他的發現被列為絕密,直到1998年才公諸於世。
RSA演算法是一種非對稱密碼演算法,所謂非對稱,就是指該演算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。
RSA的演算法涉及三個參數,n、e1、e2。
其中,n是兩個大質數p、q的積,n的二進製表示時所佔用的位數,就是所謂的密鑰長度。
e1和e2是一對相關的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質;再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n,e1),(n,e2)就是密鑰對。其中(n,e1)為公鑰,(n,e2)為私鑰。
RSA加解密的演算法完全相同,設A為明文,B為密文,則:A=B^e2 mod n;B=A^e1 mod n;(公鑰加密體制中,一般用公鑰加密,私鑰解密)
e1和e2可以互換使用,即:
A=B^e1 mod n;B=A^e2 mod n;
『叄』 RSA演算法加密
RSA加密演算法是一種典型的非對稱加密演算法,它基於大數的因式分解數學難題,它也是應用最廣泛的非對稱加密演算法,於1978年由美國麻省理工學院(MIT)的三位學著:Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出。
它的原理較為簡單,假設有消息發送方A和消息接收方B,通過下面的幾個步驟,就可以完成消息的加密傳遞:
消息發送方A在本地構建密鑰對,公鑰和私鑰;
消息發送方A將產生的公鑰發送給消息接收方B;
B向A發送數據時,通過公鑰進行加密,A接收到數據後通過私鑰進行解密,完成一次通信;
反之,A向B發送數據時,通過私鑰對數據進行加密,B接收到數據後通過公鑰進行解密。
由於公鑰是消息發送方A暴露給消息接收方B的,所以這種方式也存在一定的安全隱患,如果公鑰在數據傳輸過程中泄漏,則A通過私鑰加密的數據就可能被解密。
如果要建立更安全的加密消息傳遞模型,需要消息發送方和消息接收方各構建一套密鑰對,並分別將各自的公鑰暴露給對方,在進行消息傳遞時,A通過B的公鑰對數據加密,B接收到消息通過B的私鑰進行解密,反之,B通過A的公鑰進行加密,A接收到消息後通過A的私鑰進行解密。
當然,這種方式可能存在數據傳遞被模擬的隱患,但可以通過數字簽名等技術進行安全性的進一步提升。由於存在多次的非對稱加解密,這種方式帶來的效率問題也更加嚴重。
『肆』 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的選取、公鑰私鑰的生成,加密解密模指數運算都有一定的計算程序,需要仰仗計算機高速完成。
『伍』 RSA演算法計算
C=E(m)這是加密演算法公式
『陸』 RSA是什麼意思
RSA演算法是一種非對稱密碼演算法,所謂非對稱,就是指該演算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。
RSA的演算法涉及三個參數,n、e1、e2。
其中,n是兩個大質數p、q的積,n的二進製表示時所佔用的位數,就是所謂的密鑰長度。
e1和e2是一對相關的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質;再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n及e1),(n及e2)就是密鑰對。
RSA加解密的演算法完全相同,設A為明文,B為密文,則:A=B^e1 mod n;B=A^e2 mod n;
e1和e2可以互換使用,即:
A=B^e2 mod n;B=A^e1 mod n;
補充回答:
對明文進行加密,有兩種情況需要這樣作:
1、您向朋友傳送加密數據,您希望只有您的朋友可以解密,這樣的話,您需要首先獲取您朋友的密鑰對中公開的那一個密鑰,e及n。然後用這個密鑰進行加密,這樣密文只有您的朋友可以解密,因為對應的私鑰只有您朋友擁有。
2、您向朋友傳送一段數據附加您的數字簽名,您需要對您的數據進行MD5之類的運算以取得數據的"指紋",再對"指紋"進行加密,加密將使用您自己的密鑰對中的不公開的私鑰。您的朋友收到數據後,用同樣的運算獲得數據指紋,再用您的公鑰對加密指紋進行解密,比較解密結果與他自己計算出來的指紋是否一致,即可確定數據是否的確是您發送的、以及在傳輸過程中是否被篡改。
密鑰的獲得,通常由某個機構頒發(如CA中心),當然也可以由您自己創建密鑰,但這樣作,您的密鑰並不具有權威性。
計算方面,按公式計算就行了,如果您的加密強度為1024位,則結果會在有效數據前面補0以補齊不足的位數。補入的0並不影響解密運算。
『柒』 rsa演算法中p,q,n,e,d一般大小都為多少啊
RSA遭受攻擊的很多情況是因為演算法實現的一些細節上的漏洞所導致的,所以在使用RSA演算法構造密碼系統時,為保證安全,在生成大素數的基礎上,還必須認真仔細選擇參數,防止漏洞的形成。根據RSA加解密過程,其主要參數有三個:模數N,加密密鑰e,解密密鑰d。
3.4.1 模數N的確定
雖然迄今人們無法證明,破解RSA系統等於對N因子分解,但一般相信RSA系統的安全性等同於因子分解,即:若能分解因子N,即能攻破RSA系統,若能攻破RSA系統,即能分解因子Ⅳ。因此,在使用RSA系統時,對於模數N的選擇非常重要。在RSA演算法中,通過產生的兩個大素數p和q相乘得到模數N,而後分別通過對它們的數學運算得到密鑰對。由此,分解模數N得到p和q是最顯然的攻擊方法,當然也是最困難的方法,如果模數N被分解,攻擊者利用得到的P和q便可計算出,進而通過公開密鑰e由解密密鑰d,則RSA體制立刻被攻破。相當一部分的對RSA的攻擊就是試圖分解模數N,選擇合適的N是實現RSA演算法並防止漏洞的重要環節。一般地,模數N的確定可以遵循以下幾個原則:
①p和q之差要大。
當p和q相差很小時,在已知n的情況下,可假定二者的平均值為,然後利用,若等式右邊可開方,則得到及,即N被分解。
②p-1和q-1的最大公因子應很小。
③p和q必須為強素數。
一素數p如果滿足:
條件一:存在兩個大素數,,使得|p-1且|p+1;
條件二:存在四個大素數,,,使得。則此素數為強素數。其中,,,稱為3級的素數,,稱為2級的素數,p則稱為1級的素數,很明顯地,任何素數均為3級的素數。只有兩個強素數的積所構成的N,其因子分解才是較難的數學問題。
④p和q應大到使得因子分解N為計算上不可能。
RSA的安全性依賴於大數的因子分解,若能因子分解模數N,則RSA即被攻破,因此模數N必須足夠大直至因子分解N在計算上不可行。因子分解問題為密碼學最基本的難題之一,如今,因子分解的演算法已有長足的進步,但仍不足以說明RSA可破解。為保證安全性,實際應用中所選擇的素數P和拿至少應該為300位以上的二進制數,相應的模數N將是600位以上的二進制數。
目前,SET(Secure Electronic Transaction)協議中要求CA採用2048比特長的密鑰,其他實體使用1024比特的密鑰。隨著計算能力的提高和分布式運算的發展,安全密鑰的長度將是動態增長的。
Jadith Moore給出了使用RSA時有關模數的一些限制:
①若給定模數的一個加/解密密鑰指數對已知,攻擊者就能分解這個模數。
②若給定模數的一個加/解密密鑰指數對已知,攻擊者無需分解模數Ⅳ就可以計算出別的加/解密密鑰指數對。
③在通信網路中,利用RSA的協議不應該使用公共模數。
④消息應該用隨機數填充以避免對加密指數的攻擊。
3.4.2 e的選取原則
在RSA演算法中,e和互質的條件容易滿足,如果選擇較小的e,則加、解密的速度加快,也便於存儲,但會導致安全問題。
一般地,e的選取有如下原則:
①e不能夠太小。在RSA系統中,每人的公開密鑰P只要滿足即可,也即e可以任意選擇,為了減少加密運算時間,很多人採用盡可能小的e值,如3。但是已經證明低指數將會導致安全問題,故此,一般選擇e為16位的素數,可以有效防止攻擊,又有較快速度。
②e應選擇使其在的階為最大。即存在i,使得,
可以有效抗擊攻擊。
3.4.3 d的選取原則
一般地,私密密鑰d要大於。在許多應用場合,常希望使用位數較短的密鑰以降低解密或簽名的時間。例如IC卡應用中,IC卡CPU的計算能力遠低於計算機主機。長度較短的d可以減少IC卡的解密或簽名時間,而讓較復雜的加密或驗證預算(e長度較長)由快速的計算機主機運行。一個直接的問題就是:解密密鑰d的長度減少是否會造成安全性的降低?很明顯地,若d的長度太
小,則可以利用已知明文M加密後得,再直接猜測d,求出是否等於M。若是,則猜測J下確,否則繼續猜測。若d的長度過小,則猜測的空間變小,猜中的可能性加大,已有證明當時,可以由連分式演算法在多項式時間內求出d值。因此其長度不能過小。
『捌』 什麼是RSA演算法
RSA公鑰加密演算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美國麻省理工學院)開發的。RSA取名來自開發他們三者的名字。RSA是目前最有影響力的公鑰加密演算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰數據加密標准。RSA演算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,但那時想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。
『玖』 RSA演算法的具體過程
具體過程很復雜哦。主要思想是基於大數分解的復雜度:
例如:
你的明文是abc,可用ASCII等方式化成整數串,例如化成117.
選取密鑰為129,
開始加密,進行質數計算:117*129=15093。 這個過程很快。
把密文15093公開到網路上。
敵人解密時,只知道15093,想要得到117會花費很長的時間。解密非常控困難。
而你的朋友由於知道密鑰129,則可以很快得到明文117.
『拾』 請較為詳細地描述rsa加密演算法的全過程
RSA演算法非常簡單,概述如下:
找兩素數p和q
取n=p*q
取t=(p-1)*(q-1)
取任何一個數e,要求滿足e<t並且e與t互素(就是最大公因數為1)
取d*e%t==1
這樣最終得到三個數: n d e
設消息為數M (M <n)
設c=(M**d)%n就得到了加密後的消息c
設m=(c**e)%n則 m == M,從而完成對c的解密。
註:**表示次方,上面兩式中的d和e可以互換。
在對稱加密中:
n d兩個數構成公鑰,可以告訴別人;
n e兩個數構成私鑰,e自己保留,不讓任何人知道。
給別人發送的信息使用e加密,只要別人能用d解開就證明信息是由你發送的,構成了簽名機制。
別人給你發送信息時使用d加密,這樣只有擁有e的你能夠對其解密。
rsa的安全性在於對於一個大數n,沒有有效的方法能夠將其分解
從而在已知n d的情況下無法獲得e;同樣在已知n e的情況下無法
求得d。
rsa簡潔幽雅,但計算速度比較慢,通常加密中並不是直接使用rsa 來對所有的信息進行加密,
最常見的情況是隨機產生一個對稱加密的密鑰,然後使用對稱加密演算法對信息加密,之後用
RSA對剛才的加密密鑰進行加密。
最後需要說明的是,當前小於1024位的N已經被證明是不安全的
自己使用中不要使用小於1024位的RSA,最好使用2048位的。