Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
all of DiskretMat.rtf
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
60.29 Mб
Скачать

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 и генерирует открытый ключ, несущий идентификатор пользователя А. Он тайно подменяет своим фальшивым ключом настоящий открытый ключ А. Вы неосторожно используете этот фальшивый ключ, принадлежащий В, вместо открытого ключа А. Все выглядит нормально, потому что фальшивый ключ несет идентификатор пользователя А. Теперь В может расшифровать сообщение, предназначенное А, поскольку обладает секретным ключом из фальшивой пары. Он даже может затем снова зашифровать расшифрованное им сообщение настоящим ключом А и отправить ей, так что никто ничего не заметит. Более того, он даже сможет потом накладывать от имени А подпись, которая будет казаться подлинной, так как все будут использовать для ее верификации фальшивый ключ.

Единственный способ предотвратить такую неприятность — это исключить возможность подделки открытых ключей. Если вы получили открытый ключ А непосредственно от него, проблем не возникает. Но это может быть затруднительным, если А находится на расстоянии тысячи километров, или по другим причинам с ним невозможно встретиться лично.

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

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]