Нильс Фергюсон, Брюс Шнайер. Практическая Криптография. - М., 2005. - 416 стр.
В современном деловом мире вопрос безопасности компьютерных систем приобретает решающее значение. Проигнорировав его, вы лишаете себя возможности заработать деньги, расширить свой бизнес, а, следовательно, ставите под угрозу само существование вашей компании. Одной из наиболее многообещающих технологий, позволяющих обеспечить безопасность в киберпространстве, является криптография.
Данная книга, написанная всемирно известными специалистами в области криптографии, представляет собой уникальное в своем роде руководство по практической разработке криптографической системы, устраняя тем самым досадный пробел между теоретическими основами криптографии и реальными криптографическими приложениями.
Содержание
Предисловие 16
Как читать эту книгу 18
Глава 1. Наша философия проектирования 21
1.1 Обратная сторона производительности 22
1.2 Обратная сторона оснащенности 25
Глава 2. Криптография в контексте окружающего мира 26
21 Роль криптографии 27
2.2 Правило слабого звена 28
2.3 Противоборствующее окружение 30
2.4 Практическая паранойя 31
2.4.1 Критика 32
2.5 Модель угроз 34
2.6 Криптография — это не решение 36
2.7 Криптография очень сложна 37
2.8 Криптография — это самая простая часть 38
2.9 Рекомендуемая литература 39
Глава 3. Введение » криптографию 40
3.1 Шифрование 40
3.1.1 Принцип Кирхгофа 42
3.2 Аутентификация 43
3.3 Шифрование с открытым ключом 45
3.4 Цифровые подписи 47
3.5 Инфраструктура открытого ключа 48
3.6 Типы атак 50
3.6.1 Только шифрованный текст 50
3.6.2 Известный открытый текст 50
3.6.3 Избранный открытый текст 51
3.6.4 Избранный шифрованный текст 52
3.6.5 Различающие атаки 52
3.6.6 Атаки в основе которых лежит парадокс задачи
о днях рождения 53
3.6.7 Двусторонняя атака 54
3.6.8 Другие типы атак 56
3.7 Уровень безопасности 56
3.8 Производительность 57
3.9 Сложность 59
Часть I. Безопасность сообщений 61
Глава 4. Блочные шифры h 62
4.1 Что такое блочный шифр? 62
4.2 Типы атак 63
4.3 Идеальный блочный шифр 65
4.4 Определение безопасности блочного шифра 65
4.4.1 Четность перестановки 68
4.5 Современные блочные шифры 70
4.5.1 DES 71
4.5.2 AES 74
4.5.3 Serpent 78
4.5.4 Twofish 79
4.5.5 Другие финалисты AES 82
4.5.6 Атаки с помощью решения уравнений 82
4.5.7 Какой блочный шифр выбрать 83
4.5.8 Каким должен быть размер ключа 85
Глава 5. Режимы работы блочных шифров 87
5.1 Дополнение 88
5.2 Электронная шифровальная книга (ЕСВ) 89
5.3 Сцепление шифрованных блоков (СВС) 90
5.3.1 Фиксированный вектор инициализации 90
5.3.2 Счетчик 90
5.3.3 Случайный вектор инициализации 91
5.3.4 Оказия 92
5.4 Обратная связь по выходу (OFB) 93
5.5 Счетчик (CTR) 95
5.6 Новые режимы 97
5.7 Какой режим выбрать 98
5.8 Утечка информации 99
5.8.1 Вероятность коллизии 101
5.8.2 Как бороться с утечкой информации 102
5.8.3 О наших вычислениях 103
Глава 6. Функции хэширования 104
6.1 Безопасность функций хэширования 105
6.2 Современные функции хэширования 107
6.2.1 MD5 108
6.2.2 SHA-1 109 6.2 3 SHA-256, SHA-384 и SHA-512 110
6.3 Недостатки функций хэширования 111
6.3.1 Удлинение сообщения 111
6.3.2 Коллизия при частичном хэшировании сообщений 112
6.4 Исправление недостатков 113 6.41 Полное исправление 114
6.4.2 Более эффективное исправление 115
6.5 Какую функцию хэширования выбрать 116
6.6 Работа на будущее 117
Глава 7. Коды аутентичности сообщений 118
7.1 Что такое MAC 118
7.2 Идеальная функция вычисления MAC 119
7.3 Безопасность MAC 119
7.4 СВС-МАС 120
7.5 НМАС 122
7.5.1 НМАС или SHAd? 124
7.6 UMAC 125 7.61 Размер значения 125
7.6.2 Выбор функции 126
7.6.3 Платформенная гибкость 127
7.6.4 Нехватка анализа 128
7.6.5 Зачем тогда нужен UMAC? 128
7.7 Какую функцию вычисления MAC выбрать 129
7.8 Использование MAC 129
Глава 8. Безопасный канал общения 132
8.1 Формулировка проблемы 132
8.1.1 Роли 132
8.1.2 Ключ 133
8.1.3 Сообщения или поток 134
8.1.4 Свойства безопасности 134
8.2 Порядок аутентификации и шифровании 136
8.3 Структура решения 139
8.3.1 Номера сообщений 139
8.3.2 Аутентификация 140
8.3.3 Шифрование 141
8.3.4 Формат пакета 141
8.4 Детали реализации 142
8.4.1 Инициализация 142
8.4.2 Отправка сообщения 143
8.4.3 Получение сообщения 145
8.4.4 Порядок сообщений 146
8.5 Альтернативы 147
8.6 Заключение 149
Глава 9. Проблемы реализации. Часть I 151
9.1 Создание правильных программ 153
9.1.1 Спецификации 153
9.1.2 Тестирование и исправление 154
9.1.3 Халатное отношение 155
9.1.4 Так что же нам делать? 156
9.2 Создание безопасного программного обеспечения 157
9.3 Как сохранить секреты 158
9.3.1 Уничтожение состояния 158
9.3.2 Файл подкачки 161
9.3.3 Кэш 162
9.3.4 Удерживание данных в памяти 164
9.3.5 Доступ других программ 166
9.3.6 Целостность данных 167
9.3.7 Что делать 168
9.4 Качество кода 169
9.4.1 Простота 169
9.4.2 Модуляризация 170
9.4.3 Утверждения 171
9.4.4 Переполнение буфера 172
9.4.5 Тестирование 173
9.5 Атаки с использованием побочных каналов 174
9.6 Заключение 175
Часть II. Согласование ключей: 177
Глава 10. Генерация случайных чисел 178
10.1 Истинно случайные числа 179
10.1.1 Проблемы использования истинно случайных чисел 180
10.1.2 Псевдослучайные числа 181
10.1.3 Истинно случайные числа и генераторы псевдослучайных чисел 182
10.2 Модели атак на генератор псевдослучайных чисел 183
10.3 Проект Fbrtuna 185
10.4 Генератор 185
10.4.1 Инициализация 188
10.4.2 Изменение начального числа 188
10.4.3 Генерация блоков 189
10.4.4 Генерация случайных данных 190
10.4.5 Скорость работы генератора 191
10.5 Аккумулятор 191
10.5.1 Источники энтропии 192
10.5.2 Пулы 1 193
10 5.3 Вопросы реализации 196
10.5.4 Инициализация 199
10.5.5 Получение случайных данных 199
10.5.6 Добавление события 201
10.6 Управление файлом начального числа 202
10.6 1 Запись в файл начального числа 203
10.6.2 Обновление файла начального числа 203
10.6.3 Когда нужно считывать и перезаписывать файл начального числа? 204
10.6.4 Архивирование 204
10.6 5 Атомарность операций обновления файловой системы 205
10.6 6 Первая загрузка 206
10.7 Так что же делать? 207
10.8 Выбор случайных элементов 208
Глава 11. Простые числа 210
11.1 Делимость и простые числа 210
11.2 Генерация малых простых чисел 213
11.3 Арифметика по модулю простого числа 215
11.3.1 Сложение и вычитание 216
11.3.2 Умножение 217
11.3.3 Группы и конечные поля 217
11.3.4 Алгоритм поиска НОД 219
11.3.5 Расширенный алгоритм Евклида 220
11.3.6 Вычисления по модулю 2 221
11.4 Большие простые числа 222
11.4.1 Проверка того, является ли число простым 225
11.4.2 Оценивание степеней 229
Глава 12. Алгоритм Диффи-Хеялмана 231
12.1 Группы 232
12.2 Базовый алгоритм Диффи-Хеллмана 233
12.3 Атака посредника 235
12.4 "Подводные камни" реализации 237
12.5 Надежные простые числа 238
12.6 Использование подгрупп меньшего размера 239
12.7 Размер р 240
12.8 Практические правила 243
12.9 Что может пойти не так 244
Глава 13. Алгоритм RSA 247
13.1 Введение 247
13.2 Китайская теорема об остатках 248
13.2.1 Формула Гарнера 249
13.2.2 Обобщение 250
13.2.3 Использование 250
13.2 4 Заключение 252
13.3 Умножение по модулю n 252
13.4 Определение RSA 253
13.4.1 Создание цифровой подписи с помощью RSA 254
13.4 2 Открытые показатели степеней 254
13 4.3 Закрытый ключ 255
13.4.4 Размер n 257
13.4.5 Генерация ключей RSA 257
13.5 "Подводные камни" использования RSA 259
13.6 Шифрование 261
13.7 Подписи 264
Глава 14. Введшие в криптографические протоколы 268
14.1 Роли 268
14.2 Доверие 269
14.2.1 Риск 271
14.3 Стимул 271
14.4 Доверие в криптографических протоколах 274
14.5 Сообщения и действия 275
14.5.1 Транспортный уровень 275
14.5.2 Идентификация протоколов и сообщений 276
14.5.3 Котирование и анализ сообщений 277
14.5 4 Состояние выполнения протокола 278
14.5.5 Ошибки 279
14.5.6 Воспроизведение и повторение 281
Глава 15. Протокол согласования ключей 284
15.1 Окружение 284
15.2 Первая попытка 285
15.3 Пусть всегда будут протоколы! 287
15.4 Соглашение об аутентификации 288
15.5 Вторая попытка 289
15.6 Третья попытка 290
15.7 Окончательная версии протокола 292
15.8 Анализ протокола с различных точек зрения 294
15.8.1 Точка зрения пользователя А 294
15.8.2 ТЬчка зрения пользователя Б 295
15.8.3 Точка зрения злоумышленника 295
15.8.4 Взлом ключа 297
15.9 Вычислительная сложность протокола 298
15.9.1 Методы оптимизации 299
15.10 Сложность протокола 299
15.11 Небольшое предупреждение 301
15.12 Согласование ключей с помощью пароля 301
Глава 16. Проблемы реализации. Часть II 303
16.1 Арифметика больших чисел 303
16.1.1 Вупинг 305
16.1.2 Проверка вычислений алгоритма DH 309
16.1.3 Проверка шифрования RSA 310
16.1.4 Проверка цифровых подписей RSA 310
16.1.5 Заключение 311
16.2 Быстрое умножение 311
16.3 Атаки с использованием побочных каналов 313
16.3.1 Меры предосторожности 314
16.4 Протоколы 316
16.4.1 Выполнение протоколов поверх безопасного канала общения 316
16.4.2 Получение сообщения 317
16.4.3 Время ожидания 319
Часть III. Управление ключами 321
Глава 17. Часы 322
17.1 Зачем нужны часы 322
17.1.1 Срок действия 322
17.1.2 Уникальные значения 322
17.1.3 Монотонность 323
17.1.4 Выполнение транзакций в режиме реального времени 324
17.2 Использование микросхемы датчика времени 324
17.3 Виды угроз 325
17.3.1 Перевод часов назад 325
17.3.2 Остановка часов 326
17.3.3 Перевод часов вперед 327
17.4 Создание надежных часов 328
17.5 Проблема одного и того же состоянии 329
17.6 Время 331
17.7 Заключение 332
Глава 18. Серверы ключей 333
18.1 Основная идея 334
18.2 Kerberos 334
18.3 Решения попроще 335
18.3.1 Безопасное соединение 336
18.3.2 Создание ключа 337
18.3.3 Обновление ключа 337
18.3.4 Другие свойства 338
18.4 Что выбрать 338
Глава 19. PKI: красивая мечта 339
19.1 Краткий обзор инфраструктуры открытого ключа 339
19.2 Примеры инфраструктуры открытого ключа 340
19.2.1 Всеобщая инфраструктура открытого ключа 340
19.2.2 Доступ к виртуальным частным сетям 341
19.2.3 Электронные платежи 341
19.2.4 Нефтеперегонный завод 341
19.2.5 Ассоциация кредитных карт 342
19.3 Дополнительные детали 342
19.3.1 Многоуровневые сертификаты 342
19.3.2 Срок действия 344
19.3.3 Отдельный центр регистрации 344
19.4 Заключение 345
Глава 20. PKI: жестокая реальность 347
20.1 Имена 347
20.2 Полномочный орган 350
20.3 Доверие 351
20.4 Непрямая авторизация 352
20.5 Прямая авторизация 353
20.6 Системы мандатов 354
20.7 Измененная мечта 357
20.8 Отзыв 358
20.8.1 Список отзыва 358
20.8.2 Быстрое устаревание 360
20.8.3 Отзыв обязателен 360
20.9 Где может пригодиться инфраструктура открытого ключа 361
20.10 Что выбрать 363
Глава 21. Практические аспекты PKI 364
21.1 Формат сертификата 364
21.1.1 Язык разрешений 364
21.1.2 Ключ корневого ЦС 365
21.2 Жизненный цикл ключа 366
21.3 Почему ключи изнашиваются 369
21.4 Так что же нам делать? 370
Глава 22. Хранение секретов 371
22.1 Диск 371
22.2 Человеческая память 372
22.2.1 Солим и растягиваем t 374
22.3 Портативное хранилище 377
22.4 Идентификатор безопасности 378
22.5 Безопасный пользовательский интерфейс 379
22.6 Биометрика 381
22.7 Однократная регистрация 382
22.8 Риск утраты 383
22.9 Совместное владение секретом 384
22.10 Уничтожение секретов 385
22.10.1 Бумага 385
22.10.2 Магнитное хранилище 386
22.10.3 Полупроводниковые записывающие устройства 388
Часть IV. Разное 389
Глава 23. Стандарты 390
23.1 Процесс стандартизации 390
23.1.1 Стандарт 392
23.1.2 Функциональность 392
23.1.3 Безопасность 393
23.2 SSL 394
23.3 AES: стандартизация на конкурсной основе 395
Глава 24. Патенты 397
24.1 Прототип 397
24.2 Расширения 398
24.3 Расплывчатость описаний 399
24.4 Чтение патентов 400
24.5 Лицензирование 400
24.6 Защищающие патенты 402
24.7 Как исправить систему патентования 402
24.8 Отречение 403
Глава 25. Привлечение экспертов 404
Список основных источников информации 410
Предметный указатель 418
Алгебра и геометрия, теория чисел, криптография / Математика / Математика для студентов, аспирантов и научных работников