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



所以主要问题是"我可以使用经过身份验证的加密存储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中的某个地方错过了一个允许这样做的选项?

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

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

一些通过OpenSSL代码的探索显示,EVP密钥加密层不理解身份验证标签,因此它们只是被丢弃,而不是像人们期望的那样与IV一起存储。因此,目前没有 AEAD 密码适用于密钥加密系统。

最新更新