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