Краткая история GNU Privacy Guard


Прошло десять лет с того дня, как самая первая версия GNU Privacy Guard[link1] увидела свет. На тот момент она называлась не известным нам сегодня GnuPG, а "g10" по номеру статьи Немецкой Конституции (Grundgesetz Artikel 10), закрепляющей право на свободу телекоммуникаций, и как издёвка над законом G-10, дающим право спецслужбам обходить эти конституционно гарантированные свободы.

Версия 0.0.0[link2], выпущенная 20 декабря 1997 года, представляла собой едва работающую замену PGP, которая использовала алгоритмы Elgamal и Blowfish вместо запатентованных RSA и IDEA. Она была объявлена тестовой версией, но, несмотря на это, уже включала большинство функций современного GnuPG. Формат данных, однако, был совместим не с OpenPGP, а ориентирован на формат PGP-2 с рядом дополнительных расширений (в частности, с поддержкой потоковой передачи данных). Рабочая группа OpenPGP была основана ещё осенью 97-го, но я узнал о ней довольно поздно, чтобы написать "g10" в соответствии с уже существовавшим черновым стандартом. По соображениям авторских прав было практически невозможно подвергнуть формат PGP-5 реверс-инженерингу, так что учреждение рабочей группы оказалось нужным событием в нужное время.

Прежде, чем перейти к GnuPG, нам стоит вернуться на несколько лет назад[link3]. В 1991 году в помощь политическим активистам Фил Циммерман выпустил программу под названием Pretty Good Privacy (PGP). PGP был создан как удобный инструмент шифрования без каких-либо потайных ходов и с открытым исходным кодом, и в действительности был не "довольно хорошим" (pretty good), а по-настоящему криптографически стойким. Однако, изначально он имел пару проблем, главной из которых являлся самодельный алгоритм шифрования[link4]. Благодаря наличию исходного текста к разработке подключилось сообщество хакеров (таких, как Бранко Ланкастер, Колин Пламб, Дерек Аткинс, Хал Финни, Питер Гутман и другие), которые помогли Филу устранить недостатки и успешно выпустили надёжную версию 2.

Вскоре после этого начались проблемы. Как и во многих других странах, в США использование и экспорт средств стойкой криптографии был строго ограничен, и обычно допускались лишь ослабленные криптосистемы. PGP был значительно надёжней, а благодаря конференциям Usenet и доступности FTP-серверов и BBS, PGP неожиданно просочился за пределы страны, и Фил попал под следствие за незаконный экспорт вооружений. Эти законы об экспортном контроле были не совсем в духе века информационных технологий и имели забавное исключение, по которому экспорт программ в распечатанном виде не подпадал под запрет. Поэтому издательство MIT Press опубликовало книгу с исходным кодом PGP, которая затем была отсканирована за пределами Штатов, чтобы воссоздать базу PGP-2i ("i" означает "international"), версию, получившую после широчайшее распространение.

Уголовное дело против Фила было закрыто в 96-м, и он учредил фирму PGP Inc., которая занялась разработкой PGP-5. Первый публичный релиз состоялся весной 97-го. В августе того же года в Мюнхене на 39-м собрании IETF Фил Циммерман и Джон Каллас обратились к организации с просьбой открыть рабочую группу, призванную опубликовать стандарт, основанный на протоколе, используемом в PGP-5. Стандарт был назван OpenPGP. Главным мотивом к этой инициативе было повсеместное распространение стойкого крипто даже в том случае, если вновь созданная компания в какой-то момент вдруг прекратит продажу и поддержку PGP. И спустя несколько месяцев PGP Inc. была поглощена компанией Network Associates, которая в 2002 году действительно прекратила поддержку и развитие PGP (правда, историю PGP впоследствии продолжила новая компания PGP Corporation).

Хотя PGP часто назывался Свободным Софтом, в действительности, он никогда не соответствовал его требованиям: PGP-5 — явно проприетарная программа; доступность исходного кода сама по себе не делает программу свободной. PGP-2 тоже имел определённые ограничения на коммерческое использование,1 что накладывало ограничения на программу и делало её несвободной. Ещё одной проблемой PGP-2 была необходимость реализации запатентованных алгоритмов RSA и IDEA. Патент на RSA был действителен только в Штатах, но патент на IDEA был и остаётся действительным 2 во множестве стран.

