Анимация
JavaScript
|
Главная Библионтека ния безопасности. По сути, каждый блок можно рассматривать как отдельное сообщение, шифрованное тем же самым ключом. При дешифрировании битовые ошибки в шифротексте приводят к неправильному дешифрир о-ванию соответствующего блока открытого текста, но не влияет на остальной открытый текст . Однако, если бит шифротекста случайно потерян или добавлен, то весь последующий шифротекст будет расшифрован непр а-вильно, если для выравнивания границ блоков не используется какая-нибудь кадровая структура . Набивка Большинство сообщений точно не делятся на 64-битные (или любого другого размера) блоки шифрования, в конце обычно оказывается укороченный блок. ECB требует использовать 64-битные блоки. Способом решения этой проблемы является набивка. Последний блок дополняется (набивается) некоторым регулярным шаблоном - нулями, единицами, чер е-дующимися нулями и единицами - для получения полного блока . При необходимости удалить набивку после дешифрирования запишите количество байтов набивки в последний байт последнего блока . Например, пусть размер блока - 64 бита, и последний блок состоит из 3 байтов (24 бит) . Для дополнения блока до 64 бит треб у-ется пять байтов, добавьте четыре байта нулей и последний байт с числом 5. После дешифрирования удалите последние 5 байтов последнего расшифрованного блока. Чтобы этот метод работал правильно, каждое сообщ е-ние должно быть дополнено. Даже если открытый текст содержит целое число блоков, вам придется добавить один полный блок. С другой стороны, можно использовать символ конца файла для обозначения последнего байта открытого текста и дополнить этот символ er. На 8-й показан другой вариант, называемый похищением шифротекста [402]. P„.1 - последний полный блок открытого текста, а P„ - последний, короткий блок открытого текста. С„.1 - последний полный блок шифротекста, и С„ - последний, короткий блок шифротекста. С - это промежуточный результат, не являющийся ч а-стью переданного шифротекста. Шифрование Дешифрирование
Рис. 9-1. Похищение шифротекста. 9.2 Повтор блока Более серьезной проблемой режима ECB является то, что враг может изменить шифрованные сообщения, не зная ключа или даже алгоритма, чтобы обмануть предполагаемого получателя . Впервые эта проблемы была рассмотрена в [291]. Для иллюстрации этой проблемы рассмотрим систему передачи денег, которая переводит деньги из банка в банк. Чтобы облегчить жизнь банковских компьютеров , банки согласовали примерно следующий стандартный формат сообщения для передачи денег: Банк 1: Передача Банк 2: Прием Имя вкладчика Счет вкладчика Сумма вклада 1.5 блока 1.5 блока 6 блоков 2 блока 1 блок Блок соответствует 8-байтному блоку шифрования. Сообщения шифруются с помощью некоторого блочного алгоритма в режиме ECB. Мэллори, который подслушивает линию связи между банками, банком Алисы и банком Боба, может испол зовать эту информацию для обогащения. Сначала, он программирует свой компьютер для записи всех шифр ванных сообщений из банка Алисы в банк Боба. Затем, он переводит $100 из банка Алисы на свой счет в банк Боба. Позже, он повторяет эту операцию еще раз. С помощью своего компьютера он проверяет записанные с о-общения, разыскивая пару идентичных сообщений . Этими сообщениями являются те сообщения, которыми он переводит $100 на свой счет. Если он находит несколько пар одинаковых сообщений (что больше похоже на реальную жизнь), он делает еще один денежный перевод и записывает результат . В конце концов он сможет выделить сообщение, которым был проведен именно его перевод . Теперь он может отправить это сообщение по каналу связи, когда захочет . Каждое сообщение приведет к зачислению на его счет в банке Боба еще $100. Когда оба банка сверят свои переводы (возможно в конце дня), они обнаружат переводы-призраки, но если Мэллори достаточно умен, он уже сбежит в какую-нибудь банан о-вую республику без договора об экстрадиции, прихватив с собой деньги . И скорее всего он использует суммы несколько больше $100 и провернет операцию сразу для нескольких банков . На первый взгляд банки могут легко пресечь это, добавляя метки времени к своим сообщениям . Метка даты/времени Банк 1: Передача Банк 2: Прием Имя вкладчика Счет вкладчика Сумма вклада 1 блок 1.5 блока 1.5 блока 6 блоков 2 блока 1 блок В такой системе два идентичных сообщения будут легко обнаружены . Тем не менее, с помощью метода, называемого повтором блока, Мэллори все же сможет обогатиться. На 7-й показано, что Мэллори может собрать восемь блоков шифротекста, соответствующих его имени и номеру счета : блоки с 5 по 12. В этот момент уместно дьявольски рассмеяться, ведь Мэллори уже в полной готовности . Номер блока
Поле Рис. 9-2. Блоки шифрования в записи приведенного примера. Он перехватывает сообщения из банка Алисы в банк Боба и заменяет блоки с 5 по 12 сообщения байтами , соответствующими его имени и номеру счета. Затем он посылает измененные сообщения в банк Боба. Ему не нужно знать, кто был отправителем денег, ему даже не нужно знать переводимую сумму (хотя он может связать подправленное сообщение с соответствующим увеличением своего счета и определить блоки, соответствующие определенным денежным суммам). Он просто изменяет имя и номер счета на свои собственные и следит за ро с-том своих доходов. (Я помню, что Мэллори надо быть осторожным, чтобы не модифицировать сообщение о снятии денег, но предположим на минутку, что у этих сообщений другая длина или иной отличительный пр знак.) Для обнаружения такого способа банкам одного дня не хватит. Когда они сверят свои переводы в конце дня, все суммы совпадут. Возможно, пока настоящий вкладчик не заметит, что его вклады не зачисляются на счет , или пока кто-нибудь не обратит внимание на неожиданную активизацию работы со счетом Мэллори, банки не смогут заметить никаких следов. Мэллори не глуп и к этому времени закроет свой счет, изменит имя и купит виллу в Аргентине. Банки могут минимизировать эту проблему, часто меняя свои ключи, но это означает только, что Мэллори придется действовать побыстрее. Однако, добавление MAC также решит проблему. Несмотря на это рассматриваемая проблема фундаментальна для режима ECB. Мэллори удалять, повторять или заменять блоки по своему усмотрению. Решением является способ, называемый сцеплением. 9.3 Режим сцепления блоков шифра Сцепление добавляет к блочному шифру механизм обратной связи : результаты шифрования предыдущих блоков влияют на шифрование текущего блока. Другими словами, каждый блок используется для изменения шифрования следующего блока. Каждый блок шифротекста зависит не только от шифруемого блока открытого текста, но и от всех предыдущих блоков открытого текста . В режиме сцепления блоков шифра (cipher block chaining, CBC) перед шифрованием над открытым текстом и предыдущим блоком шифротекста выполняется операция XOR. На 6-й (а) показано шифрование CBC в действии. ,Когда блок открытого текста зашифрован, полученный шифротекст сохраняется в регистре обратной связи. Прежде чем будет зашифрован следующий блок открытого текста, он подвергается операции XOR вместе с содержимым регистра обратной связи. Таким образом создаются входные данные для следующего этапа пр о-цедуры шифрования. Полученный шифротекст снова сохраняется в регистре обратной связи, чтобы подвер гнуться операции XOR вместе со следующим блоком открытого текста, и так до конца сообщения . Шифрование каждого блока зависит от всех предыдущих блоков . Дешифрирование является обратной операцией (см. Figure 9.3 (б) ). Блок шифротекста расшифровывается как обычно, но сохраняется в регистре обратной связи . Затем следующий блок дешифрируется и подвергается операции XOR вместе с содержимым регистра обратной связи. Теперь следующий блок шифротекста сохраняется в регистре обратной связи, и так далее, до конца сообщения . Математически это выглядит следующим о бразом: C, = Ek(P. © Ci-i) P. = Ci-i © Dk(C.) Pi-i Ci-i Pi+i Ci+i Ci-i Ci+i Pi-i
Pi+i (а) Шифрование CBC (6) Дешифрирование CBC Рис. 9-3. Режим сцепления блоков шифра. Вектор инициализации В режиме CBC одинаковые блоки открытого текста при шифровании переходят в различные блоки шифр о-текста только, если отличались какие-то из предшествующих блоков открытого текста . Два идентичных сообщения, однако, будут шифроваться как один и тот же шифротекст . Что еще хуже, два одинаково начинающихся сообщения будут шифроваться одинаково, пока не появится первое различие . У ряда сообщений может быть одинаковый заголовок - тема письма, строка "From или еще что-нибудь. Хотя повтор блока будет невозможен, такое одинаковое начало может предоставить криптоаналитику какую-нибудь полезную информацию. Избежать этого можно, шифруя в качестве первого блока какие-то случайные данные . Этот блок случайных данных называется вектором инициализации (initialization vecto r, IV), инициализирующей переменной или начальным значением сцепления. IV не имеет никакого смыслового значения, он используется только для того, чтобы сделать каждое сообщение уникальным. Когда получатель расшифровывает этот блок, он испольтзует его только для заполнения регистра обратной связи . Хорошим IV служит метка времени. Или используйте какие-нибудь случайные биты. С использованием IV сообщения с идентичным открытым текстом при шифровании переходят в сообщения с различным шифротекстом. Следовательно, злоумышленник не сможет предпринять повтор блока, и затру д-нится создание шифровальной книги. Хотя рекомендуется для каждого сообщения, шифруемого одним и тем же ключом, выбирать уникальный IV, это требование не является обязательным. IV не должен храниться в секрете, он может передаваться открыто вместе с шифротекстом . Если вы не понимаете почему, рассмотрите следующий довод. Пусть наше сообщение состоит из нескольких блоков: Bi, В2, B,. Bi шифруется вместе с IV. B2 шифруется с использованием шифротекста Bi в роли IV. B3 шифруется с использованием шифротекста B2 в роли IV, и так далее. Итак, если количество блоков - n, то n-i "векторов инициализации" открыты, даже если первоначальный IV хранится в секрете. Поэтому причин хранить в секрете IV нет, IV - это просто блок-заглушка, можно считать его нулевым блоком сцепления B0. 0 1 2 3 4 5 6 7 8 [ 9 ] 10 11 12 13 14 15 16 17 |