真题里有一题是这样的:
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就是你求出来的值。