假设我在Powershell中创建了一个自签名证书,如下所示:
New-SelfSignedCertificate -Provider "Microsoft Platform Crypto Provider" -Subject "CN=foobar" -KeyExportPolicy NonExportable -KeyAlgorithm RSA -KeyLength 2048 -CertStoreLocation "Cert:CurrentUserMy" -NotAfter $((Get-Date).AddYears(10))
证书的预期用途是对 Powershell 脚本进行代码签名。
由于提供程序MS platform crypto provider
密钥将由嵌入在我的主板中的受信任平台模块 (TPM) 芯片生成。
因此,私钥现在存储在"黑匣子"TPM 中。那么是否需要包装/密码保护私钥?
TPM 创建的任何密钥都已包装,由以下任一方式包装:
- TPM 1.2 的存储根密钥,或
- 指示为 TPM 2 的键父项的主键之一
因此,在创建密钥时,密钥由其中一个根密钥包装,您无需执行任何特殊操作即可实现它。事实上,你不能让它不发生。
根密钥本身由 TPM 规范保证永远不会离开 TPM。如果要保证新生成的密钥也永远不会离开 TPM,请使其不可迁移。
此外,您还可以使上述任何密钥受密码保护。您是否这样做取决于您的具体要求。但请记住,TPM 规范并不专注于防止物理攻击,因此,如果您失去对计算机的物理访问权限,则可能应该将其视为已受到威胁。