提问人:MartinS 提问时间:4/16/2023 最后编辑:MartinS 更新时间:4/18/2023 访问量:409
DPAPI 与存储在 TPM 中的密钥
DPAPI with Keys Stored in the TPM
问:
Windows 上的 DPAPI 提供了用于加密和解密任意数据的函数。DPAPI 提供的函数包括 、 和 。我怀疑函数和 ntsecapi.h 也使用 DPAPI,尽管文档中没有说明。CryptProtectMemory
CryptUnprotectMemory
CryptProtectData
CryptUnprotectData
RtlEncryptMemory
RtlDecryptMemory
过去,加密密钥的安全性显然是基于用户的凭据[1]。如果 TPM 可用,DPAPI 是否会使用它来保护其加密密钥?如果是这样,对于前面列出的哪些功能是正确的?
如果攻击者可以转储整个 RAM(例如通过 DMA),使用 DPAPI 加密的敏感数据是否会受到保护?假设攻击者在这种情况下无法访问 TPM。
[1] https://learn.microsoft.com/en-us/previous-versions/ms995355(v=msdn.10)
我尝试搜索可用的 Microsoft 文档以查找列出的所有功能、DPAPI 文档以及 Windows 如何使用 TPM(CNG 等)的文档。我还探讨了逆转DPAPI的论文,例如:https://elie.net/static/files/recovering-windows-secrets-and-efs-certificates-offline/recovering-windows-secrets-and-efs-certificates-offline-paper.pdf
不幸的是,这些信息要么已经过时,要么过于笼统而没有用处。
答:
CNG DPAPI 由两个函数和 .受信任的平台模块 (TPM) 技术旨在提供基于硬件的安全相关功能,主要涉及加密密钥。CryptProtectData
CryptUnprotectData
与纯软件 CNG 提供程序相比,TPM 功能提供关键保护。平台加密提供程序可以在 TPM 中创建密钥,但对其使用有限制。就我而言,为了保护密钥,您可以尝试在 TPM 中创建密钥,而不是将密钥存储在 TPM 中。
有关更多详细信息,我建议您可以参考文档:
评论
即 CryptProtectData 和 CryptUnprotectData
”
- 这是错误的。查看 CNG DPAPI 文档,了解旧的 DPAPI 函数。CNG DPAPI 函数以CryptProtectData
CryptUnprotectData
NCrypt*
DPAPI
是 的一部分。 建立在 之上。 是 的长期替代品。CryptoAPI
DPAPI-NG
Cryptography Next Generation (CNG)
CNG
CryptoAPI
评论