Реальная криптография - Дэвид Вонг - E-Book

Реальная криптография E-Book

Дэвид Вонг

0,0

Beschreibung

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

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 578

Veröffentlichungsjahr: 2024

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Переводчик С. Черников

Дэвид Вонг

Реальная криптография. — СПб.: Питер, 2024.

ISBN 978-5-4461-2091-8

© ООО Издательство "Питер", 2024

Оглавление

Предисловие
Книга, которая создавалась много лет
Реальный учебный план для криптографов
Где находится большинство ошибок
Нужно ли было писать еще одну книгу?
Благодарности
О книге
Кому следует прочитать книгу
Уровень подготовки читателя
Как организована книга
Примеры исходного кода
От издательства
Об авторе
Иллюстрация на обложке
Часть I. Примитивы: криптографические ингредиенты
1. Введение
1.1. Криптография как защита протоколов
1.2. Симметричная криптография. Что такое симметричное шифрование
1.3. Принцип Керкгоффса: секретом является только ключ
1.4. Асимметричная криптография: два ключа лучше одного
1.5. Классификация и обобщение в области криптографии
1.6. Криптография в теории и криптография реального мира
1.7. От теории к практике: выбери себе приключение
1.8. Предупреждение
Резюме
2. Хеш-функции
2.1. Что такое хеш-функция
2.2. Свойства безопасности хеш-функции
2.3. Методы обеспечения безопасности для хеш-функций
2.4. Хеш-функции на практике
2.5. Стандартизированные хеш-функции
2.6. Хеширование паролей
Резюме
3. Имитовставки
3.1. Файлы cookie без сохранения состояния: поясняющий пример имитовставок
3.2. Пример с кодом
3.3. Свойства безопасности имитовставки
3.4. Имитовставка в реальном мире
3.5. Практическое использование имитовставок
3.6. SHA-2 и атаки удлинением сообщения
Резюме
4. Аутентифицированное шифрование
4.1. Что такое шифр
4.2. Блочный шифр Advanced Encryption Standard
4.3. Зашифрованный пингвин и режим сцепления блоков шифротекста
4.4. Отсутствие подлинности и решение проблемы в виде AES-CBC-HMAC
4.5. Комплексные конструкции. Аутентифицированное шифрование
4.6. Другие виды симметричного шифрования
Резюме
5. Обмен ключами
5.1. Что такое обмен ключами
5.2. Алгоритм обмена ключами Диффи — Хеллмана
5.3. Алгоритм обмена ключами Диффи — Хеллмана на эллиптических кривых
5.4. Атаки через малые подгруппы и другие аспекты безопасности
Резюме
6. Асимметричный и гибридный виды шифрования
6.1. Что такое асимметричное шифрование
6.2. Практическое применение асимметричного шифрования и гибридное шифрование
6.3. Асимметричное шифрование посредством алгоритма RSA: большее и меньшее зло
6.4. Гибридное шифрование с помощью алгоритма ECIES
Резюме
7. одписи и доказательства с нулевым разглашением
7.1. Что такое подпись
7.2. Доказательства с нулевым разглашением. Происхождение подписей
7.3. Алгоритмы подписи, которые следует (или не стоит) использовать
7.4. Тонкости схем подписи
Резюме
8. Случайность и секреты
8.1. Что такое случайность
8.2. Медленная генерация случайности? На помощь придет генератор псевдослучайных чисел
8.3. Генерация случайности на практике
8.4. Генерация случайности и требования обеспечения безопасности
8.5. Открытая случайность
8.6. Формирование ключей с помощью HKDF
8.7. Управление ключами и секретами
8.8. Децентрализация доверия с помощью пороговой криптографии
Резюме
Часть II. Протоколы: рецепты применения криптографии
9. Безопасная передача данных
9.1. Протоколы SSL и TLS
9.2. Принцип работы протокола TLS
9.3. Современное состояние зашифрованного веба
9.4. Другие безопасные транспортные протоколы
9.5. Протокольный фреймворк Noise — современная альтернатива TLS
Резюме
10. Сквозное шифрование
10.1. Зачем нужно сквозное шифрование
10.2. Корня доверия нигде не найти
10.3. Провалы в сфере шифрования электронной почты
10.4. Безопасный обмен сообщениями. Современный взгляд на сквозное шифрование на примере протокола Signal
10.5. Текущее состояние области сквозного шифрования
Резюме
11. Аутентификация пользователей
11.1. Краткий обзор темы аутентификации
11.2. Аутентификация пользователей, или Попытка избавиться от паролей
11.3. Аутентификация, управляемая пользователем, — сопряжение устройств при участии человека
Резюме
12. Криптография и криптовалюты
12.1. Знакомство с византийскими отказоустойчивыми алгоритмами консенсуса
12.2. Принцип работы системы Bitcoin
12.3. Экскурсия по миру криптовалют
12.4. DiemBFT — византийский отказоустойчивый протокол консенсуса
Резюме
13. Аппаратная криптография
13.1. Модель злоумышленника в современной криптографии
13.2. Недоверенные среды — аппаратное обеспечение спешит на помощь
13.3. Какое решение подходит именно мне?
13.4. Криптография, устойчивая к утечкам, или Как смягчить атаки по сторонним каналам в программном обеспечении
Резюме
14. Постквантовая криптография
14.1. Что такое квантовые компьютеры и почему они пугают криптографов
14.2. Подписи на основе хеша: не нужно ничего, кроме хеш-функции
14.3. Сокращение длины ключей и подписей с помощью криптографии на решетках
14.4. Стоит ли паниковать
Резюме
15. Криптография следующего поколения
15.1. Чем больше народу, тем веселее: защищенные многосторонние вычисления
15.2. Полностью гомоморфное шифрование и обещание зашифрованного облака
15.3. Многоцелевые доказательства с нулевым разглашением
Резюме
16. Условия, в которых криптография может не сработать
16.1. Поиск подходящего криптографического примитива или протокола — скучное занятие
16.2. Как использовать криптографический примитив или протокол. Вежливые стандарты и формальная верификация
16.3. Где искать хорошие библиотеки
16.4. Злоупотребление криптографией. Разработчики — главные враги
16.5. Вы делаете это неправильно: удобная безопасность
16.6. Криптография — это не изолированный остров
16.7. Ваша обязанность как практикующего криптографа состоит в том, чтобы не развертывать собственную криптографию
Резюме
Приложение. Ответы к упражнениям
Глава 2
Глава 3
Глава 6
Глава 7
Глава 8
Глава 9
Глава 10
Глава 11

