公鑰密碼學中大部分引用了數論的成果,所以必要在介紹rsa密碼體制之前,詳細介紹一下所使用的幾個數論的知識點
歐幾里得演算法主要是解決最大公約數問題,記兩個正整數\(r_0\)和\(r_1\)的\(gcd\)表示:
\[gcd(r_0,r_1)
\]在公鑰體系中,安全性依賴於大整數的因式分解通常是不可能的。所以人們通常使用一種更有效的演算法計算gcd,即歐幾里得演算法,此演算法基於乙個簡單的觀察:
\[gcd(r_0,r_1) = gcd(r_0 - r_1, r_1)
\]其中,假設\(r_0 > r_1\),且二者均為正整數,不難理解:
\[gcd(r_0 - r_1, r_1) = gcd(g · (x - y), g · y) = g
\]顯然地,只要滿足\((r_0-mr_1) > 0\),那麼可以得到:
\[gcd(r_0, r_1) = gcd(r_0 - r_1, r_1) = gcd(r_0 - 2r_1, r_1) = \cdots = gcd(r_0 - mr_1, r_1)
\]如果m選擇了最大值,則此演算法可以表示為:
\[gcd(r_0, r_1) = gcd(r_0\ mod\ r_1, r_1)
\]事實證明,最終的gcd就是原始問題的gcd,即:
\[gcd(r_0, r_1) = \cdots = gcd(r_i, 0) = r_i
\]擴充套件歐幾里得演算法可以用來計算模逆元,不難理解,上文所述的歐幾里得演算法就是輪詢反覆互減最終得到結果的,換句話說,可以將這樣的反覆互減看作是原始兩個引數的s倍與t倍相加,即:
\[gcd(r_0, r_1) = s·r_0 + t·r_1
\]這個等式通常也稱為丟番圖方程。
可以得到,擴充套件的歐幾里得演算法(eea):
輸入:正整數\(r_0\)和\(r_1\),且\(r_0 > r_1\)
輸出:\(gcd(r_0, r_1)\),以及滿足\(gcd(r_0, r_1) = s·r_0 + t·r_1\)的s和t
initialize:
s[0] = 1
t[0] = 0
s[1] = 0
t[1] = 1
i = 1
algorithm:
do i = i + 1
r[i] = r[i - 2] mod r[i - 1]
q[i - 1] = (r[i - 2] - r[i]) / r[i - 1]
s[i] = s[i - 2] - q[i - 1] * s[i - 1]
t[i] = t[i - 2] - q[i - 1] * t[i - 1]
while r[i] != 0
return:
gcd(r[0], r[1] = r[i - 1]
s = s[i - 1]
t = t[i - 1]
在環\(z_m = \)中,我們感興趣的問題是在這個集合中,有多少個數字與m互素。
於是我們可以定義尤拉函式來進行計算:
\(z_m\)內與m互素的整數個數可以表示為\(\phi(m)\)
如果數值非常大的話,將集合內的元素從頭到尾都處理一遍,計算每乙個的gcd非常慢,對應的尤拉函式值得求解也非常困難,但是,如果m的因式分解是已知的,則存在乙個更簡單的計算方法:
假設m可以因式分解為一下的數的連乘:
\[m=p^_1 \cdot p^_2 \cdot \cdots \cdot p^_n
\]其中,\(p_i\)表示不同的素數,\(e_i\)表示正整數,則有:
\[\phi(m)=\prod^n_(p_i^ - p_i^)
\]需要強調的是,這種方法來快速計算尤拉函式,我們必須知道m的因式分解,這個特徵你剛剛也是rsa公鑰方案的核心。
費馬小定理如下描述:假設a為乙個整數,p為乙個素數,則
\[a^p \equiv a\ (mod\ p) \\ a^ \equiv 1 \ (mod\ p)
\]該定理在密碼學中非常有用,其中乙個應用就是計算有限域內某個元素的逆元。 因為 \(a \cdot a^ \equiv 1\ (mod\ p)\)。但請注意,只有p為素數時,這種反轉方法才成立。
將費馬小定理的模數推廣到任何整數模,即不一定為素數的模,就可以得到尤拉定理:
假設a和m都是整數,且\(gcd(a, m) = 1\),則有:
\[a^ \equiv 1\ (mod\ m)
\]這個定理對模數m適用,也適用於整數環\(z_m\)內的所有整數。
該密碼體系是目前最廣泛使用的一種非對稱密碼方案,在實際中常用於以下幾個方面:
這裡必須要注意,rsa加密並不是為了取代對稱密碼,因為它非常慢。利用rsa通常是用於安全地交換對稱密碼體系中的金鑰。所以rsa通常與對稱密碼一起使用。
rsa的加密與解密都是在整數環\(z_m\)內完成的,模計算發揮了核心作用。
使用公鑰進行加密和使用金鑰進行解密的方法可以表示為如下:
給定公鑰\((n, e) = k_\)和明文\(x\),則加密函式為:
\[y = e_}(x) \equiv x^e\ mod\ n
\]其中,\(x, y \in z_n\)
給定私鑰\(d = k_\)及密文\(y\),則解密函式為:
\[x = d_}(y) = y^d\ mod\ n
\]其中,\(x, y \in z_n\)
由於攻擊者可以得到公鑰,所以,對於給定公鑰值e和n,確定私鑰d在計算上必須是不可行的。
由於x只是唯一地取決於模數n的大小,所以一次rsa加密的位數不能超過l,其中l指的是n的位長度。
計算\(x^e\ mod\ n\)和\(y^d\ mod\ n\)應該相對簡單(快速計算長整數的指數方法)
給定乙個n應該對應很多金鑰/公鑰對,否則,不可抵禦暴力攻擊
選擇兩個大素數p和q
計算\(n = p \cdot q\)
計算\(\phi(n) = (p - 1)(q - 1)\)
選擇滿足以下條件的公開指數, \(e \in \\) $$gcd(e, \phi(n)) = 1$$
計算滿足以下條件的私鑰d $$d \cdot e \equiv 1\ mod\ \phi(n)$$
分組密碼體制
分組密碼是將明文訊息編碼表示後的數字序列劃分成長為n的組,每個組 可稱為長度為n的向量 分別在金鑰控制下變換成等長的輸出數字序列。其加密函式e v n k v m。其中v n和v m分別為n維和m維的向量空間,k為金鑰空間。它與流密碼不同之處在於輸出的每一位數字不是只與相應時刻輸入的明文數字有關,而...
對稱金鑰密碼體制和公開金鑰密碼體制
一 對稱金鑰密碼體制 資料加密標準 des 是對稱分組密碼體制,它的金鑰長度為64位,實際金鑰長度即主金鑰為56位,用於生成每輪加密迴圈體制的金鑰,將64位明文加密為64位暗文。加密迴圈體制位數為16位,從k1,k2.k16,解密過程與之相反,從k16.k1,des的加密金鑰與解密金鑰相同,屬於對稱...
古典密碼 單錶密碼體制
如果明文中不同的位置的同一明文本母在密文中對應的密文字母相同,則稱其為單錶密碼體制。代表性的單錶密碼 1.移位或加法密碼 2.乘數或乘法密碼 3.仿射密碼 4.金鑰短語密碼 下面分別舉乙個例子 1.加法密碼演算法 p c k zm zm ek x x k mod m y c dk y y k mod...