Answers:
您的私钥比公钥拥有更多的信息。公用密钥仅传达加密指数(e)和模数(n),而私钥还包括解密指数(d)和模数的两个质数(p和q)。私钥本质上具有一个公钥。
[加密:密文= message ^ e(mod n); 解密:消息=密文^ d(mod n)]
要查看私钥文件中的所有数据:
$ openssl rsa -in id_rsa -text -noout
编辑:私钥文件显然没有加密指数,但是它具有指数d_1和d_2,其中d_1 = d(mod p-1)和d_2 = d(mod q-1)。这些用于加快解密速度-您可以将解密乘幂拆分为较小的并行乘幂调用,对于大d和大n而言,这最终比一个大m = c ^ d(mod n)快。
不幸的是,您没有指定密钥的存储格式。我猜您指的是OpenSSH密钥编码。密钥以这种格式存储在base64编码的数据块中。根据加密时的编码,加密数据时通常会涉及某种填充。因此,结果数据是加密块大小的倍数。
OpenSSH密钥还可以包含某种注释以及在---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ----
和-----END RSA [PUBLIC|PRIVATE] KEY-----
标记之间插入的其他属性。参见RFC4716。
此外,对于公共密钥,模数和公共指数被保存,而对于私有密钥,私有指数被保存。有关数学基础的详细信息,请参见Wikipedia上的RSA密钥生成。网上有很多地方描述了这些键之间的数学联系。不知道这里是否需要这些说明的副本。
从理论上讲,可以根据公共密钥信息计算私钥,但是从数学上讲,这比其他方法要困难得多。只需将私钥视为包含所有变量的“源”,并将公钥视为计算的结果。如果您知道所有变量,但是很容易一遍又一遍地执行计算,但是仅知道结果,就很难获得所有源变量。这也是为什么足以将私钥保存在安全位置的原因。您始终可以使用私钥重新计算公钥。但不是反过来-好的,理论上您可以做到这一点,但根据密钥长度,这可能需要很多年;)。