Моим родителям Анне Серкле и Генри Вонгу, которые воспитали во мне любознательность.

Моей жене Фелиции Лупу, которая поддерживала меня на протяжении всего этого путешествия.

Предисловие

Взяв в руки эту книгу, вы, вероятно, задались вопросом: зачем понадобилась еще одна книга по криптографии? Или почему вам стоит ее прочитать? Чтобы ответить на этот вопрос, мне следует объяснить, с чего все началось.

Книга, которая создавалась много лет

Сегодня, если хотите о чем-либо узнать, вы заходите в Google, Bing или Baidu. Однако, если речь идет о криптографии, этих ресурсов может оказаться недостаточно. Я столкнулся с этой проблемой очень давно, и она до сих пор напрягает меня.

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

Воодушевленный этой идеей, я нарисовал несколько диаграмм, анимировал их и сопроводил устными комментариями. Это было мое первое видео на YouTube, посвященное криптографии: https://www.youtube.com/watch?v=gbqNCgVcXsM.

Спустя годы после публикации этого видео я все еще получаю благодарности от незнакомых пользователей. Только вчера, пока я писал это предисловие, кто-то оставил под видео комментарий: «Спасибо, это действительно отличное объяснение сути статьи, которое сэкономило мне много часов».

Вот это награда! Этого маленького шага было достаточно для того, чтобы я захотел сделать еще больше. Я начал все чаще записывать подобные видео, а затем завел блог, посвященный криптографии. Вы можете найти его по адресу https://cryptologie.net.

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

Реальный учебный план для криптографов

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

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

Я считал, что моей степени будет достаточно, но оказалось, что я многого не знаю о реальных протоколах, с которыми придется иметь дело. Я потратил много времени на изучение математики на эллиптических кривых, но ничего не знал о способах их применения в криптографических алгоритмах. В ходе обучения я познакомился с LFSR, ElGamal, DES и рядом других криптографических примитивов, о которых больше никогда не услышу.

Когда я начал работать в компании Matasano, которая впоследствии была приобретена NCC Group, моим первым заданием был аудит OpenSSL — самой популярной реализации SSL/TLS-кода, с помощью которого был зашифрован весь Интернет. Как же я намучился! Помню, как каждый вечер возвращался домой с сильной головной болью. Эти библиотека и протокол были настоящей катастрофой! Тогда я даже не подозревал, что спустя годы стану одним из разработчиков последней версии этого протокола, TLS 1.3.

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

Где находится большинство ошибок

В ходе своей консалтинговой практики мне довелось провести аудит множества реальных криптографических приложений, таких как OpenSSL, система создания зашифрованных резервных копий Google, реализация TLS 1.3 от Cloudflare, протокол центра сертификации Let’s Encrypt, протокол Sapling для криптовалюты Zcash, пороговая схема повторного прокси-шифрования NuCypher и десятки других реальных криптографических приложений, о которых я, к сожалению, не могу говорить публично.

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

С тех пор подобные истории повторялись много раз. Однажды, проводя аудит криптовалюты для другого клиента, я выявил возможность подделки уже существующих транзакций, обусловленную некоторой двусмысленностью подписываемых данных. Изучая реализацию TLS по заказу еще одного клиента, я нашел несколько способов взлома алгоритма RSA, что впоследствии привело к написанию совместно с одним из разработчиков RSA технического документа, способствовавшего выявлению ряда общеизвестных уязвимостей (CVE) в десятке проектов с открытым исходным кодом. Совсем недавно, уже в ходе работы над книгой, я изучил новый протокол Matrix, применяемый для шифрования переписки в чате, и обнаружил недостатки в его протоколе аутентификации, нарушавшие процесс сквозного шифрования. При использовании криптографии очень многое может пойти не так. В какой-то момент я понял, что должен написать об этом. Именно поэтому в моей книге вы найдете множество примеров из практики.

В рамках своей работы я изучал криптографические библиотеки и приложения, написанные на множестве языков программирования. Я выявлял ошибки (в частности, CVE-2016-3959 в стандартной библиотеке Golang), исследовал способы, с помощью которых библиотеки могут ввести вас в заблуждение (см., например, мою статью How to Backdoor Diffie — Hellman), и давал советы разработчикам относительно того, какие библиотеки им следует использовать в тех или иных случаях.

