轉發原文鏈接:RSA加密算法加密與解密過程解析
1.加密算法概述
加密算法根據內容是否可以還原分為可逆加密和非可逆加密。
可逆加密根據其加密解密是否使用的同一個密鑰而可以分為對稱加密和非對稱加密。
所謂對稱加密即是指在加密和解密時使用的是同一個密鑰:舉個簡單的例子,對一個字符串C做簡單的加密處理,對於每個字符都和A做異或,形成密文S。解密的時候再用密文S和密鑰A做異或,還原為原來的字符串C。這種加密方式有一個很大的缺點就是不安全,因為一旦加密用的密鑰泄露了之后,就可以用這個密鑰破解其他所有的密文。
非對稱加密在加密和解密過程中使用不同的密鑰,即公鑰和私鑰。公鑰用於加密,所有人都可見,私鑰用於解密,只有解密者持有。就算在一次加密過程中原文和密文發生泄漏,破解者在知道原文、密文和公鑰的情況下無法推理出私鑰,很大程度上保證了數據的安全性。
此處,我們介紹一種非常具有代表性的非對稱加密算法,RSA加密算法。RSA算法是1977年發明的,全稱是RSA Public Key System,這個Public Key就是指的公共密鑰。
2.密鑰的計算獲取過程
密鑰的計算過程為:首先選擇兩個質數p和q,令n=p*q。
令k=ϕ(n)=(p−1)(q−1),原理見4的分析
選擇任意整數d,保證其與k互質
取整數e,使得[de]k=[1]k。也就是說de=kt+1,t為某一整數。
3.RSA加密算法的使用過程
同樣以一個字符串來進行舉例,例如要對字符串the art of programming進行加密,RSA算法會提供兩個公鑰e和n,其值為兩個正整數,解密方持有一個私鑰d,然后開始加密解密過程過程。
1. 首先根據一定的規整將字符串轉換為正整數z,例如對應為0到36,轉化后形成了一個整數序列。
2. 對於每個字符對應的正整數映射值z,計算其加密值M=(N^e)%n. 其中N^e表示N的e次方。
3. 解密方收到密文后開始解密,計算解密后的值為(M^d)%n,可在此得到正整數z。
4. 根據開始設定的公共轉化規則,即可將z轉化為對應的字符,獲得明文。
4.RSA加密算法原理解析
下面分析其內在的數學原理,說到RSA加密算法就不得不說到歐拉定理。
歐拉定理(Euler’s theorem)是歐拉在證明費馬小定理的過程中,發現的一個適用性更廣的定理。
首先定義一個函數,叫做歐拉Phi函數,即ϕ(n),其中,n是一個正整數。
ϕ(n)=總數(從1到n−1,與n互質整數)
比如5,那么1,2,3,4,都與5互質。與5互質的數有4個。ϕ(5)=4
再比如6,與1,5互質,與2,3,4並不互質。因此,ϕ(6)=2
對於一個質數p來說,它和1, 2, 3, …, p – 1都互質,所以ϕ(p)=p−1。比如ϕ(7)=6,ϕ(11)=10
歐拉定理敘述如下:
歐拉定理:如果n是一個正整數,a是任意一個非0整數,且n和a互質。那么,a^ϕ(n)−1可以被n整除。
推論1:如果m和n是互質的正整數。那么,ϕ(mn)=ϕ(m)ϕ(n)
推論2:[ab]n=[[a]n[b]n]n
證明:假設a和b除以n的余數為c1,c2。a和b可以寫成a=nt1+c1,b=nt2+c2。那么,ab=n2t1t2+nt1c2+nt2c1+c1c2。因此ab除以n的余數為c1c2。即[ab]n=[a]n[b]n。
有以上定理后,由此可以推導出RSA算法的內在原理。
根據歐拉定理,對於任意z,如果z與n互質,那么:
[z^ϕ(n)]n=[z^k]n=[1]n
因此,
[z^(de)]n=[z^(kt+1)]n=[z^(kt)*z]n=[z^kt]n*[z]n= [z]n 因為[z^k]n = [1]n
上面主要使用了de=kt+1以及推論2。也就是說:
[z^(de)]n=[z]n
根據2的推論,有
([z^e]n)^d=[z]n
即d個余數相乘,因為其乘積可能大於n,所以由[ab]n=[[a]n[b]n]n,例如令a和b都為5,n為3,可知該結論
故上式可描述為[([z^e]n)^d]n=[z]n=z,就是原數字乘方求余數,然后再乘方求余數后得到原來數字的過程,得證。
公開的加密方式,私有的解密方式。RSA安全的關鍵在於很難對一個大的整數進行因子分解。
5.RSA加密的缺點
1)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。
2)安全性,RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價,而且密碼學界多數人士傾向於因子分解不是NP問題。
3)速度太慢,由於RSA 的分組長度太大,為保證安全性,n 至少也要 600 bitx以上,使運算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數量級;且隨着大數分解技術的發展,這個長度還在增加,不利於數據格式的標准化。