cryptography - 私钥长度字节

标签 cryptography key rsa private

所以我正在生成 2048 RSA key 对。但是当我查看私钥时,长度只有 1232 字节。这与 2048 有什么关系还是 2048 只是模数大小?

最佳答案

RSA key 的大小以位表示,而不是字节。 2048 位是 256 字节。

一个简单的 RSA 私钥由两个整数组成,(一个大的复合整数,其以位为单位的长度“RSA key 长度”)和私有(private)指数(另一个大整数,通常与模数具有相同的大小)。然而,模数和私有(private)指数有一些内部结构,了解该结构的详细信息可以加快实现速度(大约是 4 倍)。因此,RSA 私钥通常包含更多数据。

即,如果模数为n并且是两个素数pq的乘积,则私钥包括:

  • 模数n(2048 位 key 为 256 字节)
  • 公共(public)指数e(很小,通常为 65537,即可以通过 3 或 4 个字节进行编码)
  • 私有(private)指数d(约256字节)
  • 因子pq(每个128字节)
  • d 减少模 p-1(128 字节)
  • d 减少模 q-1(128 字节)
  • 1/q mod p(qp 的倒数;128 字节)

总计约 1160 字节。然后编码会产生一些开销,因为所有这些整数的长度可能略有不同(例如,没有什么真正要求 pq 具有完全相同的大小;此外,e 可能大于该值)。标准结构使用 ASN.1,这意味着到处都有一些额外的字节。将结构包装成更大的结构也很常见,该结构也将 key 标识为 RSA 的 key 。 1232 字节与以 PKCS#8 格式编码的 2048 位 RSA key 兼容。

有关 RSA 的详细信息,请查看 PKCS#1 .

关于cryptography - 私钥长度字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5403808/

相关文章:

javascript - 设置值正在更改键名

javascript - 按键值过滤对象

azure - 使用 "jwks_uri"端点中的值验证从 azure ad b2c 接收的 token

c++ - 如何在cryptoki中重命名容器名称

python - 使用 MD5 的 API 签名作为 sha256 的 key

java - 如何分发具有无限强度加密的 Java 应用程序?

algorithm - RSA算法查询报文大小

php - 在 php 中使用 openssl 进行 AES-256-CBC 加密/解密十六进制字符串

r - R中的列表名称重复

python - 密码学 - 生成新的 RSA 私钥