1

我的系统包括一个硬件安全模块(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)?

4

1 回答 1

0

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

于 2021-04-19T05:42:30.260 回答