【问题标题】:How to encrypt/decrypt using key index in OpenSSL EVP APIs?如何使用 OpenSSL EVP API 中的密钥索引加密/解密?
【发布时间】:2021-06-06 00:10:46
【问题描述】:

我的系统包含一个硬件安全模块 (HSM),它将对称/非对称密钥导入其内部存储器,然后为外部用户提供密钥索引以供将来使用(加密/解密)。

我现在正在为此 HSM 编写一个 OpenSSL 引擎,预计应用程序将通过 OpenSSL EVP API 调用该引擎。

应用程序级代码(C语言)通过EVP API函数调用加密服务(例如通过存储在HSM中的用户密码加密)的正确方法是什么,只需在参数中提供密钥索引,而不是密钥本身?

我知道 EVP 和引擎 API 为开发人员提供了一些“控制功能”,但它们似乎用于命令行参数。我想知道在库使用中使用它们传递键索引是否是正确的方法。

更新:

我现在正在尝试使用 EVP_CIPHER 中的 ctrl 函数将密钥导入 HSM。

我想知道哪个更好,在“init_ex”步骤(在 EVP_CIPHER->init 中调用 ctrl)或在“do_cipher”步骤(使用EVP_CIPHER_CTX_set_app_data 在 do_cipher 之前将密钥传递给 app_data,然后在 do_cipher 中调用 ctrl)?

【问题讨论】:

    标签: c openssl hsm evp-cipher openssl-engine


    【解决方案1】:

    最后我决定使用 EVP_CIPHER_CTX 中的 cipher_data 来存储与密钥索引相关的所有内容。因为我发现app_data和cipher_data没有区别,如果我用自己的实现来做所有的初始化和enc/decryption,而不是openssl的内置方法。

    【讨论】:

      猜你喜欢
      • 2021-03-17
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 2012-04-07
      • 2018-09-14
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多