Category: it

Category was added automatically. Read all entries about "it".

Отрывок из книги "КРИПТОГРАФИЯ И СВОБОДА - 3"

Глава 1.2. Цифровизация

            

             «Цифровизация – наше светлое будущее» - такой лозунг все чаще можно слышать сейчас где угодно. А что такое цифровизация? И как она связана с криптографией? Мне, например, чисто интуитивно кажется, что цифровизация тесно переплетена с криптографией и, в первую очередь, с цифровой подписью. И, следовательно, настоящая цифровизация означает широкое применение криптографии в повседневной жизни. И тут уже встает такой каверзный вопрос: возможна ли настоящая цифровизация при существующей в настоящее время в России и описанной в предыдущих главах «криптографической политике»? При ее фактических запретах на общепризнанные международные криптографические стандарты, кулуарные процедуры выбора общероссийских криптографических стандартов, чиновничью монополию на криптографию?

             На мой взгляд, возможны два варианта.

             Первый (наиболее вероятный). Чиновники объявят о наступлении какой-нибудь «квалифицированной цифровизации», как уже объявили о «квалифицированных сертификатах».

             Второй (невероятный). Криптографическая политика в России кардинально изменится.

             Давайте сначала представим себе этот невероятный второй вариант.




Криптографическая утопия

             «Остапа понесло…»

***

Россия лет так через *дцать. Всем, даже школьникам, понятно, что криптография – это специфический раздел математики, ее простейшие основы начинают изучать еще в средней школе: что такое шифрование, цифровая подпись, криптографические ключи и т.п. Без этого в дальнейшей жизни будет трудно. А при получении высшего образования – более углубленный курс: симметричные и асимметричные криптографические алгоритмы, RSA, алгоритм Диффи-Хеллмана и его ЕС-разновидности и многое другое, в зависимости от профиля учебного заведения.

Большинство крупных компаний при приеме на работу проводят с соискателем криптографический экспресс-экзамен. Если кандидат в бухгалтеры, например, не понимает, что такое цифровая подпись и не знает, чем секретный ключ отличается от открытого, то шансов устроиться на работу у него нет.

             У каждого россиянина есть свой персональный цифровой секретный ключ для цифровой подписи. И, может быть, даже не один, в зависимости от назначения подписи. Сама процедура цифровой подписи очень проста, гораздо проще, чем нынешняя подпись с помощью авторучки. Наиболее простой способ: приложи свой смартфон к сканеру – и все, больше ничего не надо, хотя подписывать можно с помощью чего угодно: компьютера, планшета, мобильного телефона, смарт-часов и всего прочего, где есть простенький процессор. Цифровой секретный ключ может быть записан там, где удобно, но есть специализированные чипы повышенной защищенности, предназначенные для секретных ключей. Их много и они от разных производителей, как российских, так и зарубежных.

В качестве персонального секретного ключа можно также использовать свои индивидуальные биологические параметры: отпечатки пальцев или сетчатку глаза. Такую подпись назвали биоцифровой. В этом случае вообще никаких устройств не нужно: достаточно приложить палец к сканеру или посмотреть на считыватель сетчатки. Программа, установленная на сканере или считывателе сетчатки, автоматически считывает отпечаток или сетчатку, вычисляет по ним секретный ключ для подписи, отыскивает в специализированной базе данных персональный сертификат, который включается в состав подписи, и осуществляет подпись. Правда, еще с доцифровых времен ведутся дискуссии, насколько безопасна такая процедура, поскольку при ней персональный секретный ключ попадает в память постороннего устройства. При подписи с помощью смартфона, например, персональный секретный ключ никуда во вне не выходит, поэтому подпись с помощью смартфона считается более безопасной, чем биоцифровая. Но это знает каждый школьник и каждый решает сам: пользоваться биоцифровой подписью или нет.

Времена, когда в России запрещали международные криптографические алгоритмы, вспоминаются примерно так же, как мы сейчас вспоминаем времена, когда кибернетику считали буржуазной лженаукой. Все запреты не выдержали испытания реальной жизнью и канули в небытие вместе с теми, кто их придумывал.

             Никто не понимает, что такое существовавшая в доцифровую эпоху «графологическая экспертиза подписи» и как с ее помощью можно признать подпись недействительной. Все думают, что это проверка смартфона при поднесении его к сканеру для осуществления подписи. Видимо, такая экспертиза проверяет, не разбит ли дисплей на смартфоне. Но почему подпись с разбитым дисплеем признается недействительной и что считать разбитым дисплеем – неразгаданные загадки доцифровой эпохи.

             Цифровизация широко проникла во власть. Начался лавинообразный процесс отмены  разных  доцифровых криптографических запретов с учетом, в первую очередь, их экономической эффективности. Быстро оценили неэффективность запрета использования международных криптографических алгоритмов, отменили, в силу запутанности и сомнительной целесообразности, всякое существовавшее ранее лицензирование криптографической деятельности, сделали строгой, понятной и доступной процедуру экспертизы криптографических решений. В результате начался лавинообразный процесс использования криптографии вообще и цифровой подписи в частности.

             Биоцифровая подпись, несмотря на сомнения в ее безопасности, стала очень популярной: ведь для нее никакого своего устройства вообще не требуется. Как раньше, в древнюю-предревнюю доцифровую эпоху, везде стояли будки с телефонами-автоматами, так в развитую цифровую эпоху появились будки «Подключись к цифре». Заходит в такую будку какая-нибудь бабушка лет под 70, безо всякого смартфона, только со своим цифровым паспортом – ID карточкой. «Вставьте Вашу ID карточку и приложите палец к считывателю» - даже бабушке понятно. Через минуту – сообщение: «Вы успешно подключены к цифровой России». Что за это время произошло? Имеющееся в цифровой будке устройство считало бабушкин отпечаток пальца, вычислило по нему уникальный секретный RSA-ключ, по этому ключу и бабушкиной ID карточке сформировало запрос на получение персонального сертификата и направило его во всероссийский Удостоверяющий Центр. Никаких персональных данных в запросе нет, только уникальный идентификатор ID карточки - UID. Удостоверяющий Центр по UID определил, что раньше сертификат для такого UID не выдавался, а если выдавался – то автоматически отзывает его. Формируется новый сертификат и заносится в общедоступную всероссийскую базу данных сертификатов на LDAP-сервере. Все!

             Приходит после этого бабушка, например, на избирательный участок. Голосовать. А там под каждым портретом кандидата – сканер для снятия отпечатка пальца. Бабушка выбрала того, кто ей больше понравился, и приложила к его сканеру свой палец. Компьютер, к которому подключен сканер, сначала вычислил по отпечатку открытый ключ и направил запрос во всероссийскую базу данных сертификатов. Там по открытому ключу нашли бабушкин сертификат и послали его в ответ компьютеру. Компьютер, получив сертификат, вычислил по отпечатку секретный ключ и с его помощью сформировал бабушкину биоцифровую подпись, включил в нее  сертификат и послал все это в ЦИК. В ЦИКе проверили, что по этому сертификату раньше не голосовали, а если голосовали, то предыдущий голос автоматически аннулируется, затем проверили поступившую подпись и учли бабушкин голос. Все!

               Как полезли изо всех своих статистических щелей разные Гауссы после появления биоцифровой подписи!

             Общение власти с народом стало, в основном, цифровым. Резко возросло число различных правдивых соцопросов. В зависимости от важности используется цифровая или биоцифровая подпись и  проверка подписей всех участников опроса не составляет особой проблемы, ибо сервера с сертификатами, содержащими открытые ключи практически всех россиян, общедоступны. Организовать практически любой соцопрос легко может практически любой россиянин. Биоцифровая подпись очень популярна при различных опросах, проводимых в общественных местах.

Чье имя должен носить космодром, откуда запускаются ракеты к Луне?

1.      {C}С. П. Королева

2.      {C}Ю. А. Гагарина

3.      {C}Д. О. Рогозина

И три сканера, к которым надо только палец приложить. Поставили эти сканеры на станции метро «Площадь Революции», рядом с собачьей мордой, которую все раньше трогали руками и затрогали до блеска. Теперь народ стал трогать сканеры, а собачке полегчало. До блеска затрогали сканеры, но не все.

             Слово «коррупция» устарело и стало синонимом доцифровой эпохи. Бизнес тоже сделался цифровым, вперед вырвались компании, производящие hardware и software для цифровизации. Появились реальные российские конкуренты у Microsoft, Apple, Oracle и других западных IT-гигантов, ибо все российские специалисты и программисты бросились возвращаться назад, особенно после того, как для гарантии необратимости цифровой эпохи приняли специальный закон об оскорблении чувств здравомыслящих.

***

- Утром – закон, днем – специалисты, днем – закон, вечером – специалисты, вечером – закон…

- А нельзя ли так: утром – специалисты, а вечером – закон?

- Можно и так. Но ЗАКОН – ВПЕРЕД!!!

***

В этом законе противоречия между словом и делом были признаны оскорблением чувств здравомыслящих. Появилось даже такое понятие, как противоречие между словом и делом в особо крупных размерах.

Как следствие, у многих российских чиновников доцифровой эпохи, публично призывавших россиян к патриотизму и национальной гордости, была отобрана вся их зарубежная недвижимость и продана с аукциона. На вырученные деньги закупили современные компьютеры для сельских школ, наладили в деревнях медицинскую помощь, предоставили этим чиновникам жилье в средней полосе России, равноценное по площади отобранному. И еще на цифровизацию деньги остались…

