實驗介紹:
一個金鑰(公鑰)是公開的,另一個金鑰(私鑰)必須保密,且由公鑰求解私鑰的計算是不可行的。
RSA
1選取質數p和q(pq不可公開)
2計算n=pq,φ(n)=(p-1)(q-1)
3隨機選取整數e作為公鑰,要求1<e<φ(n),e和φ(n)互質
如果不互質,就沒有逆元,算不出私鑰。
4計算私鑰d,怎麼計算呢,使用歐幾里得演算法先算出e在φ(n)下的逆元,再求e逆元在modφ(n)下的值。
舉例:p=43,q=59,n=pq=43x59=2537.
φ(n)=(p-1)(q-1)=42x58=2436
選取e=13,滿足1<e<φ(n),e和φ(n)互質,ed=1modφ(n)
d=937
加密
解密
私信發python程式碼
二:RSA數字簽名
在一般加密的情況下,公鑰和私鑰密碼對用的是接受方的。
在RSA數字簽名的情況下,加密用的是私鑰,作為身份的證明。解密使用的是公鑰。
三:RSA安全
共模攻擊
前提:n相同,公鑰不同,公鑰1和公鑰2互質。
使用不同公鑰加密了同一條內容。
密文分別為
低指數攻擊
加密的金鑰e不能小。
p-1和 q-1都應有大的素數因子
防範措施
(1)金鑰長度
2048bit
(2)引數選擇
p和q的長度相差不能太大
p和q的差值不應太小
gcd(p-1,q-1)應儘可能小