Зачем нужны криптографические протоколы

Раздел 6. Криптографические протоколы

Что такое криптографический протокол

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

У протоколов есть также и другие отличительные черты:

• каждый участник протокола должен быть заранее оповещен о шагах, которые ему предстоит предпринять;

• все участники протокола должны следовать его правилам добровольно, без принуждения;

• необходимо, чтобы протокол допускал только однозначное толкование, а его шаги были совершенно четко определены и не допускали возможности их неправильного понимания;

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

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

Зачем нужны криптографические протоколы

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

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

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

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

Надежные корреспонденты

Протокол 1.

Пусть отправитель и получатель – очень достойные люди, полностью доверяющие друг другу.

1. Отправитель посылает получателю сообщение открытым текстом о том, что пошлет зашифрованное сообщение, что он будет пользоваться зашифровывающим симметричным алгоритмом А и что ключ надо выработать по схеме Диффи-Хеллмана с основанием а и модулем N.

2. Получатель извещает отправителя, что он готов к получению ключа.

3. Отправитель генерирует случайное число x, 1<x<N, вырабатывает ключ отправителя

и отсылает его получателю.

4. Получатель генерирует случайное число y, 1<y<N, вырабатывает ключ получателя

и отсылает его отправителю.

5. Отправитель возводит присланный ему ключ в свою секретную степень х:

Получатель возводит присланный ему ключ в свою секретную степень y:

6. Отправитель зашифровывает свое сообщение М ключом К:

и отсылает шифровку С получателю.

7. Получатель расшифровывает С:

(D обозначает оператор расшифровки – Decryption).

Если в сети имеется n участников, и все они обмениваются сообщениями по Протоколу 1, то каждый участник должен хранить, и к тому же часто обновлять n-1 ключей, что отнюдь не просто. Пожалуй, удобнее завести в системе нового (n+1)-го участника – арбитра.

Протоколы с арбитражем

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

Протокол 2.

1. Отправитель посылает арбитру запрос на выдачу ключа ему и получателю.

2. Арбитр посылает им по одинаковому ключу К.

3. Получив К, отправитель зашифровывает свое сообщение М:

и посылает шифровку С получателю.

4. Получив К от арбитра и, позднее, С от отправителя, получатель расшифровывает С:

При наличии арбитра ключи будут чаще обновляться и квалифицированно генерироваться.

Можно пользоваться и гибридными системами, где работают как симметричные, так и асимметричные шифры. Рассмотрим использование RSA для передачи ключей.

Протокол 3.

1. Отправитель запрашивает у получателя (или у арбитра, тогда арбитр часто называется ЦРК – центр распределения ключей) открытые и получателя.

2. Получив и , отправитель зашифровывает ключ К:

,

зашифровывает свое сообщение М:

и отсылает и получателю.

3. Получатель расшифровывает К:

и затем расшифровывает С:

.

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

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

• Расценки на услуги, оказываемые адвокатом, известны. Кто и каким образом будет оплачивать аналогичные услуги арбитра в компьютерной сети?

• Введение арбитра в любой протокол увеличивает время, затрачиваемое на реализацию этого протокола.

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

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

Несмотря на отмеченные препятствия, протоколы с арбитражем находят широкое применение на практике.

Протокол с судейством

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

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

Ненадежные корреспонденты

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

1) подпись удостоверяет, что текст составлен или одобрен именно тем лицом, чьим именем он подписан;

2) подпись невозможно подделать;

3) подпись невозможно незаметно подклеить к другому тексту, то есть подпись срабатывает один раз;

4) подписавший текст не может утверждать, что он его не подписывал;

5) подписанный документ невозможно изменить (место подписи прямо под документом, чтоб не осталось места для вставок; не допускаются неподписанные исправления в тексте и т.п.)

В электронном сообщении в системе с арбитром и симметричным шифром подпись моделируется следующим образом.

Протокол 1.

1. Отправитель извещает арбитра, что ему нужно послать подписанное сообщение получателю.

2. Арбитр посылает отправителю ключ и получателю ключ .

3. Отправитель зашифровывает сообщение М ключом и посылает С(М) арбитру.

4. Арбитр расшифровывает С(М) ключом . Затем арбитр добавляет к сообщению М штамп S, что он действительно получил М от отправителя и зашифровывает конкатенацию двух текстов М и S ключом . Результат посылается получателю.

