Вопрос или проблема
В настоящее время у меня есть следующие команды, которые хорошо работают в Linux для создания ключей в TPM с постоянным дескриптором. В Windows я пытаюсь найти эквивалентные команды, но в Windows нет инструментов tpm2. Утилита CertReq абстрагирует создание сертификатов в TPM в Windows, но они не имеют постоянного дескриптора. Так есть ли библиотеки или инструменты, доступные в Windows для выполнения эквивалентных действий?
echo "Создание RSA закрытого ключа в TPM..."
tpm2_createprimary -C o -c primary.ctx
echo "------------tpm2_create -------------"
tpm2_create -C primary.ctx -G rsa2048 -u key.pub -r key.priv
echo "------------tpm2_load -------------"
tpm2_load -C primary.ctx -u key.pub -r key.priv -c key.ctx
# Сделаем ключ постоянным в TPM
echo "------------tpm2_evictcontrol -------------"
tpm2_evictcontrol -C o -c key.ctx $KEY_HANDLE
# Шаг 2: Извлечение открытого ключа из TPM и сохранение его в формате PEM
echo "Извлечение открытого ключа из TPM..."
tpm2_readpublic -c key.ctx -f pem -o $PUBLIC_KEY_FILE
# Шаг 3: Создание запроса на подпись сертификата (CSR) с использованием OpenSSL
# OpenSSL будет использовать закрытый ключ TPM через модуль для подписи CSR
#-echo "Создание CSR с закрытым ключом TPM..."
openssl req -new -engine tpm2tss -key $KEY_HANDLE -keyform engine -out $CSR_FILE -subj
"$SUBJECT"
Возможно, мы можем помочь друг другу! В настоящее время я пытаюсь сделать в Linux то, что вы достигли с вашим скриптом. Я использую SWTPM как эмулятор TPM. Как вы настраиваете openssl
для использования конкретного TPM (в моем случае SWTPM, который слушает на определенном порте)? Вы экспортируете какую-либо переменную окружения TCTI, как мы делаем с переменной TPM2TOOLS_TCTI
для tpm2-tools
?
Ответ или решение
Вопрос о том, как выполнять эквивалентные операции с TPM (Trust Platform Module) в операционных системах Linux и Windows, является актуальным для профессионалов в области IT, работающих с безопасностью. На Linux для работы с TPM обычно используются утилиты tpm2-tools
, которые позволяют выполнять различные операции с модулями TPM 2.0, включая создание первичных ключей, управление ключами и экспорт их в формате PEM. Однако ситуация с эквивалентной функциональностью в Windows несколько сложнее ввиду отсутствия аналогичных инструментов за пределами стандартного набора.
Теория
TPM — это криптографический процессор, который обеспечивает безопасное хранение и выполнение криптографических ключей. В контексте Linux tpm2-tools
предоставляет интерфейс командной строки для работы с TPM. Основные команды включают:
- tpm2_createprimary: Создание первичного ключа.
- tpm2_create: Создание ключа (например, RSA) в TPM.
- tpm2_load: Загрузка ключа в TPM.
- tpm2_evictcontrol: Перевод ключа на постоянное хранение в TPM.
- tpm2_readpublic: Чтение публичного ключа из TPM.
В Windows работы с TPM можно достичь через различные библиотеки и API, хотя они часто не предоставляют такого же прямого подхода через командную строку, как tpm2-tools
.
Пример
Допустим, у вас есть скрипт на Linux, который выполняет следующие операции:
- Создание первичного ключа с помощью
tpm2_createprimary
. - Генерация и загрузка RSA-ключа в TPM.
- Закрепление ключа на постоянное хранение.
- Извлечение публичного ключа в формате PEM.
- Создание запроса на сертификат (CSR) с использованием OpenSSL и приватного ключа TPM.
В Windows аналогичную функциональность можно попробовать достигнуть с использованием следующих инструментов:
-
Windows Platform Crypto Provider: Этот провайдер обеспечивает доступ к базовым функциональностям TPM через Windows CNG (Cryptography Next Generation). Можно использовать его в сочетании с PowerShell для выполнения задач, связанных с ключами.
-
Device Guard: Это средство в Windows, которое может работать с TPM и предлагает некоторые функции по управлению ключами.
-
OpenSSL с поддержкой TPM: Открытая библиотека с поддержкой модулей TPM в Windows, хотя это может потребовать дополнительных конфигураций, таких как установка движка для работы с TPM.
Применение
Если целью является достижение всё той же функциональности, что и на Linux, в Windows, необходимо рассмотреть ряд шагов:
-
Создание первичного ключа: На текущий момент Windows не имеет аналогичного инструмента командной строки для
tpm2_createprimary
, но это действие может быть реализовано через программирование с использованием TPM Base Services (TBS) API, входящего в SDK Windows. -
Генерация и загрузка ключей: Используйте функции, доступные через CNG и возможно PowerShell скрипты, для создания и управления ключами. PowerShell предоставляет некоторые средства для создания ключей с использованием нитей CNG для взаимодействия с TPM.
-
Закрепление ключа на постоянное хранение: Хотя прямого аналога команды
tpm2_evictcontrol
нет, управление ключами зачастую возможно через интерфейсы Windows TPM Management Console. -
Извлечение и управление ключами: Извлечение публичных ключей и управление ими может потребовать написания кода на C или C++ с использованием Windows API.
-
Создание CSR: Здесь вы можете использовать OpenSSL с правильно настроенным движком. Для интеграции с OpenSSL может потребоваться использование скриптов для настройки правильного подключения к TPM через тмызы.
Заключение
Таким образом, хотя Linux предлагает набор инструментов tpm2-tools
для работы с TPM через командную строку, в Windows для достижения аналогичной функциональности может потребоваться комбинирование различных программных библиотек и API. При отсутствии возможностей командной строки, как на Linux, функциональность может быть сымитирована с помощью программного кода. Это может потребовать более глубокого понимания структуры Windows и её криптографических API, в отличие от более интуитивно понятного взаимодействия через tpm2-tools
в Linux.