Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kursovaya_kripto4.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
423 Кб
Скачать
☆

2.4 Функция littleendian(b)

Хеш-функция Salsa20 использует запись слова, начинающуюся с младшего байта. Для того чтобы преобразовать последовательность байт в слово используется littleendian(b). Пусть b = (b0, b1, b2, b3) – 4-байтовая последовательность, тогда littleendian(b) – слово, такое что:

littleendian(b0, b1, b2, b3) = b0 + 28b1 + 216b2 + 224b3 (2.6)

Например: littleendian(255; 255; 255; 250) = 0xfaffffff. Стоит отметить, что эта функция обратима. Реализация функции littleendian (b) при помощи пакета Mathcad идентична (2.6).

О братная функции littleendian (b) является функция unlittleendian(D), а также unlittleendian4(D), реализация которых при помощи пакета Mathcad представлена на рис. 2.4:

Рисунок 2.4 - Реализация функций unlittleendian(D) и unlittleendian4(D)

Функция unlittleendian(D) преобразует число D в последовательность b из n байт:

unlittleendian(D) = (b0, b1,…, bn) (2.7)

Функция unlittleendian4(D) делает то же самое, но только с 32-битным словом D, соответственно на выходе всегда последовательность 4 байт.

2.5 Хеш-функция Salsa20

Если x = (x[0], x[1],…,x[63]) – последовательность 64 байт, то Salsa20(х) – тоже последовательность 64 байт:

Salsa20(x) = x + doubleround10(x) (2.8)

Итоговое преобразование Salsa20 — это суммирование по модулю 232 исходной последовательности х и результата 20 раундов чередующихся преобразований столбцов и строк.

Каждые 4 байта 64-байтной последовательности могут быть представлены словом, начинающемся с младшего байта. Имеем 16 слов:

(2.9)

где x[i] – байты x, а xj – слова.

Если:

(z0, z1,…, z15) = doubleround10(x0, x1,…, x15), (2.10)

тогда Salsa20(x) является последовательностью результатов:

littleendian-1(z0 + x0), littleendian-1(z1 + x1), …, littleendian-1(z15 + x15), где zi + xi – сумма двух слов по модулю 232.

Р еализация хеш-функции Salsa20(x) при помощи пакета Mathcad представлена на рис. 2.5:

Рисунок 2.5 – Реализация в Mathcad хеш-функции Salsa20(x)

2.6 Функция расширения ключа для Salsa20

Расширение преобразует 32-байтный или 16-байтный ключ k и 16-байтную последовательность n в 64-байтную последовательность Salsa20k(n). Для расширения k используются константы:

  1. Для 32-байтового k: σ0 = (101, 120, 112, 97), σ1 = (110, 100, 32, 51), σ2 = (50, 45, 98, 121), σ3 = (116, 101, 32, 107);

  2. Для 16-байтового k: τ0 = (101, 120, 112, 97), τ1 = (110, 100, 32, 49), τ2 = (54, 45, 98, 121), τ3 = (116, 101, 32, 107);

Пусть k - 32-байтный ключ, который можно представить в виде двух 16-байтных ключей k0 и k1, n – 16-байтовая последовательность, тогда:

Salsa20 (n) = Salsa20(σ0, k0, σ1, n, σ2, k1, σ3). (2.11)

Пусть k - 16-байтный ключ, n – 16-байтовая последовательность, то:

Salsa20k (n) = Salsa20(τ0, k, τ1, n, τ2, k, τ3). (2.12)

Расширение ключа для Salsa20 реализовано при помощи пакета Mathcad в виде последовательности нескольких операций.

Сначала выполняется объединение массивов в один массив М (рис.2.6):

(а)

(б)

Рисунок 2.6 - Объединение массивов в один массив М: а) в случае 32-байтового ключа; б) в случае 16-байтового ключа

Где σ0, σ1, σ2, σ3, τ0, τ1, τ2, τ3 – массивы констант; k – массив ключа (32-байтный или 16-байтный); n – 16-байтовая последовательность.

На данный момент программа представляет М массивом, внутри которого 7 различных массивов. Для того чтобы из М получить единую 64-байтовую последовательность E используется функция exp(M) (рис.2.7):

Рисунок 2.7 – Реализация в Mathcad функции exp(M)

После этого выполняется преобразование Salsa20(E) по формулам (2.11) или (2.12), где Е – последовательность 64 байт.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]