Чиновники притихли, не стали публично говорить, что «во всем виновата Америка», чаще стали вспоминать, у кого роскошная недвижимость. Сразу же резко поубавилось число владельцев такой недвижимости, поскольку упоминание о ней стало противоречить соответствию доходов и расходов, что также было признано оскорблением чувств здравомыслящих.

Не забыли и о криптографии. Согласно одному из разделов закона,  пропаганда существовавших в доцифровую эпоху криптографических запретов приравнялась к пропаганде наркотиков.

Настоящее высшее образование стало резко повышать авторитет и уважение к человеку. В России вновь героями фильмов стали умные очкарики, типа Шурика из «Операции Ы», на все готовые, лишь бы сдать экзамен на 5.

-             Конспект есть?

-             Ребятам отдал, вон читают.

Российские центры разработки решений для цифровизации стали такими же известными, как и Кремниевая долина. Располагаться они стали в местах, раньше считавшихся медвежьими углами. Туда потянулись современные автодороги, бесплатный высокоскоростной Интернет, быстро возникла обширная инфраструктура. Но и медведи тоже остались, как же без них.

Кто не знает про Кремниевую долину – цитирую Википедию: «Кремниевая долина - юго-западная часть консолидированного метрополитенского статистического ареала (агломерации-конурбации) Сан-Франциско в штате Калифорния (США)… Метрополитенский статистический ареал – это урбанизированная зона вокруг одного или нескольких крупных городов-ядер с высокой плотностью населения и с тесными экономическими связями.»

Таким образом, медвежьи углы тоже стали частями консолидированного метрополитенского статистического ареала (агломерации-конурбации), только не в США, а в России. Типичным примером агломерации-конурбации стала деревня Гузеево Лесного района Тверской области, входящая в урбанизированную зону вокруг Москвы.

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

Россия стала центром поисковых криптографических исследований. Регулярно стали проводится открытые международные конкурсы на создание наилучших криптографических алгоритмов. В Интернете появилось множество российских порталов, посвященных анализу представленных на конкурсы кандидатов, оценке их криптографических и эксплуатационных качеств. Алгоритмы, не участвующие в этих конкурсах, вызывают усмешку у большинства россиян и не имеют никаких шансов на использование в эпоху цифровизации.

На месте, где когда-то стояла Стекляшка, теперь – площадь Свободной Криптографии. Здесь танцуют.

В метро иногда можно встретить интересных просителей.

Люди добрые! Простите, что обращаюсь к Вам. Я – жертва цифровизации, был раньше чиновником, подписывал по 250 бумаг в день, и совсем разучился делать что-либо еще. А сейчас эти бумаги стали никому не нужными, а с ними и я стал никому не нужным безработным, голодаю и пропадаю. Подайте, кто сколько может!

Сердобольные математики и программисты подают: кто копеечку, а кто и рублик.

***

             Внутренний голос сказал: «Проснись!»


Вся книга в формате PDF

Криптография и Свобода - 2

amd64; Bulldozer (600f12); 2011 AMD FX-8150; 4 x 3600MHz; bulldozer, supercop-20120310

Cycles/byte for long messages

quartile

median

quartile

hash

6.51

7.00

7.22

blake512

8.09

8.10

8.12

keccakc512treed2

8.41

8.44

8.69

blake64

8.66

8.67

8.72

skein512256

8.67

8.68

8.70

skein512512

9.08

9.12

9.23

skein256256

8.87

9.16

9.58

bblake256

11.79

11.80

11.83

blake256

12.79

12.81

12.89

skein10241024

13.00

13.02

13.02

groestl256

13.40

14.02

14.24

sarmal512

14.00

14.03

14.21

keccakc256

15.77

16.15

16.34

sha512

16.26

16.33

16.40

keccakc448

17.13

17.23

17.32

keccakc512

17.40

17.41

17.41

jh224

17.41

17.42

17.43

jh384

17.42

17.42

17.42

jh256

17.42

17.43

17.44

jh512

18.28

18.37

18.41

keccak

18.62

18.63

18.64

groestl512

20.24

20.25

20.25

round3jh256

20.23

20.26

20.26

round3jh512

22.32

22.43

22.44

sha256

22.58

22.61

22.64

keccakc768

32.48

32.55

32.67

keccakc1024

32.72

33.28

33.73

mgrostl256

36.52

36.71

36.86

md6d224

39.35

39.46

39.91

md6d256

47.47

47.67

47.94

simd256

50.53

50.62

50.78

md6d384

50.83

51.12

51.33

shavite3512

56.80

57.44

57.77

mcssha5

56.76

57.51

58.70

mcssha4

57.23

57.77

58.65

mcssha6

61.41

61.55

61.80

md6d512


В 2009 году последствия мирового экономического кризиса затронули и Южную Корею. В начале 2009 года сильно упал курс национальной корейской валюты – вона. Еще в начале 2008 года 1 доллар стоил примерно 950 вон, то в феврале этот курс опустился до 1600, правда, ненадолго, всего через месяц он поднялся до 1300 вон. Меня все чаще стало тянуть домой, в Россию. Масса идей: как сделать полноценный Internet-Banking, как применять международные криптографические стандарты, CSP, PKCS#11, смарт-карты. И, наконец, сколько можно использовать тяжеловесные и медленные национальные криптографические алгоритмы, в частности алгоритм хеширования ГОСТ Р 3411? Былые обиды за 6 с лишним лет пребывания в Сеуле немного подзабылись, но иллюзий насчет открытых криптографических конкурсов и коренного изменения криптографической политики в России у меня не было. Был за плечами накопленный за 6 лет опыт работы в зарубежной компании, масса собственных разработок и, наконец, опыт выхода в «мировое криптографическое сообщество» со своими MCSSHA.

Может быть, в каком-то, не знаю уж и каком, будущем эти идеи смогут стать востребованными в России?

Назад                                Продолжение
В начало книги Криптография и Свобода - 2

Криптография и Свобода - 2

Итак, у нас есть некоторое фиксированное конечное заполнение регистра после t тактов работы: (yt,yt+1,…,yt+N-1), которое было получено после подачи на вход регистра длины N некоторого сообщения M1 = m1(0),m1(1),…,m1(j) при том, что прокрутка осуществлялась с «дырками»: после подачи на вход одного байта сообщения – два «холостых» такта, т.е. таких, когда на вход подается 0. Мы хотим его «захватить» (capture), т.е. подобрать другое сообщение M2 = m2(0),m2(1),…,m2(j), такое, что его конечное заполнение (zt,zt+1,…,zt+N-1) будет совпадать с (yt,yt+1,…,yt+N-1). Сообщение начинаем подбирать не с начала, а с конца. Например, первая строка таблицы – это заполнения регистров за один шаг до совпадения - (yt-1,yt,…,yt+62) и (zt-1,zt,…,zt+62). Отличие в них может быть только по одной координате: yt-1 ≠ zt-1. Поскольку на последнем шаге значение m2(j) добавляется линейно, то обеспечить совпадение последней координаты не составит никаких проблем: m2(j) = π(yt-1–yt–yt+59+yt+62)+m1(j) - π(zt-1–zt–zt+59+zt+62). Здесь вероятность правильного подбора равна 1. А вот за два шага до совпадения ситуация иная. На вход подается дырка, и совпадение получается только в том случае, если было обеспечено выполнение условия yt-2–yt-1=zt-2–zt-1. Дырка свое дело сделала, подобрать какие-то соотношения для символов M2, при которых это равенство выполнялось бы безусловно, не удается, остается только предполагать, что такое может случиться с вероятностью 2-8. Именно это и требуется для хеширования. Поехали дальше. За три шага до совпадения. Условие совпадения: yt-3–yt-2=zt-3–zt-2. А вот тут-то, отъехав назад аж до 67 шага, видим, что подбором значения m2(j-22) можно добиться этого совпадения с вероятностью, близкой к 1. Действительно, это же элемент знакомой нам по первой книге матрицы частот P(π), у которой на пересечении i-ой строки и j-го столбца стоит число решений системы

x – y = i;

        π(x) – π(y) = j;

А в логарифмической подстановке это число почти всегда равно 1 для ненулевых i и j.

Так может не надо использовать логарифмические подстановки в MCSSHA? Нет, мне кажется, что именно логарифмические подстановки наиболее пригодны для MCSSHA, ибо с их помощью можно получить гарантированные оценки трудоемкости подобного метода захвата. Решение системы с большой вероятностью однозначное, следовательно, требуемое значение m2(j-22) - тоже только одно. Но тогда на других местах с «чистыми дырками» (например на упоминавшемся выше шаге 2 до захвата) требуемые соотношения получаются с вероятностью 2-8, ибо возможностей для подбора предыдущих значений M2 не остается никаких других, кроме случайных. А если взять, к примеру, антипод логарифмической подстановки – линейную подстановку π(x) = ax + b, то, как нетрудно видеть, ей никакие дырки не помогут, система разваливается и элементарно решается.

Исходя из этих соображений, я получил оценки вероятности «захвата» для алгоритма MCSSHA при различных значениях длины регистра:

SR length (bytes)

Steps with probability 1

Steps with probability ≈1

Steps with probability 2-8

Total Probability

64

22

20

22

<2-176≈10-52

128

44

40

44

