题目分析
看到题目后,就知道这题和what’s RSA类似,但不同之处是这题给出的是一个公钥和加密文件。
思路有两种,一种是使用私钥进行加密,直接使用公钥进行解密即可;另一种是公钥加密,需要使用私钥进行解密,所以这种情况需要从公钥推导出私钥。
解题过程
首先尝试第一种情况,直接使用公钥对此文件进行解密。然而给出提示说需要私钥。
所以考虑第二种情况,首先需要将公钥内容打开;
rsa -in pubkey.pem -pubin -out pubkey.txt -text
得到public.txt的文件,打开后得到公钥的内容。
从公钥推导到私钥
RSA的原理
-
选择两个大的质数p、q,且这两个质数互不相等;
-
计算模 n = p q,n 的二进制的位数就是密钥的长度;
-
根据欧拉函数φ(n) = (p-1) (q-1),在1 和 φ(n)中间随机选择一个整数 e,e与φ(n)互为质数;
-
计算e对于φ(n)的模反元素d:e d ≡ 1 (mod φ(n)) 等价于 e d - 1 = k * φ(n),已知φ(n)、e,那么通过”扩展欧几里得算法”得出d 和 k。由此可以得到公钥和私钥。
推导的思想:
从公钥的内容中可以知道n,现在只需要知道d是什么,以及p、q的多种可能。
这里我们可以使用两个工具,一个是yafu-x64.exe,另一个是RSA-Tool。
使用yafu可以把n分解为p和q,,然后再使用RSA-tool得到d,最后就可以生成private.pem。
由public.txt中得到n的十进制为
87924348264132406875276140514499937145050893665602592992418171647042491658461
使用yafu得到p和q
使用RSA-Tool得到d
想通过p、q、n、e、d来推导出私钥,但是脚本运行错误,明天继续解决。