如何使用 openssl genrsa 输出检查密钥生成中使用的算法

How to check the algorithm used in key generation using openssl genrsa output

请问有什么要检查的吗?

您需要加密密钥,但默认情况下并非如此。 genrsa man page 明确指出(强调我的):

-aes128|-aes192|-aes256|-aria128|-aria192|-aria256|-camellia128|-camellia192|-camellia256|-des|-des3|-idea

These options encrypt the private key with specified cipher before outputting it. If none of these options is specified no encryption is used. If encryption is used a pass phrase is prompted for if it is not supplied via the -passout argument.

这也可以从生成的 PEM 文件中看出,除了密钥本身之外没有其他信息:

$ openssl genrsa -out test-plain.key
Generating RSA private key, 2048 bit long modulus (2 primes)
...........................................................................................+++++
..........................+++++
e is 65537 (0x010001)

$ head -n 2 test-plain.key 
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA5RCtTAg3fuspy1VdZpHqrFz4Lt9p5MnZkjH0FZ9wAk9vpvRF

另一方面,如果我们指定一种加密算法应用于密钥,则会发生两件事:

  • 系统提示我输入密码(除非通过 -passout 指定)
  • 算法和分组密码模式显示在 PEM 输出中
$ openssl genrsa -out test-aes.key -aes128
Generating RSA private key, 2048 bit long modulus (2 primes)
............................................................+++++
................................+++++
e is 65537 (0x010001)
Enter pass phrase for test-aes.key: foobar
Verifying - Enter pass phrase for test-aes.key: foobar

$ head -n 3 test-aes.key 
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,ED364325F65A0F212D07BC9E643D6424

我们可以清楚地看到 AES-128-CBC 与指示的 IV 一起使用。