5. Получатель расшифровывает полученное сообщение своим ключом .

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

.

Протокол 2.

1. Отправитель зашифровывает сообщение М своим секретным ключом:

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

2. Получатель расшифровывает С зашифровывающим ключом по модулю .

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

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

Получатель может тоже оказаться ненадежным партнером и, скажем, если присланное ему подписанное сообщение является чеком для получения денег, то он может много раз являться в банк, предъявляя копии этого чека (подпись срабатывает один раз, но подписанный документ – многократно). Отметка о времени рассматривается как неотъемлемая часть документа, призванная, среди прочего, различать копии.

Получатель может, если это ему выгодно, отрицать получение сообщения. Эта трудность отсекается тем, что Протокол 2 дополняется пунктами:

6. Получатель извещает арбитра о факте и времени получения сообщения.

7. Арбитр передает эту информацию отправителю.

Может возникнуть потребность поставить под сообщением две подписи: отправителя и получателя. Это делает следующий протокол.

Протокол 3.

1. Две копии сообщения (документа) подписываются один – отправителем, другой – получателем.

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

Рассмотрим протокол, обеспечивающий и подпись, и конверт, пользуясь системой RSA.

Протокол 4.

1. Отправитель зашифровывает сообщения своим секретным ключом и затем повторно зашифровывает его открытым ключом получателя.

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

Последовательность действий – как в бумажной переписке: отправитель сперва подписывает письмо, а потом кладет в конверт. Это правильно юридически: нельзя подписывать что-то зашифрованное, то есть как бы невидимое.

Можно усовершенствовать Протокол 4, введя в него извещение о получении сообщения, поскольку недобросовестные получатели часто утверждают, что они сообщения не получали.

Протокол 5.

1. Отправитель зашифровывает сообщения своим секретным ключом и затем повторно зашифровывает его открытым ключом получателя:

,

где Е – оператор зашифровки (используется открытый ключ получателя). S – оператор подписи (совпадающий в RSA с оператором зашифровки), использующий секретный ключ отправителя (закрытый ключ будем отмечать штрихом).

2. Получатель расшифровывает полученное своим секретным расшифровывающим ключом и затем проверяет подлинность результата, используя открытый зашифровывающий ключ отправителя:

,

где V означает верификацию, совпадающую здесь с оператором зашифровки Е. и используют секретные ключи.

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

и посылает С отправителю.

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

3. Появляется злоумышленник.

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

Для этого злоумышленник сначала копирует послание отправителя: .

Затем он посылает это сообщение получателю от своего имени. Получатель расшифровывает сообщение:

и затем проверяет подпись злоумышленника:

(в RSA V=E, а S=D). Получатель смог бы различить, что в результате получилась бессмыслица, но, скорее всего, этот процесс осуществляет машина, неспособная отличить бессмысленный набор символов от осмысленного текста, и поэтому она, согласно протоколу, пошлет

.

Злоумышленник расшифрует это сообщение своим секретным ключом и получит:

.

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

Злоумышленник может поступить еще хуже – внедрить в центр распределения ключей свои открытые ключи на место старых открытых ключей получателя. Тогда злоумышленник сможет читать все, посылаемое получателю, а получатель в результате расшифровки будет получать бессмысленный набор символов, пока не догадается проверить свои ключи в ЦРК. Чтобы избежать этого, ключи в ЦРК надо хранить в ROM.

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

Протокол 1.

1. Отправитель шлет получателю свой открытый ключ. Злоумышленник перехватывает его и шлет получателю свой открытый ключ.

2. Получатель шлет отправителю свой открытый ключ. Злоумышленник снова подменяет его на свой.

3. Злоумышленник перехватывает сообщение от отправителя к получателю, расшифровывает его своим секретным ключом, зашифровывает открытым ключом получателя и шлет по назначению.

Таким образом, злоумышленник читает все перехватываемые сообщения, и это остается незамеченным.

С описанной атакой борются следующим образом.

Протокол 2 .

1. Отправитель посылает получателю свой открытый ключ.

2. Получатель посылает отправителю свой открытый ключ.

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

4. Получатель делает то же самое со своим сообщением.

5. Отправитель посылает вторую половину.

6. Получатель складывает обе половинки и расшифровывает сообщение.

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

Наши рекомендации