我今天一直在研究RSA算法的概念,这就是我所理解的。
n
(将用作公共模数)n
变量上使用Euler的totient函数,并定义一个新变量phi
。e
,条件是它必须是小奇数不与我们的phi
变量共享因子。私钥d
由此公式生成:
或d = (k * (phi(n)) + 1) / e
。
我们用变量替换变量并获取私钥:
或d = (2 * (3016) + 1) / 3 = 2011
我们替换 -
k
2
(据我所知k
必须大于0且小于phi(n)
)
phi(n)
与3016
(因为p1 * p2 = 3127
,因为结果
是一个素数,我们使用p1
和p2
轻松获得其phi。 (phi(n) = (p1-1) * (p2-1)
)
e
带3
的指数(因为它与3016不共享任何因子而且是奇数)之后我们可以分享我们的e
和n
,因为计算机需要数十年才能从大n
获取私钥。
我们的通信器将消息编码到十六进制中,然后将其转换为base10整数。 Communicator还可以添加随机整数填充以进行保护。
当消息变为数字时,将对其执行模幂运算:
[![在此处输入图像说明] [3]] [3]
因此,如果数字中的消息为89,如果我们对其进行模幂运算,我们将得到:
如果我们的通讯员向我们发送1394
加密89
(89^3 * mod(59 * 53) = 1394
),我们如何使用我们的私钥自动解密此邮件?是否有一些必须使用的特定配方?
非常感谢你阅读。
答案 0 :(得分:1)
鉴于:p = 53
,q = 59
,e = 3
。
n
= p * q
= 3127
。phi(n)
= (p-1) * (q-1)
= 3016
。lambda
= LCM(p-1, q-1)
= 1508
。dPhi
= ModInverse(e, phi(n))
= ModInverse(3, 3016)
= 2011
。dLambda
= ModInverse(e, lambda)
= ModInverse(3, 1508)
= 503
。dp
= dLambda % (q - 1)
= 503 % 58
= 35
。dq
= dLambda % (p - 1)
= 503 % 52
= 39
。inverseQ
= ModInverse(q, p)
= ModInverse(59, 53)
= 9
。(https://en.wikipedia.org/wiki/Modular_multiplicative_inverse和https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm用于制作ModInverse
)
请注意,dLambda
小于dPhi
。虽然最初的RSA论文使用基于phi
的模型,但后来它被简化为基于LCM的模型。由于(p-1)
和(q-1)
均为偶数(因为p
和q
是素数!= 2
)lambda
最多为phi / 2
1}},为反向创建一个小得多的模块化空间。
因此,假设我们正在进行原始/未填充RSA(因为此密钥太小而无法使用填充RSA):
鉴于:m = 89
。
c
= m^e % n
= 89^3 % 3127
= 704969 % 3127
= 1394
。
m
= c^d % n
= 1394^503 % 3127
= 3.666e1581 % 3127
= ???。
相反,我们转到https://en.wikipedia.org/wiki/Modular_exponentiation。
m
= ModPow(1394, 503, 3127)
=> ModPow(1394, 0b0001_1111_0111, 3127)
:
1
,基数:(1394%3127)= 1394
,指数:0b0001_1111_0111
1394
,基数:(1394 * 1394)%3127 = 1943236%3127 = 1369
,指数:0b0000_1111_1011
916
,基数:(1369 * 1369)%3127 = 1874161%3127 = 1088
,e:0b0111_1101
2222
,基数:(1088 * 1088)%3127 = 1183744%3127 = 1738
,e:0b0011_1110
2222
,base:(1738 * 1738)%3127 = 3020644%3127 = 3089
,e:0b0001_1111
3120
,基数:(3089 * 3089)%3127 = 9541921%3127 = 1444
,e:0b0000_1111
2400
,基数:(1444 * 1444)%3127 = 2085136%3127 = 2554
,e:0b0111
680
,基数:(2554 * 2554)%3127 = 6522916%3127 = 3121,电子邮件:0b0011
2174
,基数:(3121 * 3121)%3127 = 9740641%3127 = 36
,e:0b0001
89
,基数:(36 * 36)%3127 = 1296%3127 = 1296
,e:0b0000
89