如何使用 OpenSSL EVP API 中的密钥索引进行加密/解密?

发布时间:2021-03-08 04:24

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

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

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

我知道 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)?

回答1

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

evp-cipher 相关推荐