Система Orphus

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

Авторы: Нильс Фергюсон
Брюс Шнайер
Издательство: Вильямс, 2005
424 страницы

Материал предоставил: Алексей Кирюшкин
Найти в магазинах
Купить в Озоне (377 руб.)
Купить в Books.Ru

Аннотация

Содержание
Предисловие
Комментарии

Аннотация

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

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

Содержание

Предисловие
Как читать эту книгу

Глава 1. Наша философия проектирования
1.1 Обратная сторона производительности
1.2 Обратная сторона оснащенности

Глава 2. Криптография в контексте окружающего мира
2.1 Роль криптографии
2.2 Правило слабого звена
2.3 Противоборствующее окружение
2.4 Практическая паранойя
2.4.1 Критика
2.5 Модель угроз
2.6 Криптография - это не решение
2.7 Криптография очень сложна
2.8 Криптография - это самая простая часть
2.9 Рекомендуемая литература

Глава 3. Введение в криптографию
3.1 Шифрование
3.1.1 Принцип Кирхгофа
3.2 Аутентификация
3.3 Шифрование с открытым ключом
3.4 Цифровые подписи
3.5 Инфраструктура открытого ключа
3.6 Типы атак
3.6.1 Только шифрованный текст
3.6.2 Известный открытый текст
3.6.3 Избранный открытый текст
3.6.4 Избранный шифрованный текст
3.6.5 Различающие атаки
3.6.6 Атаки, в основе которых лежит парадокс задачи о днях рождения
3.6.7 Двусторонняя атака
3.6.8 Другие типы атак
3.7 Уровень безопасности
3.8 Производительность
3.9 Сложность

Часть I. Безопасность сообщений

Глава 4. Блочные шифры
4.1 Что такое блочный шифр?
4.2 Типы атак
4.3 Идеальный блочный шифр
4.4 Определение безопасности блочного шифра
4.4.1 Четность перестановки
4.5 Современные блочные шифры
4.5.1 DES
4.5.2 AES
4.5.3 Serpent
4.5.4 Twofish
4.5.5 Другие финалисты AES
4.5.6 Атаки с помощью решения уравнений
4.5.7 Какой блочный шифр выбрать
4.5.8 Каким должен быть размер ключа

Глава 5. Режимы работы блочных шифров
5.1 Дополнение
5.2 Электронная шифровальная книга (ЕСВ)
5.3 Сцепление шифрованных блоков (СВС)
5.3.1 Фиксированный вектор инициализации
5.3.2 Счетчик
5.3.3 Случайный вектор инициализации
5.3.4 Оказия
5.4 Обратная связь по выходу (OFB)
5.5 Счетчик (CTR)
5.6 Новые режимы
5.7 Какой режим выбрать
5.8 Утечка информации
5.8.1 Вероятность коллизии
5.8.2 Как бороться с утечкой информации
5.8.3 О наших вычислениях

Глава 6. Функции хэширования
6.1 Безопасность функций хэширования
6.2 Современные функции хэширования
6.2.1 MD5
6.2.2 SHA-1
6.2.3 SHA-256, SHA-384 и SHA-512
6.3 Недостатки функций хэширования
6.3.1 Удлинение сообщения
6.3.2 Коллизия при частичном хэшировании сообщений
6.4 Исправление недостатков
6.4.1 Полное исправление
6.4.2 Более эффективное исправление
6.5 Какую функцию хэширования выбрать
6.6 Работа на будущее

Глава 7. Коды аутентичности сообщений
7.1 Что такое MAC
7.2 Идеальная функция вычисления MAC
7.3 Безопасность MAC
7.4 СВС-МАС
7.5 НМАС
7.5.1 НМАС или SHAd?
7.6 UMAC
7.6.1 Размер значения
7.6.2 Выбор функции
7.6.3 Платформенная гибкость
7.6.4 Нехватка анализа
7.6.5 Зачем тогда нужен UMAC?
7.7 Какую функцию вычисления MAC выбрать
7.8 Использование MAC

