Я могу сделать локальный самоподписанный сертификат, как показано ниже. Использую для шифрования. Пароль не требуется, поскольку закрытый ключ хранится в 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
Но когда сертификат по какой-то причине потеряна, я больше не могу получить зашифрованные данные. Так что нужна резервная копия. Но по замыслу это невозможно, потому что закрытый ключ недоступен для экспорта.
Я нашел эту статью на эту тему: Создание сертификатов с поддержкой TPM на Windows
Он говорит:
Предупреждение: вы не можете экспортировать этот ключ из TPM. Когда-либо. Если вы потеряете свой P C или если TPM случайно сбрасывается (это может произойти, если вы используете несколько операционных систем и случайно попытаетесь использовать его с обеими, или если B IOS на вашем компьютере сброшен), вы потеряете ключ. Убедитесь, что у вас есть альтернативный способ доступа ко всему, что вы защищаете таким образом.
Итак, как обеспечить расшифровку моих данных в случае сброса или исчезновения TPM?