- •1. Общие положения
- •1.2. Когда и зачем нужно защищать информацию?
- •1.3. Язык сообщения
- •1.4. Тайнопись
- •1.5. Коды и их назначение
- •1.6. Криптография и криптоанализ
- •1.7. Основной объект криптографии
- •1.8. Что такое ключ
- •1.10. Сложность вскрытия шифра
- •1.9. Атака на шифр. Стойкость шифра
- •1.11. Принцип Кирхгофа
- •2. Древняя история криптографии
- •3. Современная криптография
- •3.1. Классификация криптографических систем
- •3.2. Основные классы симметричных криптосистем
- •3.3. Шифр замены
- •3.4. Шифр перестановки
- •3.5. Шифр Энигмы
- •4. Блочные шифры
- •4.1. Общие сведения о блочных шифрах
- •4.2. Сеть Фейштеля
- •4.3. Шифр взбивания. Стандарт des
- •4.3.1. Описание алгоритма
- •4.3.2. Анализ эффективности алгоритма
- •4.4. Отечественный стандарт шифрования данных
- •4.4.1. Режим простой замены
- •4.4.2. Режим гаммирования
- •4.4.3. Режим гаммирования с обратной связью
- •4.5. Режимы применения блочных шифров
- •5. Новый криптостандарт блочного шифрования сша
- •5.1. Общие сведения о конкурсе aes
- •5.1.1. Финалист aes – шифр mars
- •5.1.2. Финалист aes – шифр rc6
- •5.1.3. Финалист aes – шифр Serpent
- •5.1.4. Финалист aes – шифр TwoFish
- •5.2. Победитель aes – шифр Rijndael
- •6. Поточные шифры
- •6.1. Регистры сдвига с обратной связью
- •6.2. Шифр a5
- •6.3. Шифр rc4
- •6.4. Шифр seal
- •7. Асимметричные криптосистемы
- •7.1. Общие сведения об асимметричных криптоалгоритмах
- •7.2. Односторонние функции и функции-ловушки
- •7.3. Алгоритм rsa
- •Длина ключа
- •Применение rsa
- •7.4. Криптосистема Эль-Гамаля
- •7.5. Алгоритм Диффи-Хелмана
- •7.6. Механизм распространения открытых ключей
- •7.6.1. Обмен ключами по алгоритму Диффи-Хеллмана
- •8. Сравнительная характеристика шифров
- •9. Электронные цифровые подписи
- •9.1. Постановка задачи
- •9.2. Алгоритмы электронной цифровой подписи
- •9.2.1. Цифровые подписи, основанные на асимметричных криптосистемах
- •9.2.2. Стандарт цифровой подписи dss
- •9.2.3. Стандарт цифровой подписи гост р 34.10-94
- •9.3. Цифровые подписи, основанные на симметричных криптосистемах
- •9.4. Функции хэширования
- •9.4.1. Функция хэширования sha
- •9.4.2. Функция хэширования гост р 34.11-94
- •9.4.3. Функция хэширования md5
- •Библиографический список
- •Оглавление
9.4.2. Функция хэширования гост р 34.11-94
При описании функции хэширования будут использоваться те же обозначения, что использовались при описании алгоритма выработки цифровой подписи согласно ГОСТ Р 34.10, и, кроме того, пусть
M – последовательность двоичных символов, подлежащих хэшированию.
h – хэш-функция, отображающая последовательность M в слово h(M) Î V256(2).
EK(A) – результат шифрования слова А на ключе K с использованием алгоритма шифрования по ГОСТ 28147 в режиме простой замены.
H – стартовый вектор хэширования.
Общие положения
Под хэш-функцией h понимается отображение
h: B* ® V256(2).
Для определения хэш-функции необходимы:
алгоритм вычисления шаговой функции хэширования k, где
k: V256(2)´V256(2) ® V256(2);
описание итеративной процедуры вычисления значения хэш-функции h.
Алгоритм вычисления шаговой функции хэширования состоит из трех частей:
генерации четырех 256-битных ключей;
шифрующего преобразования – шифрования 64-битных подслов слова H на ключах Ki (i = 1, 2, 3, 4) с использованием алгоритма ГОСТ 28147 в режиме простой замены;
перемешивающего преобразования результата шифрования.
Генерация ключей.
Рассмотрим X = (b256, b255, …, b1) Î V256(2).
Пусть X = x4||x3||x2||x1 = h16||h15||…||h1 = x32||x31||…||x1,
где xiÎV64(2), i = 1..4; hjÎV16(2), j = 1..16; xkÎV8(2), k = 1..32.
Обозначим A(X) = (x1 Å x2)||x4||x3||x2.
Задается преобразование P: V256(2)®V256(2) слова x32||…||x1 в слово xj(32)||x(j)31||…||xj(1), где j(i+1+4(k‑1)) = 8i + k, i = 0..3, k = 1..8.
Для генерации ключей необходимо использовать следующие исходные данные:
слова H, M Î V256(2);
константы: слова Сi (i = 2,3,4), имеющие значения С2=С4=0256 и C3= 180811602411608(0818)21808(0818)4(1808)4.
При вычислении ключей реализуется следующий алгоритм:
Присвоить значения
i = 1, U = H, V = M.
Выполнить вычисление
W = U Å V, K1 = P(W).
Присвоить i = i + 1.
Проверить условие i = 5. При положительном исходе перейти к шагу 7. При отрицательном – перейти к шагу 5.
Выполнить вычисление
U = A(U) Å Ci, V = A(A(V)), W = U Å V, Ki = P(W);
Перейти к шагу 3
Конец работы алгоритма.
Шифрующее преобразование
На данном этапе осуществляется шифрование 64-битных подслов слова H на ключах Ki (i = 1, 2, 3, 4).
Для шифрующего преобразования необходимо использовать следующие исходные данные:
H=h4||h3||h2||h1, hiÎV64(2), i = 1..4 и набор ключей K1, K2, K3, K4.
После выполнения шифрования получают слова
si = EKi(hi), где i = 1, 2, 3, 4,
т.е. в результате получается вектор
S = s4||s3||s2||s1.
Перемешивающее преобразование
На данном этапе осуществляется перемешивание полученной последовательности с применением регистра сдвига.
Исходными данными являются слова H, M Î V256(2) и слово S Î V256(2).
Пусть отображение
y: V256(2) ® V256(2)
преобразует слово
h16||…||h1, hiÎV16(2), i = 1..16
в слово
h1Åh2Åh3Åh4Åh13Åh16||h16||…||h2.
Тогда в качестве значения шаговой функции хэширования принимается слово
k(M,H) = y61(H Å y(M Å y12(S))),
где yi – i-я степень преобразования y.
Процедура вычисления хэш-функции
Исходными данными для процедуры вычисления значения функции h является подлежащая хэшированию последовательность M Î B*. Параметром является стартовый вектор хэширования H – произвольное фиксированное слово из V256(2).
Процедура вычисления функции h на каждой итерации использует следующие величины:
M Î B* – часть последовательности M, не прошедшая процедуры хэширования на предыдущих итерациях;
H Î V256(2) – текущее значение хэш-функции;
S Î V256(2) – текущее значение контрольной суммы;
L Î V256(2) – текущее значение длины обработанной на предыдущих итерациях части последовательности M.
Алгоритм вычисления функции h включает в себя следующие три этапа:
Этап 1
Присвоить начальные значения текущих величин
M := M; H := H; S := 0256; L := 0256
Этап 2
Проверить условие |M|>256. Если да, то перейти к этапу 3. В противном случае выполнить последовательность вычислений:
L := <L+|M|>256; M' := 0256–|M| ||M; S := S [+] M'
H := k(M',H); H := k(L,H); H := k(S,H);
Конец работы алгоритма. H содержит значение хэш-функции.
Этап 3
Вычислить подслово MS Î V256(2) слова M (M=MP||MS). Далее выполнить последовательность вычислений:
H := k(MS,H); L := <L+256>256; S := S [+] MS; M := MP
Перейти к этапу 2.
