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 规范并不侧重于防止物理攻击,因此如果您失去对计算机的物理访问权限,您可能应该认为它已受到损害。
假设我在 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 规范并不侧重于防止物理攻击,因此如果您失去对计算机的物理访问权限,您可能应该认为它已受到损害。