Криптопровайдер (Cryptography Service Provider, CSP) — это независимый модуль, позволяющий осуществлять криптографические операции в операционных системах Microsoft, управление которым происходит с помощью функций CryptoAPI. Проще говоря, это посредник между операционной системой, которая может управлять им с помощью стандартных функций CryptoAPI, и исполнителем криптографических операций (это может быть как программа, так и аппаратный комплекс).
Любой криптопровайдер должен экспортировать набор обязательных функций, которые формируют системный программный интерфейс CryptoAPI, при этом каждая из этих функций соответствует некоторой функции CryptoAPI. Также криптопровайдер должен обеспечивать:
Приложения не работают напрямую с криптопровайдером. Вместо этого они вызывают функции CryptoAPI из библиотек Advapi32.dll и Crypt32.dll. Операционная система фильтрует вызовы этих функций и вызывает соответствующие функции CryptoAPI, которые непосредственно работают с криптопровайдером.
Минимальный состав криптопровайдера — одна DLL. Обычно эта библиотека хранится в папке \WINDOWS\system32\. Обязательным является контроль целостности этой DLL.
Кроме стандартных функций CryptoAPI, криптопровайдер обычно поддерживает ряд собственных функций. Если собственные функции не реализованы, то DLL действует, по сути, как промежуточный слой между операционной системой и исполнителем криптографических операций.
Одним из основных объектов является ключевой контейнер. Контейнер имеет своё имя, создаётся (или запрашивается, если уже был создан) функцией CryptAcquireContext(…). В контейнере может существовать не более одной пары ключей подписи, одной пары ключей обмена и одного симметричного ключа. Если поддерживается несколько алгоритмов симметричного шифрования, то симметричных ключей может быть несколько, по одному ключу каждого алгоритма.
Пары ключей и симметричные ключи могут находиться только в контейнере. Только открытый ключ пары может находиться вне контейнера.
Закрытые (private) ключи пар ключей экспортируются только в зашифрованном виде. Некоторые криптопровайдеры принципиально не позволяют экспортировать закрытые ключи, даже в зашифрованном виде. Симметричные ключи при экспорте также обязательно шифруются на открытом ключе получателя или ключе согласования. Для вычисления хеш-функций создаются объекты хеширования. Для создания объектов хеширования создавать контейнер не нужно.
Тип криптопровайдера | Номер типа | Алгоритмы ключевого обмена | Алгоритмы цифровой подписи | Алгоритмы шифрования | Алгоритмы хеширования |
---|---|---|---|---|---|
PROV_RSA_FULL | 1 | RSA | RSA | RC2, RC4 | MD5, SHA |
PROV_RSA_SIG | 2 | нет | RSA | нет | MD5, SHA |
PROV_DSS | 3 | нет | DSS | нет | MD5, SHA |
PROV_FORTEZZA | 4 | KEA | DSS | Skipjack | SHA |
PROV_MS_EXCHANGE | 5 | RSA | RSA | CAST | MD5 |
PROV_SSL | 6 | RSA | RSA | могут быть различными | могут быть различными |
PROV_RSA_SCHANNEL | 12 | RSA | RSA | RC4, DES, 3DES | MD5, SHA |
PROV_DH_SCHANNEL | 18 | Диффи-Хеллман (ephemeral) | DSS | DES, 3DES | MD5, SHA |
PROV_RSA_AES | 24 | RSA | RSA | RC2, RC4, AES | MD5, SHA |
PROV_GOST_94_DH | 71 | ГОСТ Р 34.10-94 | ГОСТ Р 34.10-94 | ГОСТ 28147-89 | ГОСТ Р 34.11-94 |
PROV_GOST_2001_DH | 75 | ГОСТ Р 34.10-2001 | ГОСТ Р 34.10-2001 | ГОСТ 28147-89 | ГОСТ Р 34.11-94 |
PROV_GOST_2012_256 | 80 | ГОСТ Р 34.10-2012 256 бит | ГОСТ Р 34.10-2012 256 бит | ГОСТ 28147-89, ГОСТ 34.12-2018 | ГОСТ Р 34.11-2012 256 бит |
PROV_GOST_2012_512 | 81 | ГОСТ Р 34.10-2012 512 бит | ГОСТ Р 34.10-2012 512 бит | ГОСТ 28147-89, ГОСТ 34.12-2018 | ГОСТ Р 34.11-2012 512 бит |
Во все операционные системы Microsoft, начиная с Windows 2000, встроен криптопровайдер Microsoft Base Cryptographic Provider, который обладает набором основных криптографических функций. В Microsoft Base Cryptographic Provider длина ключей шифрования не превышает 40 бит. Так как до января 2000 года в США существовал запрет на экспорт программного обеспечения для шифрования с использованием ключей длиной более 40 бит, то в Windows 98 и ранних версиях Windows 2000 существовала поддержка только этого криптопровайдера. Microsoft Base Cryptographic Provider по сути является урезанным вариантом Microsoft Enhanced Cryptographic Provider. Но после отмены запрета на экспорт стало бессмысленно иметь 2 криптопровайдера, поэтому программисты Microsoft ввели ещё одно название — Microsoft Strong Cryptographic Provider, который ничем не отличается от Microsoft Enhanced Cryptographic Provider. Этот криптопровайдер является криптопровайдером по умолчанию типа PROV_RSA_FULL в Windows 2000, Windows XP, Windows 2003.
Все криптопровайдеры Microsoft могут быть скачаны с сайта Microsoft.
Криптопровайдер | Имя криптопровайдера | Тип | Комментарий |
---|---|---|---|
Microsoft Base Cryptographic Provider | MS_DEF_PROV | PROV_RSA_FULL | Имеет широкий набор основных криптографических функций. Длина ключей шифрования не превышает 40 бит. |
Microsoft Strong Cryptographic Provider | MS_STRONG_PROV | PROV_RSA_FULL | Отличается от Microsoft Base Cryptographic Provider поддержкой больших длин ключей. |
Microsoft Enhanced Cryptographic Provider | MS_ENHANCED_PROV | PROV_RSA_FULL | Ничем не отличается от Microsoft Strong Cryptographic Provider. Является криптопровайдером по умолчанию. |
Microsoft AES Cryptographic Provider | MS_ENH_RSA_AES_PROV | PROV_RSA_AES | = Microsoft Enhanced Cryptographic Provider с поддержкой AES |
Microsoft DSS Cryptographic Provider | MS_DEF_DSS_PROV | PROV_DSS | Хеширование, подпись, проверка подписи с поддержкой алгоритма DSS. |
Microsoft Base DSS and Diffie-Hellman Cryptographic Provider | MS_DEF_DSS_DH_PROV | PROV_DSS_DH | Хеширование, подпись DSS, генерация и обмен ключами Диффи-Хеллмана. Поддерживает генерацию ключей для протоколов SSL3 и TLS1. |
Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider | MS_ENH_DSS_DH_PROV | PROV_DSS_DH | То же, что и Microsoft Base DSS and Diffie-Hellman Cryptographic Provider с поддержкой больших длин ключей. |
Microsoft DSS and Diffie-Hellman/Schannel Cryptographic Provider | MS_DEF_DH_SCHANNEL_PROV | PROV_DH_SCHANNEL | Хеширование, подпись DSS, генерация и обмен ключами Диффи-Хеллмана. Поддерживает генерацию ключей для протоколов SSL3 и TLS1. |
Microsoft RSA/Schannel Cryptographic Provider | MS_DEF_RSA_SCHANNEL_PROV | PROV_RSA_SCHANNEL | Хеширование, подпись, проверка подписи. Используется для аутентификации в протоколах SSL 3.0 and TLS 1.0. |
Microsoft RSA Signature Cryptographic Provider | MS_DEF_RSA_SIG_PROV | PROV_RSA_SIG | Минимальная функциональность, необходимая для электронной подписи и проверки ЭЦП. |