RSA加密算法是利用大整數分解耗時非常大來保證加密算法不被破譯。
密鑰的計算過程為:首先選擇兩個質數p和q,令n=p*q。
令k為n的歐拉函數,k=ϕ(n)=(p−1)(q−1)
選擇任意整數a,保證其與k互質
取整數b,使得a*b ≡1mod k
令公匙為a和n。私匙為p,q,b。
加密時算法為:
例如所發數位x,則所發過去的數據為 o = x^a mod n
解碼時將可以得到x = o^b
正確性證明(1):ϕ(n)=(p−1)(q−1) 成立的正確性
ϕ(n)表示小於n且與n互質數的個數
則小於等於n且與n非互質的數的個數為,n-ϕ(n) = n - (p-1)*(q-1) = n - (pq-q-p+1) = n-n+p+q-1 = p+q-1
所以只要證明小於等於n且與n非互質的數的個數為p+q-1即能證明ϕ(n)=(p−1)(q−1) :
這點很容易證明,由於n只有兩個素因子p,q。則所有與n非互質的數都可以寫成p*x或q*x,對於p*x來講,x的取值范圍為1<=x<=q,對q*x來講x的取值范圍為1<=x<=p,p*x與q*x的唯一交集為p*q,所以結論成立。
加密解密算法的正確性即能保證x = (x^a)^b
了解此部分正確性首先要了解群論
由a,b的描述可知b為a在模n乘法群當中的逆元,模n乘法群的規模為ϕ(n),x^imodn形成一個模n乘法群的循環子群,一個群的子群的規模必為該群的約數(證明見拉格朗日定理)