2014/03/01

[OpenSSL] RSA非對稱型加解密演算法

RSA為目前在電子商業網路上很常用的加解密演算法,其安全性依靠因數分解,因為對極大整數做因數分解是很困難且花時間的,一般都會採用RSA numbers來產生公鑰(Public Key)和私鑰(Private Key),目前大多採用1024bits2048bits

公鑰和私鑰的產生
1.      隨意選擇兩個大的質數pqp不等於q,計算N=p*q
2.      根據歐拉函式,求得r= φ(N) = φ(p)φ(q) = (p-1)*(q-1)
3.      選擇一個小於r的整數e,且與r互質。
4.      用以下公式計算d : d*e1 (mod(p-1)*(q-1))
5.      (N, e)為私鑰,(N, d)則為公鑰。


加密消息
假設A想傳訊消息(n)B,則A要利用私鑰(N, e)來把n加密成c,再送出給B

解密消息
B收到加密消息(c)後,利用公鑰(N, d)可以把原本的加密消息c,解密還原成n

例如:
1.      選擇(p, q) = (5, 11)N=5*11=55
2.      r=4*10=40
3.      選擇e7
4.      則計算出d23(7*23=161 mod 40 = 1)
5.      欲加密的消息n=2,則c18
6.      解密c^23=74347713614021927913318776832 mod 552

RSA整個原理關鍵在歐拉函式,由歐拉定理提到
如果na互質,則an歐拉函式值次方除以n會餘1,歐拉函數是指小於(p, q)且與(p, q)互質的數總共有幾個,意思是因為我們挑選(p, q)都為質數,質數無法因數分解,小於質數的數都會與質數互質,也就是歐拉函數值為(p-1)(q-1),因此得到下列式子
然後可以推得
兩邊乘上a
整個式子的意思是,挑選兩個數字(d, e)乘起來除以r1,可以使得a(r+1)次方除以Na。換句話說,從加密解密消息的式子來看,ne次方得到ccd次方得到n,也就是n(d*e)次方會得到n本身。
破解加密的關鍵在於所選擇的N是不是能夠被快速容易地因數分解,只要知道N是有哪兩個質數相乘,就可以推得r為多少,這樣就可以利用手上的公鑰d,推得私鑰e為多少了!

沒有留言:

張貼留言