CryptoApi и Криптопровайдер VipNet CSP
На хабре довольно мало информации о Microsoft CryptoApi и нет упоминания о наших отечественных разработчиках, которые имеют лицензии в области шифрования информации, реализуют интерфейс CryptoApi и позволяют шифровать данные с использованием, например, ГОСТ 28147-89. Так что, если возникла необходимость зашифровать и передать данные, и сделать это с использованием отечественных стандартов, то вовсе необязательно изобретать велосипед, а можно воспользоваться криптопровайдером VipNet CSP.
CryptoAPI поддерживает работу с асимметричными и симметричными ключами, то есть позволяет шифровать и расшифровывать данные, а также работать с электронными сертификатами. Набор поддерживаемых криптографических алгоритмов зависит от конкретного криптопровайдера.
Реализация всех алгоритмов (шифрования, цифровой подписи и т.п.) полностью выведена из состава самого Crypto API и реализуется в отдельных, независимых динамических библиотеках – «криптопровайдерах» (Cryptographic Service Provider – CSP). Сам же Crypto API просто предъявляет определенные требования к набору функций (интерфейсу) криптопровайдера и предоставляет конечному пользователю интерфейс работы с CSP. Для использования всех функций криптопровайдера достаточно знать его строковое имя и номер типа.
ViPNet CSP обеспечивает выполнение следующих функций:
К сожалению VipNet CSP – это платный продукт, но на сайте есть бета-версии, которые отлично функционируют.
Разобраться с криптопровайдером довольно легко, в скачиваемый пакет входит проработанная до мелочей документация, а также множество примеров кода. Скачать последнюю версию можно здесь. Более подробно ознакомиться с описанным выше криптопровайдером можно здесь.
Шифрование данных и расшифрование их на другом компьютере — тема отдельной статьи.
Спасибо за внимание.
Вкратце о Microsoft CryptoApi
Итак, CryptoAPI это — интерфейс программирования приложений, который обеспечивает разработчиков Windows-приложений стандартным набором функций для работы с криптопровайдером. Входит в состав операционных систем Microsoft. Большинство функций CryptoAPI поддерживается начиная с Windows 2000.CryptoAPI поддерживает работу с асимметричными и симметричными ключами, то есть позволяет шифровать и расшифровывать данные, а также работать с электронными сертификатами. Набор поддерживаемых криптографических алгоритмов зависит от конкретного криптопровайдера.
Реализация всех алгоритмов (шифрования, цифровой подписи и т.п.) полностью выведена из состава самого Crypto API и реализуется в отдельных, независимых динамических библиотеках – «криптопровайдерах» (Cryptographic Service Provider – CSP). Сам же Crypto API просто предъявляет определенные требования к набору функций (интерфейсу) криптопровайдера и предоставляет конечному пользователю интерфейс работы с CSP. Для использования всех функций криптопровайдера достаточно знать его строковое имя и номер типа.
ViPNet CSP
VipNet CSP – это программный комплекс, который реализует интерфейс Microsoft CryptoApi.ViPNet CSP обеспечивает выполнение следующих функций:
- Генерация закрытых и открытых ключей ЭЦП и шифрования в соответствии с алгоритмом ГОСТ Р 34.10 – 2001.
- Вычисление хеш-функции в соответствии с алгоритмом ГОСТ Р 34.11-94.
- Вычисление и проверка ЭЦП в соответствии с алгоритмом ГОСТ Р 34.10-2001.
- Выработка случайных и псевдослучайных чисел, сессионных ключей шифрования.
- Шифрование и имитозащита данных в соответствии с алгоритмом ГОСТ 28147-89.
- Аутентификация и шифрование при передаче данных по протоколам SSL/TLS.
- Операции с сертификатами открытых ключей, соответствующих стандарту X.509 v3.
Совместимость
ViPNet CSP функционирует под управлением ОС Windows 2000 (32 бит)/XP (32 бит)/Server 2003 (32 бит)/Vista (32 бит) /Windows 7 (32/64 бит).К сожалению VipNet CSP – это платный продукт, но на сайте есть бета-версии, которые отлично функционируют.
Разобраться с криптопровайдером довольно легко, в скачиваемый пакет входит проработанная до мелочей документация, а также множество примеров кода. Скачать последнюю версию можно здесь. Более подробно ознакомиться с описанным выше криптопровайдером можно здесь.
Пример использования
Итак, мы инсталлировали криптопровайдер, можем написать программу, шифрующую данные с использованием ГОСТ 28147-89. В скачиваемом пакете (архиве) есть папка «ViPNet CSP SDK (для разработчиков)», найдем там заголовочный файл importitccsp.h, в нем объявлены необходимые нам константы. Смотрим пример:HCRYPTPROV hProv;
HCRYPTKEY hSessionKey;
// Получение контекста криптопровайдера
// VPN_DEF_PROV и VPN_PROV_TYPE - указывают на то, что мы используем ViPNet CSP
if (!CryptAcquireContext(&hProv, NULL, VPN_DEF_PROV, VPN_PROV_TYPE, CRYPT_VERIFYCONTEXT))
{
printf("Error CryptAcquireContext");
return;
}
printf("provider initialized");
// Генерация сессионного ключа
// CPCSP_ENCRYPT_ID - используется ГОСТ 28147-89
if (!CryptGenKey(hProv, CPCSP_ENCRYPT_ID, CRYPT_ENCRYPT | CRYPT_DECRYPT, &hSessionKey))
{
printf("Error CryptGenKey");
return;
}
printf("key generated");
// Данные для шифрования
char data[]="habrahabr";
DWORD count=strlen(data);
// Шифрование данных
if (!CryptEncrypt(hSessionKey, 0, true, 0, (BYTE*)data,
&count, strlen(data)))
{
printf("Error CryptEncrypt");
return;
}
printf("encrypt done");
// Тестовый вывод на экран
printf("Encrypted string: %s", data);
// Расшифровывание данных
if(!CryptDecrypt(hSessionKey, 0, true, 0, (BYTE*)data, &count))
{
printf("Error CryptDecrypt");
return;
}
printf("decrypt done");
// Тестовый вывод на экран
printf("Decrypted string: %s", data);
// Освобождение контекста локальных переменных
CryptDestroyKey(hSessionKey);
CryptReleaseContext(hProv, 0);
Шифрование данных и расшифрование их на другом компьютере — тема отдельной статьи.
Спасибо за внимание.
0 комментариев