What’s RSA
使用工具
OpenSSL
解题思路
题目给出两个文件,一个是待解的密文,另一个是解密用到的私钥,也就是解密规则。那我借助了一个开放源代码的软件库包OpenSSL,它囊括了主要的密码算法,本题用到RSA算法,直接输入命令行就可以解密。
利用rsautl命令进行私钥解密。
-decrypt:用RSA的私有密钥对输入的数据进行解密。
-in filename:需要处理的文件,默认为标准输入。
-inkey file:指定我们的私有密钥文件,格式必须是RSA私有密钥文件。
-out filename:指定输出文件名,默认为标准输出。
读取写出的文件,GET!
总结
科普RSA的来源,是三位科学家的名字Rivest Shamir Adleman的简写。
要理解整个RSA的流程,需要一些数学理论基础,比如:
互质关系:两个正整数,除1以外,再没有别的公因子。
欧拉函数:任意给定正整数n,在小于等于n的正整数之中,有多少个与n构成互质关系。而计算这个的函数就是欧拉函数,经过一系列推导可导出欧拉定理
还有一种是欧拉定理的特殊情况—费马小定理
模反元素:如果两个正整数a和n互质,那么一定可以找到整数b,使得 ab-1 被n整除。
理解这些数学理论后,尝试理解RSA的实现原理
第一步,选择两个不等质数p,q
这里我们选择 61 和53。
第二步,计算乘积n
n = p*q = 3233
第三步,计算n的欧拉函数φ(n)
φ(n) = φ(p)*φ(q)= (p-1)(q-1) = 3120 。一个质数p的欧拉函数等于p-1,用到费马小定理。
第四步,随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质。
取e = 17
第五步,计算e对于φ(n)的模反元素d。
ed -1 = kφ(n),得d = 2753
第六步,将n和e封装成公钥,n和d封装成私钥。
n = 3233,e = 17, d=2753。公钥为(3233,17),私钥为(3233,2723)
第七步,分析,私钥的获取
由六可以看出来,公钥和私钥的区别其实只是d,也就是说d的推导可以在已知n,e的情况下推导出来。
第八步,私钥(n,d)解密
(n,d) = (3233,2723) 。在拿到c = 2790之后,进行以下操作:
c^d ≡ m (mod n) 即可得到m 。
推导,m = (2790^2723) %3233 ,使用快速幂取模,可以轻松得到答案,m = 65,转换为Ascii码为a
这里RSA算法需要用到许多数学知识,做各种运算,同时我们也可以看出RSA算法下公钥和私钥在已知一些信息是可以相互推导的,通过私钥可以轻松计算出公钥,反之不行。