SSH密钥:为什么id_rsa大于id_rsa.pub?


8

我的私钥(~/.ssh/id_rsa)是一个1766字节的文件,但我的公钥(~/.ssh/id_rsa.pub)只有396字节的长度。为什么会有如此巨大的差异?是因为私钥是使用AES加密的吗?AES密文通常不是和明文一样长吗?

Answers:


17

您的私钥比公钥拥有更多的信息。公用密钥仅传达加密指数(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)快。


2

不幸的是,您没有指定密钥的存储格式。我猜您指的是OpenSSH密钥编码。密钥以这种格式存储在base64编码的数据块中。根据加密时的编码,加密数据时通常会涉及某种填充。因此,结果数据是加密块大小的倍数。

OpenSSH密钥还可以包含某种注释以及在---- BEGIN SSH2 [PUBLIC|PRIVATE] KEY ---------END RSA [PUBLIC|PRIVATE] KEY-----标记之间插入的其他属性。参见RFC4716

此外,对于公共密钥,模数和公共指数被保存,而对于私有密钥,私有指数被保存。有关数学基础的详细信息,请参见Wikipedia上的RSA密钥生成。网上有很多地方描述了这些键之间的数学联系。不知道这里是否需要这些说明的副本。

从理论上讲,可以根据公共密钥信息计算私钥,但是从数学上讲,这比其他方法要困难得多。只需将私钥视为包含所有变量的“源”,并将公钥视为计算的结果。如果您知道所有变量,但是很容易一遍又一遍地执行计算,但是仅知道结果,就很难获得所有源变量。这也是为什么足以将私钥保存在安全位置的原因。您始终可以使用私钥重新计算公钥。但不是反过来-好的,理论上您可以做到这一点,但根据密钥长度,这可能需要很多年;)。


从公钥计算私钥需要快速高效的因式分解-公钥加密(至少是RSA)的安全性所依赖的缺乏这种因子分解。
安德鲁

这是对的。找到一种快速分解算法,基本上可以破坏RSA加密的安全性。另一种选择是采用基于离散对数的困难概念的ECC(椭圆曲线密码术)。但是,如果有人找到解决此问题的有效方法……
SkyBeam 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.