<2-352≈10-105

Экстрим закончен, дальше можно двигаться спокойнее. Наводим блеск и лакировку на оригинальную криптографическую идею дырок на входе в регистр.

Выдавать заполнение регистра в явном виде в качестве результата хеширования нельзя. Ну, например, потому, что от последнего знака текста зависит только последний знак регистра, а это противоречит требованиям NIST: любое изменение в тексте должно приводить к появлению абсолютно новой, случайной и равновероятной хеш-функции. Ну, тут уже проблем меньше: подача текста на вход закончилась, можно подать полученное заполнение в качестве входа на такой же или подобный регистр, но уже без всяких дырок, и прокрутить несколько раз. Именно это я и сделал, в результате получился алгоритм хеширования MCSSHA-3, который я и послал в NIST в установленные регламентом сроки, т.е. до наступления deadline.

«Головокружение от успехов». Именно такими словами товарища Сталина я бы сейчас охарактеризовал свои действия в последние недели перед deadline. За короткие сроки придуман оригинальный алгоритм, решена давно не дававшая мне покоя задача пристроить куда-нибудь логарифмические подстановки, оценки стойкости – ломовые, скорость – весьма приличная. А блеск и лакировка – дело десятое, главное – оригинальная идея!

«NIST will NOT accept modifications to the submitted algorithms during Round 1». Этой фразе в требованиях NIST я поначалу не придавал значения: исследовательская задача, как же с первого раза – и безо всяких изменений и доработок? А потом интуитивно ясно, что главная задача моего участия в этом конкурсе – публично заявить об оригинальных российских криптографических идеях и разработках, которые по разным причинам оказались похоронены в России. Надеяться на то, что эти идеи окажутся приняты в качестве нового мирового стандарта хеширования, можно было только втайне от самого себя. Мне больше была интересна реакция на них «мировой криптографической общественности», внешние криптографические аргументы и контраргументы за и против них.

Итак, наступил долгожданный deadline и появились описания всех алгоритмов-кандидатов, допущенных NIST для участия в первом раунде конкурса. Одновременно появился полуофициальный сайт с очень симпатичным названием: The SHA-3 Zoo. Там тоже есть все кандидаты, а также мнения о каждом из них независимых криптографических экспертов. Оппонентами алгоритмов хеширования типа MCSSHA стали Jean-Philippe Aumasson (Nagravision SA, Switzerland) and Mar´ıa Naya-Plasencia (INRIA projet-team SECRET, France). С MCSSHA-3 они обошлись по-простому, не вдаваясь ни в какие дебри. В нем длина регистра при подаче на него хешируемого сообщения была в точности равна длине требуемой хеш-функции. В регистре есть «критические точки», т.е. такие, на которые при построении последнего заполнения поступали знаки сообщения. Остальные, на которые поступали «дырки», назовем некритическими. В MCSSHA-3 на один знак сообщения приходилось три «дырки», поэтому ¼ часть точек – критическая, а ¾ - нет. Генерим случайные сообщения, совпадения критических точек обеспечиваем решением уравнений, а некритические точки – методом, использующим парадокс дней рождения. Сокрашение трудоемкости с требуемых 2N/2 до 23N/8. Тут же на «клетку» с MCSSHA-3 в SHA-3 Zoo повесили табличку «2nd preimage», что означает: получено снижение оценок стойкости по сравнению с brute force при анализе по поиску коллизий второго типа.

Лазил, лазил по горам, а до такой очевидной вещи так и не долез! И ведь защититься от нее – элементарно. Ну кто, спрашивается, просил меня на первом этапе, пока сообщение подается на вход регистра, делать длину регистра равной длине хеш-функции? Явное головокружение от успехов, сделал бы на первом этапе длину регистра раза в два больше, благо на скорости это почти никак не сказывается: в программной реализации сдвигаются не сами байты в регистре, а точки съема, значение которых затем приводится по модулю длины регистра. Даже в некоторых случаях будет быстрее. Например, при N = 224 и 384 я зачем-то приводил значения точек съема по этим модулям, в то время как если бы взять, например, длину регистра 256 или 512, то и приведение по этим модулям реализуется быстрее. Ну и самое главное: в MCSSHA-3 я использовал три «дырки» после каждого знака, а увеличив длину регистра можно вполне обойтись и двумя и опять-таки увеличить скорость. Приведение же к нужной длине запросто можно осуществить на втором этапе, когда включившее в себя все знаки сообщения заполнение регистра подается на вход другого регистра, длина которого уже совпадает с длиной хеш-функции.

«Поезд ушел» - примерно так ответили мне в NIST, когда я попросил внести изменения в свою заявку. Но описание алгоритма MCSSHA-4, в котором проблемы MCSSHA-3 были устранены, я всеми правдами и неправдами протащил в материалы The First SHA-3 candidate conference, которая проходила в бельгийском городе Leuven с 25 по 28 февраля 2009 года.

С «дырками» ситуация прояснилась, те подходы, которые имели место для MCSSHA-3 оказались непригодны, когда длина регистра при подаче на его вход сообщения была увеличена в два раза. Вроде остается пустячок: заполнение фиксированной длины пропустить пару раз через регистр нужной длины. И тут мои зоркие оппоненты подметили то, что от меня ускользнуло.

Возьмем, к примеру, длину хеш-функции равной 32 байтам. Одним из требований к идеальной хеш-функции является то, чтобы трудоемкость построения сообщения с фиксированным значение хеш-функции составляла в данном случае примерно 232*8 операций. На этом требовании и подловили меня мои оппоненты в MCSSHA-4.

На первом этапе (pre-image computation) используется регистр длиной 64 байта, а на втором (final hash computation) – 32 байта. Займемся повнимательнее вторым этапом. В нем на регистр длины 32 два раза подается одно и то же входное слово длины 64, при этом начальное заполнение регистра R0 = (0, 1, 2,…,31). Попробуем построить сообщение, которое на первом этапе дает конечное заполнение y0,y1,…,y63 такое, при котором на втором этапе R0 переходит само в себя. Методика простая: для произвольных случайных y0,y1,…,y31 вычисляем состояние R1 регистра и для него однозначно находим y32’,y33’,…,y63’, переводящие его в R0. Дергаем случайные сообщения, получаем какие-то y0, y1,…,y31, вычисляем для них y32’,y33’,…,y63’ и пытаемся дописать сообщение так, чтобы последующие 32 байта совпали с y32’,y33’,…,y63’. Из этих 32 байт 22 – случайные, приходящиеся на «дырки», а 10 – на символы текста, которые однозначно подбираем. Если удалось подобрать, то значение хеш-функции такого сообщения будет совпадать с R0. Трудоемкость – 222*8, не выполнено условие «preimage resistance of approximately n bits».

Да, JP & Marıa (именно так они всегда подписывали свои письма, посылаемые мне по e-mail) нельзя было отказать в оригинальности их криптографического мышления. На Namhansanseong не полезли, обошлись без экстрима.

Я тогда сильно переживал за свои «головокружения от успехов». Неужели хорошая и перспективная идея с «дырками» в неавтономном регулярном регистре сдвига оказалась перечеркнутой от того, что мне не пришло в голову сразу же навести на нее необходимый криптографический блеск? Лихорадочно сделанные и помещенные на мой корейский сайт (сейчас он, к сожалению, закрыт, и ссылки на него из NIST не работают) очередные две модернизации: MCSSHA-5 и MCSSHA-6, к сожалению, не прикрыли полностью проблемы второго этапа алгоритмов типа MCSSHA. Во второй раунд SHA-3 моя заявка не прошла, и я потерял к этому конкурсу первоначальный интерес.

Сейчас, спустя почти три года после этих событий, мне по-прежнему кажется, что идею «регистра с дырками» можно довести до совершенства и создать на ее основе идеальную хеш-функцию, не допускающую никаких снижений трудоемкости по сравнению с brute force. И защититься от атаки JP & Marıa тоже можно сравнительно несложно: например, второй раз подавать на вход регистра перевернутый вектор y0,y1,…,y63. Для оценки и сравнения скорости работы алгоритмов типа MCSSHA я послал их в Иллинойс профессору Бернштейну. Там сейчас проводится тестирование скорости всех присланных алгоритмов хеширования на различных компьютерах. Результаты показывают, что по скорости MCSSHA является далеко не худшим из известных алгоритмов хеширования. Вот, например, один из последних результатов.


Назад                                Продолжение
В начало книги Криптография и Свобода - 2

Криптография и Свобода - 2

MCSSHA

SHA-1 – нестойкий! Такая новость облетела криптографический мир в 2005 году. Но ведь SHA-1 – алгоритм хеширования, а в алгоритме хеширования нет никаких секретных ключей, здесь ничего не шифруется, что понимается под его стойкостью? Тут надо заметить, что одной из основных сфер использования алгоритма хеширования является ЭЦП, когда для применения математического аппарата электронной подписи сообщение произвольной длины нужно «сжать» в его хеш-функцию фиксированной длины, из которой затем с помощью секретного асимметричного ключа вычисляется подпись, а с помощью открытого - проверяется. Здесь слово «сжать» умышленно поставлено в кавычки, поскольку классическое сжатие предполагает возможность последующего восстановления исходного сообщения из сжатого текста, а для алгоритма хеширования, наоборот, возможность восстановления исходного сообщения из его хеш-функции должна быть практически исключена. Насколько сложно по хеш-функции восстановить хешируемое сообщение или получить какую-нибудь информацию о нем – это первый критерий оценки стойкости хеш-функции.

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

Давайте попробуем представит себе идеальную хеш-функцию, т.е. такую, для которой по каждому из приведенных выше критериев самые лучшие из оценок – это brute force, метод грубой силы. Каковы будут оценки brute force для хеш-функции?

    Начнем с первого критерия. Тут, вроде, все понятно: дергаем случайные сообщения, вычисляем для каждого из них хеш-функцию и проверяем ее на совпадение с имеющимся у нас значением хеш-функции. Если предположить, что длина хеш-функции равна 2n бит, то самым эффективным должен быть метод выбора случайных сообщений и каждое из них должно давать в качестве хеш-функции случайный и равновероятный вектор длины n, или, выражаясь официальным языком, preimage resistance of approximately n bits. Та же самая оценка будет справедлива и для нахождения коллизии первого сорта. А вот для нахождения коллизии второго сорта потребуется в среднем 2n/2 опробований – тут вступает в силу парадокс дней рождения. На упоминавшемся выше официальном языке это называется collision resistance of approximately n/2 bits. Такая получается картина идеальной хеш-функции.

Что же произошло с SHA1? В статье Брюса Шнайера Cryptanalysis of SHA-1, опубликованной 18 февраля 2005 года, утверждается, что три китайских криптографа смогли найти метод построения коллизии второго сорта для SHA1 за 269 операций. Если учесть, что длина хеш-функции SHA1 составляет 20 байт или 160 бит, то идеальная хеш-функция такой длины должна требовать в среднем 280 опробований для решения подобной задачи. Следовательно, SHA1, как следует из этой статьи, не является идеальной хеш-функцией. А 269 – это примерно 1021. Не такая уж астрономическая величина, а с криптографической точки зрения просто критическая. У Брюса Шнайера даются оценки времени и трудоемкости ее практического решения - 1757 дней (4,81 лет) усилиями 331252 пользователей.

SHA1 является в настоящее время, пожалуй, самым распространенным в мире алгоритмом хеширования. Даже такие чисто абстрактные подозрения в его ненадежности вынудили американский NIST (National Institute of Standard and Technology) принять срочные меры. 2 ноября 2007 года был объявлен открытый конкурс на разработку хеш-функций третьего поколения – SHA-3. Тут надо заметить, что хеш-функции второго поколения – SHA-2 – уже есть, они были разработаны американским АНБ, но по каким-то причинам NIST решил подстраховаться и провести открытый конкурс на SHA-3.

Требования к кандидатам SHA-3 были опубликованы на сайте NIST, если взять их криптографическую часть, то требование было одно: NISTу требовались идеальные хеш-функции, не допускающие среди известных в настоящее время методов анализа иных, кроме brute force.

Я впервые услышал о конкурсе SHA-3 в конце июня 2008 года. Один из выпускников 4 факультета ВКШ КГБ Игорь С. одним из первых «прорубил окно в Европу» и уехал жить в Норвегию. Там он больше был связан с теоретической криптографией, чем я в Корее, и, прочитав в Internet мою первую книжку «Криптография и Свобода», прислал мне письмо, из которого я и узнал об SHA-3. Я с радостью ухватился за эту мысль: после всех программистских баталий вспомнить про теорию и предложить NIST свой оригинальный вариант SHA-3, благо идей на этот счет было предостаточно: читатель первой книги наверняка помнит шифры на новой элементной базе и логарифмические подстановки. Эти оригинальные криптографические решения, которым было отдано много лет жизни, так и остались во многом невостребованными, и это меня все время угнетало. Так родились алгоритмы хеширования типа MCSSHA.

Сроки поджимали. Deadline для приема заявок на участие в конкурсе SHA-3 – 31 октября 2008 года. Следовательно, на все про все (разработка, анализ и оформление) у меня оставалось около 4-х месяцев. Особенно удручала невозможность какого бы то ни было квалифицированного обсуждения моих идей по MCSSHA, ибо те корейцы, с которыми я в то время работал, о теоретической криптографии имели весьма туманное представление. Так что весь криптоанализ MCSSHA проходил по примерно такой схеме: в выходные на целый день я уходил в горы и там, лазая по горным тропам, все время прикидывал те или иные возможности использования идей шифров на новой элементной базе для хеширования. И вот до чего в конце концов долазился.

Попробуем использовать для хеширования упоминавшийся в первой книге «Криптография и Свобода» неавтономный регулярный регистр сдвига над кольцом вычетов по модулю 256 (над байтами). Вот его рисуночек.

Идея использования подобного регистра для хеширования напрашивается сама собой: фиксируем какое-то начальное заполнение регистра и подаем сообщение на вход - x1,x2,…xL. Или что-то в этом роде… Дело в том, что в явном виде подавать сообщение на вход нельзя, сразу же возникнут коллизии – получающаяся система из N нелинейных уравнений элементарно решается и строятся пары с одинаковыми хеш-функциями. Как с этим бороться и в этой борьбе не слишком сильно усложнить такую красивую и элементарную реализацию? С этим вопросом, мучавшим меня около двух месяцев, я лазил по Bukhansan и Dobongsan и все никак не мог придумать удовлетворительного решения. А вот на горе с простым и понятным названием Namhansanseong осенило: нужны дырки!

    Дальше вынужден начать писать формулы… Ничего не могу с собой поделать, дорогой мой читатель, сейчас начнутся математические дебри. Так что самых мужественных и терпеливых приглашаю лезть в эти дебри и дальше, а большинству нормальных читателей – сесть на пенек, съесть пирожок и малость подождать, пока любители криптографического экстрима не налазаются по Namhansanseong.

    Если символами (yi,yi+1,…,yi+N-1) обозначить заполнение регистра сдвига в i-ый такт работы, то в (i+1)-ый такт оно будет (yi+1,yi+2,…,yi+N), где yi+N= π(yi–yi+1–yi+N-4+ yi+N-1) + xi. Заполнение регистра полностью обновляется за N тактов работы:

yi+N= π(yi–yi+1–yi+N-4+ yi+N-1) + xi

yi+N+ 1= π(yi+1–yi+2–yi+N-3+ yi+N) + xi+1

……………………………………………………………….

yi+2N- 1= π(yi+N-1–yi+N–yi+2N-5+ yi+2N-2) + xi+N-1

    При простой подаче сообщения на вход регистра из этой системы коллизия видна невооруженным взглядом: берем произвольное сообщение, вычисляем соответствующее ему значение регистра сдвига и элементарными арифметическими операциями решаем систему из N уравнений с N неизвестными – находим все xi, необходимые для того, чтобы получить нужное конечное заполнение регистра. Ну а если сообщение на вход подавать не сплошняком, а с дырками, например на один знак сообщения две дырки, что это даст? Да почти все, что доктор прописал!

yi+N= π(yi–yi+1–yi+N-4+ yi+N-1) + xj

yi+N+1= π(yi+1–yi+2–yi+N-3+ yi+N)

yi+N+2= π(yi+2–yi+3–yi+N-2+ yi+N+1)

yi+N+3= π(yi+3–yi+4–yi+N-1+ yi+N+2) + xj+1

…………………………………………

    И логарифмические подстановки, если кто помнит первую часть «Криптографии и Свободы», здесь очень даже к месту оказываются. Давайте попробуем порешать такую систему на дальних подступах к итоговому заполнению регистра.


Назад                                 Продолжение
В начало книги Криптография и Свобода - 2

Криптография и Свобода - 2

Криптографическое мироздание

Все кандидаты наук моего поколения сдавали экзамен кандидатского минимума по философии, поэтому склонны на старости лет порассуждать о глобальных криптографических проблемах, дать полетать своей фантазии по крайней мере в облаках, а то и в околоземном космическом пространстве. Дело хорошее, что ж не полетать за тридевять земель, главное потом успешно приземлиться. Так что давайте совершим небольшое путешествие по криптографической вселенной, называемой еще мирозданием, а потом постараемся совершить мягкую посадку за родной компьютер. Поехали!

В центре этой вселенной – ясно солнышко - алгоритм RSA. Всякие там DH и EC – из другой галактики, мы к ним не полетим, RSA теплее и светит во всем цивилизованном мире. А вокруг RSA вращаются планеты: DES простой, 3DES – 112, 3DES -168, AES, куча разных RC: 2, 4, 5. Эти планеты – алгоритмы симметричного шифрования, без них, на одной солнечной энергии, наш криптолет будет плестись как полудохлая кляча.

А вот и развилочка: по левую сторону от солнышка – другие планетки: SHA - 1, 2 а из-за бугра еще и 3 выглядывает. И рядом MD 2, 4, 5. Это смешарики-хешарики, они солнечную энергию в ЭЦП превращают.

А для прикола возьмем с собой в полет кое-какую живность. Собак брать не будем, возьмем обезьянок MAC и HMAC.

Самое интересное: космическое пространство, вакуум, а в нем растут деревья! Только не простые, а ASN-деревья. С начала освоения криптографической вселенной этих деревьев уже повырастало огромное множество, целый ботанический сад, по которому мы сейчас прогуляемся на своем криптолете.

Вот, например, уже известный нам сертификат – открытый ключ со множеством нарядных атрибутов. Это, оказывается, тоже ASN-дерево. Если говорить точнее, то ASN-деревом является наиболее часто употребляемая форма представления сертификата – X.509.

