Шифровка от Microsoft

Тихоноff Александр

Хакер, номер #072, стр. 072-108-1

(tikhonoff@bk.ru, http://tikhonoff.sbn.bz)

CryptoAPI для домашнего параноика

Криптография – очень важная для взломщика область знаний, наверное, именно поэтому в Сети постоянно бродят слухи про троян в PGP, про люки, глюки и баги известных криптосистем. Отдельные маньяки до сих пор юзают PGP 2.6i (for DOS, естественно), скомпилированный из проверенных сорцов и радуются жизни. Майкрософт, как корпорация, всегда заботящаяся о защите пользователей, в 1996 году запустила свой проект-шифровщик – CryptoAPI.

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

На самом деле этот API дает возможность реализовать большинство процессов, используемых для защиты информации. Это, разумеется, генерация ключей и шифрование/расшифровка кучей алгоритмов, создание/проверка цифровых подписей, генерация хэшей, сертификатов безопасности. Шифроваться могут не только сообщения, но и некоторые программные значения (например пароли, хранящиеся в памяти и пр.). В статье будут приведены прототипы функций, взятые из хитрой библиотечки wincrypt.h (она, между прочим, входит в стандартную поставку MS Visual C++ 6.0). Сейчас есть и версия библиотек для Delphi, которые мы и будем юзать.

Немного теории

Все имена функций в CryptoAPI начинаются с префикса Crypt. Чаще всего функции возвращают результат типа BOOLEAN: 1 (TRUE, истина) при успешном выполнении и 0 (FALSE, ложь) - при ошибке. В качестве параметров обычно используется значение дескриптора криптопроцесса. Его можно найти через CryptDeviceKey().

В рамках проекта введено понятие «криптопровайдер» (CSP). Это самостоятельный модуль, в библиотеку которого включены основные функции шифрования в систематизированном виде. CSP играет роль ключника для любого типа шифрования. Кроме того, с его помощью реализуется интерфейс алгоритма. Грубо говоря, CSP - некая программа, выполняющая всю рутинную работу шифрования с теми параметрами, которые были заданы пользователем при помощи CryptoAPI. Визуально криптопровайдер - это DLL'ка. Но не простая, а хитрым образом подписанная, что исключает возможность подмены CSP злоумышленником. В OS Windows Майкрософт включила провайдера RSA. Сигнатуры и названия основных криптопровайдеров вынесены во врезку. По умолчанию они также включены в систему.

Все ключи хранятся в отдельной базе данных, единственной для каждого юзера. Подобные базы вшиваются в ось, благодаря чему злоумышленник не сможет втихаря утянуть базу секретных ключей или какой-нибудь пароль. Это, несомненно, лучше, чем реализовывать криптопроги самостоятельно (для тех, кто с этим не согласен, у нас есть пара статей из предыдущих «Хакеров»).

Прежде всего, перед началом работы необходимо инициализироваться. Это просто - всего лишь надо заюзать функцию CryptAcquireContext. Она имеет ряд параметров: имя контейнера для ключей, наименование CSP, его тип и флаги, позволяющие управлять таким контейнером.

Для того чтобы подключить тот или иной криптопровайдер, необходимо получить его содержание. То есть мы должны проверить, что лежит в CSP, и автоматом присобачить его к проекту.

Содержание  Вперед на стр. 072-108-2
ttfb: 3.2498836517334 ms