RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,在密钥长度足够长的时候“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。在公开密钥密码体制中,加密密钥(即公开密钥,简称公钥)PK是公开信息,而解密密钥(即秘密密钥,简称私钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。
信息具有时效性,假如你获得了某同桌所接收到的密文信息,辛苦一周破译出来上面的信息是“今晚机房钥匙会插在门上,想去刷题可以自己随便去。”,这个信息对于你来说没有价值,因为机房钥匙可能早就不在门上了。
RSA公开密钥密码体制是一种使用不同的加密密钥与解密密钥,在密钥长度足够长的时候“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制。在公开密钥密码体制中,加密密钥(即公开密钥,简称公钥)PK是公开信息,而解密密钥(即秘密密钥,简称私钥)SK是需要保密的。加密算法E和解密算法D也都是公开的。
信息具有时效性,假如你获得了某同桌所接收到的密文信息,辛苦一周破译出来上面的信息是“今晚机房钥匙会插在门上,想去刷题可以自己随便去。”,这个信息对于你来说没有价值,因为机房钥匙可能早就不在门上了。
公开密钥密码体制中虽然解密密钥SK是由公开密钥PK决定的,但密钥长度足够长的时候却不能在有意义的时间内根据PK计算出SK。
基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。外界任何一个人都可以使用该公钥对信息加密,该密文只有拥有保密密钥的人才可以有能力短 时间内解密。为提高保密强度,RSA密钥一般至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式。
RSA是被研究得最广泛的公钥算法,从提出到现在已近三十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。1983年麻省理工学院在美国为RSA算法申请了专利。
RSA具体流程如下(mod表示整除求余,相当于C/C++语言当中的%):
1. 随机选择两个不相等的质数p和q。
2. 计算$$n=p*q$$。
3. 选择一个整数$$e$$,使得$$e$$和$$(p-1)(q-1)$$互质。
4. 找出正整数$$d$$,使得$$(e*d) mod ((p-1)*(q-1)) = 1$$
5. 公开$$(e,n)$$作为RSA公钥。
6. 保留$$(d,n)$$作为RSA私钥。
将明文m看成是一个正整数,任何人知道公钥后可以按下面的公式进行加密得到密文c: $$c=m^e\ mod \ n$$
拥有保密密钥的人按下面的公式进行解密: $$m=c^d\ mod \ n$$
举例说明:取两个素数$$p=7,\ q=13$$,再取$$e=5$$,可以计算出一对密钥: $$p=7, \ q=13,\ n=91,\ e=5, \ d=29,\
(n,e)=(91,5),\ (n,d)=(91,29)$$
以数据加密为例:
A向B发送机密数据信息m=15,并已知B的公钥(n,e)=(91,5),于是可计算出密文:
$$c = m^e \ mod \ n = 71$$
A将c发送至B, B利用私钥(n,d)=(91,29)对c进行解密:
$$m = c^d \ mod \ n = 15$$
显然,上述关于RSA的描述大部分来源于网络...
真正的问题来了:不懂RSA原理和使用条件的彼得同学对外发布了他的公钥(e,n)=(10931, 17113),小白截获了彼得收到的N个密文信息,请求你帮助其破译出明文。
### 输入格式:
第一行一个整数N,表示小白截获的密文数量,接下来每行一个正整数m表示一个密文信息。
### 输出格式:
输出N行,每行一个整数,表示对应的明文信息。
### 输入样例:
in
1
1
### 输出样例:
out
1
答案:若无答案欢迎评论
计算出每个明文对应的密文,反过来查表
也可以枚举出p,q和d再解题。
P=157,q=109,e=10931,d=16139
信息具有时效性,假如你获得了某同桌所接收到的密文信息,辛苦一周破译出来上面的信息是“今晚机房钥匙会插在门上,想去刷题可以自己随便去。”,这个信息对于你来说没有价值,因为机房钥匙可能早就不在门上了。
公开密钥密码体制中虽然解密密钥SK是由公开密钥PK决定的,但密钥长度足够长的时候却不能在有意义的时间内根据PK计算出SK。
基于这种理论,1978年出现了著名的RSA算法,它通常是先生成一对RSA密钥,其中之一是保密密钥,由用户保存;另一个为公开密钥,可对外公开,甚至可在网络服务器中注册。外界任何一个人都可以使用该公钥对信息加密,该密文只有拥有保密密钥的人才可以有能力短 时间内解密。为提高保密强度,RSA密钥一般至少为500位长,一般推荐使用1024位。这就使加密的计算量很大。为减少计算量,在传送信息时,常采用传统加密方法与公开密钥加密方法相结合的方式。
RSA是被研究得最广泛的公钥算法,从提出到现在已近三十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一。1983年麻省理工学院在美国为RSA算法申请了专利。
RSA具体流程如下(mod表示整除求余,相当于C/C++语言当中的%):
1. 随机选择两个不相等的质数p和q。
2. 计算$$n=p*q$$。
3. 选择一个整数$$e$$,使得$$e$$和$$(p-1)(q-1)$$互质。
4. 找出正整数$$d$$,使得$$(e*d) mod ((p-1)*(q-1)) = 1$$
5. 公开$$(e,n)$$作为RSA公钥。
6. 保留$$(d,n)$$作为RSA私钥。
将明文m看成是一个正整数,任何人知道公钥后可以按下面的公式进行加密得到密文c: $$c=m^e\ mod \ n$$
拥有保密密钥的人按下面的公式进行解密: $$m=c^d\ mod \ n$$
举例说明:取两个素数$$p=7,\ q=13$$,再取$$e=5$$,可以计算出一对密钥: $$p=7, \ q=13,\ n=91,\ e=5, \ d=29,\
(n,e)=(91,5),\ (n,d)=(91,29)$$
以数据加密为例:
A向B发送机密数据信息m=15,并已知B的公钥(n,e)=(91,5),于是可计算出密文:
$$c = m^e \ mod \ n = 71$$
A将c发送至B, B利用私钥(n,d)=(91,29)对c进行解密:
$$m = c^d \ mod \ n = 15$$
显然,上述关于RSA的描述大部分来源于网络...
真正的问题来了:不懂RSA原理和使用条件的彼得同学对外发布了他的公钥(e,n)=(10931, 17113),小白截获了彼得收到的N个密文信息,请求你帮助其破译出明文。
### 输入格式:
第一行一个整数N,表示小白截获的密文数量,接下来每行一个正整数m表示一个密文信息。
### 输出格式:
输出N行,每行一个整数,表示对应的明文信息。
### 输入样例:
in
1
1
### 输出样例:
out
1
答案:若无答案欢迎评论
计算出每个明文对应的密文,反过来查表
也可以枚举出p,q和d再解题。
P=157,q=109,e=10931,d=16139