Глава 8. Безопасный канал общения
8.1 Формулировка проблемы
8.1.1 Роли
8.1.2 Ключ
8.1.3 Сообщения или поток
8.1.4 Свойства безопасности
8.2 Порядок аутентификации и шифрования
8.3 Структура решения
8.3.1 Номера сообщений
8.3.2 Аутентификация
8.3.3 Шифрование
8.3.4 Формат пакета
8.4 Детали реализации
8.4.1 Инициализация
8.4.2 Отправка сообщения
8.4.3 Получение сообщения
8.4.4 Порядок сообщений
8.5 Альтернативы
8.6 Заключение

Глава 9. Проблемы реализации. Часть I
9.1 Создание правильных программ
9.1.1 Спецификации
9.1.2 Тестирование и исправление
9.1.3 Халатное отношение
9.1.4 Так что же нам делать?
9.2 Создание безопасного программного обеспечения
9.3 Как сохранить секреты
9.3.1 Уничтожение состояния
9.3.2 Файл подкачки
9.3.3 Кэш
9.3.4 Удерживание данных в памяти
9.3.5 Доступ других программ
9.3.6 Целостность данных
9.3.7 Что делать
9.4 Качество кода
9.4.1 Простота
9.4.2 Модуляризация
9.4.3 Утверждения
9.4.4 Переполнение буфера
9.4.5 Тестирование
9.5 Атаки с использованием побочных каналов
9.6 Заключение

Часть II. Согласование ключей

Глава 10. Генерация случайных чисел
10.1 Истинно случайные числа
10.1.1 Проблемы использования истинно случайных чисел
10.1.2 Псевдослучайные числа
10.1.3 Истинно случайные числа и генераторы псевдослучайных чисел
10.2 Модели атак на генератор псевдослучайных чисел
10.3 Проект Fortuna
10.4 Генератор
10.4.1 Инициализация
10.4.2 Изменение начального числа
10.4.3 Генерация блоков
10.4.4 Генерация случайных данных
10.4.5 Скорость работы генератора
10.5 Аккумулятор
10.5.1 Источники энтропии
10.5.2 Пулы
10.5.3 Вопросы реализации
10.5.4 Инициализация
10.5.5 Получение случайных данных
10.5.6 Добавление события
10.6 Управление файлом начального числа
10.6.1 Запись в файл начального числа
10.6.2 Обновление файла начального числа
10.6.3 Когда нужно считывать и перезаписывать файл начального числа?
10.6.4 Архивирование
10.6.5 Атомарность операций обновления файловой системы
10.6.6 Первая загрузка
10.7 Так что же делать?
10.8 Выбор случайных элементов

Глава 11. Простые числа
11.1 Делимость и простые числа
11.2 Генерация малых простых чисел
11.3 Арифметика по модулю простого числа
11.3.1 Сложение и вычитание
11.3.2 Умножение
11.3.3 Группы и конечные поля
11.3.4 Алгоритм поиска НОД
11.3.5 Расширенный алгоритм Евклида
11.3.6 Вычисления по модулю 2
11.4 Большие простые числа
11.4.1 Проверка того, является ли число простым
11.4.2 Оценивание степеней

Глава 12. Алгоритм Диффи-Хеллмана
12.1 Группы
12.2 Базовый алгоритм Диффи-Хеллмана
12.3 Атака посредника
12.4 "Подводные камни" реализации
12.5 Надежные простые числа
12.6 Использование подгрупп меньшего размера
12.7 Размер р
12.8 Практические правила
12.9 Что может пойти не так

Глава 13. Алгоритм RSA
13.1 Введение
13.2 Китайская теорема об остатках
13.2.1 Формула Гарнера
13.2.2 Обобщение
13.2.3 Использование
13.2.4 Заключение
13.3 Умножение по модулю n
13.4 Определение RSA
13.4.1 Создание цифровой подписи с помощью RSA
13.4.2 Открытые показатели степеней
13.4.3 Закрытый ключ
13.4.4 Размер n
13.4.5 Генерация ключей RSA
13.5 "Подводные камни" использования RSA
13.6 Шифрование
13.7 Подписи

