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