【发布时间】: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