0

Crypto:RSA相关知识点

 2 years ago
source link: https://sumsunsuns.github.io/2020/03/28/RSA/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
Crypto:RSA相关知识点 - PsgQ Blog
File failed to load: http://cdn.mathjax.org/mathjax/latest/extensions/MathMenu.js

昨天完成了201号测试的前五个阶段,发题解给学长,得到了304号测试与828号测试!当我看到这两个题目,感觉有点困难,知识点很陌生,不知道从哪先开始,于是我跑去刷了一下oj题。 今天解决了RSA1,RSA2有点思路,还没有得到结果。

1.RSA介绍

加密过程

(1)选择两个大素数p和q,计算出模数N = p * q

(2)计算φ = (p−1) * (q−1) 即N的欧拉函数,然后选择一个e (1<e<φ),且e和φ互质

(3)取e的模反数为d,计算方法: e * d ≡ 1 (mod φ)

(4)对明文A进行加密:B≡A^e (mod n) 或 B = pow(A,e,n),得到的B即为密文

(5)对密文B进行解密,A≡B^d( mod n) 或 A = pow(B,d,n),得到的A即为明文

其中:

p 和 q :大整数N的两个因子
N:大整数N,我们称之为模数
e 和 d:互为模反数的两个指数
c 和 m:分别是密文和明文,这里一般指的是一个十进制的数

(N,e):公钥

(N,d):私钥

加密分析

RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。

RSA的算法涉及三个参数,n、e、d。

(1) n是两个大质数p、q的积,n以二进制表示时所占用的位数,就是所谓的密钥长度。

(2)e和d是一对相关的值,e可以任意取,但要求e与(p-1)(q-1)互质;再选择d,要求(ed) ≡ 1(mod(p-1)×(q-1))。

令φ = (p-1)(q-1) 上式即 d * e = 1 mod φ 即:( d * e - 1)% φ = 0

(3)(n,e),(n,d)就是密钥对。其中(n,e)为公钥,(n,d)为私钥。RSA加解密的算法完全相同,设A为明文,B为密文,则:A≡B^d( mod n);B≡A^e (mod n);(公钥加密体制中,一般用公钥加密,私钥解密)

(4) e和d可以互换使用,即:

A≡B^e (mod n);B≡A^d( mod n);

2.OpenSSL使用

1.生成一个密钥:

openssl genrsa -out test.key 1024

这里-out指定生成文件的。需要注意的是这个文件包含了公钥和密钥两部分,也就是说这个文件即可用来加密也可以用来解密。后面的1024是生成密钥的长度。

2.openssl可以将这个文件中的公钥提取出来:

openssl rsa -in test.key -pubout -out test_pub.key

-in指定输入文件,-out指定提取生成公钥的文件名。至此,我们手上就有了一个公钥,一个私钥(包含公钥)。现在可以将用公钥来加密文件了。

3在目录中创建一个hello的文本文件,然后利用此前生成的公钥加密文件:

openssl rsautl -encrypt -in hello -inkey test_pub.key -pubin -out hello.en

-in指定要加密的文件,-inkey指定密钥,-pubin表明是用纯公钥文件加密,-out为加密后的文件。

4.解密文件:

openssl rsautl -decrypt -in hello.en -inkey test.key -out hello.de

题目解析:

本题给了一个加密文件,还有一个解密私钥,我们只需用到上述的第四条即可。

openssl rsautl -decrypt -in flag.encrypt -inkey rsa_private_key.pem -out flag.txt

-decrypt :进行解密。

-in flag.encrypt:对该文件进行解密。

-inkey rsa_private_key.pem:指定私钥。

-out flag.txt:将解密内容输出在flag.txt中。

总结

RSA第一题虽然简单,但需要了解的内容还是很多的,需要学会openssl的使用,以及RSA的原理。另外关于RSA第二题,有一些小思路,可能需要从公钥中提取出来n和e,再将n分解成p和q,然后再组成私钥,在进行解密。以后尝试一下!



参考链接:

从小白变RSA大神

利用openssl进行RSA加密解密

感谢您的查阅,欢迎来访!



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK