Delphi для параноика: свой PGP за 5 минут

Лозовский Александр

Xakep, номер #053, стр. 053-084-1


(klouniz@mail.ru)

Сегодня нас ждет поистине ][-кодинг, а именно написание собственной крипто-проги, умеющей шифровать текст по принципу открытого ключа. Если ты уже напуган размерами исходников PGP (которые лень читать даже пробитым юниксоидам), я тебя успокою. Дело в том, что добрые капиталисты из TSM inc написали для нас совершенно бесплатный компонент, реализующий функции RSA алгоритма, который, собственно, сейчас и является стандартом асимметричного шифрования. Так что за размер кода можешь не беспокоиться, он будет неприлично маленьким и вместе с тем полноценным. Т.е. наша с тобой прога будет уметь все, как и ее старшие братья. А именно - генерить ключи, шифровать и расшифровывать :).

Вспомнить все

Прежде чем взяться за кодинг, нам придется припомнить пару теоретических моментов:

1) Шифрование информации производится при помощи public key, а расшифровка - private key. Первый может находиться у кого угодно (поскольку способен только шифровать), второй - только у того, кому пишут. Его надо беречь как девственность :).

Длина ключа может быть 512, 1024 и 2048 бит. В нашем примере я буду использовать 1024-битный ключ, поскольку меньшая длина уже давно считается отстоем, а 2048 слишком долго вычисляется моим 566 целероном.

2) Математической основой алгоритма являются 2 больших простых числа - p и q. Они настолько большие, что разработчики компонента (который мы сегодня будем использовать) ввели тип BigNum. Подробнее я расскажу о нем ниже.

Следовательно, автоматическая генерация ключа для нас будет заключаться именно в нахождении p и q. Остальное компонент сделает сам. И это правильно. Как говорил мой преподаватель труда, "пусть работают механизмы". Правда, он еще считал, что ананасы растут на деревьях, но рабочему человеку это простительно.

Реквизит

Срочно беги на http://www.crypto-central.com/software/freeware/RSA_free.zip (или на наш диск, который ближе) и качай компонент. Если при появлении надписи "download complete" твои руки (как это обычно происходит со мной) приходят в сильное возбуждение и запускают инсталляцию загруженного, то уйми их. Потому что этого мало, надо еще зайти на http://www.crypto-central.com/cgi-bin/freeform.exe. Там, после заполнения простенькой формы (размер лифчика и годовой доход там не спрашивают, достаточно электронного адреса, имени и источника, откуда ты о них узнал) тебе на e-mail сваливается индивидуальный код для инсталляции. Можно, правда, ничего не заполнять, потому что я уже это сделал до тебя и получил вот что: hjkDL9l3s0s[39s3fm3. Это код для бесплатной версии.

Ладно, теперь можно дать волю рукам и запустить инсталляцию - она сама найдет твой дельфи и положит в компоненты новую закладку - "crypto", содержащую компонент "RSA". Поэтому срочно кидай его на форму, и займемся программированием.

Кодинг

Нам понадобится следующее: 2 Edit, 2 кнопки, 2 RadioButton (тоже лежит в закладке standard), 1 ProgressBar, 2 Memo или RichEdit - кому что нравится. Расположи их примерно так:

Совсем не обязательно делать такую здоровую кнопку "START", просто у меня развилась гигантомания, и я стараюсь делать так, чтобы в любую кнопку можно было попасть не целясь. Кстати, в будущем я не упущу возможности рассказать о какой-нибудь консольной программе, и тут уж тебе вообще не придется баловаться скринами :).

Содержание  Вперед на стр. 053-084-2