信息安全工程师,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就是你求出来的值。

 

 


 

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