Как работать с открытыми текстовыми ключами с использованием CNG?
У меня есть набор предопределенных ключей открытого текста, которые я использую для симметричного шифрования / дешифрования. Эти ключи используются для зашифрованной связи с аппаратными устройствами, подключенными к ПК. Я хотел бы использовать поставщика хранилища ключей CNG для безопасного хранения этих ключей. Шифрование и дешифрование должны выполняться за пределами КПГ. Мне нужно только безопасное место, где хранить и откуда получать мои предопределенные ключи в виде открытого текста. В последние дни я изучал справочник по функциям CNG, но не смог найти способа импортировать / экспортировать симметричный ключ открытого текста, идентифицируемый по имени, в контейнер ключа CNG.
Я знаю, что CryptoAPI предоставляет функции для импорта / экспорта ключей сеанса. Но этот старый API не предоставляет постоянные (сеансовые) ключи и не позволяет выбирать / идентифицировать ключи по имени в контейнере ключей.
Любая помощь очень ценится. Заранее спасибо.
1 ответ
Боюсь, вам не повезло в получении прямого решения, поскольку поставщики хранилищ ключей CNG в настоящее время поддерживают асимметричные ключи, но не симметричные ключи. Только примитивные провайдеры поддерживают симметричные ключи.
Эта модель ориентирована на асимметричные ключи, которые должны быть защищены в долгосрочной перспективе, при этом симметричные ключи используются только для одного сеанса, а затем выбрасываются. Эти симметричные ключи могут быть получены из асимметричного ключа, такого как Диффи-Хеллман или ECDH.
Вы говорите, что хотите, чтобы ключи хранились надежно, но шифрование / дешифрование выполняется за пределами CNG. В зависимости от того, от каких угроз вы пытаетесь защищаться, это может быть неправильным подходом. Обычно, если вы храните ключи в поставщике хранилища ключей, вы хотите, чтобы крипто-операции выполнялись внутри поставщика хранилища ключей, и вы не хотите, чтобы ключи когда-либо оставляли его (кроме зашифрованных другим ключом), так как это подвергает материал ключа злоумышленник
Однако, если вы уверены, что это именно то, что вам нужно, одним из вариантов будет генерирование ключа RSA в поставщике хранилища ключей и использование его для шифрования и дешифрования симметричных ключей. Вы должны хранить зашифрованные капли симметричного ключа в другом месте, например, в файловой системе.