У меня сохранился старенький сертификат одного из корейских банков – Korean Exchange Bank. Давайте немного полазаем по его ASN-дереву.

    Это начало ASN-дерева. Сравните его с «привычным» представлением сертификата – все достаточно очевидно.

    Только представление сертификата в виде ASN-дерева более наглядно показывает принцип построения этого дерева: это набор определенных параметров, каждый из которых имеет свой персональный идентификатор – OBJECT_ID. Например, название страны имеет идентификатор 2.5.4.6, название организации – 2.5.4.10 и т.д. Если кто-то заинтересуется тем, какие вообще существуют в мире идентификаторы и что означают их цифры – милости прошу в OID Repository.

    Отметим, что в этом дереве сначала идет информация об издателе сертификата, т.е. о Certification Authority. Срок действия сертификата и информация о его владельце – следующий кусок дерева.

    Тут, по-видимому, тоже не требуется особых пояснений – сравните этот кусок дерева с привычной картинкой сертификата

    А вот дальше в этом дереве находится одна из самых главных его частей – открытый ключ, для которого и выдан этот сертификат.

    Открытый ключ находится в ASN-дереве вместе с идентификатором своего алгоритма и состоит из двух частей: модуля (первое INTEGER) и открытой экспоненты (второе INTEGER). Признаюсь, что во всех RSA-ключах мне не приходилось встречать открытой экспоненты, отличной от 01 00 01.

    Не желая больше испытывать терпение читателя этой скучной и нудной процедурой разбора всяких веточек и листочков этого дерева, залезем сразу на его верхушку. А там – подпись Удостоверяющего Центра, то, что придает этому сертификату его юридическую значимость.

ASN - садоводство – интересная штука. Профессиональные программисты наверняка подскажут несколько типовых программ, предназначенных для построения таких деревьев и «ухода» за ними. Меня же в Корее, при отсутствии привычной россиянину летней дачи, охватила страсть выращивать виртуальные ASN-деревья и ставить над ними всякие эксперименты. К примеру, Microsoft не очень-то лояльно относится к попыткам внести какие-то изменения в имеющиеся на его сервере Windows Server 2003 шаблоны сертификатов. Ну и бог с ним! Делаем проще: берем готовый сертификат, выкидываем из него подпись Удостоверяющего Центра, всячески издеваемся над оставшимся ASN-деревом: что-то подпиливаем, что-то, наоборот, добавляем, потом подписываем заново на ключе УЦ – готов изощренный сертификат! Вот такой у меня там получился ASN-конструктор, приведенные выше картинки ASN-дерева – его продукция.

    Каких только ASN-деревьев не увидишь в криптографическом пространстве! Тут и дерево подписи, получаемое с помощью функции CryptSignMessage, и дерево зашифрованного сообщения, получаемого с помощью CryptEncryptMessage, и различные timestamp, и online certificate status, и прочая, прочая, прочая… Читателей, заинтересовавшихся всем этим ботаническим садом, мы, пожалуй, отправим в самостоятельный полет, а всем неулетевшим сейчас будут показаны некоторые простенькие криптографические фокусы с одним ASN-деревом. Вот оно.

Это файл типа PFX, содержащий в зашифрованном виде секретный асимметричный ключ и сертификат к нему. Шифрование осуществляется с помощью ключа, вырабатываемого из пароля пользователя, это так называемое Password Based Encryption, описанное в PKCS#5. А OID 1.2.840.113549.1.12.1.6 означает PKCS #12 Password Based Encryption With SHA-1 and 40-bit RC2-CBC, что в криптографическом переводе на русский язык означает «туши свет, бросай гранату», ибо даже малые дети знают, что 40-битовый шифр RC2 является нестойким. Легко и непринужденно он вскрывается тотальной переборкой ключей, чем мы сейчас и займемся с читателями-хакерами.





Назад                                 Продолжение
В начало книги Криптография и Свобода - 2

Криптография и Свобода - 2

RSA vs EC

    За те долгие годы, когда впервые было заявлено о криптографии с открытым распределением ключей (середина 70-х годов прошлого века), реальными считаются фактически две системы: RSA и система Диффи-Хеллмана. Алгоритмы RSA основаны на сложности разложения большого числа на простые множители, в то время как DH – алгоритмы Диффи-Хеллмана – основаны на сложности логарифмирования в конечных полях. Если на заре криптографии с открытым распределением ключей в качестве полей для алгоритма DH выбирали конечные группы Галуа, то где-то примерно с середины 90-х годов началось повальное увлечение EC – elliptic curve - эллиптическими кривыми, математический аппарат которых весьма схож с аппаратом конечных полей и методом DH. Таким образом, в современной криптографии есть два конкурирующих между собой метода построения системы с открытым распределением ключей: RSA и EC. И во всем мире началась дискуссия - что лучше: RSA или EC. Какие же доводы могли привести сторонники того или иного метода?

        RSA.

  1. Алгоритм проще, чем EC, с точки зрения реализации. Бесспорным доказательством этого служит тот факт, что при зашифровании с помощью RSA достаточно открытого ключа получателя шифрованного сообщения, в то время как в EC необходимо иметь пару: открытый ключ получателя – секретный ключ отправителя. Если, к примеру, речь идет о защищенном протоколе SSL, то при использовании EC появляются дополнительные сложности. Если клиент не имеет своего private key, то для установления соединения с сервером необходимо выработать так называемый эфемерный ключ и включить соответствующий ему открытый ключ в протокол обмена сообщениями при handshake.
  2. Процедуры шифрования и подписи для RSA реализуются с помощью одной и той же функции, которая называется modular exponent – возведение в степень по модулю. Если реализовывать RSA на внутреннем процессоре Smart Card. то реализация одной этой функции сразу позволяет осуществлять как шифрование, так и подпись внутри Smart Card.

EC.

    По сравнению с RSA, EC может похвастать только одним преимуществом: «природа» эллиптических кривых и возможные их параметры намного шире, чем у RSA, где весь математический аппарат привязан к операциям с простыми числами.

    Эти особенности и определили судьбу двух основных методов криптографии с асимметричными ключами.

- RSA – широкое распространение в коммерческой криптографии, где в первую очередь требуется простота и надежность реализации, минимизация ошибок в программном обеспечении, которое может быть подготовлено многими независимыми друг от друга программистами.

- EC – в государственной и военной криптографии, где в первую очередь требуется оригинальность криптографических решений, являющаяся дополнительным рубежом криптографической защиты.

Безусловно, что такое разделение является очень общим, в реальной жизни всегда есть множество оттенков и полутонов. Но de facto RSA стал общепризнанным международным стандартом, который вошел, в частности, в операционную систему Windows и большинство мировых сертификационных центров заверяют сертификаты только с помощью RSA.

