您好,登錄后才能下訂單哦!
最近了解了RSA算法的安全性的基本原理,簡單記錄一下方便以后回顧(不包含數學公式的推導以及產生大質數和求模反元素的具體算法)。
RSA加密解密的數學公式:
c=m^e%n
m=c^d%n
需要的數學條件:
滿足如下數學條件后就可以保證上面兩個公式成立(具體推導略去,純數學上的證明)
1.φ(n)是n的歐拉函數(任意給定正整數n,求在小于等于n的正整數中,有多少個與n互質的正整數)
2.e是一個小于φ(n)且與n互質的正整數
3.d是e對于φ(n)的模反元素 (ed%φ(n)==1)
RSA的使用:
1.生成兩個大質數p和q
2.通過將兩個大的質數相乘得到n作為安全系數:
n=p*q,順便得到φ(n)=φ(p*q)=(p-1)(q-1) 。因為因式分解的難度,只要n比較大,這個p和q以及φ(n)外界很難破解.
3.隨機選取e作為公鑰(通常是65537)
4.求一個d作為私鑰(使用擴展歐幾里得算法求e對于φ(n)的模反元素,顯然φ(n)對于求私鑰是必要的)
5.使用c=m^e%n對m進行加密以得到密文c,用m=c^d%n解密
或使用m=c^d%n對c進行數字簽名,用c=m^e%n來驗證簽名
RSA安全性的保證:
加密或驗證簽名所需要的公鑰和安全系數n都是公開的,而解密或數字簽名所必須的私鑰是非公開的,想要求得私鑰d(ed%φ(n)==1) 就必須得知φ(n)=φ(p*q)=(p-1)(q-1)。
而p和q是很難通過對n進行因式分解得到的,也就很難破解RSA。
(總結)RSA涉及的算法
1.產生兩個大質數的方法(準備安全系數)
2.擴展歐幾里得算法求私鑰的算法
擴展歐幾里得算法是根據兩個整數a,b求出三個整數x,y,d,其中d為a和b的最大公約數,ax+by=d
私鑰d是公鑰e對于n的歐拉函數φ(n)的模反元素(ed%φ(n)==1)
ed%φ(n)==1 得到ed-kφ(n)=1 (e和φ(n)互質,所以1是e和φ(n)的最大公約數)。
于是把e和φ(n)作為擴展歐幾里得算法的輸入,d和-k就成為一組輸出,求得了一個可能為負值的d。在d上增加φ(n)使其為正,也是可以保證ed-kφ(n)=1 (相應把k變化即可)。
擴展歐幾里得算法,一方面要求a和b的最大公約數,(被除數和除數的最大公約數,等于除數和余數的最大公約數,如此遞歸下去,直到得到的余數為0,則上一步的除數為最大公約數),一方面要求x和y。因為每次遞歸時ax+by=bx'+(a%b)y',新舊xy存在關聯關系,是可以和最小公約數一起遞歸求解的
(每次遞歸后,x=y;y=t-a/b*y;)。直到遞歸到余數為0時,此時ax+by=d中b為0,a為d,可令x為1,y為0,遞歸終止。
3.加密解密
c=m^e%n
m=c^d%n
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。