В дальнейшем я разработал протокол Disco (https://discocrypto.com, https://embeddeddisco.com) и написал его полнофункциональную криптографическую библиотеку, состоящую менее чем из 1000 строк кода, причем на нескольких языках. Протокол Disco опирался всего на два криптографических примитива: пермутацию SHA-3 и эллиптическую кривую Curve25519. Используя только эти две вещи, реализованные с помощью 1000 строк кода, разработчик мог выполнить любой тип аутентифицированного обмена ключами, шифрования, хеширования, формирования ключей, создания цифровых подписей, имитовставок и т.д. Это дало мне уникальную возможность понять, какой должна быть хорошая криптографическая библиотека.

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

Нужно ли было писать еще одну книгу?

Когда я проводил один из ежегодных тренингов по криптографии в рамках известной конференции по информационной безопасности Black Hat, ко мне подошел один студент и попросил порекомендовать хорошую книгу или онлайн-курс по этой теме. Я посоветовал прочитать книгу Боне и Шоупа и пройти курс Боне Cryptography I на Coursera. (Вы найдете соответствующие рекомендации в конце этой книги.)

На это студент сказал: «Я пробовал, там слишком много теории!» Я запомнил его ответ. Сначала я с ним не согласился, но постепенно осознал его правоту. Большинство ресурсов перегружено математикой, с которой разработчики, занимающиеся криптографией, обычно не хотят иметь дела. Что же им остается?

Двумя другими более или менее авторитетными ресурсами в то время были книги Брюса Шнайера Applied Cryptography1 и Cryptography Engineering. Но они уже начали устаревать. В «Прикладной криптографии» четыре главы были посвящены блочным шифрам, целая глава — режимам их работы, а аутентифицированному шифрованию — ни одной. В самом последнем издании Cryptography Engineering криптография на эллиптических кривых упоминалась лишь в сноске. В то же время многие из моих видеороликов и статей в блоге превращались в полезные ресурсы, объясняющие некоторые криптографические концепции. Я знал, что могу сделать что-то значимое.

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

Я знал, что могу рассказать студентам, разработчикам, консультантам, инженерам по информационной безопасности и другим людям о том, что представляет собой современная прикладная криптография. И решил написать книгу, содержащую как можно меньше формул и исторических отсылок и как можно больше диаграмм и примеров неудачного применения криптографии, которые я наблюдал собственными глазами. Эта книга должна была фокусироваться не на устаревших алгоритмах, а на таких широко используемых криптографических концепциях, как протоколы TLS и Signal, протокольный фреймворк Noise, криптовалюты, аппаратные модули безопасности, пороговая криптография и т.д. Она должна была содержать как можно меньше теории и как можно больше информации по таким актуальным темам, как обмен ключами с парольной аутентификацией, доказательства с нулевым разглашением, постквантовая криптография и т.п.

Когда в 2018 году издательство Manning обратилось ко мне с вопросом, не хочу ли я написать книгу о криптографии, я уже знал ответ. И знал, о чем хочу написать. Я просто ждал, пока кто-нибудь даст мне возможность и повод потратить время на написание книги, которую давно задумал. Кроме того, она отлично вписывалась в одну из серий издательства Manning. Итак, книга, которую вы держите в руках, является результатом более чем двух лет упорного труда и огромной любви. Надеюсь, она вам понравится.

1 Шнайер Б. Прикладная криптография: протоколы, алгоритмы и исходный код на C. 2-е изд. — 2022.

2 Компания Meta, которой принадлежит Facebook, запрещена в РФ. — Примеч. ред.

Благодарности

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

Хочу также сказать спасибо Фрэнсису Бурану, Сэму Зайделю, Майклу Розен­бергу, Паскалю Кнехту, Сету Дэвиду Шоэну, Эялю Ронену, Саралинн Чик, Роберту Сикорду, Элою Мануэлю, Робу Вуду, Хантеру Монку, Жану-Кристофу Форесту, Ливиу Барте, Маттиа Реджани, Оливье Герре, Андрею Лабунову, Карлу Литтке, Яну Ивницкому, Келлеру Фуксу, Роману Забицки, М.К. Сараванану, Саре Зенну, Даниэлю Бурдрезу, Джейсону Ноллу, Илиасу Черкауи, Фелипе де Лима, Раулю Силесу, Маттео Бокки, Джону Вудсу, Костасу Халкиасу, Йолану Ромайеру, Херардо ди Джакомо, Грегори Назарио, Робу Стаббсу, Яну Янчару, Гейбу Пайку, Кирану Туммале, Стивену Сингаму, Джереми О'Донохью, Джереми Буну, Томасу Дюбуше, Шарлю Гиллеме, Райану Сливи, Лионелю Ривьере, Бенджамину Ларсену, Габриэлю Жионо, Даану Шпренкельсу, Андреасу Крогену, Вадиму Любашевскому, Самуэлю Невесу, Стивену (Донгзе) Юэ, Тони Патти, Грэму Стилу и всем комментаторам с форума liveBook за многочисленные дискуссии и исправления, а также технические и редакторские замечания.

Кроме того, выражаю благодарность всем рецензентам: Адхиру Рамджиавану, Элу Пежевски, Алю Рахими, Алессандро Кампеису, Бобби Лину, Чаду Дэвису, Дэвиду Т. Кернсу, Доминго Салазару, Эдди Влуггену, Габору Ласло Хайбе, Геерту ван Лайтему, Гжегожу Бернасу, Харальду Куну, Уго Дурану, Яну Питеру Хервейеру, Джеффу Смиту, Джиму Карабатсосу, Джоэлу Котарски, Джону Параскевопулосу, Мэтту ван Винклу, Михалу Рутке, Полу Гребенку, Ричарду Лебелю, Руслану Шевченко, Сандживу Джайсвалу, Шону П. Болану, Томасу Дойленду, Уильяму Руденмальму, чьи предложения помогли существенно улучшить книгу.

О книге

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

Кому следует прочитать книгу

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

Студенты

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

Практикующие специалисты

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

Разработчики, прямо или косвенно использующие криптографию

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

Криптографы, интересующиеся другими областями

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

Инженеры и менеджеры по продуктам, желающие лучше разобраться в теме

Эта книга призвана также ответить на продукт-ориентированные вопросы. Каковы компромиссы и ограничения тех или иных подходов? Чем я рискую? Поможет ли данный путь обеспечить соответствие нормативным требованиям? Что мне нужно сделать для того, чтобы работать с государственными структурами?

Люди, которые хотят узнать о криптографии, применяемой в реальной жизни

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

Уровень подготовки читателя

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

Если вы хоть немного представляете, во что ввязываетесь, то большим плюсом будет знание того, что такое биты и байты, и опыт использования таких побитовых операций, как XOR, сдвиг влево и т.п. Помешает ли их отсутствие понять материал книги? Нет, но вам, вероятно, придется периодически прерывать чтение, чтобы поискать в Интернете ответы на возникающие вопросы.

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

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

Конечно, я бы солгал, если бы сказал, что при написании книги удалось полностью обойтись без математики. Без нее невозможно преподавать криптографию. Поэтому хороший уровень математической подготовки, несомненно, будет вам очень полезен, однако его отсутствие не должно помешать разобраться в большей части материала. При отсутствии глубокого понимания математики некоторые главы могут показаться сложными, особенно главы 14 и 15, посвященные пост­квантовой криптографии и криптографии следующего поколения, но вы сможете одолеть их, если проявите силу воли и поищете в Интернете информацию о матричном умножении и других неизвестных вам вещах. Если же решите пропустить эти главы, обязательно прочитайте главу 16 — это настоящая вишенка на торте.

Как организована книга

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

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

• Глава 2 посвящена хеш-функциям — фундаментальному криптографическому алгоритму, используемому для создания уникальных идентификаторов из байтовых строк.

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

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

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

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

• В главе 7 рассказывается о цифровых подписях — криптографических аналогах рукописной подписи, сделанной на бумаге.

• В главе 8 речь пойдет о случайности и о способах управления собственными секретами.

Часть II книги посвящена системам, состоящим из компонентов, описанных в первой части.

• В главе 9 вы узнаете об использовании шифрования и аутентификации для защиты каналов связи между машинами, в частности о протоколе SSL/TLS.

• Глава 10 посвящена сквозному шифрованию, позволяющему людям вроде нас с вами доверять друг другу.

• В главе 11 рассказывается о том, как машины аутентифицируют людей и как люди могут помочь машинам синхронизироваться друг с другом.

• Глава 12 знакомит читателей с зарождающейся криптовалютной сферой.

• Глава 13 посвящена аппаратной криптографии — устройствам, которые можно использовать для предотвращения извлечения ключей.

Далее следуют две бонусные главы: глава 14, посвященная постквантовой криптографии, и глава 15, посвященная криптографии следующего поколения. Эти два направления начинают проявляться в продуктах различных компаний, потому что постепенно становятся либо все более актуальными, либо все чаще применяемыми на практике и эффективными. Если вы пропустите эти две главы, я не стану вас осуждать, однако вам непременно следует прочитать заключительную главу, прежде чем поставить книгу на полку. В главе 16 кратко изложены различные проблемы и уроки, о которых необходимо помнить специалисту по криптографии, то есть вам. Как говорил дядя Человека-паука: «С большой силой приходит большая ответственность».

Примеры исходного кода

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

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

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

Об авторе

Дэвид Вонг является старшим инженером по криптозащите в компании O(1) Labs, где работает над криптовалютой Mina. Ранее он возглавлял работу по обеспечению безопасности криптовалюты Diem (официально известной как Libra) в рамках проекта Novi компании Facebook, а до этого был консультантом по информационной безопасности в команде Cryptography Services компании NCC Group.

В рамках карьеры Вонг принял участие в нескольких финансируемых государством аудитах проектов с открытым исходным кодом, таких как OpenSSL и Let’s Encrypt. Он выступал на различных конференциях, в том числе DEF CON и Black Hat, в рамках которой неоднократно преподавал курс по криптографии. Внес вклад в разработку стандарта TLS 1.3 и протокольного фреймворка Noise. Обнаружил уязвимости во множестве систем, включая CVE-2016-3959 в стандартной библиотеке Golang, а также CVE-2018-12404, CVE-2018-19608, CVE-2018-16868, CVE-2018-16869 и CVE-2018-16870 в различных библиотеках TLS.

Помимо прочего, Дэвид — автор протокола Disco (www.discocrypto.com и www.em­beddeddisco.com) и проекта по обеспечению безопасности децентрализованных приложений для смарт-контрактов (www.dasp.co). Его исследования посвящены атакам на кэш, направленным против алгоритма RSA (http://cat.eyalro.net/), протоколу на основе QUIC (https://eprint.iacr.org/2019/028), атакам по времени, направленным против алгоритма ECDSA (https://eprint.iacr.org/2015/839), и бэкдорам в алгоритме Диффи — Хеллмана (https://eprint.iacr.org/2016/644). Более подробную информацию можно найти в его блоге по адресу www.cryptologie.net.

Иллюстрация на обложке

Иллюстрация на обложке называется «Индеец из Кито». Она взята из коллекции костюмов разных стран Жака Грассе де Сен-Совера (1775–1810) под названием Costumes de Différents Pays, опубликованной во Франции в 1797 году. Все иллюстрации в ней нарисованы и раскрашены вручную. Богатство коллекции Грассе де Сен-Совера напоминает нам о том, насколько разной была культура в различных городах и регионах мира всего 200 лет назад. Изолированные друг от друга, люди говорили на разных языках и диалектах. Как на улицах городов, так и в сельской местности происхождение, профессию и социальное положение любого человека можно было легко определить по его одежде.

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

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

Часть I. Примитивы: криптографические ингредиенты

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

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

Удачи!

1. Введение

В этой главе

• В чем заключается криптография.

• Криптография в теории и криптография реального мира.

• О чем вы узнаете во время этого приключения.

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

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

ПРИМЕЧАНИЕ

Не останавливайтесь, если чего-то недопоняли. В конечном счете вы во всем разберетесь.

1.1. Криптография как защита протоколов

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

1. Положить оружие на землю.

2. Вздремнуть под деревом.

3. Поднять оружие с земли.

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

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

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

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

1.2. Симметричная криптография. Что такое симметричное шифрование

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

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

Королеве Алисе нужен протокол, имитирующий передачу сообщения лорду Бобу лично, без посредников. В практическом плане данная проблема неразрешима, если мы не введем в уравнение криптографию (или телепортацию). К этому и пришли много лет назад, изобретя новый тип криптографического алгоритма — алгоритм симметричного шифрования, известный также как шифр.

ПРИМЕЧАНИЕ

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

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

• шифрование;

• расшифрование.

Первая функция, шифрование, принимает секретный ключ (обычно в виде длинного числа) и сообщение, а затем выдает серию случайных чисел, или, как говорится, некоторые зашумленные данные. Этот результат и является зашифрованным сообщением (рис. 1.1).

Рис. 1.1. Функция шифрования принимает сообщение и секретный ключ и выдает зашифрованное сообщение — длинную серию цифр, которая выглядит как хаотичный шум

Вторая функция, расшифрование, является обратной по отношению к первой. Она принимает тот же секретный ключ и случайные выходные данные первой функции (зашифрованное сообщение), а затем находит исходное сообщение (рис. 1.2).

Рис. 1.2. Функция расшифрования принимает зашифрованное сообщение и секретный ключ и возвращает исходное сообщение

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

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

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

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

Рис. 1.3. Алиса задействует функцию шифрования с секретным ключом для преобразования своего сообщения в шум (1). Она передает зашифрованное сообщение гонцу, который ничего не знает об исходном сообщении (2). Получив зашифрованное сообщение, Боб может восстановить его исходное содержание с помощью функции расшифрования с тем же секретным ключом, который применила Алиса (3)

1.3. Принцип Керкгоффса: секретом является только ключ

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

Прошли сотни лет, и многие лорды и королевы покинули наш мир. С тех пор от бумаги как основного средства общения отказались в пользу более совершенных и практичных технологий. Сегодня нам доступны мощные компьютеры и Интернет. Конечно, так удобнее, но и наш подлый гонец стал намного сильнее. Он теперь повсюду: в Wi-Fi кафе Starbucks, на различных серверах, подключающих людей к Интернету и пересылающих их сообщения, и даже в машинах, на которых работают наши алгоритмы. Злоумышленники теперь могут увидеть гораздо больше сообщений, ведь каждый запрос на веб-сайт может пойти «не по тому проводу» и за считаные наносекунды его могут изменить или скопировать так, что никто этого даже не заметит.

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

ПРИМЕЧАНИЕ

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

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

В качестве примера рассмотрим алгоритм шифрования Advanced Encryption Standard (AES; расширенный стандарт шифрования). Он был разработан в рамках международного конкурса, организованного Национальным институтом стандартов и технологий (National Institute of Standards and Technology, NIST).

ПРИМЕЧАНИЕ

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

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

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

Если недруги королевы Алисы и лорда Боба точно знали, как те шифруют свои сообщения, то каким образом их алгоритм защищает? Ответ: секретный ключ! Протокол безопасен не благодаря секретности алгоритма, а благодаря секретности ключа. Вот что является общей темой этой книги: почти все криптографические алгоритмы, о которых мы узнаем и которые используются в реальном мире, можно свободно изучать и задействовать в своих проектах. Скрыты только секретные ключи, применяемые в качестве входных данных для этих алгоритмов. Как сказал Жан Робер дю Карле в 1644 году, «ars ipsi secreta magistro» («секрет в искусстве есть даже для мастера»). В следующем разделе я расскажу о совершенно ином виде криптографических примитивов. А пока упорядочим то, что мы уже знаем (рис. 1.4).

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

1.4. Асимметричная криптография: два ключа лучше одного

В разделе про симметричное шифрование мы рассказали, как королева Алиса и лорд Боб сначала встретились и решили, каким будет симметричный ключ. Это правдоподобный сценарий, многие протоколы действительно работают именно таким образом. Но в протоколах с большим количеством участников данный способ быстро утрачивает свою практичность: нужно ли нам, чтобы наш браузер встретился с Google, Facebook, Amazon и миллиардами других веб-сайтов для обес­печения безопасного подключения?

Решение данной проблемы, которую часто обозначают как распределение ключей, не могли найти довольно долго — до открытия в конце 1970-х годов другой большой и полезной категории криптографических алгоритмов, именуемой асимметричной криптографией или криптографией с открытым ключом. Как правило, асимметричная криптография использует разные ключи для разных функций (в отличие от одного-единственного ключа в симметричной криптографии) или предоставляет разным участникам различный доступ к данным. В этом разделе я представлю ряд асимметричных примитивов и тем самым покажу на примерах, как криптография с открытым ключом помогает установить доверие между людьми. Обратите внимание на то, что это только краткий обзор криптографических примитивов, каждый из которых мы будем разбирать более подробно в последующих главах.

1.4.1. Обмен ключами, или Как получить общий секрет

Первый примитив асимметричной криптографии, который мы рассмотрим, — это обмен ключами. Названный в честь его авторов Диффи и Хеллмана (Diffie — Hellman, DH), он стал первым изобретенным и опубликованным алгоритмом с открытым ключом. Его основная задача — установление общего для двух сторон секрета, который затем может использоваться в различных целях, например в качестве ключа к примитиву симметричного шифрования.

В главе 5 я объясню работу алгоритма Диффи — Хеллмана, а сейчас ограничимся простой аналогией, чтобы понять, в чем состоит суть обмена ключами. Как и многие криптографические алгоритмы, обмен ключами обязательно начинается с того, что стороны устанавливают общий набор параметров. В нашей аналогии пусть королева Алиса и лорд Боб договорятся об использовании квадрата (). Следующим шагом будет выбор ими личной фигуры. Оба идут в свое тайное место, и вдали от посторонних глаз королева Алиса выбирает треугольник (), а лорд Боб — звезду (). Эти объекты должны оставаться в тайне любой ценой! Они представляют собой закрытые ключи (рис. 1.5).

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

Рис. 1.5. Первый этап обмена ключами Диффи — Хеллмана: две стороны создают закрытые ключи. Королева Алиса выбирает в качестве закрытого ключа треугольник, а лорд Боб — звезду

Рис. 1.6. Второй этап обмена ключами Диффи — Хеллмана: стороны обмениваются своими открытыми ключами, полученными в результате комбинирования закрытых ключей с общей фигурой

Теперь становится понятно, почему этот алгоритм называется алгоритмом с открытым ключом: он требует пары ключей, состоящей из закрытого и открытого ключей. Последний шаг алгоритма обмена ключами довольно прост. Королева Алиса берет открытый ключ лорда Боба и объединяет его со своим закрытым ключом. Лорд Боб делает то же самое с открытым ключом королевы Алисы. У обеих сторон должен получиться одинаковый результат. В нашем примере это фигура, сочетающая в себе звезду, квадрат и треугольник (рис. 1.7).

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

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

1. Алиса и Боб обмениваются своими открытыми ключами, маскирующими их закрытые ключи.

2. Имея открытый ключ другой стороны и свой личный ключ, они могут вычислить общий секрет.

3. У противника, наблюдающего за обменом открытыми ключами, недостаточно информации для вычисления общего секрета.

ПРИМЕЧАНИЕ

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

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

Так как королева Алиса принимает любой отправленный ей открытый ключ за открытый ключ лорда Боба, я могу перехватить обмен и заменить этот ключ своим, что позволит мне выдать себя за лорда Боба (и то же самое можно сделать в отношении лорда Боба). Так называемый посредник (man-in-the-middle, MITM) может успешно атаковать данный протокол. Как это исправить? В последующих главах мы увидим, что нужно либо дополнить этот протокол другим криптографическим примитивом, либо заранее знать, каков открытый ключ лорда Боба. Но разве тогда не получается, что мы вернулись к самому началу?

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

Остановимся на этом и перейдем к следующему разделу, поскольку в главе 5 мы подробнее разберем обмен ключами. Нам осталось раскрыть еще несколько примитивов асимметричного шифрования (рис. 1.8), чтобы завершить экскурс в криптографию реального мира.

1.4.2. Асимметричное шифрование, не похожее на симметричное

За изобретением алгоритма обмена ключами быстро последовало изобретение алгоритма RSA, названного в честь Рона Ривеста, Ади Шамира и Леонарда Адлемана. RSA состоит из двух примитивов: алгоритма шифрования с открытым ключом (асимметричное шифрование) и электронной (цифровой) подписи. Оба примитива относятся к большому классу криптографических алгоритмов — асимметричной криптографии. В этом разделе разберем, как работают эти примитивы и в чем их польза.

Рис. 1.8. Криптографические алгоритмы, о которых мы уже знаем. Два больших класса криптографических алгоритмов — симметричная криптография (с симметричным шифрованием) и асимметричная криптография (с обменом ключами)

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

• В нем используются два разных ключа — открытый и закрытый.

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

Воспользуемся простой аналогией, чтобы понять, как можно применить асимметричное шифрование. Начнем с нашей подруги королевы Алисы, у которой есть закрытый ключ и соответствующий открытый ключ. Представим ее открытый ключ в виде распахнутого сундука, рыться в котором она разрешает всем жела­ющим (рис. 1.9).

Рис. 1.9. Для того чтобы использовать асимметричное шифрование, королева Алиса должна сначала предоставить свой открытый ключ (здесь — распахнутый сундук). Теперь любой может применить открытый ключ для шифрования адресованных ей сообщений. А у нее должна быть возможность расшифровать их с помощью соответствующего закрытого ключа

Теперь и вы, и я, и все желающие могут зашифровать сообщение для королевы Алисы, используя ее открытый ключ. Представьте, что вы кладете свое сообщение в открытый сундук, а затем закрываете его. Теперь никто, кроме королевы Алисы, не сможет открыть этот сундук. Он эффективно обеспечивает секретность сообщения для сторонних наблюдателей. Закрытый сундук (или зашифрованное содержимое) можно отправить королеве Алисе, которая, в свою очередь, может применить свой закрытый ключ (известный только ей, помните) для расшифровки (рис. 1.10).

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

Добавим на нашу карту (рис. 1.11) рассмотренный сейчас криптографический примитив. Осталась еще одна точка для завершения экскурса в криптографию реального мира!

Рис. 1.11. Криптографические алгоритмы, о которых мы уже знаем: два больших класса криптографических алгоритмов — симметричная криптография (с симметричным шифрованием) и асимметричная криптография (с обменом ключами и асимметричным шифрованием)

1.4.3. Цифровые подписи, прямо как подписи на бумаге

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

«А что, если кто-то подделает мою подпись?» — спросите вы, и действительно, в реальном мире подписи на бумаге не особо-то и защищают. В то же время криптографические подписи, выполняющие ту же функцию, что и реальные, предоставляют цифровой сертификат с вашим именем. Таким образом, криптографическую подпись нельзя подделать и ее легко проверить, что довольно полезно по сравнению с устаревшими подписями, которые раньше ставили на чеках!

На рис. 1.12 представлен протокол, в котором королева Алиса хочет показать лорду Дэвиду, что доверяет лорду Бобу. Это типичный пример того, как можно установить доверие в многосторонней среде и чем при этом может помочь асимметричная криптография. Подписав лист бумаги со словами: «Я, королева Алиса, доверяю лорду Бобу», королева Алиса может ясно дать понять лорду Дэвиду, что лорду Бобу можно доверять. Если лорд Дэвид уже доверяет королеве Алисе и ее алгоритму подписи, то он может начать доверять и лорду Бобу.

Рис. 1.12. Лорд Дэвид уже доверяет королеве Алисе. Безопасно ли для него доверять лорду Бобу, которому доверяет королева Алиса?

Если говорить точнее, королева Алиса может использовать схему подписи RSA и свой закрытый ключ, чтобы подписать сообщение: «Я, королева Алиса, доверяю лорду Бобу». При этом сгенерируется подпись в виде случайного шума (рис. 1.13).

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

Любой человек может проверить подпись, объединив:

• открытый ключ Алисы;

• подписанное сообщение;

• подпись.

Результатом будет либо «истина» (подпись действительна), либо «ложь» (подпись недействительна), как показано на рис. 1.14.

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

Мы рассмотрели три асимметричных примитива:

• обмен ключами Диффи — Хеллмана;

• асимметричное шифрование;

• цифровые подписи RSA.

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

Рис. 1.15. Все рассмотренные симметричные и асимметричные алгоритмы

1.5. Классификация и обобщение в области криптографии

В предыдущем разделе мы рассмотрели два больших класса алгоритмов:

• симметричную криптографию (или криптографию с секретным ключом), в которой используется один секрет. Если он известен нескольким участникам, то называется общим;

• асимметричную криптографию (или криптографию с открытым ключом), в которой стороны имеют асимметричный доступ к секретам. Например, одним известен только открытый ключ, а другим — и открытый, и закрытый.

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

• на математические конструкции, основанные на таких математических задачах, как факторизация чисел (пример такого типа конструкций — алгоритм RSA для цифровых подписей и асимметричного шифрования);

• эвристические конструкции, основанные на наблюдениях и статистическом анализе, выполняемом криптоаналитиками (пример — AES для симметричного шифрования).

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

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

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

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

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

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

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

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

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

1.6. Криптография в теории и криптография реального мира

В 1993 году Брюс Шнайер выпустил книгу «Прикладная криптография» для разработчиков и инженеров, работающих над приложениями с криптографией. Где-то с 2012 года Кенни Патерсон и Найджел Смарт начали проводить ежегодные конференции Real World Crypto, ориентированные на ту же аудиторию. Но что имеется в виду под прикладной криптографией и криптографией реального мира? Существует более одного типа криптографии?

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

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

Как правило, практическую криптографию очень волнуют аспекты реального мира: какой точный уровень защиты обеспечивается тем или иным алгоритмом? Сколько времени требуется для выполнения алгоритма? Каков размер входных и выходных данных, требуемых примитивом? Как вы уже могли догадаться, криптография реального мира — это главная тема данной книги. Теоретическая криптография является основой других книг, мы же взглянем на то, что в этой области происходит, в последних главах. Будьте готовы удивляться, потому что своими глазами увидите реальную криптографию завтрашнего дня.

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

1.7. От теории к практике: выбери себе приключение

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

Тай Дуонг, So you want to roll your own crypto? (2020)

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

Слышали ли вы о книгах «Выбери себе приключение»? Это старая серия книг, в которой читатель сам выбирает сюжет. Принцип прост: человек читает первый раздел книги, а в конце его может выбрать дальнейший путь из предложенных вариантов. Каждый вариант соотносится с определенным номером раздела, к которому можно перейти согласно сделанному выбору. Итак, я проделаю то же самое здесь! Читайте текст далее и следуйте указаниям.

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

• Вы Алиса — перейдите к шагу 1.

• Вы Дэвид — перейдите к шагу 2.

• Вы Ева — перейдите к шагу 3.

Шаг 1. Исследователи должны проводить исследования. Вы являетесь научным сотрудником университета, или исследовательской группы частной компании (либо некоммерческой организации), или государственной исследовательской организации, например NIST или Агентства по национальной безопасности (АНБ). Следовательно, финансирование может поступать из разных мест и тем самым поощрять вас к проведению различных исследований.

• Вы изобретаете новый примитив — перейдите к шагу 4.

• Вы изобретаете новую конструкцию — перейдите к шагу 5.

• Вы запускаете открытый конкурс — перейдите к шагу 6.

Шаг 2. У бизнеса есть потребность. На работе что-то случается, и возникает потребность в новом стандарте. Например, Альянс Wi-Fi (Wi-Fi Alliance) — это финансируемая заинтересованными компаниями некоммерческая организация, которая занимается созданием стандартов, касающихся протокола Wi-Fi. Другой пример — банки, объединившиеся для разработки стандарта безопасности индустрии платежных карт (Payment Card Industry Data Security Standard, PCI DSS). Данный стандарт вводит алго­ритмы и протоколы, которые необходимо использовать при работе с номерами кредитных карт.

• Вы решили профинансировать некоторые очень нужные исследования — перейди­те к шагу 1.

• Вы решили стандартизировать новый примитив или протокол — перейдите к шагу 5.

• Вы запускаете открытый конкурс — перейдите к шагу 6.

Шаг 3. У правительства есть потребность. Вы работаете на правительство своей страны, и вам нужно выпустить новую криптографию. К примеру, перед NIST поставили задачу опубликовать федеральные стандарты обработки информации (Federal Information Processing Standards, FIPS), которые устанавливают, какие криптографические алгоритмы могут использоваться компаниями, работающими с правительством США. Несмотря на то что многие из них успешны, а люди склонны с большим доверием относиться к продвигаемым правительственными агентствами стандартам, о неудачах (к сожалению) тоже можно многое рассказать.

В 2013 году, после разоблачений, которые сделал Эдвард Сноуден, выяснилось, что АНБ целенаправленно и успешно добилось включения в стандарты бэкдора (см. Dual EC: A Standardized Back Door Бернштейна и др.), который содержал скрытый параметр, позволяющий АНБ, и только АНБ, отслеживать пользователей. Бэкдоры можно рассматривать как волшебные пароли, позволяющие правительству (и только ему, предположительно) взламывать алгоритмы шифрования. С тех пор криптографическое сообщество практически перестало доверять правительственным стандартам и предложениям. Недавно, в 2019 году, выяснилось, что российский стандарт ГОСТ имел такие же проблемы.

Криптографы давно подозревали, что агентство заложило уязвимости в стандарт, который был принят в 2006 году Национальным институтом стандартов и технологий, а затем Международной организацией по стандартизации, членами которой являются 163 страны. Засекреченные служебные записки АНБ подтверждают, что критический дефект, обнаруженный двумя криптографами Microsoft в 2007 году, был разработан самим агентством. АНБ написало стандарт и агрессивно продвигало его на международном уровне, негласно называя эти усилия вызовом изяществу.

«Нью-Йорк таймс» (N. S.A. Able to Foil Basic Safeguards of Privacy on Web, 2013)

• Вы финансируете исследование — перейдите к шагу 1.

• Вы организуете открытый конкурс — перейдите к шагу 6.

• Вы добиваетесь стандартизации используемого вами примитива или протокола — перейдите к шагу 7.

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

• Ваш примитив реализуется — перейдите к шагу 5.

• Ваш примитив оказывается нереализуемым — вернитесь к началу.

Шаг 5. Предлагается новая конструкция или протокол. Криптограф или группа криптографов предлагает новый алгоритм, который реализует концепцию. Например, AES является конкретизацией схемы шифрования. (AES был предложен Винсентом Риджменом и Джоан Демен, которые назвали конструкцию сокращением своих фамилий — Rijndael.) Что дальше?

• Кто-то берет за основу вашу конструкцию — перейдите к шагу 5.

• Вы участвуете в открытом конкурсе и побеждаете! Перейдите к шагу 6.

• Ваша работа вызвала большой шум и становится стандартом! Перейдите к шагу 7.

• Вы решаете запатентовать свою конструкцию — перейдите к шагу 8.

• Вы или кто-то другой решаете, что будет интересно реализовать конструкцию, — перейдите к шагу 9.

Шаг 6. Алгоритм побеждает в конкурсе. Процесс, который криптографы любят больше всего, — это открытый конкурс! Например, AES был конкурсом, в котором участвовали исследователи со всего мира. В результате многоступенчатого анализа десятков поданных заявок и с помощью криптоаналитиков (что может занять годы) список был сокращен до нескольких кандидатов (в случае с AES — до одного), которые затем вошли в стандарт.

• Вам повезло, в многолетнем конкурсе ваша конструкция победила! Перейдите к шагу 7.

• К сожалению, вы проиграли — вернитесь к началу.

Шаг 7. Алгоритм или протокол стандартизируется. Стандарт обычно публикуется правительством или организацией по стандартизации. Цель публикации состоит в том, чтобы избежать недопонимания и разногласий и тем самым максимизировать функциональную совместимость. Так, NIST регулярно публикует криптографические стандарты. Известной организацией по стандартизации в области криптографии является также Инженерный совет Интернета (Internet Engineering Task Force, IETF), который стоит за выпуском многих стандартов в Интернете (TCP, UDP, TLS и др.) и о котором вы много узнаете в этой книге. В IETF стандарты называются рабочими предложениями (Request for Comments, RFC) и могут быть разработаны практически любым желающим.

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

RFC 7282 («О консенсусе и гуле в IETF», 2014)

Иногда компания публикует стандарт напрямую. Так, RSA Security LLC, финансируемая создателями алгоритма RSA, выпустила серию из 15 документов под названием «Стандарты криптографии с открытым ключом» (Public Key Cryptography Standards, PKCS), в которых легитимизовала алгоритмы и методы, используемые компанией в то время. Сейчас такое встречается довольно редко, и многие компании стандартизируют свои протоколы или алгоритмы через IETF в виде RFC, а не внутреннего документа.

• Ваш алгоритм или протокол реализован — перейдите к шагу 9.

• Никого не волнует ваш стандарт — вернитесь к началу.

Шаг 8. Истечение срока действия патента. В криптографии патент обычно означает, что алгоритм никто не будет использовать. Возобновление интереса к примитиву нередко наблюдается после истечения срока действия патента на него. Самым популярным примером, вероятно, являются подписи Шнорра. Данный алгоритм был первым претендентом на то, чтобы стать самой популярной схемой подписи, пока Шнорр не запатентовал его в 1989 году. Это привело к тому, что NIST стандартизировал менее безопасный алгоритм цифровой подписи (Digital Signature Algorithm, DSA), который стал тогда главной схемой подписи, однако сейчас не находит широкого применения. Срок действия патента на подписи Шнорра истек в 2008 году, и с тех пор алгоритм вновь начал обретать популярность.

• Прошло слишком много времени, и о вашем алгоритме забыли навсегда — вернитесь к началу.

• Ваша конструкция стала идейной основной для множества других конструкций — перейдите к шагу 5.

• Теперь люди хотят использовать вашу конструкцию, но не раньше ее официальной стандартизации — перейдите к шагу 7.

• Некоторые разработчики реализуют ваш алгоритм! Перейдите к шагу 9.

Шаг 9. Реализация конструкции или протокола. Перед теми, кто хочет реализовать алго­ритм, стоит сложная задача: им необходимо не только проанализировать документ или стандарт (хотя и предполагается, что стандарты предназначены для них), но и сделать его простым и безопасным для применения. Не всегда это просто, поскольку в том, как используется криптография, может возникнуть множество критических ошибок.

• Кто-то решает, что отсутствие у алгоритма статуса стандарта усложняет его реализацию и пришло время исправить это. Перейдите к шагу 7.

• На вашу криптографическую библиотеку обрушилось всеобщее внимание! Перейди­те к шагу 10.

Шаг 10. Разработчик использует протокол или примитив в приложении. Перед разработчиком стоит определенная задача и, похоже, ваша криптографическая библиотека решает ее проще простого!

• Примитив устраняет потребность, но у него нет статуса стандарта. Это не очень хорошо. Перейдите к шагу 7.

• Хотел бы я, чтобы это было написано на моем языке программирования. Перейди­те к шагу 9.

• Я неправильно использовал библиотеку, или конструкция взломана. Игра окончена.

Получилось! Существует множество способов перехода примитива в реальный мир. Лучший вариант — многолетний анализ, признание его просто реализуемым стандартом и наличие качественных библиотек. Худший вариант — плохой алгоритм с плохой реализацией. На рис. 1.16 проиллюстрирован предпочтительный вариант.

Рис. 1.16.