Криптография 2е издание Протоколы, алгоритмы и исходные тексты на языке С
Скачать 3.25 Mb.
|
— Какой уровень доверия к чьей-то личности обеспечивает сертификат ? — Каковы взаимоотношения между человеком и CA, заверяющим его открытый ключ, и как эти отношения отражаются в сертификате? — Кому можно доверить быть "одним надежным органом", возглавляющим сертификационную цепочку ? — Насколько длинной может быть сертификационная цепочка ? В идеале прежде, чем CA подпишет сертификат Боба, Бобу нужно пройти определенную процедуру автор и- зации. Кроме того, для защиты от скомпрометированных ключей важно использовать какие-нибудь метки вр е- мени или признаки срока действия сертификата [461]. Использование меток времени недостаточно. Ключи могут стать неправильными задолго до истечения их срока либо из-за компрометации, либо по каким-то административным причинам . Следовательно, важно, чтобы CA хранил список неправильных заверенных ключей, а пользователи регулярно сверялись бы с этим списком . Эта проблема отмены ключей все еще трудна для решения . К тому же, одной пары открытый ключ/закрытый ключ недостаточно . Конечно же, в любая хорошая реали- зация криптографии с открытыми ключами должна использовать разные ключи для шифрования и для цифр о- вых подписей. Такое разделение разрешает различные Это разделение учитывает различные уровни защиты, сроки действия, процедуры резервирования, и так далее . Кто-то может подписывать сообщения 2048-битовым ключом, который хранится на интеллектуальной карточке и действует двадцать лет, а кто-то может использ о- вать для шифрования 768-битовый ключ, который хранится в компьютере и действует шесть месяцев . Однако, одной пары для шифрования и одной для подписи также недостаточно . Закрытый ключ может иден- тифицировать роль человека также, как и личность, а у людей может быть несколько ролей . Алиса может хотеть подписать один документ как лично Алиса, другой - как Алиса, вице-президент Monolith, Inc., а третий - как Алиса, глава своей общины. Некоторые из этих ключей имеют большее значение, чем другие, поэтому они должны быть лучше защищены. Алисе может потребоваться хранить резервную копию своего рабочего ключа у сотрудника отдела безопасности, а она не хочет, чтобы у компании была копия ключа, которым она подписала закладную. Алиса собирается пользоваться несколькими криптографическими ключами точно также, как она использует связку ключей из своего кармана . Распределенное управление ключами В некоторых случаях такой способ централизованного управления ключами работать не будет . Возможно, не существует такого CA, которому доверяли бы Алиса и Боб. Возможно, Алиса и Боб доверяют только своим друзьям. Возможно, Алиса и Боб никому не доверяют. Распределенное управление ключами, используемое в PGP (см. раздел 24.12), решает эту проблему с помо- щью поручителей. Поручители - это пользователи системы, которые подписывают открытые ключи своих дру- зей. Например, когда Боб создает свой открытый ключ, он передает копии ключа своим друзьям - Кэрол и Дэ й- ву. Они знают Боба, поэтому каждый из них подписывает ключ Боба и выдает Бобу копию своей подписи . Те- перь, когда Боб предъявляет свой ключ чужому человеку, Алисе, он предъявляет его вместе с подписями этих двух поручителей. Если Алиса также знает Кэрол и доверяет ей, у нее появляется причина поверить в правил ь- ность ключа Боба. Если Алиса знает Кэрол и Дэйва и хоть немного доверяет им, у нее также появляется прич и- на поверить в правильность ключа Боба. Если она не знает ни Кэрол, ни Дэйва у нее нет причин доверять ключу Боба. Спустя какое-то время Боб соберет подписи большего числа поручителей . Если Алиса и Боб вращаются в одних кругах, то с большой вероятностью Алиса будет знать одного из поручителей Боба . Для предотвращения подмены Мэллори одного ключа другим поручитель должен быть уверен, прежде чем подписывать ключ, что этот ключ принадлежит именно Бобу. Может быть, поручитель потребует передачи ключа при личной встрече или по телефону. Выгода этого механизма - в отсутствии CA, которому каждый должен доверять. А отрицательной стороной является отсутствие гарантий того, что Алиса, получившая открытый ключ Боба, знает кого-то из поручителей, и, следовательно, нет гарантий, что она поверит в правильность ключа . Глава 9 Типы алгоритмов и криптографические режимы Существует два основных типа симметричных алгоритмов : блочные шифры и потоковые шифры. Блочные шифры работают с блоками открытого текста и шифротекста - обычно длиной 64 бита, но иногда длиннее. По- токовые шифры работают с битовыми или байтовыми потоками открытого текста и шифротекста (иногда да- же с потоками 32-битных слов). Блочный шифр, использующий один и тот же ключ, при шифровании всегда превращает один и тот же блок открытого текста в один и тот же блок шифротекста . Потоковый шифр при каж- дом шифровании превращает один и тот же бит или байт открытого текста в различные биты или байты ши ф- ротекста. Криптографический режим обычно объединяет базовый шифр, какую-то обратную связь и ряд простых оп е- раций. Операции просты, потому что безопасность является функцией используемого шифра, а не режима . Бо- лее того, режим шифра не должен компрометировать безопасность используемого алгоритма . Существуют и другие соображения безопасности : должна быть скрыта структура открытого текста , должен быть рандомизирован ввод шифра, должно быть затруднено манипулирование открытым текстом посредством ввода ошибок в шифротекст, должно быть возможно шифрование нескольких сообщений одним ключом . Все это будет подробно рассматриваться в следующих разделах. Другим важным соображением является эффективность . По эффективности режим не может быть сильно хуже используемого алгоритма. В некоторых обстоятельствах важно, чтобы размер шифротекста совпадал с размером открытого текста. Третьим соображением является устойчивость к сбоям . Для ряда приложений требуется распараллеливать шифрование или дешифрирование, а другим нужна возможность выполнить как можно большую предобработку. В третьих важно, чтобы процесс дешифрирования умел исправлять сбои битов в потоке шифр о- текста, а также был устойчив к потере и добавлению битов . Как будет показано, различные режимы обладают различными подмножествами этих хара ктеристик. 9.1 Режим электронной шифровальной книги Режим электронной шифровальной книги (electronic codebook, ECB) - это наиболее очевидный способ ис- пользовать блочный шифр: блок открытого текста заменяется блоком шифротекста . Так как один и тот же блок открытого текста заменяется одним и тем же блоком шифротекста, то теоретически возможно создать шифр о- вальную книгу блоков открытого текста и соответствующих шифротекстов . Однако, если размер блока - 64 би- та, то кодовая книга будет состоять из 2 64 записей - слишком много для предварительного вычисления и хран е- ния. И не забывайте, для каждого ключа понадобится отдельная шифровальная книга . Это самый легкий режим работы. Все блоки открытого текста шифруются независимо . Нет необходимости в последовательном шифровании файла, можно зашифровать сначала 10 блоков из середины текста, затем п о- следние блоки, и наконец, первые. Это важно для шифрованных файлов с произвольным доступом, например, для баз данных. Если база данных зашифрована в режиме ECB, то любая запись может быть добавлена, удал е- на , зашифрована или расшифрована независимо от любой другой записи ( при условии, что каждая запись с о- стоит из целого числа блоков шифрования) . Кроме того, обработка может быть распараллелена, если использ у- ются несколько шифровальных процессоров, они могут независимо друг от друга шифровать или дешифрир о- вать различные блоки. Проблемой режима ECB является то, что если у криптоаналитика есть открытый текст и шифротекст для н е- скольких сообщений, он может начать составлять шифровальную книгу, не зная ключа . В большинстве реаль- ных ситуаций фрагменты сообщений имеют тенденцию повторяться . В различных сообщениях могут быть оди- наковые битовые последовательности. У сообщений, которые подобно электронной почте создаются компьют е- ром, может быть регулярная структура. Сообщения могут иметь высокую степень избыточности или содержать длинные строки нулей или пробелов. Если криптоаналитик знает, что блок открытого текста "5e081bc5" при шифровании превращается в блок шифротекста "7ea593a4," то он может мгновенно расшифровать этот блок шифротекста, в каком-бы другом с о- общении он не появился. Если в шифрованном сообщении много повторов, которые имеют тенденцию занимать одинаковое место в различных сообщениях, криптоаналитик может получить много информации . Он может попытаться статистически вскрыть используемый открытый текст, независимо от силы блочного шифра . Особенно уязвимы начало и окончание сообщений, где находится информация об отправителе, получателе дате и т.д. Эта проблема иногда называется стандартными заголовками и стандартными окончаниями. Положительной стороной является возможность шифровать несколько сообщений одним ключом без сниж е- ния безопасности. По сути, каждый блок можно рассматривать как отдельное сообщение, шифрованное тем же самым ключом. При дешифрировании битовые ошибки в шифротексте приводят к неправильному дешифрир о- ванию соответствующего блока открытого текста, но не влияет на остальной открытый текст . Однако, если бит шифротекста случайно потерян или добавлен, то весь последующий шифротекст будет расшифрован непр а- вильно, если для выравнивания границ блоков не используется какая-нибудь кадровая структура . Набивка Большинство сообщений точно не делятся на 64-битные (или любого другого размера) блоки шифрования, в конце обычно оказывается укороченный блок . ECB требует использовать 64-битные блоки. Способом решения этой проблемы является набивка. Последний блок дополняется (набивается) некоторым регулярным шаблоном - нулями, единицами, чер е- дующимися нулями и единицами - для получения полного блока . При необходимости удалить набивку после дешифрирования запишите количество байтов набивки в последний байт последнего блока . Например, пусть размер блока - 64 бита, и последний блок состоит из 3 байтов (24 бит) . Для дополнения блока до 64 бит требу- ется пять байтов, добавьте четыре байта нулей и последний байт с числом 5. После дешифрирования удалите последние 5 байтов последнего расшифрованного блока . Чтобы этот метод работал правильно, каждое сообщ е- ние должно быть дополнено. Даже если открытый текст содержит целое число блоков, вам придется добавить один полный блок. С другой стороны, можно использовать символ конца файла для обозначения последнего байта открытого текста и дополнить этот символ er. На 8-й показан другой вариант, называемый похищением шифротекста [402]. P n-1 - последний полный блок открытого текста, а P n - последний, короткий блок открытого текста . С n-1 - последний полный блок шифро- текста, и С n - последний, короткий блок шифротекста . С' - это промежуточный результат, не являющийся ч а- стью переданного шифротекста. E k P n-1 C' C n E k C n-1 C' P n D k C n-1 C' P n D k P n-1 C' C n Дешифрирование Шифрование Рис. 9-1. Похищение шифротекста. 9.2 Повтор блока Более серьезной проблемой режима ECB является то, что враг может изменить шифрованные сообщения, не зная ключа или даже алгоритма, чтобы обмануть предполагаемого получателя . Впервые эта проблемы была рассмотрена в [291]. Для иллюстрации этой проблемы рассмотрим систему передачи денег, которая переводит деньги из банка в банк. Чтобы облегчить жизнь банковских компьютеров , банки согласовали примерно следующий стандартный формат сообщения для передачи денег: Банк 1: Передача 1.5 блока Банк 2: Прием 1.5 блока Имя вкладчика 6 блоков Счет вкладчика 2 блока Сумма вклада 1 блок Блок соответствует 8-байтному блоку шифрования. Сообщения шифруются с помощью некоторого блочного алгоритма в режиме ECB. Мэллори, который подслушивает линию связи между банками, банком Алисы и банком Боба, может испол ь- зовать эту информацию для обогащения. Сначала, он программирует свой компьютер для записи всех шифр о- ванных сообщений из банка Алисы в банк Боба . Затем, он переводит $100 из банка Алисы на свой счет в банк Боба. Позже, он повторяет эту операцию еще раз. С помощью своего компьютера он проверяет записанные с о- общения, разыскивая пару идентичных сообщений . Этими сообщениями являются те сообщения, которыми он переводит $100 на свой счет. Если он находит несколько пар одинаковых сообщений (что больше похоже на реальную жизнь), он делает еще один денежный перевод и записывает результат . В конце концов он сможет выделить сообщение, которым был проведен именно его перевод . Теперь он может отправить это сообщение по каналу связи, когда захочет . Каждое сообщение приведет к за- числению на его счет в банке Боба еще $100. Когда оба банка сверят свои переводы (возможно в конце дня), они обнаружат переводы-призраки, но если Мэллори достаточно умен, он уже сбежит в какую-нибудь банан о- вую республику без договора об экстрадиции, прихватив с собой деньги . И скорее всего он использует суммы несколько больше $100 и провернет операцию сразу для нескольких банков . На первый взгляд банки могут легко пресечь это, добавляя метки времени к своим сообщениям . Метка даты/времени 1 блок Банк 1: Передача 1.5 блока Банк 2: Прием 1.5 блока Имя вкладчика 6 блоков Счет вкладчика 2 блока Сумма вклада 1 блок В такой системе два идентичных сообщения будут легко обнаружены . Тем не менее, с помощью метода, на- зываемого повтором блока, Мэллори все же сможет обогатиться. На 7-й показано, что Мэллори может собрать восемь блоков шифротекста, соответствующих его имени и номеру счета : блоки с 5 по 12. В этот момент умест- но дьявольски рассмеяться, ведь Мэллори уже в полной готовности . 1 2 3 4 5 6 7 8 9 10 11 12 13 Метка времени Банк отправитель Банк получатель Имя вкладчика Счет вкладчика Сумма Номер блока Поле Рис. 9-2. Блоки шифрования в записи приведенного примера. Он перехватывает сообщения из банка Алисы в банк Боба и заменяет блоки с 5 по 12 сообщения байтами , соответствующими его имени и номеру счета . Затем он посылает измененные сообщения в банк Боба . Ему не нужно знать, кто был отправителем денег, ему даже не нужно знать переводимую сумму (хотя он может связать подправленное сообщение с соответствующим увеличением своего счета и определить блоки, соответствующие определенным денежным суммам). Он просто изменяет имя и номер счета на свои собственные и следит за ро с- том своих доходов. (Я помню, что Мэллори надо быть осторожным, чтобы не модифицировать сообщение о снятии денег, но предположим на минутку, что у этих сообщений другая длина или иной отличительный пр и- знак.) Для обнаружения такого способа банкам одного дня не хватит. Когда они сверят свои переводы в конце дня, все суммы совпадут. Возможно, пока настоящий вкладчик не заметит, что его вклады не зачисляются на счет , или пока кто-нибудь не обратит внимание на неожиданную активизацию работы со счетом Мэллори, банки не смогут заметить никаких следов. Мэллори не глуп и к этому времени закроет свой счет, изменит имя и купит виллу в Аргентине. Банки могут минимизировать эту проблему, часто меняя свои ключи, но это означает только, что Мэллори придется действовать побыстрее. Однако, добавление MAC также решит проблему. Несмотря на это рассматри- ваемая проблема фундаментальна для режима ECB. Мэллори удалять, повторять или заменять блоки по своему усмотрению. Решением является способ, называемый сцеплением. 9.3 Режим сцепления блоков шифра Сцепление добавляет к блочному шифру механизм обратной связи : результаты шифрования предыдущих блоков влияют на шифрование текущего блока. Другими словами, каждый блок используется для изменения шифрования следующего блока. Каждый блок шифротекста зависит не только от шифруемого блока открытого текста, но и от всех предыдущих блоков открытого текста . В режиме сцепления блоков шифра (cipher block chaining, CBC) перед шифрованием над открытым тек- стом и предыдущим блоком шифротекста выполняется операция XOR. На 6-й (а) показано шифрование CBC в действии. ,Когда блок открытого текста зашифрован, полученный шифротекст сохраняется в регистре обратной связи. Прежде чем будет зашифрован следующий блок открытого текста, он подвергается операции XOR вместе с содержимым регистра обратной связи. Таким образом создаются входные данные для следующего этапа пр о- цедуры шифрования. Полученный шифротекст снова сохраняется в регистре обратной связи, чтобы подвер г- нуться операции XOR вместе со следующим блоком открытого текста, и так до конца сообщения . Шифрование каждого блока зависит от всех предыдущих блоков . Дешифрирование является обратной операцией (см. Figure 9.3 (б) ). Блок шифротекста расшифровывается как обычно, но сохраняется в регистре обратной связи . Затем следующий блок дешифрируется и подвергается операции XOR вместе с содержимым регистра обратной связи . Теперь следующий блок шифротекста сохран я- ется в регистре обратной связи, и так далее, до конца сообщения . Математически это выглядит следующим о бразом: C i = E K (P i ? C i-1 ) P i = C i-1 ? D K (C i ) C i-1 P i-1 E k C i P i E k C i+1 P i+1 E k C i-1 P i-1 D k C i P i D k C i+1 P i+1 D k бДешифрирование +*+ аШифрование +*+ Рис. 9-3. Режим сцепления блоков шифра. Вектор инициализации В режиме CBC одинаковые блоки открытого текста при шифровании переходят в различные блоки шифр о- текста только, если отличались какие-то из предшествующих блоков открытого текста . Два идентичных сооб- щения, однако, будут шифроваться как один и тот же шифротекст . Что еще хуже, два одинаково начинающихся сообщения будут шифроваться одинаково, пока не появится первое различие . У ряда сообщений может быть одинаковый заголовок - тема письма, строка "From'' или еще что-нибудь. Хо- тя повтор блока будет невозможен, такое одинаковое начало может предоставить криптоаналитику какую- нибудь полезную информацию. |