Как загрузить и использовать постоянный симметричный ключ в TPM?

Я просто хочу постоянно хранить один симметричный ключ длиной 32 байта в NV-хранилище TPM и после выключения питания использовать его (не вынимая из TPM) для шифрования данных небольшого размера.

Я пытался сделать это двумя разными способами:

1)

  • Создайте ключ с помощью генератора случайных байтов TPM
  • Определите пространство в NV и напишите в нем ключ
  • Проблема: я умею читать, но как загрузить, чтобы использовать в TPM?

2)

  • Создайте ключ AES с помощью команды TPM2_Create
  • Сделайте его постоянным с помощью команды TPM2_EvictControl
  • Через тот же цикл включения у меня есть ручка, я могу ее загрузить и использовать.
  • Проблема: как и раньше, как загрузить и использовать после следующего цикла питания?

Я просмотрел спецификации TCG и даже прочитал это бесплатное практическое руководство по TPM2.0 и не нашел никаких подсказок к моим проблемам.

Что мне не хватает?


person Alex    schedule 26.12.2019    source источник


Ответы (1)


TPM2_EncryptDecrypt предназначен для использования с симметричными ключами. Передайте дескриптор ключа, который вы получили с TPM2_EvictControl в качестве параметра @keyHandle, и установите параметр decrypt соответствующим образом. Установите mode на TPM_ALG_NUL, чтобы использовать режим по умолчанию.

Имейте в виду, что TPM нецелесообразно использовать для шифрования больших объемов данных (для чего обычно используются симметричные ключи).

person mnistic    schedule 26.12.2019
comment
Он работает, когда я делаю это в одном и том же прогоне, при следующем цикле включения питания мне нужен только адрес хранилища NV и дополнительные функции, если они добавлены (авторизация пользователя, политика и т. Д.), Я прав? - person Alex; 26.12.2019
comment
Нет, вы просто используете ключ за его ручку, если ваш контроль выселения был успешным. Вам нужно будет выполнить политику, если вы прикрепили ее к ключу, и при необходимости предоставить аутентификацию. - person mnistic; 26.12.2019
comment
Хорошо, например, у меня есть только auth: Создание дескриптора с помощью TPM_HANDLE persistentHandle = TPM_HANDLE :: PersistentHandle (addr), затем установите аутентификацию с помощью persistentHandle.SetAuth (пароль), а затем используйте дескриптор? PS. Пользуюсь Microsoft tss. - person Alex; 26.12.2019
comment
Что такое addr? Не должно быть никакого адреса ... сделайте дескриптор постоянным, как здесь: github.com/microsoft/TSS.MSR/blob/ - person mnistic; 26.12.2019
comment
Я имел ввиду смещение ручки, моя ошибка. Спасибо за помощь - person Alex; 29.12.2019