我可以制作一个本地的自签名证书,如下所示。我用它来加密。没有密码 需要,因为私钥存储在TPM中。证书的私钥不能按设计导出。
$cert = New-SelfSignedCertificate -Provider "Microsoft Platform Crypto Provider" -Subject "CN=LTrust CA" -type DocumentEncryptionCert -KeyUsage KeyEncipherment,DataEncipherment,KeyAgreement -KeyExportPolicy NonExportable -KeyAlgorithm RSA -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My" -NotAfter $((Get-Date).AddYears(10))
现在我可以
$e = "1234" | Protect-CmsMessage -To $cert.Thumbprint #Encrypt
并且:
Unprotect-CmsMessage -Content $e #Decrypt
但是当证书由于某种原因丢失时,我将无法再检索加密的数据。 因此需要备份。但是通过设计,这是不可能的,因为私钥不可用于导出。
我找到了有关该主题的这篇文章: Creating TPM-Backed Certificates on Windows
它说:
警告:您无法从TPM导出此密钥。曾经如果您丢失了PC,或者意外重置了TPM(如果您使用多个操作系统,并且意外地尝试同时使用它们,或者重置了计算机上的BIOS,则可能会发生这种情况)。确保您有另一种方法来访问以此方式保护的所有内容。
那么,如果TPM被重置或消失,如何确保我的数据解密呢?