- •Министерство образования и науки российской федерации федеральное агентство по образованию
- •Захарова ю.Ф. Дискретная математика и ее приложения
- •Введение
- •Глава 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.9. Системы с открытым ключом.
Все рассмотренные выше методы являются методами с секретным ключом, т.е. и для шифровки и для расшифровки используется один ключ, это накладывает большие ограничения, так как чтобы получатель информации смог расшифровать его, он должен знать этот ключ, который заранее должен быть ему передан по заведомо безопасному каналу связи, но если существует такой канал связи для обмена ключами, зачем вообще нужна криптография?
В 70-х годах прошлого столетия появился новый тип криптографических алгоритмов — алгоритмы шифрования с открытым ключом (или асимметричное шифрование). В таких системах все ключи "живут" парами: один используется для шифрования, другой — для дешифрования. Самое интересное — зашифрованное сообщение не может быть дешифровано без знания второго ключа, даже если знать ключ, который использовался для шифрования.
Таким образом, у каждой стороны в криптографической системе с открытым ключом имеется два ключа: публичный, для открытого распространения, и секретный (private), который знает только его владелец. Для того чтобы А послал зашифрованное сообщение стороне В, необходимо использовать публичный ключ В, потому что лишь В обладает секретным ключом для дешифрования этого сообщения.
Одним из наиболее популярных алгоритмов шифрования с открытым ключом является алгоритм RSA, названный по именам его авторов(см. далее). Для создания шифра по их методу выбирается большое целое число п — произведение двух простых множителей, р и q. При кодировании используется некоторое целое число, традиционно обозначаемое е (от encode), а при декодировании нужно иметь другое число, обозначаемое d (от decode). Хотя d определяется по е однозначно, но для его определения нужно иметь разложение п на р и q; при очень больших п эта задача оказывается достаточно трудной.
Теперь перейдем
к деталям. Пусть п
= р • q, где
р
и q
— два
простых числа. Положим
.
Приведем следующие факты из теории
чисел.
Лемма 1.
Пусть а —
число, взаимно простое с п.
Тогда
.
Доказательство.
Пусть Ф(n)
— множество всех чисел, не превосходящих
п
и взаимно простых с ним. Заметим, что
|Ф(n)
| ==
.
Умножение числа из этого множества на
а
по модулю n
есть биекция: если b
• а = с • а,
то, поскольку а
взаимно просто с п,
разность с
— b
должна делиться на n.
Таким образом,
откуда и следует утверждение леммы.
Лемма 2. Для каждого числа е, взаимно простого с , существует единственное d 1 : п, для которого е • d = 1 (mod ).
Доказательство. Вспомним алгоритм Евклида. При установлении того, что общий наибольший делитель е и равен 1, легко находятся (см. дальше пример) коэффициенты d и k, для которых d • е + k • = 1. Это верно для любых взаимно простых е и . Однозначность определения d получается легко доказательством от противного.
Пример. Пусть е = 47 и = 104. Имеем = 2е + 10. Далее, в соответствии с алгоритмом Евклида е = 4 • 10 + 7, затем 10 = 1 • 7 + 3, 7 == 2 • 3 + 1. Последнее равенство переписывается так: 1 =7 - 2•3. Так как 3 == 10 - 1 • 7, то 1 = 3 • 7 - 2 • 10. Так как 7 = е - 4 • 10, то 1 = 3 • е - 14 • 10. Так как 10 == - 2 • е, то 1 = 31 • е - 14 .
Перейдем к описанию персонального шифра. Для каждого получателя выберем достаточно большое число п, которое имеет два простых делителя р и q. Например, n = 1 093 709 = 997 • 1097, хотя реально используются гораздо более длинные числа, которые разложить на множители очень трудно. По этим сомножителям находится = pq — р — q + 1. В нашем случае = 1091 616.
Получатель (хозяин шифра) выбирает какое-либо число е, взаимно простое с , и вычисляет "обратное" для него d. Если выбрать е = 397, то d = 145 777. Числа п и е сообщаются отправителям, это открытая часть системы шифрования.
Отправляемый текст перестраивается таким образом, чтобы он состоял из отдельных чисел в диапазоне от 1 до п. Каждое кодируемое число х 1 :п возводится в степень е по модулю п. Возведение числа в большую степень сильно упрощается, если используется двоичное разложение показателя степени. Например, чтобы возвести число n в степень 397 = 1100011012, нужно последовательно вычислить x2, x4, x8, x16, x32, x64, x128, x256 и перемножить нужные пять сомножителей. Результат у передается получателю.
Получатель, имея
число d,
вычисляет уd
по модулю п.
Так как
,
то, если
,
результат возведения в степень равен
.
Рассмотрим достаточно редкий алгоритм шифрования с открытым ключом, очень любопытный с математической точки зрения
"Рюкзак" Меркля-Хеллмана.
По шифруемой
битовой строке
,
составляется
сумма
,
которая и является шифрованным текстом.
Числа а,
известны, они и являются открытым ключом.
Секретный ключ состоит из взаимно
простых чисел
W
и М, bi,
специальным образом выбранного набора
чисел
и перестановки
порядка п.
Числа аi,
связаны с bi
соотношением
.
Восстановление набора x
по значению s
по открытому ключу очень сложно, а по
секретному ключу просто, благодаря
особому свойству "сверхвозрастания"
последовательности bi:
каждое следующее bi
больше суммы всех предыдущих, а М
больше суммы всех bi.
Получающаяся задача называется задачей о рюкзаке. Задачу о рюкзаке как экстремальную задачу мы рассматривали при описании алгоритма Хаффмена. Вариант, используемый при шифровании, несколько отличается: целевой функции в нем нет и суммарный вес отбираемых в рюкзак предметов должен иметь в точности заданный вес. При произвольных весах (задаваемых с большим числом знаков) это сложно, а при условии сверхвозрастания просто.
Рассмотрим более общие моменты.
Как показано на рис 31, при использовании криптографии с открытым ключом каждый обладает парой дополняющих друг друга ключей: открытым и закрытым. Каждый из ключей, входящих в пару, подходит для расшифровки сообщения, зашифрованного с применением другого ключа из той же пары. Зная открытый ключ, закрытый вычислить невозможно. Открытый ключ может быть опубликован и широко распространен по сетям коммуникаций.
Рис. 31.
Такой протокол обеспечивает секретность без необходимости обладания надежным каналом, которого требует обычная криптография с секретным ключом.
Кто угодно может использовать открытый ключ получателя для того, чтобы зашифровать отправляемое тому сообщение. Получатель затем использует соответствующий закрытый ключ для его расшифровки. Никто, кроме получателя, не может расшифровать сообщение, так как никто больше не имеет доступа к его закрытому ключу. Даже тот, кто зашифровал сообщение с помощью открытого ключа, не сможет его расшифровать.
Поскольку алгоритм шифрования с открытым ключом значительно медленнее алгоритма обычного шифрования, использующего один ключ, шифрование лучше всего выполнять, используя процесс, показанный на рис 32.
Рис. 32.
Для шифрования сообщения используется качественный и быстрый алгоритм обычного шифрования с секретным ключом. В оригинальной, незашифрованной форме это сообщение называется "открытым текстом". В ходе процесса, невидимого пользователю, для обычного шифрования открытого текста используется временный случайный ключ, сгенерированный специально для этого "сеанса". Затем данный случайный ключ шифруется с помощью открытого ключа получателя. Этот зашифрованный с использованием открытого ключа "сеансовый ключ" отправляется получателю вместе с зашифрованным текстом.
Как показано на рис 33, процесс расшифровки обратен по отношению к шифрованию. Закрытый ключ получателя используется для восстановления временного сеансового ключа, который, в свою очередь, используется при запуске быстрого обычного алгоритма с секретным ключом для расшифровки основного тела сообщения.
Рис. 33.
В криптосистемах с открытыми ключами не нужно защищать открытые ключи от несанкционированного доступа. Наоборот, чем шире они распространяются, тем лучше. Однако важно защитить открытые ключи от подделки, чтобы быть уверенным в том, что ключ действительно принадлежит тому, чье имя он несет. Сначала рассмотрим на потенциальную опасность такой подмены, а затем опишем, как ее избежать при использовании PGP.
Предположим, вы хотите отправить приватное сообщение А. Вы подгружаете открытый ключ А с какой-нибудь электронной доски объявлений (BBS). Вы шифруете свое письмо А ее открытым ключом и отправляете его через систему электронной почты той же BBS.
К несчастью, незаметно для вас или А, другой пользователь, по имени В, проникает на BBS и генерирует открытый ключ, несущий идентификатор пользователя А. Он тайно подменяет своим фальшивым ключом настоящий открытый ключ А. Вы неосторожно используете этот фальшивый ключ, принадлежащий В, вместо открытого ключа А. Все выглядит нормально, потому что фальшивый ключ несет идентификатор пользователя А. Теперь В может расшифровать сообщение, предназначенное А, поскольку обладает секретным ключом из фальшивой пары. Он даже может затем снова зашифровать расшифрованное им сообщение настоящим ключом А и отправить ей, так что никто ничего не заметит. Более того, он даже сможет потом накладывать от имени А подпись, которая будет казаться подлинной, так как все будут использовать для ее верификации фальшивый ключ.
Единственный способ предотвратить такую неприятность — это исключить возможность подделки открытых ключей. Если вы получили открытый ключ А непосредственно от него, проблем не возникает. Но это может быть затруднительным, если А находится на расстоянии тысячи километров, или по другим причинам с ним невозможно встретиться лично.
Возможно, открытый ключ А может передать вам ваш общий друг С, которому вы оба доверяете и который знает, что обладает подлинным ключом А. С может подписать открытый ключ А, ручаясь, таким образом, за его целостность. Для подписи он должен использовать свой собственный закрытый ключ.
Эта процедура создает подписанный сертификат открытого ключа, который подтверждает, что ключ А не был подделан. Конечно, для того чтобы вы могли проверить правильность подписи С, необходимо, чтобы у вас была заведомо правильная копия его открытого ключа.
Пользующееся широким доверием лицо может даже специализироваться на посредничестве между пользователями, заверяя своей подписью сертификаты их открытых ключей. Это пользующееся доверием лицо может считаться "доверенным сертификатором". Любому публичному ключу, заверенному подписью уполномоченного сертификатора, можно доверять в том смысле, что он принадлежит тому, чье имя он несет. Все пользователи, желающие участвовать в реализации такой сети распределенного доверия, должны обладать заведомо верной копией ключа уполномоченного сертификатора с тем, чтобы подпись последнего могла быть проверена. В некоторых случаях доверенный сертификатор может также поддерживать сервер ключей, обеспечивая пользователям сети возможность искать открытые ключи с помощью запросов к серверу ключей, однако необязательно, чтобы тот, кто поддерживает сервер ключей, был также и тем, кто их сертифицирует.
Единый уполномоченный сертификатор особенно подходит для больших централизованно управляемых организаций, правительственных или корпоративных. Некоторые организационные среды используют иерархии доверенных сертификаторов.
Для децентрализованных сред более походящим, чем создание централизованного доверенного сертификатора, вероятно, будет предоставление всем пользователям возможности действовать в качестве посредников.
