- •Министерство образования и науки российской федерации федеральное агентство по образованию
- •Захарова ю.Ф. Дискретная математика и ее приложения
- •Введение
- •Глава 1. Введение в теорию множеств.
- •1.1. Основные определения.
- •1.2. Задание множеств
- •1.3. Операции над множествами
- •1.4. Разбиения и покрытия
- •1.5. Представление множеств в эвм.
- •1.5.1. Включение множеств.
- •1.5.2. Объединение множеств.
- •1.5.3. Пересечение множеств.
- •Глава 2. Булева алгебра.
- •2.1. Основные элементарные функции.
- •2.2. Основные элементарные тождества.
- •2.3. Формы представления булевых функций.
- •2.4. Минимизация булевых функций.
- •2.4.1. Метод Куайна.
- •2.4.2. Метод Карно.
- •Глава 3. Исчисление высказываний и исчисление предикатов.
- •3.1. Исчисление высказываний.
- •3.2. Исчисление предикатов.
- •Глава 4. Теория сжатия текстовой информации.
- •4.1. Метод Хаффмена
- •4.1.1. Общие положения
- •4.1.2. Краткое описание метода Хаффмена.
- •4.1.3. Пример использования метода Хаффмена.
- •4.2. Метод Зива Лемпеля (lz-метод)
- •4.2.1. Основные определения
- •4.2.2. Краткое описание lz-метода
- •4.2.3. Пример lz-метода
- •4.3. Метод Зива-Лемпеля-Велча (lzw-метод)
- •4.3.1. Общие положения
- •4.3.2. Краткое описание lzw-метода
- •4.3.3. Пример lzw-метода.
- •4.4. Метод Барроуза-Уиллера.
- •4.4.1. Общие положения.
- •4.4.2. 1 Этап. Преобразование Барроуза-Уилера.
- •4.4.3. 2 Этап. Mtf–метод.
- •4.4.4. 3 Этап. Статистический кодер.
- •4.4.5. Модификации различных этапов.
- •4.4.6. Сравнение алгоритмов сжатия на базе bwt с другими методами.
- •Глава 5. Теория сжатия графической информации. Введение.
- •5.2. Волновой метод (wavelet-метод)
- •5.2.1. Описание метода
- •5.2.2. Пример волнового метода
- •5.3. Дискретное косинус-преобразование (дкп-метод).
- •5.3.1. Описание метода.
- •5.3.2. Пример дкп-метода.
- •5.4. Классический алгоритм jpg.
- •5.5. Фрактальный алгоритм.
- •Глава 6. Введение в криптографию. Введение.
- •6.1. Методы перестановки
- •6.1.1. Матрицы
- •6.1.2. Маршруты Гамильтона
- •6.1.3. Электрический монтаж
- •6.1.4. Особенности перестановки
- •6.2. Методы подстановки
- •6.2.1. Вектор замен
- •6.2.2. Таблицы Вижинера
- •6.3. Метод замены. Использование алгебры матриц.
- •6.4. Аддитивные методы
- •6.5. Стеганология
- •6.6. Ключ. Основные понятия, связанные с ключом и алгоритмом.
- •6.6.1. Основные понятия.
- •6.6.2. Ключ.
- •6.6.3. Случайные и псевдослучайные числа.
- •6.6.4. Действия по шифрованию информации.
- •6.7. Блочные и поточные шифры.
- •6.8. Алгоритмы des, Triple des и их заменяющие.
- •6.8.2. Алгоритм Triple des
- •6.8.3. Коммерческие алгоритмы, заменившие des
- •6.9. Системы с открытым ключом.
- •6.10. Электронная подпись.
- •6.11. Взлом защищенных файлов.
- •6.11.1. Атака на ключ
- •6.11.2. Атака на алгоритм.
- •6.11.3. Скомпрометированный пароль.
- •6.11.4. Подделка открытых ключей.
- •6.11.5. Не до конца удаленные файлы.
- •6.11.6. Вирусы и закладки.
- •6.11.7. Виртуальная память.
- •6.11.8. Нарушение режима физической безопасности. Радиоатака. Фальшивые даты подписи.
- •6.11.10. Утечка информации в многопользовательской среде.
- •Содержание
- •Глава 6. Введение в криптографию. 1
6.11. Взлом защищенных файлов.
6.11.1. Атака на ключ
Если атакующие могут определить ключ, они могут расшифровать данные. Один из подходов, атака прямого перебора, представляет собой попытку перебирать все возможные ключи, пока не будет найден нужный
Допустим, ключ является числом между 0 и 100 000 000 000 (сто миллиардов). Атакующий берет шифротекст и передает его алгоритму шифрования вместе с предполагаемым ключом равным 0. Алгоритм делает свою работу и выдает результат. Если полученные данные имеют осмысленный вид, возможно, что 0 - это правильный ключ. Если данные выглядят бессмысленно, значит 0 не является правильным ключом. В этом случае нужно попробовать 1, затем 2, 3, 4 и т.д. (см. рис. 36).
Рис. 36 Атака методом прямого перебора
Помните, что алгоритм просто выполняет свои действия независимо от входных данных. У него нет способа узнать, является ли полученный результат правильным. Даже если значение близко к значению ключа,, быть может, отличается на 1, результат все равно будет бессмысленным. В связи с этим необходимо просматривать результаты, чтобы сказать, может ли быть использованное значение ключом. Искушенные атакующие пишут программы, просматривающие результат. Он представляет собой последовательность символов алфавита? Да? Передать этот ключ атакующему. Нет? Попробовать следующий ключ.
На пробу ключа обычно уходит достаточно мало времени. Атакующий может написать программу, которая перебирает за секунду большое количество ключей. В конечном итоге, атакующий может попытаться испробовать каждое возможное число между 0 и 100 миллиардами, но это не обязательно потребуется. После того, как верный ключ найден, продолжать поиск не нужно. В среднем атакующий испробует половину всех возможных ключей — в нашем примере, 50 миллиардов ключей, — прежде чем найдет правильный. Иногда это занимает больше времени, иногда меньше, но в среднем будет испробовано около половины всех возможных ключей.
Сколько времени потребуется атакующему, чтобы испробовать 50 миллиардов ключей? Три года? Три дня? Три минуты? Предположим, вы хотите сохранить ваш секрет по меньшей мере в течение трех лет, но атакующему понадобится всего три минуты, чтобы перебрать 50 миллиардов значений. Что вы будете делать? Вы изберете больший диапазон значений ключей. Вместо того, чтобы выбирать число между 0 и 100 миллиардами, вы выберете число между 0 и 100 миллиардами миллиардов миллиардов миллиардов. Теперь атакующему придется испробовать в среднем гораздо больше ключей, прежде чем он найдет правильный.
Эта концепция диапазона возможных значений ключей известна как длина ключа.
Чем больше длина ключа, тем больше возможных значений может иметь ключ Здесь важно, какое значение, 0 или 1, имеет каждый бит в каждой позиции физических ключей измеряется в битах. Диапазон значений для 128-битного ключа столь велик, что проще будет сказать, что это 128-битный ключ. В самом деле,
40-битный ключ (шестнадцатеричное представление) |
000000000000000000010000000002…6P5581D20C…FF FF FF FF FF |
64-битный ключ (шестнадцатеричное представление) |
000000000000000000000000000000010000000000000002…59C671DD54E44092…FF FF FF FF FF FF FF |
128-битный ключ (шестнадцатеричное представление) |
000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000002…201486AE18845ACFE98098B2443C11D2 …FF FF FF FF FF FP FF FF FF FF FF FF FF FF FF FF |
Каждый лишний бит в размере ключа в два раза увеличивает время, необходимое для выполнения атаки методом прямого перебора. Если на взлом 40-битного ключа потребуется 3 часа, то взлом 41-битного ключа займет 6 часов, 42-битного ключа — 12 часов и т.д. Почему? Каждый дополнительный бит вдвое увеличивает число возможных значений ключей.
Каждое число, которое может быть выражено тремя битами, может быть выражено и четырьмя битами, но каждое из этих чисел может встретиться “дважды”: один раз с неустановленным старшим битом, а другой раз с установленным. Поэтому, если добавить бит, то удваивается число возможных ключей. Если удваивается количество возможных ключей, удваивается и время, которое в среднем потребуется атакующему, использующему прямой перебор, для определения правильного ключа.
Следовательно, если вы хотите затруднить задачу атакующему, то выбираете длинный ключ. Чем длиннее ключ, тем выше безопасность. Насколько длинным должен быть ключ? В течение ряда лет RSA Laboratoriee предлагала принять участие в конкурсе. Первый человек или организация, которой удастся расшифровать определенное сообщение, получит денежный приз. Некоторые из таких конкурсов являлись своеобразными тестами для атак прямого перебора ключей. В 1997 г. 40-битный ключ был вскрыт за 3 часа, а 48-битный ключ — за 280 часов. В 1999 г. компании Electronic Frontier Foundation удалось определить 56-битный ключ за 24 часа. В каждом случае до того, как ключ был найден, было просмотрено более 56% ключей. В январе 1997 г. было предложено вскрыть 64-битный ключ. В декабре 2000 г. эта задача еще не была решена. Во всех этих случаях сотни или даже тысячи компьютеров совместно работали, чтобы взломать ключи. В действительности при взломе 56-битного ключа DES, который компания Electronic Frontier Foundation осуществила за 24 часа, один из этих компьютеров представлял собой специализированный взломщик DES. Такой компьютер делает только одно: проверяет ключи DES. Атакующий, который работает тайно, скорее всего, не может воспользоваться мощью сотен компьютеров и не будет иметь в своем распоряжении компьютера, специально созданного для взлома определенного алгоритма. Вот почему для большинства атакующих время, которое требуется для взлома ключа, будет существенно большим. С другой стороны, если атакующие работают в спецслужбе с огромными ресурсами, ситуация может быть иной.
Мы можем рассмотреть наихудший сценарий. Допустим, что просмотр 1% пространства ключей для 56-битного ключа занимает 1 секунду, а просмотр 50% занимает 1 минуту (см. таблицу ??). Каждый раз, когда мы добавляем бит к длине ключа, время поиска удваивается.
Таблица ??. Наихудший сценарий. Сколько времени потребуется для взлома ключей различной длины при атаке, использующей прямой перебор
Количество битов |
1% общего числа ключей |
50% общего числа ключей |
56 |
1 секунда |
1 минута |
57 |
2 секунды |
2 минуты |
58 |
4 секунды |
4 минуты |
64 |
4,2 минуты |
4,2 часа |
72 |
17,9 часов |
44,8 дня |
80 |
190,9 дней |
31,4 лет |
90 |
535 лет |
321 век |
108 |
140000 тысячелетий |
8 миллионов тысячелетий |
128 |
146 миллиардов тысячелетий |
8 триллионов тысячелетий |
На сегодняшний день наиболее распространенной длиной симметричного ключа является 128 битов. Если технические достижения будут этому способствовать, атакующие, использующие метод прямого перебора, смогут улучшить показатели (может быть, что им удастся сократить время на определение 128-битного ключа до нескольких лет), в этом случае придется использовать 256-битные ключи.
Можно подумать, что раз компьютерная техника постоянно развивается, то постоянно придется увеличивать длину ключей. Не наступит ли время, когда потребуются ключи такой длины, что с ними станет слишком неудобно работать. В ответ можно сказать, что вам почти наверняка никогда не придется использовать ключ длиной более 512 битов (64 байта). Вообразите, что каждый атом во Вселенной (всего их около 2300) является компьютером, и что каждый из этих компьютеров может проверить 2300 ключей в секунду. Для того чтобы просмотреть 1°/о ключей длиной 512 битов, потребуется около 2162 тысячелетий. В настоящее время считается, что возраст Вселенной не превышает 224 тысячелетий. Другими словами, крайне маловероятно, что техника когда-нибудь разовьется до такой степени, что придется использовать слишком длинные ключи.
Это, однако, может и не иметь значения, поскольку существует другой вид атаки на ключ. Вместо того чтобы попытаться воспроизвести ключ, атакующие могут попытаться воспроизвести генератор псевдослучайных чисел и начальное множество, используемые при создании ключа. Это делается следующим образом. Атакующим известно, какой генератор псевдослучайных чисел и метод получения начального множества был использован.
