windows - 如何使用 CNG 处理明文 key ?

标签 windows encryption key plaintext cng

我有一组用于对称加密/解密的预定义明文 key 。这些 key 用于与连接到 PC 的硬件设备进行加密通信。 我想使用 CNG key 存储提供程序来安全地存储这些 key 。加密和解密必须在 CNG 之外完成。我只需要一个安全的地方来存储和检索我预定义的明文 key 。 最近几天我研究了 CNG 函数引用,但找不到任何方法将由名称标识的明文对称 key 导入/导出到 CNG key 容器中。

我知道 CryptoAPI 提供导入/导出 session key 的功能。但是这个旧 API 不提供持久( session ) key ,也无法在 key 容器中按名称选择/识别 key 。

非常感谢任何帮助。提前致谢。

最佳答案

恐怕您无法获得直接解决方案,因为 CNG key 存储提供商目前支持非对称 key 但不支持对称 key 。只有原始提供者支持对称 key 。

此模型适用于必须长期保护的非对称 key ,而对称 key 仅用于一个 session ,然后被丢弃。这些对称 key 可能源自非对称 key ,例如 Diffie-Hellman 或 ECDH。

您说您希望安全地存储 key ,但加密/解密是在 CNG 之外完成的。根据您要防御的威胁,这可能不是正确的方法。通常,如果您将 key 存储在 key 存储提供程序中,您希望在 key 存储提供程序内部完成加密操作,并且不希望 key 永远离开它(除非被另一个 key 加密),因为这会将 key Material 暴露给攻击者。

但是,如果您确定这是您想要的,一种选择是在您的 key 存储提供程序中生成一个 RSA key ,并使用它来加密和解密对称 key 。您可以将加密的对称 key blob 存储在其他地方,例如在文件系统中。

关于windows - 如何使用 CNG 处理明文 key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26739583/

相关文章:

c++ - 调试器主循环

c# - 突出显示标签 Windows 窗体

wpf - App xaml假设实例化的第一个窗口是主窗口(showdialog被忽略),我需要显示多个窗口

Java Security - RSA 公钥和私钥代码问题

javascript - 删除对象数组中的空对象键

c++ - std::map<> 的自定义键

c++ - 如何以结构体为键将值输入到映射中?

c++ - 使用 C++ 获取目录根目录

java - 获取异常 java.security.InvalidKeyException : Invalid AES key length: 29 bytes?

security - 使用 TPM2 安全地存储 key