代码之家  ›  专栏  ›  技术社区  ›  coderanger

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

  •  0
  • coderanger  · 技术社区  · 7 年前

    所以主要的问题是“我可以使用经过身份验证的加密来存储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中允许这样做的选项?

    2 回复  |  直到 7 年前
        1
  •  0
  •   coderanger    7 年前

    一些在openssl代码中的代码显示evp密钥加密层不理解auth标记,因此它们只是被丢弃,而不是像人们所期望的那样与iv一起存储。因此,此时没有AEAD密码可以与密钥加密系统一起工作。

        2
  •  0
  •   anothernode David Joel Lukombo    7 年前

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

    注意:一定要打电话给 EVP_cleanup() 从表中删除所有密码和摘要。

    推荐文章