认证加密和OpenSSL密钥

认证加密和OpenSSL密钥,openssl,cryptography,aes,Openssl,Cryptography,Aes,因此,主要的问题是我是否可以使用经过身份验证的加密存储OpenSSL私钥,特别是RSA私钥 OpenSSL支持各种各样的密钥加密选项,但是它们中的许多似乎只支持作为输出,而不支持作为输入。例如,openssl genrsa-aes256工作正常,创建了一个密钥,您可以在以后解密和使用,但使用CBC模式,但是如果您使用openssl genrsa-aes-256-gcm,则生成的密钥将无法由openssl使用。确切的错误消息因版本而异,最新的1.1.0h提供: root@cb772d20894d:

因此,主要的问题是我是否可以使用经过身份验证的加密存储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-ocb和aes-256-ccm显示了相同的错误。我想这就是所有可用的认证密码?也许我错过了OpenSSL中的某个选项来实现这一点?

一些对OpenSSL代码的探索揭示了EVP密钥加密层不理解auth标记,因此它们只是被扔掉,而不是像人们所期望的那样与IV一起存储。因此,目前没有AEAD密码可用于密钥加密系统。

OpenSSL维护一个摘要算法和密码的内部表。在版本1.1之前,我们需要明确初始化或取消初始化此表。因此,为了添加所有算法,您需要调用OpenSSL_add_all_algorithms,它将所有算法添加到表摘要和密码中。这将解决不支持的加密错误


注意:请确保调用EVP_cleanup以删除表中的所有密码和摘要。

使用带有OpenSSL的CL中的GCM模式将被破坏。您也不能使用带有OpenSSL的GCM模式加密任意数据。您最好自己手动加密它。不确定这是否相关,如果您喜欢在OpenSSL命令行工具中,这是一个bug或限制。