Безопасный хэш-алгоритм (Secure
264 бит и
создает в качестве выхода 160 бит
Алгоритм состоит из следующих шагов:
(рис 9.1) Логика выполнения SHA-1Шаг 1: добавление недостающих битов
Сообщение добавляется таким образом, чтобы его длина была кратна 448
по модулю 512 ( $$длина \equiv 448 \mod 512$$ ). Добавление осуществляется
всегда, даже если сообщение уже имеет нужную длину. Таким образом,
число добавляемых битов находится в диапазоне от 1 до 512.
Добавление состоит из единицы, за которой следует необходимое количество нулей.
Шаг 2: добавление длины
К сообщению добавляется блок из 64 битов. Этот блок трактуется как беззнаковое 64-битное целое и содержит длину исходного сообщения до добавления.
Результатом первых двух шагов является сообщение, длина которого
кратна 512 битам. Расширенное сообщение может быть представлено как
последовательность 512-битных блоков Y0, Y1, . . . , YL-1, так что
общая длина расширенного сообщения есть L * 512 бит. Таким образом,
результат кратен шестнадцати 32-битным словам.
Шаг 3: инициализация SHA-1 буфера
Используется 160-битный буфер для хранения промежуточных и
окончательных результатов A, B, C, D и E. Эти регистры
инициализируются следующими шестнадцатеричными числами:
A = 67452301 B = EFCDAB89 C = 98BADCFE D = 10325476 E = C3D2E1F0
Шаг 4: обработка сообщения в 512-битных (16-словных) блоках
Основой алгоритма является модуль, состоящий из 80 циклических
обработок, обозначенный как HSHA. Все 80 циклических обработок имеют
одинаковую структуру.
(рис 9.2) Обработка очередного 512-битного блокаКаждый цикл получает на входе текущий 512-битный обрабатываемый блок Yq и 160-битное значение буфера , и изменяет содержимое этого
буфера.
В каждом цикле используется дополнительная константа Кt, которая
принимает только четыре различных значения:
0 <= t <= 19 Kt = 5A827999 (целая часть числа [230 x 21/2]) 20 <= t <= 39 Kt = 6ED9EBA1 (целая часть числа [230 x 31/2]) 40 <= t <= 59 Kt = 8F1BBCDC (целая часть числа [230 x 51/2]) 60 <= t <= 79 Kt = CA62C1D6 (целая часть числа [230 x 101/2])
Для получения выход 80-го цикла складывается со значением . Сложение по модулю 232 выполняется независимо для каждого из
пяти слов в буфере с каждым из соответствующих слов в .
Шаг 5: выход
После обработки всех 512-битных блоков выходом L-ой стадии является
160-битный
Рассмотрим более детально логику в каждом из 80 циклов обработки одного 512-битного блока. Каждый цикл можно представить в виде:
A, B, C, D, E (CLS5 (A) + ft (B, C, D) + E + Wt + Kt), A, CLS30 (B), C, D
Где
A, B, C, D, E - пять слов из буфера. |
t - номер цикла, 0 <= t <= 79. |
ft - элементарная |
CLSs - циклический левый сдвиг 32-битного аргумента на s битов. |
Wt - 32-битное слово, полученное из текущего входного 512-битного блока. |
Kt - дополнительная константа. |
+ - сложение по модулю 232. |
(рис 9.3) Логика выполнения отдельного циклаКаждая элементарная функция получает на входе три 32-битных слова и создает на выходе одно 32-битное слово. Элементарная функция выполняет набор побитных логических операций, т.е. n-ый бит выхода является функцией от n-ых битов трех входов. Функции следующие:
| Номер цикла | ft (B, C, D) |
|---|---|
(0 <= t <= 19) |
$$(B \wedge C) \vee (\neg B \wedge D)$$ |
(20 <= t <= 39) |
$$B \oplus C \oplus D$$ |
(40 <= t <= 59) |
$$(B \wedge C) \vee (B \wedge D) \vee (C \wedge D)$$ |
(60 <= t <= 79) |
$$B \oplus C \oplus D$$ |
На самом деле используются только три различные функции. Для 0 <= t <=
19 функция является условной: if B then C else D. Для 20 <= t <= 39 и 60 <= t <= 79 функция создает бит 40 <= t <= 59 функция
является истинной, если два или три аргумента истинны.
32-битные слова Wt получаются из очередного 512-битного блока
сообщения следующим образом.
(рис 9.4) Получение входных значений каждого цикла из очередного блокаПервые 16 значений Wt берутся непосредственно из 16 слов текущего
блока. Оставшиеся значения определяются следующим образом:
В первых 16 циклах вход состоит из 32-битного слова данного блока.
Для оставшихся 64 циклов вход состоит из нескольких слов из блока
сообщения.
Алгоритм
Где
IV - начальное значение буфера . |
- результат обработки q-того блока сообщения. |
L - число блоков в сообщении, включая поля добавления и длины. |
$$\Sigma 32$$ - сумма по модулю 232, выполняемая отдельно для каждого слова буфера. |
- значение |
Оба алгоритма,
Можно суммировать ключевые различия между алгоритмами.
| | ||
|---|---|---|
| Длина |
128 бит | 160 бит |
| Размер блока обработки | 512 бит | 512 бит |
| Число итераций | 64 (4 цикла по 16 итераций в каждом) | 80 |
| Число элементарных |
4 | 3 |
| Число дополнительных констант | 64 | 4 |
Сравним оба алгоритма в соответствии с теми целями, которые были
определены для алгоритма
2160 операций, как в случае
алгоритма 2128 операций, как в случае алгоритма
280 как в случае
алгоритма 264 операций как в случае алгоритма 232,
они рассчитаны на 32-битную архитектуру. Простота и компактность: оба алгоритма просты и в описании, и в
реализации, не требуют больших программ или подстановочных таблиц.
Тем не менее, В 2001 году
| Алгоритм | Длина сообщения (в битах) | | Длина слова (в битах) | Длина | Безопасность (в битах) |
|---|---|---|---|---|---|
| | <264 | 512 | 32 | 160 | 80 |
| <264 | 512 | 32 | 256 | 128 | |
| <2128 | 1024 | 64 | 384 | 192 | |
| <2128 | 1024 | 64 | 512 | 256 |
Под безопасностью здесь понимается стойкость к атакам типа "парадокса дня рождения".
В данных алгоритмах размер блока сообщения равен m бит. Для m
= 512, для m = 1024. Каждый алгоритм оперирует с
w-битными словами. Для w = 32, для w = 64.
В алгоритмах используются обычные булевские операции над словами, а также
сложение по модулю 2w, правый сдвиг на n бит SHRn (x), где х -
w-битное слово, и циклические (ротационные) правый и левый сдвиги на n бит ROTRn (x) и ROTLn (x), где х - w-битное слово.
x, y и z.
Результатом каждой функции тоже является 32-битное слово.
x, y
и z. Результатом каждой функции является 64-битное слово.
Предварительная подготовка сообщения, т.е. добавление определенных
битов до целого числа блоков и последующее разбиение на блоки
выполняется аналогично тому, как это делалось в N блоков M(1), M(2), $$\dots,$$ M(N).
Рассмотрим
a, b, c, d, e, f, g, h
Основой алгоритма является модуль, состоящий из 64 циклических
обработок каждого блока M(i):
где Ki{256} - шестьдесят четыре 32-битных константы, каждая из
которых является первыми 32-мя битами дробной части кубических корней
первых 64 простых чисел.
Wt вычисляются из очередного блока сообщения по следующим правилам:
i-ое промежуточное значение H(t) вычисляется следующим
образом:
H0(i) = a + H0(i-1) H1(i) = b + H1(i-1) H2(i) = c + H2(i-1) H3(i) = d + H3(i-1) H4(i) = e + H4(i-1) H5(i) = f + H5(i-1) H6(i) = g + H6(i-1) H7(i) = h + H7(i-1)
Теперь рассмотрим
a, b, c, d, e, f, g, h
Основой алгоритма является модуль, состоящий из 80 циклических
обработок каждого блока M(i):
где Ki{512} - восемьдесят 64-битных констант, каждая из которых
является первыми 64-мя битами дробной части кубических корней первых
восьмидесяти простых чисел.
Wt вычисляются из очередного блока сообщения по следующим правилам:
i-ое промежуточное значение H(t) вычисляется следующим
образом:
H0(i) = a + H0(i-1) H1(i) = b + H1(i-1) H2(i) = c + H2(i-1) H3(i) = d + H3(i-1) H4(i) = e + H4(i-1) H5(i) = f + H5(i-1) H6(i) = g + H6(i-1) H7(i) = h + H7(i-1)
Рассмотрим
H(0).H(N):H0(N) || H1(N) || H2(N) || H3(N) || H4(N) || H5(N).
Длина Н - произвольное фиксированное значение длиной также 256
бит.
Сообщение обрабатывается блоками по 256 бит справа налево.
Каждый блок сообщения обрабатывается по следующему алгоритму.
H на ключах Ki(i = 1, 2, 3, 4) с использованием Для
Н длиной 256 бит;М длиной 256 бит;С2, С3 и С4 длиной 256 бит следующего
вида: С2 и С4 состоят из одних нулей, а С3 равно18 08 116 024 116 08 (08 18)2 18 08 (08 18)4 (18 08)4
где степень обозначает количество повторений 0 или 1.
Используются две формулы, определяющие перестановку и сдвиг.
Перестановка Р битов определяется следующим образом: каждое
256-битное значение рассматривается как последовательность тридцати
двух 8-битных значений.
Перестановка Р элементов 256-битной последовательности выполняется по
формуле $$y = \varphi (x)$$, где x - порядковый номер 8-битного значения в
исходной последовательности; y - порядковый номер 8-битного значения
в результирующей последовательности.
Сдвиг А определяется по формуле
Где
xi - соответствующие 64 бита 256-битного значения х, |
|| обозначает конкатенацию. |
Присваиваются следующие начальные значения:
$$i = 1, U = H, V = M. \\ W = U \oplus V, K_{1} = Р (W)$$Ключи K2, K3, K4 вычисляются последовательно по следующему алгоритму:
Далее выполняется шифрование 64-битных элементов текущего значения
Н с ключами K1, K2, K3 и K4. При этом Н
рассматривается как последовательность 64-битных значений:
H = h4 || h3 || h2 || h1
Выполняется шифрование
si = EKi [hi] i = 1, 2, 3, 4 S = s1 || s2 || s3 || s4
Наконец на заключительном этапе обработки очередного блока выполняется перемешивание полученной последовательности. 256-битное значение рассматривается как последовательность шестнадцати 16-битных значений. Сдвиг обозначается $$\Psi$$ и определяется следующим образом:
| $$\eta _{16} || \eta _{15} || \dots || \eta _{1}$$ - исходное значение |
| $$\eta _{1} \oplus \eta _{2} \oplus \eta _{3} \oplus \eta _{4} \oplus \eta _{13} \oplus \eta _{16} || \eta _{16} || \dots || \eta _{2}$$ - результирующее значение |
Результирующее значение
где
H - предыдущее значение |
М - текущий обрабатываемый блок, |
| $$\Psi ^{i}$$ - i-ая степень преобразования $$\Psi.$$ |
М произвольной длины;Н, длина которого равна 256 битам;L, начальное значение которой равно длине сообщения.Сообщение М делится на блоки длиной 256 бит и обрабатывается справа
налево. Очередной блок i обрабатывается следующим образом:
L рассматривается как неотрицательное целое число, к этому числу
прибавляется 256 и вычисляется остаток от деления получившегося числа
на 2256. Результат присваивается L.Где $$\oplus '$$ обозначает следующую операцию: $$\Sigma$$ и Mi рассматриваются как
неотрицательные целые числа длиной 256 бит. Выполняется обычное
сложение этих чисел и находится остаток от деления результата
сложения на 2256. Этот остаток и является результатом операции.
Самый левый, т.е. самый последний блок М' обрабатывается следующим
образом:
L рассматривается как неотрицательное целое число, к этому числу
прибавляется длина исходного сообщения М и находится остаток от
деления результата сложения на 2256.Значением функции хэширования является Н.
Напомним, что обеспечение целостности сообщения - это невозможность
изменения сообщения так, чтобы получатель этого не обнаружил. Под
аутентификацией понимается подтверждение того, что информация
получена от законного источника, и получателем является тот, кто
нужно. Один из способов обеспечения целостности - это вычисление
MAC = CK (M)
Рассмотрим свойства, которыми должна обладать функция МАС. Если длина
ключа, используемого при вычислении МАС, равна k, то при условии
сильной функции МАС противнику потребуется выполнить 2k попыток для
перебора всех ключей. Если длина значения, создаваемого МАС, равна n,
то всего существует 2n различных значений
Предположим, что конфиденциальности сообщения нет, т.е. оппонент
имеет доступ к k > n, т.е. М1 и МАС1 = СK (M1), оппонент может вычислить МАС1 = СKi
(M1) для всех Ki. При этом, по крайней мере, для
одного из ключей будет получено совпадение MACi = MAC1. Оппонент
вычислит 2k значений n битов существует
всего 2n значений k > n, т.е. 2k > 2n.
Таким образом, правильное значение 2k / 2n =
2(k-n) ключей. Поэтому для вычисления единственного ключа оппоненту
требуется знать несколько пар сообщений и соответствующий ему
Таким образом, простой перебор всех ключей требует не меньше, а
больше усилий, чем поиск ключа
Функция вычисления
М и СK (M), найти сообщение М', такое, что СK(M) = СK(M').СK(M) должны быть равномерно распределенными в том
смысле, что для любых сообщений М и M' вероятность того, что СK(M) =
СK(M'), должна быть равна 2-n, где n - длина значения МАС.Для вычисления
Другим способом обеспечения целостности является использование
При разработке
В алгоритме
Введем следующие обозначения:
Н - встроенная |
b - |
n - длина |
K - K+. |
Вводится два вспомогательных значения:
Ipad - значение '00110110', повторенное b/8 раз. |
Opad - значение '01011010', повторенное b/8 раз. |
Далее
Безопасный хэш-алгоритм (Secure
264 бит и
создает в качестве выхода 160 бит
Алгоритм состоит из следующих шагов:
(рис 9.1) Логика выполнения SHA-1Шаг 1: добавление недостающих битов
Сообщение добавляется таким образом, чтобы его длина была кратна 448
по модулю 512 ( $$длина \equiv 448 \mod 512$$ ). Добавление осуществляется
всегда, даже если сообщение уже имеет нужную длину. Таким образом,
число добавляемых битов находится в диапазоне от 1 до 512.
Добавление состоит из единицы, за которой следует необходимое количество нулей.
Шаг 2: добавление длины
К сообщению добавляется блок из 64 битов. Этот блок трактуется как беззнаковое 64-битное целое и содержит длину исходного сообщения до добавления.
Результатом первых двух шагов является сообщение, длина которого
кратна 512 битам. Расширенное сообщение может быть представлено как
последовательность 512-битных блоков Y0, Y1, . . . , YL-1, так что
общая длина расширенного сообщения есть L * 512 бит. Таким образом,
результат кратен шестнадцати 32-битным словам.
Шаг 3: инициализация SHA-1 буфера
Используется 160-битный буфер для хранения промежуточных и
окончательных результатов A, B, C, D и E. Эти регистры
инициализируются следующими шестнадцатеричными числами:
A = 67452301 B = EFCDAB89 C = 98BADCFE D = 10325476 E = C3D2E1F0
Шаг 4: обработка сообщения в 512-битных (16-словных) блоках
Основой алгоритма является модуль, состоящий из 80 циклических
обработок, обозначенный как HSHA. Все 80 циклических обработок имеют
одинаковую структуру.
(рис 9.2) Обработка очередного 512-битного блокаКаждый цикл получает на входе текущий 512-битный обрабатываемый блок Yq и 160-битное значение буфера , и изменяет содержимое этого
буфера.
В каждом цикле используется дополнительная константа Кt, которая
принимает только четыре различных значения:
0 <= t <= 19 Kt = 5A827999 (целая часть числа [230 x 21/2]) 20 <= t <= 39 Kt = 6ED9EBA1 (целая часть числа [230 x 31/2]) 40 <= t <= 59 Kt = 8F1BBCDC (целая часть числа [230 x 51/2]) 60 <= t <= 79 Kt = CA62C1D6 (целая часть числа [230 x 101/2])
Для получения выход 80-го цикла складывается со значением . Сложение по модулю 232 выполняется независимо для каждого из
пяти слов в буфере с каждым из соответствующих слов в .
Шаг 5: выход
После обработки всех 512-битных блоков выходом L-ой стадии является
160-битный
Рассмотрим более детально логику в каждом из 80 циклов обработки одного 512-битного блока. Каждый цикл можно представить в виде:
A, B, C, D, E (CLS5 (A) + ft (B, C, D) + E + Wt + Kt), A, CLS30 (B), C, D
Где
A, B, C, D, E - пять слов из буфера. |
t - номер цикла, 0 <= t <= 79. |
ft - элементарная |
CLSs - циклический левый сдвиг 32-битного аргумента на s битов. |
Wt - 32-битное слово, полученное из текущего входного 512-битного блока. |
Kt - дополнительная константа. |
+ - сложение по модулю 232. |
(рис 9.3) Логика выполнения отдельного циклаКаждая элементарная функция получает на входе три 32-битных слова и создает на выходе одно 32-битное слово. Элементарная функция выполняет набор побитных логических операций, т.е. n-ый бит выхода является функцией от n-ых битов трех входов. Функции следующие:
| Номер цикла | ft (B, C, D) |
|---|---|
(0 <= t <= 19) |
$$(B \wedge C) \vee (\neg B \wedge D)$$ |
(20 <= t <= 39) |
$$B \oplus C \oplus D$$ |
(40 <= t <= 59) |
$$(B \wedge C) \vee (B \wedge D) \vee (C \wedge D)$$ |
(60 <= t <= 79) |
$$B \oplus C \oplus D$$ |
На самом деле используются только три различные функции. Для 0 <= t <=
19 функция является условной: if B then C else D. Для 20 <= t <= 39 и 60 <= t <= 79 функция создает бит 40 <= t <= 59 функция
является истинной, если два или три аргумента истинны.
32-битные слова Wt получаются из очередного 512-битного блока
сообщения следующим образом.
(рис 9.4) Получение входных значений каждого цикла из очередного блокаПервые 16 значений Wt берутся непосредственно из 16 слов текущего
блока. Оставшиеся значения определяются следующим образом:
В первых 16 циклах вход состоит из 32-битного слова данного блока.
Для оставшихся 64 циклов вход состоит из нескольких слов из блока
сообщения.
Алгоритм
Где
IV - начальное значение буфера . |
- результат обработки q-того блока сообщения. |
L - число блоков в сообщении, включая поля добавления и длины. |
$$\Sigma 32$$ - сумма по модулю 232, выполняемая отдельно для каждого слова буфера. |
- значение |
Оба алгоритма,
Можно суммировать ключевые различия между алгоритмами.
| | ||
|---|---|---|
| Длина |
128 бит | 160 бит |
| Размер блока обработки | 512 бит | 512 бит |
| Число итераций | 64 (4 цикла по 16 итераций в каждом) | 80 |
| Число элементарных |
4 | 3 |
| Число дополнительных констант | 64 | 4 |
Сравним оба алгоритма в соответствии с теми целями, которые были
определены для алгоритма
2160 операций, как в случае
алгоритма 2128 операций, как в случае алгоритма
280 как в случае
алгоритма 264 операций как в случае алгоритма 232,
они рассчитаны на 32-битную архитектуру. Простота и компактность: оба алгоритма просты и в описании, и в
реализации, не требуют больших программ или подстановочных таблиц.
Тем не менее, В 2001 году
| Алгоритм | Длина сообщения (в битах) | | Длина слова (в битах) | Длина | Безопасность (в битах) |
|---|---|---|---|---|---|
| | <264 | 512 | 32 | 160 | 80 |
| <264 | 512 | 32 | 256 | 128 | |
| <2128 | 1024 | 64 | 384 | 192 | |
| <2128 | 1024 | 64 | 512 | 256 |
Под безопасностью здесь понимается стойкость к атакам типа "парадокса дня рождения".
В данных алгоритмах размер блока сообщения равен m бит. Для m
= 512, для m = 1024. Каждый алгоритм оперирует с
w-битными словами. Для w = 32, для w = 64.
В алгоритмах используются обычные булевские операции над словами, а также
сложение по модулю 2w, правый сдвиг на n бит SHRn (x), где х -
w-битное слово, и циклические (ротационные) правый и левый сдвиги на n бит ROTRn (x) и ROTLn (x), где х - w-битное слово.
x, y и z.
Результатом каждой функции тоже является 32-битное слово.
x, y
и z. Результатом каждой функции является 64-битное слово.
Предварительная подготовка сообщения, т.е. добавление определенных
битов до целого числа блоков и последующее разбиение на блоки
выполняется аналогично тому, как это делалось в N блоков M(1), M(2), $$\dots,$$ M(N).
Рассмотрим
a, b, c, d, e, f, g, h
Основой алгоритма является модуль, состоящий из 64 циклических
обработок каждого блока M(i):
где Ki{256} - шестьдесят четыре 32-битных константы, каждая из
которых является первыми 32-мя битами дробной части кубических корней
первых 64 простых чисел.
Wt вычисляются из очередного блока сообщения по следующим правилам:
i-ое промежуточное значение H(t) вычисляется следующим
образом:
H0(i) = a + H0(i-1) H1(i) = b + H1(i-1) H2(i) = c + H2(i-1) H3(i) = d + H3(i-1) H4(i) = e + H4(i-1) H5(i) = f + H5(i-1) H6(i) = g + H6(i-1) H7(i) = h + H7(i-1)
Теперь рассмотрим
a, b, c, d, e, f, g, h
Основой алгоритма является модуль, состоящий из 80 циклических
обработок каждого блока M(i):
где Ki{512} - восемьдесят 64-битных констант, каждая из которых
является первыми 64-мя битами дробной части кубических корней первых
восьмидесяти простых чисел.
Wt вычисляются из очередного блока сообщения по следующим правилам:
i-ое промежуточное значение H(t) вычисляется следующим
образом:
H0(i) = a + H0(i-1) H1(i) = b + H1(i-1) H2(i) = c + H2(i-1) H3(i) = d + H3(i-1) H4(i) = e + H4(i-1) H5(i) = f + H5(i-1) H6(i) = g + H6(i-1) H7(i) = h + H7(i-1)
Рассмотрим
H(0).H(N):H0(N) || H1(N) || H2(N) || H3(N) || H4(N) || H5(N).
Длина Н - произвольное фиксированное значение длиной также 256
бит.
Сообщение обрабатывается блоками по 256 бит справа налево.
Каждый блок сообщения обрабатывается по следующему алгоритму.
H на ключах Ki(i = 1, 2, 3, 4) с использованием Для
Н длиной 256 бит;М длиной 256 бит;С2, С3 и С4 длиной 256 бит следующего
вида: С2 и С4 состоят из одних нулей, а С3 равно18 08 116 024 116 08 (08 18)2 18 08 (08 18)4 (18 08)4
где степень обозначает количество повторений 0 или 1.
Используются две формулы, определяющие перестановку и сдвиг.
Перестановка Р битов определяется следующим образом: каждое
256-битное значение рассматривается как последовательность тридцати
двух 8-битных значений.
Перестановка Р элементов 256-битной последовательности выполняется по
формуле $$y = \varphi (x)$$, где x - порядковый номер 8-битного значения в
исходной последовательности; y - порядковый номер 8-битного значения
в результирующей последовательности.
Сдвиг А определяется по формуле
Где
xi - соответствующие 64 бита 256-битного значения х, |
|| обозначает конкатенацию. |
Присваиваются следующие начальные значения:
$$i = 1, U = H, V = M. \\ W = U \oplus V, K_{1} = Р (W)$$Ключи K2, K3, K4 вычисляются последовательно по следующему алгоритму:
Далее выполняется шифрование 64-битных элементов текущего значения
Н с ключами K1, K2, K3 и K4. При этом Н
рассматривается как последовательность 64-битных значений:
H = h4 || h3 || h2 || h1
Выполняется шифрование
si = EKi [hi] i = 1, 2, 3, 4 S = s1 || s2 || s3 || s4
Наконец на заключительном этапе обработки очередного блока выполняется перемешивание полученной последовательности. 256-битное значение рассматривается как последовательность шестнадцати 16-битных значений. Сдвиг обозначается $$\Psi$$ и определяется следующим образом:
| $$\eta _{16} || \eta _{15} || \dots || \eta _{1}$$ - исходное значение |
| $$\eta _{1} \oplus \eta _{2} \oplus \eta _{3} \oplus \eta _{4} \oplus \eta _{13} \oplus \eta _{16} || \eta _{16} || \dots || \eta _{2}$$ - результирующее значение |
Результирующее значение
где
H - предыдущее значение |
М - текущий обрабатываемый блок, |
| $$\Psi ^{i}$$ - i-ая степень преобразования $$\Psi.$$ |
М произвольной длины;Н, длина которого равна 256 битам;L, начальное значение которой равно длине сообщения.Сообщение М делится на блоки длиной 256 бит и обрабатывается справа
налево. Очередной блок i обрабатывается следующим образом:
L рассматривается как неотрицательное целое число, к этому числу
прибавляется 256 и вычисляется остаток от деления получившегося числа
на 2256. Результат присваивается L.Где $$\oplus '$$ обозначает следующую операцию: $$\Sigma$$ и Mi рассматриваются как
неотрицательные целые числа длиной 256 бит. Выполняется обычное
сложение этих чисел и находится остаток от деления результата
сложения на 2256. Этот остаток и является результатом операции.
Самый левый, т.е. самый последний блок М' обрабатывается следующим
образом:
L рассматривается как неотрицательное целое число, к этому числу
прибавляется длина исходного сообщения М и находится остаток от
деления результата сложения на 2256.Значением функции хэширования является Н.
Напомним, что обеспечение целостности сообщения - это невозможность
изменения сообщения так, чтобы получатель этого не обнаружил. Под
аутентификацией понимается подтверждение того, что информация
получена от законного источника, и получателем является тот, кто
нужно. Один из способов обеспечения целостности - это вычисление
MAC = CK (M)
Рассмотрим свойства, которыми должна обладать функция МАС. Если длина
ключа, используемого при вычислении МАС, равна k, то при условии
сильной функции МАС противнику потребуется выполнить 2k попыток для
перебора всех ключей. Если длина значения, создаваемого МАС, равна n,
то всего существует 2n различных значений
Предположим, что конфиденциальности сообщения нет, т.е. оппонент
имеет доступ к k > n, т.е. М1 и МАС1 = СK (M1), оппонент может вычислить МАС1 = СKi
(M1) для всех Ki. При этом, по крайней мере, для
одного из ключей будет получено совпадение MACi = MAC1. Оппонент
вычислит 2k значений n битов существует
всего 2n значений k > n, т.е. 2k > 2n.
Таким образом, правильное значение 2k / 2n =
2(k-n) ключей. Поэтому для вычисления единственного ключа оппоненту
требуется знать несколько пар сообщений и соответствующий ему
Таким образом, простой перебор всех ключей требует не меньше, а
больше усилий, чем поиск ключа
Функция вычисления
М и СK (M), найти сообщение М', такое, что СK(M) = СK(M').СK(M) должны быть равномерно распределенными в том
смысле, что для любых сообщений М и M' вероятность того, что СK(M) =
СK(M'), должна быть равна 2-n, где n - длина значения МАС.Для вычисления
Другим способом обеспечения целостности является использование
При разработке
В алгоритме
Введем следующие обозначения:
Н - встроенная |
b - |
n - длина |
K - K+. |
Вводится два вспомогательных значения:
Ipad - значение '00110110', повторенное b/8 раз. |
Opad - значение '01011010', повторенное b/8 раз. |
Далее
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.