DPAPI 与存储在 TPM 中的密钥

DPAPI with Keys Stored in the TPM

提问人:MartinS 提问时间:4/16/2023 最后编辑:MartinS 更新时间:4/18/2023 访问量:409

问:

Windows 上的 DPAPI 提供了用于加密和解密任意数据的函数。DPAPI 提供的函数包括 、 和 。我怀疑函数和 ntsecapi.h 也使用 DPAPI,尽管文档中没有说明。CryptProtectMemoryCryptUnprotectMemoryCryptProtectDataCryptUnprotectDataRtlEncryptMemoryRtlDecryptMemory

过去,加密密钥的安全性显然是基于用户的凭据[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

不幸的是,这些信息要么已经过时,要么过于笼统而没有用处。

Windows 安全 WinAPI TPM DPAPI

评论

0赞 Simon Mourier 4/16/2023
DPAPI 算法和 CSP 可配置 passcape.com/...。默认情况下,它将使用 MS_STRONG_PROV但如果你指定了不知道的算法MS_STRONG_PROV则可以强制它使用另一个 CSP。但这仅适用于加密和MAC计算,它不会改变其基本工作方式。它不会将数据存储在其他地方,而是存储在磁盘上。
0赞 MartinS 4/16/2023
谢谢@SimonMourier!因此,如果我理解正确,我可能会成功地迫使它改变它正在使用的算法,但密钥将始终存储在 RAM/HDD 中,如论文中所述?
0赞 Simon Mourier 4/16/2023
不仅是密钥,还有完整数据(blob 等)至于 CryptProtectMemory,它完全不同,它不存储 blob。
0赞 MartinS 4/16/2023
去吧。您知道 CNG DPAPI 是否也是如此吗?
0赞 Simon Mourier 4/16/2023
我不知道,但当你阅读它时,它是为“在一台计算机上加密的内容在另一台计算机上解密”而设计的。它可能使用 TPM 来生成 MAC/随机/密钥等,但我认为其中不能存储任何东西。

答:

-1赞 Jeaninez - MSFT 4/17/2023 #1

CNG DPAPI 由两个函数和 .受信任的平台模块 (TPM) 技术旨在提供基于硬件的安全相关功能,主要涉及加密密钥。CryptProtectDataCryptUnprotectData

与纯软件 CNG 提供程序相比,TPM 功能提供关键保护。平台加密提供程序可以在 TPM 中创建密钥,但对其使用有限制。就我而言,为了保护密钥,您可以尝试在 TPM 中创建密钥,而不是将密钥存储在 TPM 中。

有关更多详细信息,我建议您可以参考文档:

TPM 基础知识

Windows 如何使用受信任的平台模块

评论

0赞 MartinS 4/17/2023
“CNG DPAPI 由两个函数组成,即 CryptProtectData 和 CryptUnprotectData - 这是错误的。查看 CNG DPAPI 文档,了解旧的 DPAPI 函数。CNG DPAPI 函数以CryptProtectDataCryptUnprotectDataNCrypt*
0赞 Jeaninez - MSFT 4/17/2023
DPAPI是 的一部分。 建立在 之上。 是 的长期替代品。CryptoAPIDPAPI-NGCryptography Next Generation (CNG)CNGCryptoAPI
0赞 Jeaninez - MSFT 4/21/2023
@MartinS 你有关于这个问题的任何更新吗?