Анимация
JavaScript
|
Главная Библионтека 3. Функция G на этапе 2 с ((ХлГ)у(Хл2)у(Гл2)) была изменена на (XaZ)v(Ya(-Z)), чтобы сделать G менее симметричной. 4. Теперь каждое действие добавляется к результату предыдущего этапа . Это обеспечивает более быстрый лавинный эффект. 5. Изменился порядок, в котором использовались подблоки сообщения на этапах 2 и 3 , чтобы сделать шаблоны менее похожими. 6. Значения циклического сдвига влево на каждом этапе были приближенно оптимизированы для уск о-рения лавинного эффекта. Четыре сдвига, используемые на каждом этапе, отличаются от значений, используемых на других этапах. Том Берсон (Tom Berson) попытался применить дифференциальный криптоанализ к одному этапу MD5 [144], но его вскрытие не оказалось эффективным ни для одного из четырех этапов . Более успешное вскрытие ден Боера и Босселаерса, использующее функцию сжатия, привело к обнаружению столкновений в MD5 [203, 1331, 1336]. Само по себе это вскрытие невозможно для вскрытия MD5 в практических приложениях, оно не влияет и на использование MD5 в алгоритмах шифрования, подобных Luby-Rackoff (см. раздел 14.11). Успех этого вскрытия означает только, что одна из основных целей проектирования MD5- создать устойчивую к столкновениям функцию сжатия - не была достигнута. Хотя справедливо, что "кажется, что у функции сжатия есть слабое место, но это практически не влияет на безопасность хэш-функции " [1336], я отношусь к использованию MD5 очень осторожно. 18.6 MD2 MD2 - это другая 128-битовая однонаправленная хэш-функция, разработанная Роном Ривестом [801, 1335]. Она, вместе с MD5, используется в протоколах PEM (см. раздел 24.10). Безопасность MD2 опирается на случайную перестановку байтов. Эта перестановка фиксирована и зависит от разрядов п. S0, S1, S2, . . . , S255 и являются перестановкой. Чтобы выполнить хэширование сообщения M: (1) Дополните сообщение , байтами, значение , должно быть таким, чтобы длина полученного сообщения была кратна 16 байтам. (2) Добавьте к сообщению 16 байтов контрольной суммы . (3) Проинициализируйте 48-байтовый блок: X0, X1, X2, . . X47. Заполните первые 16 байтов X нулями, во вторые 16 байтов X скопируйте первые 16 байтов сообщения, а третьи 16 байтов X должны быть равны XOR первых и вторых 16 байтов X. (4) Вот как выглядит функция сжатия: t = 0 For j = 0 to 17 For k = 0 to 47 t = Xt XOR St Xk = t t = (t + jj) mod 256 (5) Скопируйте во вторые 16 байтов X вторые 16 байтов сообщения, а третьи 16 байтов X должны быть равны XOR первых и вторых 16 байтов X. Выполните этап (4). Повторяйте этапы (5) и (4) по очереди для каждых 16 байтов сообщения. (6) Выходом являются первые 16 байтов X. Хотя в MD2 пока не было найдено слабых мест (см. [1262]), она работает медленнее большинства других предлагаемых хэш-функций. 18.7 Алгоритм безопасного хэширования (Secure Hash Algorithm, SHA) NIST, вместе с NSA, для Стандарта цифровой подписи (Digital Signature Standard, см. Раздел 20.2) разработал Алгоритм безопасного хэширования (Secure Hash Algorithm, SHA) [1154 (Digital Signature Standard]. (Сам стандарт называется Стандарт безопасного хэширования ( Secure Hash Standard, SHS), а SHA - это алгоритм, используемый в стандарте.) В соответствии с Federal Register [539]: Предлагается Федеральный стандарт обработки информации (Federal Information Processing Standard, FIPS) для Стандарта безопасного хэширования (Secure Hash Standard, SHS). Этот предложение определяет Алгоритм безопасного хэширования (Secure Hash Algorithm, SHA) для использования вместе со Стандартом цифровой подписи (Digital Signature Standard) . . .. Кроме того, для приложений, в которых не требуется цифровая подпись, SHA должен использоваться во всех Федеральнгх приложениях, в которых понадобится алгоритм без опасного хэширования. Этот Стандарт определяет Алгоритм безопасного хэширования ( Secure Hash Algorithm, SHA), необходимый для обеспечения безопасности Алгоритма цифровой подписи (Digital Signature Algorithm, DSA). Для любого входного сообщения длиной меньше 264 битов SHA выдает 160-битовый результат, называемый кратким содержанием сообщения. Далее, краткое содержание сообщения становится входом DSA, который вычисляет подпись для сообщения. Подписывание краткого содержания вместо всего сообщения часто повышает эффективность процесса, так как краткое содержание сообщения намного меньше, чем само сообщение. То же краткое содержание сообщения должно быть получено тем, кто проверяет подпись, если принятая им версия сообщения используется в качестве входа SHA. SHA называется безопасным, так как он разработан так, чтобы было вычислительно невозможно найти сообщение, соответствующее данному краткому содержанию сообщения или найти два различных сообщения с одинаковым кратким содержанием сообщения . Любые изменения, произошедшие при п е-редаче сообщения, с очень высокой вероятностью приведут к изменению краткого содержания сообщения, и подпись не пройдет проверку. Принципы, лежащие в основе SHA, аналогичны использованным профессором Рональдом Л. Ривестом из MIT при проектировании алгоритма краткого содержания сообщения MD4 [1319]. SHA разработан по образцу упомянутого алгоритма. SHA выдает 160-битовое хэш-значение, более длинное, чем у MD5. Описание SHA Во первых, сообщение дополняется, чтобы его длина была кратной 512 битам . Используется то же дополнение, что и в MD5: сначала добавляется 1, а затем нули так, чтобы длина полученного сообщения была на 64 бита меньше числа, кратного 512, а затем добавляется 64-битовое представление длины оригинального сообщ е-ния. Инициализируются пять 32-битовых переменных (в MD5 используется четыре переменных, но рассматриваемый алгоритм должен выдавать 160-битовое хэш-значение ): A =0x67452301 B = 0xefcdab89 C = 0x98badcfe D =0x10325476 E = 0xc3d2e1fO Затем начинается главный цикл алгоритма. Он обрабатывает сообщение 512-битовыми блоками и продо л-жается, пока не исчерпаются все блоки сообщения . Сначала пять переменных копируются в другие переменные : A в a, B в b, C в c, D в d и E в е. Главный цикл состоит из четырех этапов по 20 операций в каждом (в MD5 четыре этапа по 16 операций в каждом). Каждая операция представляет собой нелинейную функцию над тремя из a, b, c, d и e, а затем выполняет сдвиг и сложение аналогично MD5. В SHA используется следующий набор нелинейных функций: ,/;(X,Y,Z) = (X л Y) V ((-X) л Z) , для i=0 до 19 ,/;(X,Y,Z) = X © Y © Z , для i=20 до 39 ,/;(X,Y,Z) = (X л Y) v(X л Z) V (Y л Z) , для i=40 до 59 ,/;(X,Y,Z) = X © Y © Z , для i=60 до 79 в алгоритме используются следующие четыре константы: К, = 0x5a827999, для i=0 до 19 К, = 0x6ed9eba1 , для i=20 до 39 К, = 0x8flbbcdc, для ,=40 до 59 К, = 0xca62c1d6, для ,=60 до 79 (Если интересно, как получены эти числа, то :0x5a827999 = 212/4, 0x6ed9eba1 = 312/4, 0x8flbbcdc = 512/4, 0xca62c1d6 = 101/2/4.) Блок сообщения превращается из 16 32-битовых слов (M0 по M15) в 80 32-битовых слов (W0 по W79) с помощью следующего алгоритма: W, = , для , = 0 по 15 W, = (Ж,-3 © Ж,-8 © Ж,-14 © Ж,-16) <<< 1, для , = 16 по 79 (В качестве интересного замечания, в первоначальной спецификации SHA не было циклического сдвига вле- во. Изменение "исправляет технический изъян, который делал стандарт менее безопасным, чем предполагалось " 1543]. NSA отказалось уточнить истинную причину изъяна.) Если t - это номер операции (от 1 до 80), Wt представляет собой t-ый подблок расширенного сообщения, а «<s - это циклический сдвиг влево на s битов, то главный цикл выглядит следующим образом : FOR t = 0 to 79 TEMP = (a <<< 5) + ,/t(b,c,d) + e + W, + K, e = d d = c c = b <<< 30 b = a a = TEMP На 11-й показана одна операция. Сдвиг переменных выполняет ту же функцию, которую в MD5 выполняет использование в различных местах различных переменных . W/ Kt Рис. 18-7. Одна операция SHA. После всего этого a, b, c, d и e добавляются к A, B, C D и E, соответственно, и алгоритм продолжается для следующего блока данных. Окончательным результатом служит объединение A, B, C D и E. Безопасность SHA SHA очень похожа на MD4, но выдает 160-битовое хэш-значение. Главным изменением является введение расширяющего преобразования и добавление выхода предыдущего шага в следующий с целью получения более быстрого лавинного эффекта. Рон Ривест опубликовал цели, преследуемые им при проектировании MD5, но разработчики SHA этого не сделали. Вот улучшения, внесенные Ривестом в MD5 относительно MD4, и их сравнение с SHA: 1. "Добавился четвертый этап." В SHA тоже. Однако в SHA на четвертом этапе используется та же функция f, что и на втором этапе. 2. "Теперь в каждом действии используется уникальная прибавляемая константа SHA придерживается схемы MD4, повторно используя константы для каждой группы их 20 этапов. 3. "Функция G на этапе 2 с ((XлГ)v(XлZ)v(YлZ)) была изменена на (XлZ)v(Yл(-Z)), чтобы сделать G менее симметричной." В SHA используется версия функции из MD4: (X л Y) v(X л Z) v (Y л Z). 4. "Теперь каждое действие добавляется к результату предыдущего этапа. Это обеспечивает более быстрый лавинный эффект." Это изменение было внесено и в SHA. Отличие состоит в том, что в SHA добавлена пятая переменная к b, c и d, которые уже используются в ft. Это незначительное изменение делает применения вскрытия MD5 ден Боером и Босселаерсом невозможным по отношению к SHA. 5. "Изменился порядок, в котором использовались подблоки сообщения на этапах 2 и 3 , чтобы сделать 0 1 2 [ 3 ] 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |