Ответ BadAuth при попытке создать первичный ключ с Tpm2Lib - PullRequest
0 голосов
/ 20 сентября 2019

Следующие примеры для библиотеки Microsoft TPM (https://github.com/microsoft/TSS.MSR/blob/master/TSS.NET/Samples/Signing/Program.cs).Попытка создать первичный ключ, который будет использоваться для подписи сообщений, не удалась с Error {BadAuth} was returned for command CreatePrimary

. Я смотрю значение OwnerAuthFull в реестре на Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TPM\WMI\Admin и, скажем, значение "foo / bar =",Это также отображается, когда я запускаю Get-Tpm в командной строке.

Tpm2Device tpmDevice = new TbsDevice();
                tpmDevice.Connect();
                var tpm = new Tpm2( tpmDevice );
                var authValueRegistry = Encoding.ASCII.GetBytes( "foo/bar=" );
                var ownerAuth = new AuthValue( authValueRegistry );
                var keyTemplate = new TpmPublic( TpmAlgId.Sha1,                                  // Name algorithm
                                                ObjectAttr.UserWithAuth | ObjectAttr.Sign |     // Signing key
                                                ObjectAttr.FixedParent | ObjectAttr.FixedTPM | // Non-migratable 
                                                ObjectAttr.SensitiveDataOrigin,
                                                null,                                    // No policy
                                                new RsaParms( new SymDefObject(),
                                                             new SchemeRsassa( TpmAlgId.Sha1 ), 2048, 0 ),
                                                new Tpm2bPublicKeyRsa() );
                Console.WriteLine( "Made template" );

                var keyAuth = new byte[] { 1, 2, 3 };
                TpmPublic keyPublic;
                CreationData creationData;
                TkCreation creationTicket;
                byte[] creationHash;
                Console.WriteLine( "try create key" );
                var keyHandle = tpm[ownerAuth].CreatePrimary(
                    TpmRh.Owner,                            // In the owner-hierarchy
                    new SensitiveCreate( keyAuth, null ),     // With this auth-value
                    keyTemplate,                            // Describes key
                    null,                                   // Extra data for creation ticket
                    new PcrSelection[ 0 ],                    // Non-PCR-bound
                    out keyPublic,                          // PubKey and attributes
                    out creationData, out creationHash, out creationTicket );    // Not used here

Я ожидаю создать ключ и продолжить работу, однако CreatePrimary () выдает исключение с сообщением Error {BadAuth} was returned for command CreatePrimary

1 Ответ

0 голосов
/ 23 сентября 2019

Забудьте ownerAuth и сделайте следующее:

var keyHandle = tpm.CreatePrimary(
                    TpmRh.Owner,                            // In the owner-hierarchy
                    new SensitiveCreate( keyAuth, null ),     // With this auth-value
                    keyTemplate,                            // Describes key
                    null,                                   // Extra data for creation ticket
                    new PcrSelection[ 0 ],                    // Non-PCR-bound
                    out keyPublic,                          // PubKey and attributes
                    out creationData, out creationHash, out creationTicket ); 

Что вы можете вывести из этой проблемы с github: https://github.com/microsoft/TSS.MSR/issues/43#event-2651641565

...