Хотя в плане развития проекта GNU в течение нескольких лет был отмечен пункт о необходимости замены для PGP, начать его реализацию до истечения действия патентов на алгоритмы с открытым ключом не представлялось возможным. Всё изменилось в апреле 1997 года с окончанием действия основного патента (панент США №4200770 на алгоритм Диффи-Хеллмана) и в августе, когда прекратил действие более общий патент на схему Меркла-Хеллмана (№4218582).

Месяц спустя на конференции Individual-Network Betriebstagung[link5] в Ахене Ричард Столлман в продолжение своего выступления на сессии BoF обратился к европейским хакерам с просьбой начать реализацию средств шифрования с открытым ключом. Американский закон об экспорте вооружений не давал возможности проекту GNU написать подобное ПО в собственной стране или силами работающих за рубежом американских граждан. Поэтому он объявил европейцам об их исключительной роли в возможности помочь проекту GNU с криптографическим софтом.

Устав от написания конвертеров для SMGL и не имея проекта "для души", я вскоре обнаружил, что сам копаюсь в коде парсера PGP-2, основанного на RFC 1991 и описании из pgformat.txt. Выяснив, что это достаточно просто, я в итоге подготовил код для расшифрования и генерации PGP2-совместимых данных. После того, как я сообщил руководству GNU, что беру на себя реализацию замены для PGP, я провёл оставшуюся часть года, заменяя IDEA на Blowfish, RSA — на Elgamal, реализуя потоковое шифрование, добавляя инструменты для управления ключами и приводя код в разумную форму.

Был план на создание свободной версии Secure Shell под названием PSST (позднее известной как LSH) с довольно активными дискуссионными группами, поддерживаемыми Мартином Хамилтоном. Мартин был настолько добр, что также открыл список рассылки для g10 и объявил об этом в остальных группах. Так мы получили первых подписчиков. В конце концов, я закончил первый tarball, загрузил его на ftp.guug.de — FTP-сервер German Unix User Group — и опубликовал официальное объявление[link6].3

Буквально на следующий день Питер Гутман предложил воспользоваться его кодом генератора случайных чисел, пригодном для систем без /dev/random. В итоге, это очень помогло в портировании GnuPG на различные платформы. Два последующих месяца были заняты обновлениями кода и продолжительным обсуждением названия; в конце концов мы остановились на предложении Ананда Кумрии — GnuPG — и 24 февраля сделали первый релиз[link7] под новым названием (gnupg-0.2.8). А ещё несколько дней спустя была выпущена экспериментальная версия с поддержкой Windows. (Этот релиз также исправил проблему совместимости с машинами Alpha, выявленную благодаря тому, что лог-файлы ядра забили весь жёсткий диск и админ обратился с вопросом, насколько необходимо сохранять их в бэкап? ;-)

В июле 1998 года впервые была выпущена версия, более-менее совместимая с черновиком OpenPGP. Мэтью Скала предложил свой чисто написанный с нуля код Twofish (алгоритм был тогда многообещающим кандидатом на звание AES и предложенной Шнайером заменой шифру Blowfish; однако, авторский код оставил у нас некоторые опасения по поводу авторских прав). Позднее в том же году Майкл Рот предложил реализацию Triple-DES, что заполнило требуемый OpenPGP набор алгоритмов. В течение следующего года решались обычные проблемы, обсуждались функции, отмечались жалобы, а авторы других программ вводили в них поддержку gpg.

Наконец, 7 сентября 1999 года завершённый код был опубликован[link8] под версией 1.0.0, важным обновлением которой стало "Пособие по приватности GNU" Майка Эшли. 20 сентября следующего года должен был прекратить действие патент на RSA; держатели патента, однако, за три недели до этого передали его в общественное достояние, поэтому уже к 18 сентября мы смогли выпустить версию 1.0.3 с поддержкой RSA. Одно из крупнейший препятствий к повсеместному распространению асимметричной криптографии стало историей (хоть и слишком поздно).

В том же 1999 году Немецкое правительство приняло решение, что стойкая криптография не должна каким-либо образом контролироваться, а её применение должно быть рекомендовано каждому. Чтобы открыто продемонстрировать приверженность этому заявлению, Министерство экономики профинансировало[link9] портирование GnuPG и сопутствующего софта в Microsoft Windows. Американское правительство не было воодушевлено подобными действиями и попыталось убедить[link10] правительство Германии пересмотреть решение о нерегулируемом распространении криптографического ПО. Им не удалось добиться успеха, и в итоге у США не осталось выхода, кроме как ослабить собственные правила по экспорту крипто.

