Поделиться через


Хранилище ключей и извлечение

Архитектура хранилища ключей

CNG предоставляет модель для хранилища закрытых ключей, которая позволяет адаптироваться к текущим и будущим требованиям создания приложений, использующих функции шифрования, такие как шифрование открытых или закрытых ключей, а также требования к хранилищу ключевых материалов. Маршрутизатор хранилища ключей — это центральная подпрограмма в этой модели и реализована в Ncrypt.dll. Приложение обращается к поставщикам хранилища ключей (KSPS) в системе через маршрутизатор хранилища ключей, который скрывает сведения, такие как изоляция ключей, как от приложения, так и от самого поставщика хранилища. На следующем рисунке показана конструкция и функция архитектуры изоляции ключей CNG.

поставщик хранилища ключей cng

Для соблюдения требований общих критериев (CC) долговечные ключи должны быть изолированы, чтобы они никогда не присутствовали в процессе приложения. В настоящее время CNG поддерживает хранение асимметричных закрытых ключей с помощью KSP программного обеспечения Майкрософт, который входит в состав Windows Server 2008 и Windows Vista и установлен по умолчанию.

Изоляция ключей включена по умолчанию в Windows Server 2008 и Windows Vista. Функция изоляции ключей недоступна на платформах до этих версий. Кроме того, сторонние KSP не загружаются в службу изоляции ключей (процесс LSA). Только Microsoft KSP загружается в службу изоляции ключей.

Процесс LSA используется в качестве процесса изоляции ключей для повышения производительности. Все доступ к закрытым ключам проходит через маршрутизатор хранилища ключей, который предоставляет полный набор функций для управления и использования закрытых ключей.

CNG сохраняет общедоступную часть сохраненного ключа отдельно от частной части. Общедоступная часть пары ключей также сохраняется в службе изоляции ключей и доступ к ней осуществляется с помощью вызова локальной удаленной процедуры (LRPC). Маршрутизатор хранилища ключей использует LRPC при вызове процесса изоляции ключей. Весь доступ к закрытым ключам проходит через маршрутизатор закрытого ключа и проверяется CNG.

Как описано выше, можно поддерживать широкий спектр аппаратных устройств хранения. В каждом случае интерфейс для всех этих устройств хранения идентичен. Она включает функции для выполнения различных операций с закрытым ключом, а также функций, относящихся к хранилищу ключей и управлению ими.

CNG предоставляет набор API, используемых для создания, хранения и извлечения криптографических ключей. Для получения списка этих API см. раздел Функции хранилища ключей CNG.

Ключевые типы

CNG поддерживает следующие ключевые типы:

  • Diffie-Hellman открытых и закрытых ключей.
  • Алгоритм цифровой подписи (DSA, FIPS 186-2) и его открытые и закрытые ключи.
  • Открытые и закрытые ключи RSA (PKCS #1).
  • Несколько устаревших открытых и закрытых ключей CryptoAPI.
  • Криптография на основе эллиптических кривых: открытые и закрытые ключи.

Поддерживаемые алгоритмы

CNG поддерживает следующие ключевые алгоритмы.

Алгоритм Длина ключа или хэша (биты)
RSA 512–16384, в 64-разрядных добавочных значениях
DH 512–16384, с шагом в 64 бита
DSA 512–1024, с шагом 64 бита
ECDSA P-256, P-384, P-521 (кривые NIST)
ECDH P-256, P-384, P-521 (кривые NIST)
MD2 128
MD4 128
MD5 128
SHA-1 160
SHA-256 256
SHA-384 384
SHA-512 512

Ключевые каталоги и файлы

Устаревшие CSP Microsoft CryptoAPI хранят закрытые ключи в следующих каталогах.

Тип ключа Каталоги
Частный пользователь %APPDATA%\Microsoft\Crypto\RSA\идентификатор безопасности пользователя (SID)\
%APPDATA%\Microsoft\Crypto\DSS\SID пользователя\
Частная локальная система %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-18\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-18\
Частная локальная служба %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-19\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-19\
Частная сетевая служба %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\S-1-5-20\
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\S-1-5-20\
Общий частный %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\RSA\MachineKeys
%ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\DSS\MachineKeys

CNG сохраняет закрытые ключи в следующих каталогах.

Тип ключа Каталог
Частный пользователь %APPDATA%\Microsoft\Crypto\Keys
Частная локальная система %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\SystemKeys
Частная локальная служба %WINDIR%\ServiceProfiles\LocalService
Частная сетевая служба %WINDIR%\ServiceProfiles\NetworkService
Частный с общим доступом %ALLUSERSPROFILE%\Application Data\Microsoft\Crypto\Keys

Ниже приведены некоторые различия между контейнерами ключей CryptoAPI и CNG.

  • CNG использует другие имена файлов для ключевых файлов, чем те, которые создаются устаревшими поставщиками CSP Rsaenh.dll и Dssenh.dll. Устаревшие файлы ключей также имеют расширение .key, но файлы ключей CNG не имеют расширения .key.
  • CNG полностью поддерживает имена контейнеров ключей Юникода; CNG использует хэш имени контейнера Юникода, а CryptoAPI использует хэш имени контейнера ANSI.
  • CNG является более гибким в отношении пар ключей RSA. Например, CNG поддерживает общедоступные экспоненты, превышающие 32-разрядные длины, и поддерживает ключи, в которых p и q имеют другую длину.
  • В CryptoAPI файл контейнера ключей хранится в каталоге, имя которого является текстовым эквивалентом идентификатора безопасности пользователя. Это больше не так в CNG, что устраняет трудности при перемещении пользователей из одного домена в другой, не теряя все закрытые ключи.
  • CNG KSP и имена ключей ограничены MAX_PATH символами Юникода. CSP и имена ключей CryptoAPI ограничены MAX_PATH символами ANSI.
  • CNG предоставляет возможность определяемых пользователем ключевых свойств. Пользователи могут создавать и связывать пользовательские свойства с ключами и хранить их с сохраненными ключами.

При сохранении ключа CNG может создавать два файла. Первый файл содержит закрытый ключ в новом формате CNG и всегда создается. Этот файл недоступен устаревшими CSP CryptoAPI. Второй файл содержит тот же закрытый ключ в устаревшем контейнере ключей CryptoAPI. Второй файл соответствует формату и расположению, используемому Rsaenh.dll. Создание второго файла происходит только в том случае, если флаг NCRYPT_WRITE_KEY_TO_LEGACY_STORE_FLAG указан, когда функция NCryptFinalizeKey вызывается для завершения ключа RSA. Эта функция не поддерживается для ключей DSA и DH.

Когда приложение пытается открыть существующий сохраненный ключ, CNG сначала пытается открыть собственный CNG-файл. Если этот файл не существует, CNG пытается найти соответствующий ключ в устаревшем контейнере ключей CryptoAPI.

При перемещении или копировании ключей CryptoAPI с исходного компьютера на целевой компьютер с помощью средства миграции пользовательского состояния Windows (USMT) CNG не сможет получить доступ к ключам на целевом компьютере. Чтобы получить доступ к таким перенесенным ключам, необходимо использовать CryptoAPI.

функции хранения ключей CNG

идентификаторы свойств хранилища ключей

NCryptFinalizeKey