Анимация
JavaScript
|
Главная Библионтека т.е. в результате получается вектор S = S4S3S2Si. Перемешивающее преобразование На данном этапе осуществляется перемешивание полученной последовательности с применением регистра сдвига Исходными данными являются слова Н, М g У25б(2) и слово S g V256(2). Пусть отображение Т. V256(2)V256(2) преобразует слово i6...b/GVi6(2),/= 1..16 в слово Г11ег12ег1зег14ег11зег11бл 1б... Л2. Тогда в качестве значения шаговой функции хэширования при- нимается слово к(м,н) = у\н е \\1(м е \\i\s))), где \/ - i-я степень преобразования \/. Процедура вычисления хэш-функции Исходными данными для процедуры вычисления значения функции h является подлежащая хэшированию последовательность М g В . Параметром является стартовый вектор хэширования Н - произвольное фиксированное слово из У25б(2). Процедура вычисления функции h на каждой итерации использует следующие величины: М g В - часть последовательности М, не прошедшая процедуры хэширования на предыдущих итерациях; Н g У25б(2) - текущее значение хэш-функции; Е g У25б(2) - текущее значение контрольной суммы; L g У25б(2) - текущее значение длины обработанной на предыдущих итерациях части последовательности М. Алгоритм вычисления функции h включает в себя следующие три этапа: Этап 1 Присвоить начальные значения текущих величин М := М; Н - Н; Е - 0; L - 0 Этап 2 Проверить условие М>256. Если да, то перейти к этапу 3. В противном случае выполнить последовательность вычислений: L - <L+M>256; М - 0*- М; Е := Е [+] М Н - К(М,Н); Н - K(L,H); Н - к(Е,Н); Конец работы алгоритма. Н содержит значение хэш-функции. ЭтанЗ Вычислить подслово Ms g У25б(2) слова М (M=MpMs). Далее выполнить последовательность вычислений: Н - K(Ms,H); L - <L+256>256; Е := Е [+] Mg; М := Мр Перейти к этапу 2. 4.3.4. Функция хэширования MD5 Предположим, что нам дано сообщение длиной b бит, где b -произвольное неотрицательное целое число, и пусть биты сообщения записаны в следующем порядке: то mi ... »2(й-1). Для вычисления свертки сообщения выполняются следующие пять шагов. Шаг 1. Добавление битов занолнения. Сообщение дополняется (расширяется) так, что его длина (в битах) становится сравнимой с 448 по модулю 512. Расширение выполняется всегда, даже если длина сообщения уже сравнима с 448 по модулю 512 Расширение выполняется следующим образом: к сообщению добавляется один бит, равный 1, а оставшиеся биты заполняются нулевыми значениями. Таким образом, количество добавленных битов может лежать в диапазоне от 1 до 512 включительно. Шаг 2. Добавление длины. 64-битное представление длины сообщения b (до добавления битов расширения) дописывается к результату предыдущего шага. В том маловероятном случае, когда длина сообщения превысит 2", используются только младшие 64 бита представ- ления. Эти биты добавляются в виде двух 32-разрядных слов, при этом младшее слово дописывается первым. После этой операции длина сообш,ения в точности кратна 512 битам и, аналогично, кратна 16 (32-разрядным) словам. Обозначим M[0..N-1] слова полученного сообш,ения. Шаг 3. Инициализация буфера свертки. Буфер из четырех слов (А, В, С, D) используется для вычисления свертки сообш,ения. Эти регистры инициализируются следуюш,ими шестнадцатеричными значениями: А = 01234567, В = 89abcdef, С = fedcba98, D = 76543210. Шаг 4. Обработка сообщения блоками по 16 слов. Определим сначала 4 вспомогательные функции, аргументом и результатом каждой из которых являются 32-битовые слова. F(X,Y,Z) = XY V (Х) Z G(X,Y,Z) = XZ V Y -n{Z) H(X,Y,Z) = X © Y © Z I(X,Y,Z) = Y © (X V (Z)). Ha этом шаге используется таблица из 64 слов Т[1...64], построенная на основе функции синуса. Пусть Т[/] обозначает /-й элемент таблицы, который равен целой части от 4294967296 xabs(sin(/)), где / выражено в радианах. Выполняются следуюш,ие шаги. /* Обработать каждый 16-словный блок. */ for/ = 0toN/16-l do /* Копирование /-го блока в X. */ Рогу = О to 15 do Х[/-] = М[/*16+у]. /* Сохранение А в АА, В в ВВ, С в СС, и D в DD. */ АА = А ВВ = В СС = С DD = D /* Этап 1. */ /* Пусть [abed к s /] обозначает операцию а = Ь + Ца + Fib,c,d) + Х[к] + Т[/]) « s). */ /* Выполните следуюш,ие 16 операций */ [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 [ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 [ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12] [ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16] /* Шаг 2. */ /* Пусть [abed к s /] обозначает операцию ab + {{a + G{b,c,d) + X[k] + T[/]) «s). */ /* Выполните следуюш,ие 16 операций */ [ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20] [ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24] [ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28] [ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32] a = b + ((a + H(b,c,d) + X[k] + T[i]) «< s). */ /* Шаг 2. */ /* Пусть [abed к s /] обозначает операцию a = b + {{a + R{b,c,d) + X[k] + T[/]) « s). */ /* Выполните следуюш,ие 16 операций */ [ABCD 5 4 33] [DABC 8 1134] [CDAB 11 16 35] [BCDA 14 23 36] [ABCD 1 4 37] [DABC 4 1138] [CDAB 7 16 39] [BCDA 10 23 40] [ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44] [ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48] /* Шаг 4. */ /* Пусть [abed к s /] обозначает операцию а = Ь + Ца + lib,c,d) + Х[к] + Т[/]) « s). */ /* Выполните следуюш,ие 16 операций */ [ABCD О 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52] [ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56] [ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60] [ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64] /* Затем выполните следующие операции сложения */ А = А + АА В = В + вв С = С + СС D = D + DD end /* цикла по / */ Шаг 5. Выход. Свертка сообщения содержится в регистрах А, В, С, D. Т.е., мы начинаем с младшего байта А и заканчиваем старшим байтом D. Этим завершается описание алгоритма MD5. 5. УПРАВЛЕНИЕ КРИПТОГРАФИЧЕСКИМИ КЛЮЧАМИ Помимо выбора подходящей для конкретной информационной системы средств криптографической защиты информации, важной проблемой является управление ключами. Как бы ни была сложна и надежна сама криптосистема, она основана на использовании ключей. Если для обеспечения конфиденциального обмена информацией между двумя пользователями процесс обмена ключами тривиален, то в информационной системе, где количество пользователей составляет сотни и тысячи, управление ключами - серьезная проблема. Под ключевой информацией понимается совокупность всех действующих в ИС ключей. Если не обеспечено достаточно надежное управление ключевой информацией, то, завладев ею, злоумышленник получает неограниченный доступ ко всей информации. Управление ключами - информационный процесс, включающий в себя три элемента: - генерацию ключей; - накопление ключей; - распределение ключей. Известно, что не стоит использовать неслучайные ключи с целью легкости их запоминания. В серьезных информационных системах используются специальные аппаратные и программные методы генерации случайных ключей. Как правило используют датчики ПСЧ. Однако степень случайности их генерации должна быть достаточно высоким. Идеальным генераторами являются устройства на основе «натуральных» случайных процессов. Например, появились серийные образцы генерации ключей на основе белого радиошума. Физический датчик случайных чисел встроен в ядро процессора Pentium-Ill. Другим случайным математическим объектом являются десятичные знаки трансцендентных чисел, например л или е, которые вычисляются с помощью стандартных математических методов. В ИС со средними требованиями защищенности вполне приемлемы программные генераторы ключей, которые вычисляют 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [ 20 ] 21 22 23 24 |