С CSP мы еще неоднократно встретимся в этой книге, это, на мой взгляд, одна из основных криптографических рабочих лошадок в современном мире информационных технологий. CSP придумывали и разрабатывали, как мне кажется, в первую очередь практики, стремясь сделать простыми и удобными основные криптографические функции в операционной системе Windows. А вот аббревиатуру PKCS - Public-Key Cryptography Standards - придумали в специализированной криптографической
RSA Laboratories люди, более склонные к теоретическим исследованиям и математическим моделям. В этих стандартах расписаны общие принципы решения наиболее типовых криптографических задач, например, как из пароля пользователя выработать секретные ключи для некоторого шифра (PKCS # 5), как создать запрос на сертификат (PKCS # 10) и т.п.
И опять же, стараясь не навязывать обычному читателю скучный набор описаний этих стандартов, я отсылаю программистов на сайт
RSA Laboratories - там все строго и дисциплинированно. А с остальными мы немного поговорим о PKCS # 11 - в некотором роде аналоге-конкуренте CSP.
Если взять наиболее распространенный в Windows браузер -
Internet Explorer - то в нем все криптографические операции выполняет CSP. Использование криптографических операций встречается в IE довольно часто, например, когда вы заходите на сайт по протоколу
SSL: в этом случае весь ваш трафик шифруется с использованием одноразового session key, который также вырабатывается с помощью CSP. А вот в другом и тоже довольно популярном браузере -
Mozilla Firefox - все криптографические операции выполняются с помощью PKCS # 11.
CSP жестко привязан к Windows, в другой операционной системе он не работает, поскольку там нет CRYPTO API от MS. PKCS #11, наоборот, не зависит от каких-то специфических интерфейсов, поэтому Firefox работает как в Windows, так и в
Linux,
MAC OS и прочих альтернативах MS. И, кстати, никаких хитрых подписей в библиотеке PKCS # 11 не требуется.
PKCS # 11 изначально разрабатывался как специализированный криптографический интерфейс для смарт-карт. Если заглянуть в его документацию, то там основными понятиями являются слот и токен - их можно наглядно интерпретировать как считыватель смарт-карт и сама карта. Однако если хорошо покопаться в основном меню Mozilla Firefox, то можно найти раздел «Устройства защиты», а в нем всегда присутствует NSS Internal PKCS # 11 Module - встроенный в этот браузер внутренний модуль PKCS # 11, в котором слоты и токены - не «железо», а некоторые виртуальные объекты. Никто не запрещает программисту написать свой PKCS # 11 тоже с виртуальными слотами и токенами. Однако в большинстве случаев интерфейс PKCS # 11 входит в комплект поставки смарт-карты как универсальное средство использования этой карты в программных приложениях.
Корейцы, естественно, после того, как была наглядно доказана порочность хранения секретного ключа для Internet Banking в оперативной памяти компьютера, заинтересовались PKCS # 11. Эволюция, по моим грубым прикидкам, происходила примерно так:
1998 - 2003 - первая версия Internet Banking, для диалога с банковским сервером используется технология
ActiveX с собственными внутренними криптографическими функциями. Возможности использования CSP заложены, но реально не работают, все ключи - в памяти компьютера.
2003 - 2006 - появляется возможность использования Smart Card CSP, где секретные ключи всегда находятся только внутри Smart Card. Для диалога с банковским сервером - прежний чуть доработанный ActiveX, ориентированный на CSP.
2006 - 2009 - появляется ActiveX, ориентированный на PKCS # 11. В 2007 году корейское
KISA (Korean Information Security Agency) объявляет открытый конкурс на разработку чипа для смарт-карты и интерфейса PKCS #11 к нему.
Таким образом, у корейцев произошло смещение первоначальных приоритетов от CSP к PKCS # 11. На мой взгляд, это объективный процесс, поскольку PKCS # 11 более универсален и многообразен, хотя на первый взгляд кажется громоздким.
Ну и в заключение о стандарте PKCS # 11: в 2008 году KISA выдала первые 7 сертификатов, из них в 3 использовалась моя разработка PKCS # 11.
А теперь, наконец, о моем самом любимом криптографическом стандарте - OpenSSL. Строго говоря, это не стандарт, а общедоступная, бесплатная, наиболее популярная библиотека криптографических процедур, выложенная вместе с исходными кодами на сайте
OpenSSL. Но прежде чем окунуться в OpenSSL - некоторые страницы недавней криптографической истории. Я уже приводил их в книге «Практическая криптография».
"В соответствии с решением Конгресса США (Закон 103-160 от 30 ноября 1993 г.), министру обороны предписывалось:
- поручить Национальному совету по исследованиям (NRC) провести детальное исследование по криптографическим технологиям и национальной политике в области криптографии;
- дать указание Национальному агентству безопасности (NSA), Управлению высших исследовательских проектов (ARPA) и другим органам министерства обороны, а также другим федеральным органам оказывать полное содействие NRC в этой работе….
В этом исследовании предлагалось дать оценку воздействия криптографических технологий на интересы правительства США по обеспечению национальной безопасности, интересы правоохранительной деятельности правительства США, коммерческие интересы промышленности США и интересы охраны неприкосновенности личной жизни граждан США, а также влияния контроля над экспортом криптографических технологий на коммерческие интересы промышленности США….
Отчет был подготовлен комитетом из 16 специалистов, представляющих науку (информатику, правоведение, медицину), государственные учреждения, частные фирмы и банки, и отрецензирован другой группой экспертов. Предварительная версия отчета вышла 30 мая 1996 г. и распространялась (бесплатно) издательством, а также доступна по Интернету в виде фотокопий страниц по
http://www.nap.edu/readingroom/… Комитет пришел к выводу, что преимущества широкого распространения криптографии перевешивают его недостатки, и призвал к изменению национальной политики в криптографии. Эта политика должна преследовать следующие цели:
широкая доступность криптографии для всех законных элементов американского общества;
дальнейший экономический рост и лидерство ключевых отраслей промышленности США в глобальной экономике, в том числе (но не только) производства компьютеров, программного обеспечения и средств связи;
общественная безопасность и защита от внешних и внутренних угроз.
Рекомендации комитета по национальной криптографической политике включают следующее.
- Никакой закон не должен препятствовать производству, продаже или использованию любых видов шифрования в пределах США.
- Национальная политика по криптографии должна разрабатываться исполнительной и законодательной ветвями власти на основе открытого публичного обсуждения и основываться на подчинении закону.
- Национальная политика по криптографии в отношении разработки и использования коммерческой криптографии должна лучше согласовываться с силами рынка.
- Экспортные ограничения на криптографию должны постепенно смягчаться, но не должны быть отменены полностью.
- Правительство должно принять меры, чтобы помочь правоохранительным органам и органам национальной безопасности приспособиться к новым техническим реальностям информационного века.
- Правительство должно разработать механизмы для обеспечения информационной безопасности в частном секторе."
Это выдержка из американского отчета "Роль криптографии в обеспечении безопасности информационного общества" (Cryptography's Role in Securing the Information Society. Kenneth W. Dam and Herbert S. Lin, Editors. Committee to Study National Cryptography Policy, Computer Science and Telecommunications Board, Commission on Physical Sciences, Mathematics, and Applications; National Research Council. National Academy Press, Washington D.C., 1996, 688 p., index. Library of Congress Catalog Number 96-68943,
ISBN 0-309-05475-3.)
Американцы и здесь стали законодателями криптографической моды. Десятилетиями проповедовавшаяся идеология секретности в криптографии впервые рухнула в Америке. На рубеже 2000-х годов надежные криптографические алгоритмы стали достоянием гражданской криптографии, конкретным и ощутимым ударом по этой идеологии секретности стал OpenSSL. На мой взгляд, OpenSSL наиболее полно сочетает в себе криптографию и свободу. Свободу творчества и обмена криптографическими идеями и технологиями.
Вот
оригинальные условия использования исходного кода из OpenSSL:
Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
All rights reserved.
This package is an SSL implementation written
by Eric Young (eay@cryptsoft.com).
The implementation was written so as to conform with Netscapes SSL.
This library is free for commercial and non-commercial use as long as
the following conditions are aheared to. The following conditions
apply to all code found in this distribution, be it the RC4, RSA,
lhash, DES, etc., code; not just the SSL code. The SSL documentation
included with this distribution is covered by the same copyright terms
except that the holder is Tim Hudson (tjh@cryptsoft.com).
Copyright remains Eric Young's, and as such any Copyright notices in
the code are not to be removed.
If this package is used in a product, Eric Young should be given attribution
as the author of the parts of the library used.
This can be in the form of a textual message at program startup or
in documentation (online or textual) provided with the package.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
3. All advertising materials mentioning features or use of this software
must display the following acknowledgement:
"This product includes cryptographic software written by
Eric Young (eay@cryptsoft.com)"
The word 'cryptographic' can be left out if the rouines from the library
being used are not cryptographic related.
4. If you include any Windows specific code (or a derivative thereof) from
the apps directory (application code) you must include an acknowledgement:
"This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
The licence and distribution terms for any publically available version or
derivative of this code cannot be changed. i.e. this code cannot simply be
copied and put under another distribution licence
[including the GNU Public Licence.]
Вкратце эти условия можно пересказать так: вот вам исходники, делайте с ними все, что хотите, только не забудьте при этом упомянуть их авторов, и в первую очередь Эрика Янга.
Не забудем! Эрик Янг, Тим Хадсон и вся команда OpenSSL сделали для популяризации криптографических методов намного больше, чем все АНБ, КГБ-ФАПСИ-ФСБ и прочие секретные ведомства, вместе взятые. Ибо в OpenSSL приведены хорошо отлаженные исходные коды практически всех современных криптографических алгоритмов. Отпал вечный вопрос о закладках и «потайных ходах» - влезайте в исходники и можете сами убедиться в их честности. Сам принцип широкой открытой публикации довольно сложных криптографических алгоритмов является гарантией отсутствия в них каких-то критических ошибок или неоптимальных методов реализации: тестировщиков - миллионы, если разработчики что-то проглядели - моментально выявят и подправят.
Появление OpenSSL решило и еще одну важную задачу: ликвидацию самопальных разработок криптографических алгоритмов. Ведь любой программист, начиная создавать какую-то криптографическую программу, интуитивно пытается сам реализовать основные необходимые криптографические алгоритмы:
RSA,
DES,
RC 2 -
5,
SHA1,
MD 2 -
5 и т.п. Оказывается, что этого делать не надо, как, например, не надо писать своей операционной системы. В OpenSSL есть уже готовые исходные коды, распространяемые свободно и бесплатно. Нужно только не прятать голову под крыло и честно признаться, что коды взяты из OpenSSL.
К такому выводу я пришел примерно через 2 года работы в Корее. А начало было такое...
У корейцев была самопальная разработка основных криптографических алгоритмов, ее осуществляла компания
ETRI в исследовательском центре города Дей-Джона. OpenSSL в те времена (2002-2003 гг.) по каким-то причинам в Корее не использовалась. Прямо в аэропорту мой новый корейский босс - мистер Ли - ставит мне задачу: разработать CSP. Примерно через месяц становится ясно, что нужны готовые реализации базовых криптографических алгоритмов, а про OpenSSL в то время у меня были еще достаточно смутные представления. И тут мистер Ли приходит мне на помощь: садится на свою машину и едет в Дей-Джон, примерно за 100 километров от Сеула, добывать на ETRI исходники базовых криптографических алгоритмов. Как он там их добывал - неизвестно. Но к концу дня довольный мистер Ли привез из Дей-Джона флешку с исходниками ETRI - прямо сюжет для очередной серии мультфильма «Шпионские страсти»: по заданию бывшего подполковника КГБ из корейского исследовательского центра крадутся исходные тексты криптографичеких программ, аналоги которых выложены в OpenSSL. Предлагаю этот сюжет всем желающим на основе лицензионного соглашения OpenSSL.
После двух лет работы в Корее, когда я уже ясно представлял себе, что такое OpenSSL, я «под ноль, бульдозером» выкорчевал из всех своих программ продукцию ETRI и заменил ее на OpenSSL.
..............................
Криптографического самопала в России - море. Когда я вернулся в Россию на криптографическую софтверную фирму, то сразу же честно признался, что моими любимыми продуктами являются Borland C++ Builder и OpenSSL. Первая реакция: Borland - загнивает (уже лет 20 и никак не загниет), а OpenSSL - чуждый зарубежный продукт. Нужно все свое. Про
свое - не новая песня, ее (
заменим все зарубежное ПО на свое) пели около пяти лет назад даже некоторые высокопоставленные чиновники. Однако, как говорил В.С. Высоцкий, «Пусть жизнь рассудит...» Примерно через те же два года OpenSSL и в России был признан как светлое будущее всех прогрессивных криптографов, а самопал стали выкорчевывать и заменять на Эрика Янга. Диалектика!
Назад Продолжение В начало книги Криптография и Свобода - 2