Глава 14. Введение в криптографические протоколы
14.1 Роли
14.2 Доверие
14.2.1 Риск
14.3 Стимул
14.4 Доверие в криптографических протоколах
14.5 Сообщения и действия
14.5.1 Транспортный уровень
14.5.2 Идентификация протоколов и сообщений
14.5.3 Кодирование и анализ сообщений
14.5.4 Состояние выполнения протокола
14.5.5 Ошибки
14.5.6 Воспроизведение и повторение

Глава 15. Протокол согласования ключей
15.1 Окружение
15.2 Первая попытка
15.3 Пусть всегда будут протоколы!
15.4 Соглашение об аутентификации
15.5 Вторая попытка
15.6 Третья попытка
15.7 Окончательная версия протокола
15.8 Анализ протокола с различных точек зрения
15.8.1 Точка зрения пользователя А
15.8.2 Точка зрения пользователя Б
15.8.3 Точка зрения злоумышленника
15.8.4 Взлом ключа
15.9 Вычислительная сложность протокола
15.9.1 Методы оптимизации
15.10 Сложность протокола
15.11 Небольшое предупреждение
15.12 Согласование ключей с помощью пароля

Глава 16. Проблемы реализации. Часть II
16.1 Арифметика больших чисел
16.1.1 Вупинг
16.1.2 Проверка вычислений алгоритма DH
16.1.3 Проверка шифрования RSA
16.1.4 Проверка цифровых подписей RSA
16.1.5 Заключение
16.2 Быстрое умножение
16.3 Атаки с использованием побочных каналов
16.3.1 Меры предосторожности
16.4 Протоколы
16.4.1 Выполнение протоколов поверх безопасного канала общения
16.4.2 Получение сообщения
16.4.3 Время ожидания

Часть III. Управление ключами

Глава 17. Часы
17.1 Зачем нужны часы
17.1.1 Срок действия
17.1.2 Уникальные значения
17.1.3 Монотонность
17.1.4 Выполнение транзакций в режиме реального времени
17.2 Использование микросхемы датчика времени
17.3 Виды угроз
17.3.1 Перевод часов назад
17.3.2 Остановка часов
17.3.3 Перевод часов вперед
17.4 Создание надежных часов
17.5 Проблема одного и того же состояния
17.6 Время
17.7 Заключение

Глава 18. Серверы ключей
18.1 Основная идея
18.2 Kerberos
18.3 Решения попроще
18.3.1 Безопасное соединение
18.3.2 Создание ключа
18.3.3 Обновление ключа
18.3.4 Другие свойства
18.4 Что выбрать

Глава 19. PKI: красивая мечта
19.1 Краткий обзор инфраструктуры открытого ключа
19.2 Примеры инфраструктуры открытого ключа
19.2.1 Всеобщая инфраструктура открытого ключа
19.2.2 Доступ к виртуальным частным сетям
19.2.3 Электронные платежи
19.2.4 Нефтеперегонный завод
19.2.5 Ассоциация кредитных карт
19.3 Дополнительные детали
19.3.1 Многоуровневые сертификаты
19.3.2 Срок действия
19.3.3 Отдельный центр регистрации
19.4 Заключение

Глава 20. PKI: жестокая реальность
20.1 Имена
20.2 Полномочный орган
20.3 Доверие
20.4 Непрямая авторизация
20.5 Прямая авторизация
20.6 Системы мандатов
20.7 Измененная мечта
20.8 Отзыв
20.8.1 Список отзыва
20.8.2 Быстрое устаревание
20.8.3 Отзыв обязателен
20.9 Где может пригодиться инфраструктура открытого ключа
20.10 Что выбрать

Глава 21. Практические аспекты PKI
21.1 Формат сертификата
21.1.1 Язык разрешений
21.1.2 Ключ корневого ЦС
21.2 Жизненный цикл ключа
21.3 Почему ключи изнашиваются
21.4 Так что же нам делать?