Здесь нельзя не упомянуть об оценках стойкости алгоритмов типа RSA и EC. Для RSA в 2010 году удалось успешно вскрыть ключ длиной 768 бит, поэтому в настоящее время минимально допустимой длиной RSA ключа является 1024 бит. Тогда же было высказано мнение, что такая длина может быть криптографически безопасной еще только ближайшие три-четыре года. Два из них уже прошли, но пока по-прежнему длина 1024 бит не считается для RSA критической. Здесь, помимо чисто криптографических методов анализа, еще, на мой взгляд, надо учитывать то, что RSA является намного более распространенным методом, чем EC, а следовательно, привлекает к себе гораздо больше внимания криптографов-аналитиков, чем EC. Хотя, по-видимому, требуемый уровень безопасности в EC можно обеспечить при меньшей длине ключа, чем в RSA. Но подходы к гражданской криптографии все-таки сильно отличаются от криптографии военной: здесь в первую очередь важны удобство и распространенность реализации, а взлом – это весьма дорогостоящее мероприятие, которое вряд ли стоит затевать, к примеру, для получения доступа к банковскому счету обычного пользователя банка. Стоимость такого взлома может оказаться намного больше, чем сумма денег на счету пользователя.

    Поскольку RSA получил широкое распространение, то среди ведущих мировых производителей смарт-карт, таких как GmbH, Gemplas, Infinion, Axalto началась гонка за завоевание криптографических рынков с помощью чипов с полной поддержкой RSA на уровне архитектуры процессора, т.е. на уровне hardware. Под полной поддержкой во всем мире сразу же стали понимать, что выработка и использование RSA ключей должны осуществляться только внутри процессора смарт-карты, а наружу (во внешнюю и более уязвленную память компьютера) должен выдаваться только готовый результат зашифрования или подписи. А время выработки случайного 1024-битного RSA-ключа внутри смарт карты было доведено до 10 – 20 секунд.

    Эта гонка привела к тому, что гражданская криптография стала проникать даже в те страны, где каких-нибудь 15-20 лет назад о ней не имели ни малейшего представления. Алгоритм простой: ничего сами не выдумываем, проводим открытый конкурс и выбираем готовые криптографические решения. Как правило, сначала закупается сертификационный центр, а затем PKI, включающий в себя CSP и PKCS#11 для смарт-карт и, естественно, сами смарт-карты с полной поддержкой RSA. Мне за время пребывания в Корее один раз удалось принять участие в таком конкурсе, который в 2006 году проводило правительство Таиланда.

    У тайцев к тому времени уже был собственный сертификационный центр, теперь же они хотели добавить к нему PKI с поддержкой смарт карт. Правительство Таиланда объявило открытый конкурс, в котором в качестве одного из соискателей приняла участие корейская компания HiSmarTech, входящая в могущественный Samsung. Молодые ребята из этой компании подготовили собственную Smart Card а к тому времени у меня уже были готовы поддерживающие эту карту Smart Card CSP и PKCS#11, поэтому HiSmarTech включила меня в свою команду для участия в конкурсе в Таиланде. Что требуется от соискателя – загадка. Интуитивно ясно, что PKI, точнее даже не сам PKI, а совместимость моих CSP и PKCS#11 с готовыми тайскими PKI.

    Первые тесты я делал для SCard CSP на тестовом таиландском CA – вроде работают. Где-то в конце июня 2006 года – первая вылазка в Таиланд, посмотреть живьем на тайские СА и понять, что им надо. Прилетели. Нас привезли в тайский вычислительный центр, где стоит закупленный тайцами Baltimore UniCERT Certificate Authority System. PKI использует PKCS#11, наш PKCS#11 с ним глючит. Тот СА, который я тестировал в Интернете, с этим не имеет ничего общего, за исключением того, что тот и другой выдают сертификаты. В общем, первый блин комом. Вылазка была, если мне сейчас не изменяет память, дня на два, к концу второго дня мне удалось глюки выловить и получить с этого сервера тестовый сертификат. Но это было, так сказать, неофициальное выступление, основное участие в конкурсе – benchmark test (по-русски - экзамен кандидатского минимума) - состоялся недели через две.

    К benchmark test ребята из HiSmarTech подготовились основательно. Притащили в Бангкок здоровенную железяку – машинку для проверки прочности пластиковых смарт карт. Она несколько тысяч раз выгибала карточку в разных плоскостях и давала наглядное подтверждение, что чип приклеен к карточке надежно. А верховодила корейской командой девушка, которая закончила в Москве режиссерский факультет института кинематографии и неплохо говорила по-русски. В команду, кроме нее входили «ребята –апплетписатели», т. е. те, кто разрабатывал уровень software для карточки. Требованием тайцев был полный цикл подготовки карточки, им надо было показать, как апплет устанавливается в карточку, как тестируется, инициализируется, и, естественно, как карточка работает с криптографическими интерфейсами CSP и PKCS#11.

    «Экзамен кандидатского минимума» принимали тайские чиновники. У меня экзамен по криптографии принимал молодой человек, чем-то похожий на Яшку-цыгана из фильма «Неуловимые мстители». Стандартные тесты процедур шифрования и подписи с помощью CSP (про PKCS#11 так и не вспомнил, а я так переживал!) и постоянные попытки вытащить карточку в момент подписи из считывателя – чтобы убедиться, что все криптографические процедуры реально выполняются внутри чипа карты. После нескольких попыток проэкзаменовать меня по другим криптографическим вопросам он как-то сник и безропотно ставил плюсики в своем экзаменационном листе. Короче, криптографическая часть этого кандидатского минимума была выполнена быстрее всех. Я превратился в наблюдателя за работой корейской зверь-машины по выламыванию чипа из карточки, которая сколько ни старалась, так ничего и не смогла сделать с упрямым чипом.

    В общем, команда HiSmarTech выступила в Таиланде довольно успешно. Тут же появились тайские спонсоры, готовые поддержать корейцев в осваивании местного рынка. Вечером они повели нас в известное в Бангкоке место – Beer Factory. Там пиво пьют не литрами, а метрами: полуторамертовыми пробирками, в каждую из которых входит около 5 литров пива.

К сожалению, в сентябре того же года в Таиланде произошел военный переворот, и, по-видимому, правительству стало не до смарт карт. Иначе России пришлось бы сейчас догонять по гражданской криптографии не только Южную Корею, но и Таиланд.

До сих пор так и нет в России ни RSA, ни полноценного Internet Banking, ни открытых криптографических конкурсов. «Тот, кто встроил RSA, тот проныра и лиса» - такое мнение бытует в ФСБ. Зато наши эллиптические кривые ГОСТ Р 3410 такие, каких ни у кого в мире нет (и карточек под них тоже практически нет), а RSA – это происки зарубежной закулисы, в бессильной злобе наблюдающей за тем, как Россия встает с колен!


Назад                                Продолжение
В начало книги Криптография и Свобода - 2

Криптография и Свобода - 2

Сеул

    Переменка! Отдохнем от криптографии и прогуляемся по Сеулу. Я временно переквалифицируюсь в экскурсовода.

    Давно-давно (в 60-70–х годах прошлого века) в Советском Союзе город Сеул преподносился в основном в виде словосочетания «сеульский режим». И вот – если мне сейчас не изменяет память, во время или сразу после Московской Олимпиады 1980 года - пришло известие: МОК избрал Сеул столицей летних Олимпийских Игр 1988 года. Ну и ну – удивлялись тогда простые советские люди – неужели нельзя было выбрать что-нибудь получше?

    А получился очень даже неплохой выбор. После взаимных бойкотов (1980 год – западные страны бойкотировали Московскую Олимпиаду, а в 1984 – социалистические страны Олимпиаду в Лос-Анджелесе) в Сеуле собрались все лучшие спортсмены и весь мир увидел, что Южная Корея стала современной цивилизованной страной. В Сеуле в память об этой Олимпиаде остался прекрасный Olympic Park, где до сих пор можно увидеть олимпийские кольца и флаги стран-участниц той Олимпиады.

    Здесь есть забавные скульптуры, которым, при желании, можно придумать и криптографические названия.

    Я назвал бы эту замечательную скульптуру OpenSSL – криптография, которая долгое время была скрыта от широкой публики, наконец-то выбралась наружу.

    Тут нет никаких сомнений: Private and Public Keys.

    SSL – защищенный сетевой протокол.

    Это, безусловно, Центр Сертификации: public key поднимается по ступенькам в кабинку, где его одевают.

    Нечто вроде защищенного банковского сервера.

    Особую память хранят корейцы о войне 1950-53 годов между Севером и Югом. История этой войны вкратце такова: вначале Северная Корея оккупировала практически весь Корейский полуостров, но затем в ход боевых действий вмешалась ООН и послала на помощь Южной Корее войска, в основном американские. В результате теперь уже Южная Корея заняла практически всю Корею. Тут в ход боевых событий вмешались Китай и СССР и в конце концов линия фронта стабилизировалась по 38-й параллели – практически там, где сейчас демаркационная линия, разделяющая Север и Юг.

    Эта война прекратилась вскоре после смерти Сталина. После ее окончания Север пошел по пути СССР, а Юг – США. Кто и куда в результате пришел – сейчас спустя почти 60 лет стало очевидно всем. Северная Корея – к идеям чучхе и миске риса в день. Южная – к азиатскому экономическому тигру, завалившему пол-мира своей электроникой и автомобилями. Мирные и дружелюбные южные корейцы сразу же становятся настороженными и непримиримыми, когда речь заходит о Севере. И неудивительно: сколько раз северокорейские вожди грозились сжечь Сеул!

    К сожалению здесь, как и в коммерческой криптографии, американский «проект» оказался успешнее советского.

    В память о той войне в центре Сеула есть большой мемориал. Я несколько раз побывал в нем, вот фотографии.

    Главный вход. «Only strong national security can guarantee peace» - вот его девиз. Для корейцев это не пустые слова – Северная Корея с ее идеями чучхе – всего в 150 километрах от Сеула.

К тем событиям почти 60-летней давности у корейцев отношение философское. Сейчас все стало на свои места, большие перемены произошли в Китае и СССР – у бывших противников. Нет у корейцев злобы на русских, убедился в этом сам за все 6 с лишним лет проживания в Сеуле. Но помнить об этой никому не нужной войне необходимо, это очевидно всем. И корейцы помнят! Перед входом в мемориал установлены образцы военной техники противоборствующих сторон. Американская техника – с табличками синего цвета, советско-китайская – красного. Русскому, с одной стороны, есть повод гордиться: смотрите, какие у нас хорошие танки и пушки, а с другой – какого черта их занесло в эту далекую миролюбивую страну? Для мировой революции?

Особой любовью у корейцев пользуются цветы. Они везде. С наступлением весны Сеул расцветает в самом прямом смысле этого слова. А из цветов особенно популярны розы. Есть даже специальный Rose Garden, в котором даже погруженному в свои математические мысли криптографу невозможно оторвать взгляд от их красоты.

    Ну и в заключение краткой экскурсии по Сеулу, нельзя не упомянуть про корейские горы. Корея, по российским масштабам, - совсем маленькая страна, размером с Московскую область, причем 70% ее территории – горы. Проживают в ней почти 50 миллионов человек и, естественно, в таких условиях загородных дач практически ни у кого нет. Привычные россиянину поездки на дачу в weekend корейцам заменяет лазание по горам. Горы есть даже в самом Сеуле, до них можно добраться на метро и потом полдня карабкаться по оборудованным горным тропочкам, наслаждаясь свежим воздухом, родниковой водой и великолепными горными пейзажами.

    Звонок! Перемена закончилась, пора заняться криптографией, точнее – RSA. Это просто сказка...



Назад                                Продолжение
В начало книги Криптография и Свобода - 2

Криптография и Свобода - 2

Public Key Infrastructure (PKI)

Аббревиатура PKI в повседневной жизни имеет множество назначений. Это, в первую очередь, система выработки и регистрации собственных уникальных ключевых параметров, необходимых для каких-то целей. А каких? Как правило, для аутентификации (подтверждения подлинности) клиента на каком-то сервере. Тут мы плавно переходим к продолжению предыдущей главы: есть криптографические стандарты, а для чего они нужны и как их использовать?

Когда какой-то человек приходит в отделение банка, то его просят представиться: кто вы и что вам здесь надо. Если тот же человек пытается зайти на банковский сервер, то сервер делает фактически то же самое – пытается проверить подлинность и цели обратившегося к нему клиента. А как это сделать? Одним из распространенных методов проверки подлинности клиента является его криптографическая аутентификация, т.е. проверка подлинности с помощью криптографических методов.

Дальше нам потребуются три источника и три составных части PKI: private key, public key и сертификат. Читатели, знакомые с этими понятиями, смело могут перевернуть эту страницу или отлучиться на минутку по каким-то неотложным делам. Когда вернетесь, все эти заморочки закончатся, у вас уже будет готовый персональный сертификат. Ну а с остальными – курс криптографического ликбеза.

Криптографическая аутентификация предполагает проверку электронно-цифровой подписи (ЭЦП) клиента. А нормальная ЭЦП, в свою очередь, предполагает наличие у клиента ключа для подписи, а у сервера – ключа для проверки подписи клиента. Ключ, с помощью которого клиент осуществляет подпись, называется private key, а ключ, с помощью которого сервер осуществляет проверку подписи клиента – public key. По-русски - закрытые и открытые ключи.

Вопросы и ответы.

  1. Есть ли у клиента его открытый ключ?

Есть.

  1. Есть ли у сервера закрытый ключ клиента?

Нет.

  1. Связаны ли между собой закрытые и открытые ключи?

Да, связаны, каждому закрытому ключу соответствует строго определенный открытый ключ.

  1. Можно ли по закрытому ключу определить открытый ключ?

Да.

  1. Можно ли по открытому ключу определить закрытый?

Нет.

Детская писательница Агния Барто в таких случаях говорила: «Мы с Тамарой ходим парой...». Точно так же, парой, ходят по криптографическим просторам public and private keys. И называют их key pair, а в интерфейсе PKCS # 11 функция их выработки тоже называется C_GenerateKeyPair. Тандем, если кто следит за политикой в современной России.

Ну и, как принято в тандеме, один главнее. Private key, несомненно, главнее.

    В общих словах, про тандем все. Если кто заинтересуется подробностями: каким образом строятся и используются в ЭЦП закрытый и открытые ключи – милости прошу на Wikipedia.

    Теперь о сертификате. Открытый ключ еще называют публичным, потому что он у всех на виду. А появляться на публике голому открытому ключу просто неприлично. Вот его приодевают и приукрашивают в специальной организации, называемой Центром Сертификации (ЦС) или, по терминологии Microsoft, Certification Authority (CA). Приодетый и приукрашенный открытый ключ, получивший в ЦС персональную ЭЦП, и принято называть сертификатом.

    Как приодевают и приукрашивают в ЦС открытый ключ – особая песня. Различных атрибутов в сертификате может быть великое множество: фамилия, имя, отчество владельца, его должность, место работы, место жительства, электронная почта и т.д. и т.п. Указывается также назначение ключа (key usage или extended key usage): для подписи или шифрования электронной почты, для идентификации пользователя на сервере, для подписи программных кодов, для EFS (Encrypted File System) и прочая, прочая, прочая. В сертификате обязательно присутствуют срок действия ключа и электронная подпись ЦС. Здесь опять же, пробегая галопом по такой необъятной теме, как состав информации, включаемой в сертификат, я руководствовался принципами гуманизма к обычному читателю, стараясь не перегружать далекого от криптографии человека всеми нюансами, связанными с созданием в современных информационных системах персональных сертификатов. Вкратце: это «одетый» открытый ключ, получивший «паспорт» - персональную ЭЦП в ЦС. «Одежд» может быть много, иногда и самых экзотических: корейцы, например, включают в свои сертификаты хеш-функцию от национального ID и некоторого случайного числа – это их персональный атрибут, который называется KR, по-видимому, Korean Random.

Ходят слухи, что в одной стране хотят включить в персональный публичный сертификат чиновника размеры взяток, которые можно дать ему по Internet, и создать автоматизированную систему электронного взяткооборота, являющуюся частью электронного ....

    О трех источниках и трех составных частях PKI: public, private keys and certificates – пока хватит. Надеюсь, что даже у непросвещенных читателей сложилось некоторое общее представление об этих понятиях, пора поговорить и о CA – Центре выдачи сертификатов, той организации, где «одевают» поступившие к ним public keys.

    Возможно, это именно тот случай, когда нужно вмешательство государства в криптографические проблемы. Ведь CA должен быть той организацией, которой все доверяют. Именно CA своей ЭЦП подтверждает, что содержащийся в сертификате открытый ключ принадлежит именно тому, кто прописан в его атрибутах, и что этому клиенту можно доверять. Как CA это делает – к криптографии в большинстве случаев не имеет прямого отношения.

    Общенациональный CA я бы сравнил с эмиссионным центром, печатающим денежные купюры, которым все доверяют. Наличие общенационального CA является признаком высокоразвитости страны, наличия в ней общедоступных современных технологий электронной коммерции и электронного документооборота. Хотя, наверное, я бы назвал условие наличия национального CA достаточным, но не необходимым. Internet-технологии, как правило, не знают национальных границ, сейчас в мире уже существуют общепризнанные CA такие, как VeriSign, GlobalSign, DigiCert и другие.

    Процесс получения персонального сертификата в CA является одним из первоначальных понятий в PKI. Как составить запрос на сертификат (PKCS # 10), что в него включить, как получить готовый сертификат из CA: online (Enterprise CA) или offline (Stand alone CA) – вот те проблемы, которые должны быть решены в PKI. В отличии от России (offline) у корейцев offline не может использоваться просто по определению: только online! Никаких чиновников, только диалог компьютеров в режиме реального времени. И, завершая эту часть PKI, посвященную диалогу с CA, отмечу три ключевых слова: new, renew, revoke. По русски: клиент должен иметь возможность в режиме реального времени:

- запросить новый сертификат;

- обновить действующий сертификат;

- отменить действующий сертификат.

Все эти возможности у корейцев реально реализованы, любой пользователь любого корейского банка при открытии счета получает свои персональные коды для Internet Banking. Программное обеспечение PKI, являющееся фактически ActiveX компонентой, автоматически и бесплатно скачивается с сайта банка, и с помощью этого ActiveX и полученных в банке персональных кодов пользователь бесплатно в режиме online получает в общенациональном сертификационном центре Yessign сертификат, который затем может быть использован в системе Internet Banking любого корейского банка. Читателя, испугавшегося слова ActiveX, хочу успокоить: не надо бояться, оно не кусается. Это такие специальные динамические библиотеки, которые, в частности, могут понимать и выполнять некоторые функции, вызываемые из браузера Internet Explorer.

    А теперь о том, как у корейцев организован диалог клиентского компьютера с банковским сервером.
С черного хода. В том смысле, что основной диалог клиента с сервером происходит через обычный
порт, через который работает протокол HTTP, а та часть диалога, где требуется авторизация клиента, в результате чего он получает доступ к своему банковскому счету – через другой, причем у разных банков эти порты тоже могут быть разные. И у всех, как правило, этот порт отличен от стандартного 443 – порта HTTPS. И шифруется при этом не все подряд, а только конфиденциальная информация.

    Если героический читатель-непрограммист все честно дочитал до этого места и заинтересовался подробностями диалога клиентского компьютера с корейским банковским сервером, то хочу по секрету сообщить, что этот диалог очень похож на диалог клиент-сервер в протоколе HTTPS. Вот только конфиденциальные страницы браузер получает с сервера не сам, а через ActiveX, о котором уже шла речь при получении сертификата. Этот же ActiveX выполняет и функции соединения с банковским сервером через специальный порт (handshake – привет-привет, давай пообщаемся, ну и так далее...).

Что же в результате получилось?

Вместо грубой силы – сломаем Windows так, чтобы HTTPS работал по нашему – корейский клиент, ничего не ломая, протаптывает собственную тропочку к банковскому серверу и по ней уже ведет свои дела с персональным банковским счетом. Ведет честно, по правилам SSL, только шифрует при этом не весь протокол, а только то, что является конфиденциальной информацией на странице и с использованием корейского национального алгоритма симметричного шифрования SEED.

В Интернете я наткнулся на интересную презентацию, которую приготовил mr. Jae-IL, Lee, Vice President of Korea Information Security Agency and Secretary General of Korea PKI Forum. В ней дается краткое представление о PKI наиболее развитых стран азиатско-тихоокеанского региона: Южной Кореи, Китая, Японии, Сингапура, Тайваня, Таиланда и Индии. В частности, с момента появления PKI в феврале 1999 года в Корее было выдано примерно 11 миллионов сертификатов, а в Китае – 5 млн. с августа 2004. По остальным странам даются только даты появления PKI: в Японии – апрель 2001, Сингапур – 1998 год, Тайвань – апрель 2002, Таиланд – 2001 год, Индия – июнь 2000. Россия в этой презентации даже не упоминается.

В самой Корее действует 6 национальных сертификационных центров.

Около 70% выданных сертификатов используются для Internet Banking

    Мне, безусловно, после первой пары лет «въезжания» в международные криптографические стандарты захотелось въехать и в корейские протоколы обмена клиента с банковским сервером. Как полноценный зарубежный специалист, официально зарегистрированный в корейской иммиграционной службе, я имел свой ID и свои счета в корейских банках, следовательно, фактически ничем не отличался от корейца и реально использовал их Internet Banking. Я попытался написать своего клиента, который мог бы успешно общаться с корейским банковским сервером и совершать банковские операции от моего имени. Стандартный корейский клиент, автоматически загружаемый с банковского сервера на мой компьютер, иногда вдруг переходил на корейский язык и выдавал какие-то непонятки для русского программиста.

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

«... Есть надписи на русском языке» как пел В.С.Высоцкий.


Назад                                Продолжение
В начало книги Криптография и Свобода - 2

Криптография и Свобода - 2

С 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 г.), министру обороны предписывалось:

  1. поручить Национальному совету по исследованиям (NRC) провести детальное исследование по криптографическим технологиям и национальной политике в области криптографии;
  2. дать указание Национальному агентству безопасности (NSA), Управлению высших исследовательских проектов (ARPA) и другим органам министерства обороны, а также другим федеральным органам оказывать полное содействие NRC в этой работе….

В этом исследовании предлагалось дать оценку воздействия криптографических технологий на интересы правительства США по обеспечению национальной безопасности, интересы правоохранительной деятельности правительства США, коммерческие интересы промышленности США и интересы охраны неприкосновенности личной жизни граждан США, а также влияния контроля над экспортом криптографических технологий на коммерческие интересы промышленности США….

Отчет был подготовлен комитетом из 16 специалистов, представляющих науку (информатику, правоведение, медицину), государственные учреждения, частные фирмы и банки, и отрецензирован другой группой экспертов. Предварительная версия отчета вышла 30 мая 1996 г. и распространялась (бесплатно) издательством, а также доступна по Интернету в виде фотокопий страниц по http://www.nap.edu/readingroom/…

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

        широкая доступность криптографии для всех законных элементов американского общества;

        дальнейший экономический рост и лидерство ключевых отраслей промышленности США в глобальной экономике, в том числе (но не только) производства компьютеров, программного обеспечения и средств связи;

        общественная безопасность и защита от внешних и внутренних угроз.

Рекомендации комитета по национальной криптографической политике включают следующее.

  1. Никакой закон не должен препятствовать производству, продаже или использованию любых видов шифрования в пределах США.
  2. Национальная политика по криптографии должна разрабатываться исполнительной и законодательной ветвями власти на основе открытого публичного обсуждения и основываться на подчинении закону.
  3. Национальная политика по криптографии в отношении разработки и использования коммерческой криптографии должна лучше согласовываться с силами рынка.
  4. Экспортные ограничения на криптографию должны постепенно смягчаться, но не должны быть отменены полностью.
  5. Правительство должно принять меры, чтобы помочь правоохранительным органам и органам национальной безопасности приспособиться к новым техническим реальностям информационного века.
  6. Правительство должно разработать механизмы для обеспечения информационной безопасности в частном секторе."

Это выдержка из американского отчета "Роль криптографии в обеспечении безопасности информационного общества" (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

Криптография и Свобода - 2

Международные криптографические стандарты

    В моей «прошлой» криптографической жизни (в КГБ) само словосочетание «криптографические стандарты» было каким-то нелепым. Основная задача – обеспечение стойкости шифра, удобства его реализации – вторичны. Какие тут могут быть стандарты! Криптосхема – понятие секретное, гриф секретности всего на одну ступень ниже, чем у ключей. Таков был подход к военной и государственной криптографии до появления персональных компьютеров и Интернет.

    Появление компьютеров положило начало гражданской криптографии. Вопросы стойкости отошли на второй план, поскольку возможности компьютера позволяли реализовывать любые криптографические фантазии: если DES (американский Data Encryption Standard) вызывал какие-то сомнения в стойкости из-за сравнительно короткого ключа, то крутим его 3 раза на разных ключах, получаем 3DES. На первый же план вышли вопросы встраивания криптографических процедур в общеизвестные приложения: электронную почту, текстовые редакторы, файловую систему и т.п. Мои первые программы больше напоминали «криптографические идеи чучхе» - весь интерфейс свой, полностью выполняющий некоторый законченный цикл задач, как, например, было в автоматизированной системе электронного документооборота TeleDoc. Практически с первого же дня пребывания в Корее стало ясно, что здесь, в условиях высокоразвитых информационных технологий, эти идеи устарели. Нужно переучиваться жить по международным криптографическим стандартам.

    К таким стандартам, в первую очередь, я бы отнес разработанный Microsoft интерфейс Cryptography Service Provider, или сокращенно CSP. Это набор функций, удовлетворяющих определенным правилам Microsoft, и позволяющий выполнять наиболее типовые криптографические задачи: выработку ключей, шифрование, хеширование, подпись и проверку подписи и т.п. Все эти функции объединяются в динамическую библиотеку, которая затем регистрируется под уникальным именем в системном реестре Windows. Я позволю себе без надобности не вдаваться слишком глубоко в технические детали CSP, опасаясь что книга при этом будет скучной для большинства нормальных читателей, которым они неинтересны. Если же кто-то захочет узнать более подробно о функциях интерфейса CSP, то для этих целей на сайте Microsoft имеется обширная техническая документация. Нормальный программист-разработчик приложений под Windows, планирующий использовать в них криптографические функции, просто обязан полностью перепахать всю документацию Microsoft по CSP.

    Для «криптографических обывателей», да и просто для ленивых программистов (лень – двигатель прогресса), могу пересказать CSP своими словами, как в советское время пропагандисты пересказывали на политзанятиях политику Коммунистической Партии и Советского Правительства. Не спите, берите ручки, пишите конспект.

  1. CSP – обычная динамическая библиотека, содержащая экспортируемые криптографические функции, которые можно вызывать напрямую: LoadLibrary -> GetProcAddress.
  2. Для удобства программистов Microsoft встроил в Windows специальный интерфейс CRYPTO API, значительно упрощающий вызов функций CSP.
  3. Интерфейс CRYPTO API поддерживает только те CSP, которые правильно зарегистрированы в реестре Windows, каждый зарегистрированный CSP имеет персональное осмысленное имя (как правило, отличное от названия DLL) и электронную подпись Microsoft.
  4. На каждом компьютере может быть установлено и зарегистрировано несколько различных CSP от разных производителей.
  5. Интерфейс CRYPTO API дает возможность прикладной программе загружать CSP не по названию DLL, а по его зарегистрированному имени.
  6. В операционную систему Windows уже включены несколько CSP от Microsoft.

Вопросы будут? Будут. Что такое электронная подпись Microsoft?

Ну это такая, на первый взгляд неприятная заморочка для разработчиков CSP, когда готовую к реализации библиотеку CSP надо еще послать в Microsoft, чтобы там ее подписали. Пишешь-пишешь код библиотеки CSP, а проверить его толком – проблема, не будешь же чуть ли не каждый день посылать свой полуфабрикат в MS! Тут надо заметить, что процедура эта абсолютно бесплатная и MS, как правило, в трехдневный срок возвращает подписанную библиотеку.

Первые года два моего пребывания в Корее я прямолинейно слал свой CSP на подпись в MS, через день-два всплывали новые глюки, код CSP исправлялся и опять отсылался по тому же адресу. Один раз меня там «взяли на заметку» и прислали такой нестандартный ответ:

Hi Reed,

Is it okay to sign this?

    В переводе на русский – достал уже. Стало ясно, что нужен иной подход. Описанный на сайте MS способ тестирования – временное переопределение CRYPTO API – неудобен и работает только под Windows-2000.

Решение нашлось простое и универсальное. Полностью выдавать свои профессиональные тайны не буду, а только намекну: ни к чему посылать в MS все CSP, достаточно и одного кусочка, но такого, что следующие 4 года я в MS не посылал ничего. Сразу наступили тишина и спокойствие...

Проснувшийся advanced user с задней парты непременно задаст и такой вопрос: а зачем вообще надо писать свои CSP, если в Windows уже есть встроенные от MS? Отвечаю: для того, чтобы культурно, ничего не ломая, встроить в Windows свои криптографические «изюминки». К таким «изюминкам», в первую очередь, относится более надежное место хранения секретного ключа, оригинальные алгоритмы шифрования, надежный генератор случайных чисел, проверка оригинальных параметров (у корейцев в Internet Banking проверяется национальный ID, аналог нашего ИНН) и т.п. А Microsoft Base Cryptographic Provider хорошо использовать в каких-то бытовых целях, например, в Outlook при шифровании писем к girlfriend.

Вот вкратце и все общие сведения о CSP. Разработчик, создавший свой оригинальный CSP в строгом соответствии с канонами MS, в качестве бонуса получает возможность его использования в огромной гамме приложений под Windows: IE, Outlook, VPN, IPSEC, WinLogOn, Adobe Acrobat и прочая, прочая, прочая... Любимым развлечением у моих корейцев была демонстрация потенциальным покупателям возможностей SmartCard CSP в встроенной в Windows Vista системе шифрования файлов (EFS) – после подсоединения Smart Card и ввода PIN-кода автоматически расшифровывалась и выдавалась на экран такая картинка



Назад                                Продолжение
В начало книги Криптография и Свобода - 2