擴展歐幾里得算法(求逆元)總結


1、在RSA算法生成私鑰的過程中涉及到了擴展歐幾里得算法(簡稱exgcd),用來求解模的逆元。

 

2、首先引入逆元的概念:

逆元是模運算中的一個概念,我們通常說 A 是 B 模 C 的逆元,實際上是指 A * B = 1 mod C,也就是說 A 與 B 的乘積模 C 的余數為 1。可表示為 A = B^(-1) mod C。

打個比方,7 模 11 的逆元,即:7^(-1) mod 11 = 8,這是因為 7 × 8 = 5 × 11 + 1,所以說 7 模 11 的逆元是 8。

 

3、在RSA算法中求私鑰中的整數d時,需要使得 (e * d ) % m = 1,該方程等價於 e * d = 1 + y * m (y為整數),也等價於 e * d - y * m = 1。

因此求解d的過程就是求解該二元一次方程組(e和m已知,求解d),即求e模m的逆元。

 

4、在使用擴展歐幾里德算法求解e模m的逆元前,首先通過證明擴展歐幾里得算法來對該算法有一個簡單的理解:

引理:存在 x , y 使得 gcd(a,b)=ax+by

證明:

        當 b=0 時,gcd(a,b)=a,此時 x=1 , y=0

        當 b!=0 時,

     設 ax1+by1=gcd(a,b)=gcd(b,a%b)=bx2+(a%b)y2

        又因 a%b=a-a/b*b

        則 ax1+by1=bx2+(a-a/b*b)y2

    ax1+by1=bx2+ay2-a/b*by2

    ax1+by1=ay2+bx2-b*a/b*y2

    ax1+by1=ay2+b(x2-a/b*y2)

   解得 x1=y2 , y1=x2-a/b*y2

   因為當 b=0 時存在 x , y 為最后一組解

   而每一組的解可根據后一組得到

   所以第一組的解 x , y 必然存在

   得證

根據上面的證明,在實現的時候采用遞歸做法

先遞歸進入下一層,等到到達最后一層即 b=0 時就返回x=1 , y=0

再根據 x1=y2 , y1=x2-a/b*y2 ( x2 與 y2 為下一層的 x 與 y ) 得到當層的解

不斷算出當層的解並返回,最終返回至第一層,得到原解

 

5、使用擴展歐幾里德算法的過程如下:

求exgcd(e, m)—>利用歐幾里得算法不斷遞歸直到x=1,y=0—>反向遞歸求出第一層的x和y,x即為e模m的逆元。

 

參考文檔:

1)https://www.jianshu.com/p/fbb8bf7baa97

2)https://www.cnblogs.com/shuaihui520/p/8954788.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM