Здравствуйте, Sergey A. Sokolov, Вы писали:
SAS>Столкнулся с необходимостью использовать криптоалгоритмы в режиме ядра. Поискав, нашел старое сообщение от Valerio.
Оговорюсь сразу, что про FIPS ничего нового не скажу
Однако, если речь идет о российских криптоалгоритмах, то есть опыт подключения Signal-COM CSP и CryptoPro CSP. Оба провайдера имеют сертификаты и реализуют шифрование по ГОСТ (в Signal-COM используются только режимы гаммирования и гаммирования с обратной связью).
Напрямую, сервисы предоставляемые Signal-COM можно использовать только в пользовательском режиме. Поэтому у себя я применил механизм LPC для взаимодействия driver — helper service. Сервис создает криптографический контекст, передает его описатель в драйвер, а тот при необходимости дергает сервис для кодирования данных, передавая в кач-ве параметра нужный кр. контекст. Причем на быстродействии данные манипуляции не сказываются сколько-нибудь заметным образом.
Хорошая новость в том, что CryptoPro CSP 3.0 имеет в своем составе driver-export, предоставляющий сервисы шифрования в режиме ядра. Плохая — в том, что документация редкостное дерьмо, примеры изобилуют неточностями и т.п. Например, sample драйвера — это переделанный вариант ..\src\general\ioctl из DDK, где просто сменили шапку с копирайтами и скрупулезно перевели все оригинальные комментарии (это мжно в юмор

):
//
// Опредление, который код I/O контроля был задан.
//
switch ( irpSp->Parameters.DeviceIoControl.IoControlCode )
{
case IOCTL_CPIOCTL_METHOD_BUFFERED:
//
// В этом методе управляющее устройство I/O устанавливает длину буфера
// равной большей из длин пользовательских input buffer и output buffer,
// присвает адрес Irp->AssociatedIrp.SystemBuffer, и копирует содержимое
// пользовательского input buffer в SystemBuffer
//
Помимо этого, этот драйвер продуцирует BSOD на checked build OS при выгрузке.
Вот и все пока. Если интересуют подробности — всегда рад