Хотя мы по-прежнему разрабатываем GnuPG, используя серверы, расположенные в Европе, новый американский режим экспортного контроля наконец позволил хакерам из США принять участие в работе над программой. В 2001-м к проекту присоединился Дэвид Шау, и с тех пор он является одним из самых активных разработчиков и соавторов GnuPG.

Много времени минуло с тех пор, когда GnuPG мог вестись как проект "для души", так что теперь большую часть своей профессиональной жизни я трачу на поддержку и расширение программы. В 2001 году я основал "g10 Code", компанию-разработчика свободного софта, занятую развитием и поддержкой GnuPG и связанных с ним приложений. Вероятно, самый известный её проект — это GnuPG-2, начатый под именем NewPG в рамках более крупного проекта Aegypten. Главная цель Aegypten — ввести поддержку S/MIME в GNU/Linux и надёжно интегрировать формат с другими мэйл-клиентами, прежде всего с KMail. И хотя он активно использовался с 2004 года, мы выпустили версию 2.0.0 лишь год назад.

Мы не получили большого удовольствия от написания X.509/CMS-совместимого (обычно называемого S/MIME-совместимым) софта, в сравнении с элегантным и очень интероперативным протоколом OpenPGP. Справившись с этим, мы смогли создать весьма полезную программу, отлично взаимодействующую практически со всеми другими реализациями S/MIME. Также выяснилось, что мы всё-таки сможем портировать GnuPG-2 в Windows, несмотря на мои прежние заявления, что для работы программы необходима современная POSIX-платформа. Эта разработка также показала, что бизнес, занятый Свободным Софтом, тоже может быть жизнеспособным.

С арсеналом новых инструментов, S/MIME и OpenPGP с точки зрения пользователя вскоре перестанут быть столь уж различны. Правда, я не смог не улыбнуться, прочитав сегодня, как небольшой опрос, проведённый на последней конференции RSA Europe показал, что OpenPGP — самый активно используемый криптографический протокол.

Не забывайте, что GnuPG — всего лишь один из инструментов; есть множество других инструментов, предназначенных для решения проблем приватности. Респект и уважуха всем, кто в эти годы работал над написанием и выпуском средств обеспечения приватности!

Удачного хака,
Вернер
© 2007 Вернер Кох
Перевод © 2007 SATtva[link11]


1 Из файла pgpdoc2.txt: "Наконец, если вы желаете превратить PGP в коммерческую программу и делать деньги на её продаже, тогда нам следует договориться, как и я смогу получать с неё деньги. [...] Ни при каких обстоятельствах PGP не должен распространяться без документации PGP, включающей и настоящее Руководство пользователя."

2 "Действителен" в смысле его использования самими держателями патента, независимо от того, считаю ли я "действительной" концепцию софтверных патентов, как таковую. См. http://www.fsfeurope.org/proje.....t/background.en.html[link12].

3 За декабрь было лишь несколько сообщений, в основном касающихся обсуждения патентов.

Ссылки
[link1] http://www.gnupg.org

[link2] ftp://ftp.gnupg.org/gcrypt/historic/g10-0.0.0.tar.gz

[link3] http://www.pgpru.com/biblioteka/statji/analiznadezhnostipgp/istorija

[link4] http://www.pgpru.com/biblioteka/statji/analiznadezhnostipgp/algoritmypgp/simmetrichnyeblochnyeshifry#p1

[link5] http://www.dascon.de/IN-BT97/in-bt-eng/prog.htm

[link6] http://lists.gnupg.org/pipermail/gnupg-devel/1997-December/014131.html

[link7] http://lists.gnupg.org/pipermail/gnupg-devel/1998-February/014208.html

[link8] http://lists.gnupg.org/pipermail/gnupg-announce/1999q3/000037.html

[link9] http://partners.nytimes.com/library/tech/99/11/cyber/articles/19encrypt.html

[link10] http://www.heise.de/tp/r4/artikel/5/5124/1.html

[link11] http://www.pgpru.com/proekt/poljzovateli?profile=SATtva

[link12] http://www.fsfeurope.org/projects/swpat/background.en.html