Глава 22. Хранение секретов
22.1 Диск
22.2 Человеческая память
22.2.1 Солим и растягиваем
22.3 Портативное хранилище
22.4 Идентификатор безопасности
22.5 Безопасный пользовательский интерфейс
22.6 Биометрика
22.7 Однократная регистрация
22.8 Риск утраты
22.9 Совместное владение секретом
22.10 Уничтожение секретов
22.10.1 Бумага
22.10.2 Магнитное хранилище
22.10.3 Полупроводниковые записывающие устройства

Часть IV. Разное

Глава 23. Стандарты
23.1 Процесс стандартизации
23.1.1 Стандарт
23.1.2 Функциональность
23.1.3 Безопасность
23.2 SSL
23.3 AES: стандартизация на конкурсной основе

Глава 24. Патенты
24.1 Прототип
24.2 Расширения
24.3 Расплывчатость описаний
24.4 Чтение патентов
24.5 Лицензирование
24.6 Защищающие патенты
24.7 Как исправить систему патентования
24.8 Отречение

Глава 25. Привлечение экспертов

Благодарности
Список основных источников информации
Предметный указатель

Предисловие

Нильс Фергюсон, Брюс Шнайер

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

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

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

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

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

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

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

Книга Практическая криптография тоже посвящена этой дисциплине, однако здесь речь идет вовсе не о той "незапятнанной" криптографии, которая упоминалась выше. Назначение этой книги состоит в том, чтобы открыто описать все ограничения и аспекты применения криптографии в реальной жизни, а также рассказать о разработке действительно безопасных криптографических систем. В некотором смысле данная книга является продолжением книги Брюса Шнайера Applied Cryptography [86], впервые опубликованной более 10 лет назад. Однако, в отличие от книги Applied Cryptography, дающей широкое представление о криптографии и тысячах ее возможностей, Практическая криптография охватывает достаточно узкую, строго определенную область знаний.

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

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

Мы позволили себе взяться за написание этой книги, поскольку оба являемся опытными специалистами в области криптографии. Брюса хорошо знают по его книгам Applied Cryptography (она упомянута выше) и Secrets and Lies [88], а также по информационному бюллетеню Crypto-Gram. Нильс отточил свое криптографическое мастерство, разрабатывая криптографические системы платежей в институте CWI (Национальный исследовательский институт математики и информатики Нидерландов) в Амстердаме и позднее в нидерландской компании DigiCash. Брюс разработал знаменитый алгоритм шифрования Blowfish, и мы оба принимали участие в разработке алгоритма Twofish. Исследования Нильса привели к появлению первого представителя нового поколения эффективных протоколов анонимных платежей. Общее количество написанных нами научных статей выражается трехзначным числом.

Что еще более важно, мы оба имеем обширный опыт в разработке и построении криптографических систем. С 1991 по 1999 годы консалтинговая компания Брюса Counterpane Systems предоставляла услуги по проектированию и анализу для нескольких крупнейших компьютерных и финансовых корпораций мира. В последние годы компания Counterpane Internet Security, Inc. занимается предоставлением услуг по слежению за безопасностью и ее обеспечению для больших корпораций и правительственных служб по всему миру. Нильс тоже работал в Counterpane перед тем, как основал собственную консалтинговую компанию MacFergus. Мы живем и дышим криптографией. Мы наблюдаем, как она "прогибается" под тяжестью реалий разработки программных систем и, что еще хуже, под тяжестью реалий бизнеса. Мы позволили себе издать эту книгу, поскольку уже десятки раз писали ее для клиентов, которых консультируем.

Комментарии

Алексей Кирюшкин

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

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

За необходимым минимумом по блочным шифрам и функциям хэширования следует пример создания безопасного канала общения, за ликбезом по случайным числам - разбор проекта генератора случайных чисел Fortuna, за главами, посвященными шифрованию с открытым ключом - разбор концепции инфраструктуры открытого ключа (Public-Key Infrastructure - PKI).

Вспоминая пословицу "Гладко было на бумаге, да забыли про овраги" можно сказать, что эта книга - как раз про "овраги" криптографии.