使用 DPAPI 时使用 TPM 保护加密密钥

问题描述 投票:0回答:1

Windows上的DPAPI提供了对任意数据进行加密和解密的功能。 DPAPI提供的功能包括

CryptProtectMemory
CryptUnprotectMemory
CryptProtectData
CryptUnprotectData
。我怀疑 ntsecapi.h 中的函数
RtlEncryptMemory
RtlDecryptMemory
也使用 DPAPI,尽管文档中没有说明。

过去,加密密钥的安全性显然基于用户的凭据[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 security winapi tpm dpapi
1个回答
-1
投票

CNG DPAPI 由两个函数组成,

CryptProtectData
CryptUnprotectData
。可信平台模块(TPM)技术旨在提供基于硬件的安全相关功能,主要涉及加密密钥。

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

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

TPM 基础知识

Windows 如何使用可信平台模块

© www.soinside.com 2019 - 2024. All rights reserved.