Ⅰ 什麼是RSA演算法,求簡單解釋。
RSA公鑰加密演算法是1977年由Ron Rivest、Adi Shamirh和LenAdleman在(美國麻省理工學院)開發的。RSA取名來自開發他們三者的名字。RSA是目前最有影響力的公鑰加密演算法,它能夠
抵抗到目前為止已知的所有密碼攻擊,已被ISO推薦為公鑰數據加密標准。RSA演算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,但那時想要對其乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。由於進行的都是大數計算,使得RSA最快的情況也比DES慢上好幾倍,無論是軟體還是硬體實現。速度一直是RSA的缺陷。一般來說只用於少量數據加密。RSA的速度比對應同樣安全級別的對稱密碼演算法要慢1000倍左右。
基礎
大數分解和素性檢測——將兩個大素數相乘在計算上很容易實現,但將該乘積分解為兩個大素數因子的計算量是相當巨大的,以至於在實際計算中是不能實現的。
1.RSA密碼體制的建立:
(1)選擇兩個不同的大素數p和q;
(2)計算乘積n=pq和Φ(n)=(p-1)(q-1);
(3)選擇大於1小於Φ(n)的隨機整數e,使得gcd(e,Φ(n))=1;
(4)計算d使得de=1mod Φ(n);
(5)對每一個密鑰k=(n,p,q,d,e),定義加密變換為Ek(x)=xemodn,解密變換為Dk(x)=ydmodn,這里x,y∈Zn;
(6)以{e,n}為公開密鑰,{p,q,d}為私有密鑰。
2.RSA演算法實例:
下面用兩個小素數7和17來建立一個簡單的RSA演算法:
(1)選擇兩個素數p=7和q=17;
(2)計算n=pq=7 17=119,計算Φ(n)=(p-1)(q-1)=6 16=96;
(3)選擇一個隨機整數e=5,它小於Φ(n)=96並且於96互素;
(4)求出d,使得de=1mod96且d<96,此處求出d=77,因為 77 5=385=4 96+1;
(5)輸入明文M=19,計算19模119的5次冪,Me=195=66mod119,傳出密文C=66;(6)接收密文66,計算66模119的77次冪;Cd=6677≡19mod119得到明文19。
Ⅱ RSA演算法安全么
你用33當然很簡單,rsa最低要求密鑰1024比特,你可以試著分解一下。
Ⅲ RSA演算法解析
要應用rsa密碼,應當採用足夠大的整數n. 一般加密密鑰和認證密鑰選n為1024位,而平台根密鑰和存儲根密鑰則選n為2048位.
e 的二進製表示中應該盡量含有少的1.
e=3是不安全的,因為e太小,對於小的明文M,則有C=M的e次方<n,加密運算未取模.直接對密文C開e次方,即可求出明文M.
現在普遍使用e=2的16次方+1 = 65537 , 二進製表示中只有兩個1,且安全.
Ⅳ RSA演算法的安全問題
不安全 雖然沒泄露n 但是e d都被知道後 有利於求得n的歐拉函數 進而分解n
這就是所謂的 「共模攻擊」
為了防止共模攻擊 所以Rsa使用有2個注意
1。私鑰泄露,立刻換n
2。同組多用戶不能使用同一個n
Ⅳ 不屬於rsa演算法的攻擊方法是
不屬於rsa演算法的攻擊方法是
公鑰密碼包含兩個密鑰,加密密鑰和解密密鑰,其加密密鑰是可以公開的,解密密鑰是不能公開的。公鑰密碼自1976年提出這個思想後就不斷發展,其一般是基於數學上的一些困難問題所建造的,如rsa基於大整數分解的困難問題建立的,橢圓曲線是基於橢圓曲線上的離散對數困難問題建立的,elgamal上的DH密鑰交換是基於有限域的離散對數困難問題建立的,格密碼是基於格中困難問題的難解程度建立的等等。但是隨著科技的發展,在一定條件下,有些困難問題變得不在困難,如rsa密碼體系參數的選取,選取的bit長度隨著計算機的發展變得越來越長,這提高了存儲空間和計算時間,所以研究新型的公鑰體系變得越來越火熱。下面將會介紹RSA的基本原理和由於參數選取不當造成的攻擊手段。
一、RSA演算法
RSA屬於非對稱加密演算法,因為RSA使用了兩個不同的密鑰分別用於加密和解密,這兩個密鑰稱之為公私鑰對,其中公鑰用於加密,且公鑰是公開的,而私鑰用於解密,私鑰是私有的。
RSA的計算過程如下:
找到兩個大素數p和q,計算出n = pq;
計算出φ(n) = (p-1)*(q-1),選擇一個e,滿足1 < e <φ(n),且gcd(φ(n), e) = 1;
計算出d,使得d滿足ed % φ(n) = 1;
此時,已經生成了公私鑰對,其中(e, n)為公鑰,(d, n)為私鑰。
對於明文M,
Ⅵ RSA演算法詳解
總括: 本文詳細講述了RSA演算法詳解,包括內部使用數學原理以及產生的過程。
相濡以沫。到底需要愛淡如水。
之前寫過一篇文章 SSL協議之數據加密過程 ,裡面詳細講述了數據加密的過程以及需要的演算法。SSL協議很巧妙的利用對稱加密和非對稱加密兩種演算法來對數據進行加密。這篇文章主要是針對一種最常見的非對稱加密演算法——RSA演算法進行講解。其實也就是對私鑰和公鑰產生的一種方式進行描述。首先先來了解下這個演算法的歷史:
RSA是1977年由 羅納德·李維斯特 (Ron Rivest)、 阿迪·薩莫爾 (Adi Shamir)和 倫納德·阿德曼 (Leonard Adleman)一起提出的。當時他們三人都在 麻省理工學院 工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。
但實際上,在1973年,在英國政府通訊總部工作的數學家 克利福德·柯克斯 (Clifford Cocks)在一個內部文件中提出了一個相同的演算法,但他的發現被列入機密,一直到1997年才被發表。
所以誰是RSA演算法的發明人呢?不好說,就好像貝爾並不是第一個發明電話的人但大家都記住的是貝爾一樣,這個地方我們作為旁觀者倒不用較真,重要的是這個演算法的內容:
RSA演算法用到的數學知識特別多,所以在中間介紹這個演算法生成私鑰和公鑰的過程中會穿插一些數學知識。生成步驟如下:
隨意選擇兩個大的質數p和q,p不等於q,計算N=p*q;
什麼是質數?我想可能會有一部分人已經忘記了,定義如下:
比如2,3,5,7這些都是質數,9就不是了,因為3*3=9了
r = φ(N) = φ(p)φ(q) = (p-1)(q-1) 。
這里的數學概念就是什麼是歐拉函數了,什麼是歐拉函數呢?
歐拉函數 的定義:
互質 的定義:
例如: φ(8) = 4 ,因為 1,3,5,7 均和 8 互質。
推導歐拉函數:
(1)如果 n = 1 , φ(1) = 1 ;(小於等於1的正整數中唯一和1互質的數就是1本身);
(2)如果 n 為質數, φ(n) = n - 1 ;因為質數和每一個比它小的數字都互質。比如5,比它小的正整數1,2,3,4都和他互質;
(3) 如果 n 是 a 的 k 次冪,則 φ(n) = φ(a^k) = a^k - a^(k-1) = (a-1)a^(k-1) ;
(4) 若 m , n 互質,則 φ(mn) = φ(m)φ(n)
證明: 設 A , B , C 是跟 m , n , mn 互質的數的集,據 中國剩餘定理 (經常看數學典故的童鞋應該了解,剩餘定理又叫韓信點兵,也叫孫子定理), A * B 和 C 可建立雙射一一對應)的關系。(或者也可以從初等代數角度給出 歐拉函數積性的簡單證明 ) 因此的φ(n)值使用 算術基本定理 便知。(來自維基網路)
選擇一個小於r並與r互質的整數e,求得e關於r的模反元素,命名為 d ( ed = 1(mod r) 模反元素存在,當且僅當e與r互質), e 我們通常取65537。
模反元素:
比如 3 和 5 互質, 3 關於 5 的模反元素就可能是2,因為 3*2-1=5 可以被5整除。所以很明顯模反元素不止一個,2加減5的整數倍都是3關於5的模反元素 {...-3, 2,7,12…} 放在公式里就是 3*2 = 1 (mod 5)
上面所提到的歐拉函數用處實際上在於歐拉定理:
歐拉定理:
歐拉定理就可以用來證明模反元素必然存在。
由模反元素的定義和歐拉定理我們知道, a 的 φ(n) 次方減去1,可以被n整除。比如,3和5互質,而 5 的歐拉函數 φ(5) 等於4,所以 3 的 4 次方 (81) 減去1,可以被 5 整除( 80/5=16 )。
小費馬定理:
此時我們的 (N , e) 是公鑰, (N, d) 為私鑰,愛麗絲會把公鑰 (N, e) 傳給鮑勃,然後將 (N, d) 自己藏起來。一對公鑰和私鑰就產生了,然後具體的使用方法呢?請看: SSL協議之數據加密過程詳解
我們知道像RSA這種非對稱加密演算法很安全,那麼到底為啥子安全呢?
我們來看看上面這幾個過程產生的幾個數字:
N 和 e 我們都會公開使用,最為重要的就是私鑰中的 d , d 一旦泄露,加密也就失去了意義。那麼得到d的過程是如何的呢?如下:
所以得出了在上篇博客說到的結論,非對稱加密的原理:
將a和b相乘得出乘積c很容易,但要是想要通過乘積c推導出a和b極難。即對一個大數進行因式分解極難
目前公開破譯的位數是768位,實際使用一般是1024位或是2048位,所以理論上特別的安全。
RSA演算法的核心就是歐拉定理,根據它我們才能得到私鑰,從而保證整個通信的安全。
Ⅶ 不安全的加密演算法不包括什麼
DES(Data Encryption Standard):數據加密標准,速度較快,適用於加密大量數據的場合。
3DES(Triple DES):是基於DES,對一塊數據用三個不同的密鑰進行三次加密,強度更高。
AES(Advanced Encryption Standard):高級加密標准,是下一代的加密演算法標准,速度快,安全級別高;
演算法原理
AES 演算法基於排列和置換運算。排列是對數據重新進行安排,置換是將一個數據單元替換為另一個。AES 使用幾種不同的方法來執行排列和置換運算。
Ⅷ 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位的。
Ⅸ RSA演算法的缺點
1)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。
2)安全性,RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價,而且密碼學界多數人士傾向於因子分解不是NP問題。現今,人們已能分解140多個十進制位的大素數,這就要求使用更長的密鑰,速度更慢;另外,人們正在積極尋找攻擊RSA的方法,如選擇密文攻擊,一般攻擊者是將某一信息作一下偽裝(Blind),讓擁有私鑰的實體簽署。然後,經過計算就可得到它所想要的信息。實際上,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘冪保留了輸入的乘法結構:
(XM)d = Xd *Md mod n
前面已經提到,這個固有的問題來自於公鑰密碼系統的最有用的特徵--每個人都能使用公鑰。但從演算法上無法解決這一問題,主要措施有兩條:一條是採用好的公鑰協議,保證工作過程中實體不對其他實體任意產生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的隨機文檔簽名,簽名時首先使用One-Way Hash Function對文檔作HASH處理,或同時使用不同的簽名演算法。除了利用公共模數,人們還嘗試一些利用解密指數或φ(n)等等攻擊.
3)速度太慢,由於RSA 的分組長度太大,為保證安全性,n 至少也要 600 bits以上,使運算代價很高,尤其是速度較慢,較對稱密碼演算法慢幾個數量級;且隨著大數分解技術的發展,這個長度還在增加,不利於數據格式的標准化。SET(Secure Electronic Transaction)協議中要求CA採用2048比特長的密鑰,其他實體使用1024比特的密鑰。為了速度問題,人們廣泛使用單,公鑰密碼結合使用的方法,優缺點互補:單鑰密碼加密速度快,人們用它來加密較長的文件,然後用RSA來給文件密鑰加密,極好的解決了單鑰密碼的密鑰分發問題。
Ⅹ 為什麼說RSA加密不安全呢
5d=1mod96是模運算啊。。。就是問。。5和多少乘在一起,模96為1.。。。因為5×77 = 385 385mod96 = 1.。。所以d = 77了。。。
求模的方程。。直接試就行了。。。實際上是有一個演算法的。。。從歐幾里德除法演化來的。。。你找本數論的書就知道了。。
不知道你是不是最後一步不清楚。。。如果你總的演算法都不清楚那就麻煩了。。。
這個實際上是利用了大數分解的困難性的,
PKI的原理基本上是利用數學難題產生的。。這里的數學難題實際上就是第四步那個。。你自己產生乘法很簡單。但是讓破解者分解因子就難了。。。
這個。。說不明白。。。介紹密碼學的書上一般都有的。。