这取决于加密算法以及您所说的公钥/私钥。有时,与磁盘或网络上的序列化相比,可以使用不同大小的 RAM。
RSA
RSA 公钥由一个模数组成n
和一个公共指数e
。我们通常选择一个较小的值e
(3 或 65537 很常见)。的大小e
对安全影响不大。自从e
通常小于四个字节并且n
超过一百,总尺寸以模数为主。如果你真的愿意,你可以修复e
作为协议规范的一部分,因此只有n
储藏。
RSA 私钥可以用不同的形式表示,但通常我们存储值p
, q
, dp
, dq
, e
, d
, n
, InvQ
。它们的总大小大于公钥。其中大多数并不是严格必需的,但使用它们而不是重新生成它们会很方便。重新生成所有给定的e
, p
and q
是直截了当的。
当我们在 RSA 上下文中谈论密钥大小时,我们总是指模数的大小,而忽略所有其他元素。这是一个有用的约定,因为这是影响安全性的唯一值。典型尺寸为n
是2048位。
有限域加密(Diffie-Hellman、DSA 等)
私钥是安全级别大小两倍的标量。典型值为 256 位。
公钥是一个群元素,它比私钥大得多。典型值为 2048 位。
因此,对于有限域加密,公钥比私钥大得多。
椭圆曲线
私钥是安全级别大小两倍的标量。典型值为 256 位。这部分与有限域加密相同。
公钥是一个组元素。序列化此类元素有两种形式。压缩形式比私钥稍大(最多几个位)。未压缩的形式大约是私钥大小的两倍。压缩形式的典型值为 256 位,未压缩形式的典型值为 512 位。
私钥作为种子
当您自己生成公钥/私钥对时,您始终可以将它们存储为 PRNG 的种子。这样,无论您使用哪种方案,它们都非常小,只有 160 位左右。这样做的缺点是重新生成私钥的自然形式可能会很昂贵。要求创建密钥对的方法保持不变。
公钥指纹
您通常可以只存储指纹(大小约为 160 位),而不是存储完整的公钥。这样做的缺点是它增加了消息/签名的大小。
Summary
对于某些算法,公钥和私钥的大小是相同的,对于某些算法,它们是不同的,并且通常可以以一定的成本(解压时间或消息大小)来压缩其中一个或两个。