深入分析RSA加密与解密的过程




      RSA加密和解密。假设我们有公钥(n、e),需要加密的内容是m,m是n以下的正整数。密文

c是:m^e8c(modn) c=m^emodn。使用模型指数计算,即使数字大也能立即计算。对方有私钥(n

、d),解密密文c可以得到明确的m,方法如下c^d离(m^e)^d离(modn)m=c^dmodn。

 
这里值得注意的是,明确的m是通过模n获得的,所以要求m举出具体的例子
 
 
p=61,q=53n=61x53=3233φ=lcm(p-1,q-1)=lcm(60,52)=780e=17d=413。
 
公钥:(n=3233,e=17)
 
私钥:(n=3233,d=413)
 
加密和解密函数分别为:
 
enc(m)=m^emodn。
 
dec(c)=c^dmodn。
 
如果加密的内容是1337,则可以通过python进行简单的验证
 
enc(1337)=1337**17%3233=1306。
 
dec(1306)=1306**413%3233=1337。
 
有兴趣的人可以自己试试。
 
签名和验证。
 
 
RSA算法不仅可以用于加密,还可以用于签名。签名的目的是确保发送的信息由对应私钥的

所有者发布,信息没有被篡改。公钥签名使用私钥验证,私钥签名使用公钥验证,与加密方

向相似。签名依赖的数学原理是指数的运算规则,整数h有以下几点


 
(h^e)^d=h^(e*d)=h^(d*e)=(h^d)^e^h(modn)这里的h可以是md5或sha256等我们发送的信息

的哈希值。因此,对于私钥的所有者来说,签名实际上可以用私钥加密hash。信息的接收者

收到信息和加密的hash,用发送者的钥匙解密签名,计算信息的hash,将解密的值与hash

进行比较,可以实现检查过程。
 
 
安全陷阱。
 
回顾上述秘密钥匙组成部分,有几个地方实际上有点模糊。例如,选择p、q、e的地方有一

定的主观性。只要符合条件,可以任意选择吗?事实上,在一些场景中选择不当也会导致

潜在的安全问题。质量的选择。我们知道密钥生成的第一步是选择两个足够大的质量,这

两个数量需要秘密保存,任何数量泄露都会导致质量分解的困难假设无效。那么问题来了

,多少数量够大呢?这两个数之间的关系会影响难题假设吗?对于第一个问题,我们可以

参考计算能力的增加和最近的挑战来判断。例如,YAFU工具可以在20分钟左右分解300

位的质量,如下所示
 
 
|Bits|Time|Memoryused||:|:|:|||||||128|0.486seconds|0.1MiB||192|3.9979seconds|0.5MiB||2

56|103.1746seconds|3MiB||300|1175.7826seconds|10.9MiB|截至2020年,分解的最大R

SA数量为795位,分解使用了900个CPU年的计算能力。同时,对应权威机构的建议也是

NIST和密码局等参考来源之一。根据NIST的判断,非对称加密的密钥强度与对称加密有

类似的类比关系1024位RSA密钥强度相当于80位对称密钥2048位RSA密钥强度相当于112

位对称密钥3072位RSA密钥强度相当于128位对称密钥。此外,NIST目前RSA密钥的安全

强度为2048位,建议工作到2030年后使用3072位密钥。解决了密钥长度的问题,看看p和

q以及它们的关系。判断一个数量是否为质量(数量)的方法称为素质测试。有些算法可以提

高测试速度,如启发性测试和费马素性测试,后者通常用于RSA密钥生成中快速筛选数据。
分享: