信息安全工程師,rsa算法機制示例

真題裏有一題是這樣的:

2016年下半年信息安全工程師上午綜合知識解析:

66、設在RSA的公鑰密碼體制中,公鑰爲(c,n)=(13,35),則私鑰爲()

A、11

B、13

C、15

D、17

這題答案是B。但是對於一個離散數學都沒有學過的人,真的是很費解。花了很久才弄懂了一些。下面整理出來。

------------------------------------------------------------------------

先看基礎知識:

首先要理清楚涉及的幾個變量:n ,p,q,e,d,還要理解 歐拉函數,逆元,素數(質數)這些概念。

這裏涉及逆元的概念,我感覺不涉及 本原元的概念。別扯遠了。

下面的圖是教程上rsa的密碼體制:

 

然後對照題目,這裏 n=35,然後找p和q,這裏就是5和7,(p和q要互質)

然後算35的歐拉函數是(5-1)*(7-1)=24  

(這裏要注意理解歐拉函數的含義,不理解的去查資料。爲什麼是都減1然後相乘呢,這是個公示,你去查一下就知道了)

然後涉及逆元的概念,比如 a*b除以24的餘數是1,即a*b= 1 mod 24,這時候a和b互爲逆元。

也就是說 a*b = 1 + 24*k , 其中k是整數,k可能是正整數,k也可能是負整數。

然後,隨便選一個正整數e,這個e要在 1<e<24之間,比如這裏選e=13, 這裏e和24要互質。

好了接下來就是要就求d:其中d滿足 13*d = 1 mod 24,  

這裏算出來d=13, 所以選B。

 

 

首先說一下我怎麼算d的。我自己寫了一個函數,用的C++寫的:


    int e = 13;
    int n = 24;
    for (int d = -100; d < 100 ; ++d) {

        int count = (1-d*e)/n;
        if(d*e+count*n == 1)
            cout<<d<<" * "<<e<<" + "<<count<<" * "<<n<<" =1"<<endl;
    }

然後打印出來很多結果:

-83 * 13 + 45 * 24 =1
-59 * 13 + 32 * 24 =1
-35 * 13 + 19 * 24 =1
-11 * 13 + 6 * 24 =1
13 * 13 + -7 * 24 =1  ////選的這個
37 * 13 + -20 * 24 =1
61 * 13 + -33 * 24 =1
85 * 13 + -46 * 24 =1

 

還要補一個圖:

我懷疑題目寫錯了,公鑰應該是(e,n),密鑰應該是(d,n),然後這道題裏,

公鑰爲(c,n)=(13,35)是不是要改爲公鑰爲(e,n)=(13,35),

從題設裏知道e選的是13,13和24互質,是可以的

然後 d就是你求出來的值。

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章