Я разрабатываю приложение, которому необходимо сгенерировать ключ RSA в TPM, который будет использоваться для операций подписи. Публичная часть регистрируется в серверной части один раз, а частная часть затем повторно используется для аутентификации. Это будет использоваться в циклах выключения / перезапуска машины. В корне моей иерархии у меня есть SRK-ключ (т.е. на основе такого шаблона), созданный с помощью CreatePrimary (). Я знаю, что могу восстановить этот ключ для последующих сеансов (сохраняя случайный ввод в данных программы). Фактический ключ подписи программы также может быть сохранен в зашифрованном виде и затем загружен с помощью функции загрузки после регенерации SRK-ключа.
Так что функционально все работает, но хотелось бы избежать накладных расходов на регенерацию ключей. Какие у меня здесь варианты?
1) Насколько я могу прочитать (но, пожалуйста, поправьте, если я ошибаюсь), ContextSave не выдержит цикла включения питания (в документации указано, что он сбрасывается при сбросе питания). Пожалуйста, подтвердите, можно ли использовать ContextSave.
2) есть функция EvictControl, которая выполняет эту работу. Но он включает в себя ограниченную память NV (поэтому, если приложение «забывает» такой возвращенный дескриптор, память никогда не может быть освобождена без сброса всего TPM) и будет использовать TPM (только при начальной регистрации). Это подходит?
3) Возможно, есть еще один вариант, который я не нашел? Есть ли SRK "по умолчанию", который можно использовать, чтобы мне не пришлось (повторно) генерировать его, например?
Если ничего не работает, я планирую использовать эту функцию, но мне было интересно, есть ли другой вариант. Я не понимаю, почему нет ExportPrimary () / ImportPrimary () или такого, который мог бы экспортировать первичный объект, который можно было бы импортировать позже, не касаясь хранилища NV. Экспорт будет выполняться под ключом, хранящимся внутри TPM в хранилище NV (регенерируется только при очистке TPM и т. Д.) И, таким образом, будет иметь тот же уровень безопасности, что и EvictControl, но без использования NV-хранилища для каждого сгенерированного ключа.