Crypto:RSA相关知识点

Posted by SGQ on March 28, 2020

前言:

昨天完成了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加密解密

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