TPM 和私钥保护

TPM and private key protection

假设我在 Powershell 中创建了一个自签名证书,如下所示:

New-SelfSignedCertificate -Provider "Microsoft Platform Crypto Provider" -Subject "CN=foobar" -KeyExportPolicy NonExportable -KeyAlgorithm RSA  -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My" -NotAfter $((Get-Date).AddYears(10))  

证书的预期用途是对 powershell 脚本进行代码签名。

由于提供商是 MS platform crypto provider,因此密钥将由我主板中嵌入的可信平台模块 (TPM) 芯片生成。

因此,私钥现在存储在 "black-box" TPM 中。那么是否需要包装/密码保护私钥?

任何由 TPM 创建的密钥都已经被包装,通过:

  • TPM 1.2 的存储根密钥,或
  • 指示为 TPM 2 密钥父项的主密钥之一

所以在创建密钥时,密钥被其中一个根密钥包裹,您无需执行任何特殊操作即可实现。事实上,你不可能不会发生。

TPM 规范保证根密钥本身永远不会离开 TPM。如果您想保证新生成的密钥也永远不会离开 TPM,请将其设置为不可迁移。

此外,您还可以对上述任何密钥进行密码保护。是否这样做取决于您的具体要求。但是请记住,TPM 规范并不侧重于防止物理攻击,因此如果您失去对计算机的物理访问权限,您可能应该认为它已受到损害。