经过身份验证的加密和OpenSSL密钥

时间:2018-05-30 21:56:27

标签: openssl cryptography aes

所以主要问题是“我可以使用经过身份验证的加密存储OpenSSL私钥(特别是RSA私钥)吗?”。

OpenSSL支持各种各样的密钥加密选项,但似乎其中许多只支持输出,而不是输入。例如,openssl genrsa -aes256工作正常,并创建一个可以解密并稍后使用的密钥(但使用的是CBC模式),但如果执行openssl genrsa -aes-256-gcm,则OpenSSL无法使用生成的密钥。确切的错误消息似乎因版本而异,最新的1.1.0h给出:

root@cb772d20894d:/# openssl genrsa -aes-256-gcm | openssl rsa
Generating RSA private key, 2048 bit long modulus
.................................................+++
................................................+++
e is 65537 (0x010001)
Enter pass phrase:
Verifying - Enter pass phrase:
Enter pass phrase:
unable to load Private Key
139772421357760:error:0906A065:PEM routines:PEM_do_header:bad decrypt:../crypto/pem/pem_lib.c:445:

虽然旧版本甚至没有达到以下目的:

140678952371864:error:0906B072:PEM routines:PEM_get_EVP_CIPHER_INFO:unsupported encryption:pem_lib.c:544:

aes-256-ocbaes-256-ccm显示相同的错误。我认为这是所有可用的经过身份验证的密码?也许我在OpenSSL的某个地方错过了一个选项来允许这个?

2 个答案:

答案 0 :(得分:0)

通过OpenSSL代码的一些消息显示,EVP密钥加密层并不了解auth标签,所以它们只是被抛弃而不是像人们期望的那样与IV一起存储。因此,目前没有AEAD密码可以与密钥加密系统一起使用。

答案 1 :(得分:0)

OpenSSL维护摘要算法和密码的内部表。 1.1版之前的,我们需要对该表进行显式初始化或取消初始化。因此,为了添加所有算法,您需要调用OpenSSL_add_all_algorithms()(它将把所有算法添加到表中(摘要和密码))。这样可以解决您不支持的加密错误。

注意:确保调用EVP_cleanup()从表中删除所有密码和摘要。