使用 AES 加密和 BASE64 编码的 SSH 私钥的大小如何小于指定大小?

使用 AES 加密和 BASE64 编码的 SSH 私钥的大小如何小于指定大小?

这对某些人来说可能是显而易见的,但我想知道,我是否使用以下命令生成了大小为 8192 的密钥:

ssh-keygen -t rsa -b 8192

使用 AES 加密和 BASE64 编码的 SSH 私钥的大小如何小于指定的 8192?

它的大小为 6446。

是否涉及一些压缩?

答案1

8192 rsa 密钥是8192位,而不是字节。即 1024 字节。

BASE64 中的编码字节大小会增加 4/3 倍:

$ echo $((1024*8/6))
1365

这接近于公钥文件中密钥的大小。

$ awk '{print $2}' rsatest.pub | wc -c
1397

当然是“私钥文件”包含(至少):

  1. m 的值(公共模数)
  2. e 的值
  3. d 的值
  4. p 的值
  5. q 的值

事实上,它包含 8 个(大和小)数字:

cat rsatest | grep -v -- ----- | tr -d '\n' | base64 -d | openssl asn1parse -inform DER

大小至少增加 4 倍,包含 6363 字节。

查看私有文件内部的其他方法是:

openssl rsa -text -in rsatest

这表明该文件包含的内容是整数

  • 模数
  • 公共指数
  • 私人指数
  • 素数1
  • 素数2
  • 指数1
  • 指数2
  • 系数

答案2

RSA 密钥长度以位而非字节为单位指定。您的位 RSA 密钥的长度模数为 8192 位,即 1024 字节。

相关内容