2014-06-18
Персональный сайт Вячеслава Горчилина
Все статьи
Описание Hash-Mask алгоритма для секретного обмена данными

1. Общий подход
Алгоритм основан на методе маскирования и демаскирования данных (ВД) по хеш-маске (ХМС). ХМС — это хеш получаемый из случайного ключа (СКЛ), кодового слова (КС) и номера группы (НГР).

Криптостойкость Алгоритма определяется конкретной его реализацией и полностью зависит от криптостойкости метода хеширования для создания ХМС. Например, если будет использован метод MD5, то криптостойкость получится около 3.4*1038. Причём недостатки MD5, вроде передачи двух сообщений с одинаковой хеш-суммой, полностью устраняются Алгоритмом. Даже при одинаковых входных данных полученная на выходе Алгоритма зашифрованная строка (ЗСТР), будет каждый раз совершенно разная.

Для метода хеширования SHA-2 (SHA-256/224) криптостойкость Алгоритма возрастает до 1077.

ЗСТР может передаваться по открытым каналам связи и не требует дополнительных секретных протоколов.

2. Термины и определения
СКЛ — состоит из набора шестнадцатиричных чисел и формируется передающей стороной для каждого сообщения случайным образом. Длина СКЛ зависит от конкретной реализации Алгоритма и устанавливается только исходя из разумных предположений. Например, если далее будет использовано MD5-хеширование, то СКЛ меньше 16-ти символов может сказаться на криптостойкости, а более 32-х символов — уже нецелесообразно.

КС — кодовое слово, которое известно только принимающей и передающей стороне. Главная его особенность — оно должно передаваться по независимым (другим) каналам связи. Например, если для передачи данных используется сеть Интернет, то КС передаём через GSM-канал.

НГР — номер группы. Данные (ВД) разбиваются на группы по длине хеш-маски. Например, если далее будет использовано MD5-хеширование, то длина группы будет равна 32 байтам. Считаем, что ВД представлены в шестнадцатиричном виде, тогда общее число групп можно получить разделив длину ВД на 32 и округлив полученное число. Первой группе присваиваем номер «0», второй — «1» и т.д.

3. Описание алгоритма шифрования данных
3.1  Формируем СКЛ — набор случайных шестнадцатиричных чисел.

3.2  Для первой группы ВД получаем хеш склеивая СКЛ, КС и «0» — номер группы. Маскируем данные этой группы методом [1]. Аналогично, для второй группы получаем хеш склеивая СКЛ, КС и «1», маскируем данные. И т.д.

3.3  Склеиваем СКЛ и замаскированные данные всех групп в строку (ЗСТР), которую уже можем передавать по открытым каналам связи.

4. Описание алгоритма дешифрования данных
4.1  Из полученной ЗСТР отделяем СКЛ длина которого известна. Оставшиеся данные разбиваем на группы.

4.2  Для первой группы данных получаем хеш склеивая СКЛ, КС и «0» — номер группы. Демаскируем данные этой группы методом [2]. Аналогично, для второй группы получаем хеш склеивая СКЛ, КС и «1», демаскируем данные. И т.д.

4.3  Склеиваем демаскированные данные всех групп и получаем первоначальные ВД из п.3.

Реализация алгоритма  |  Ещё одна реализация алгоритма

[1]  Мы будем использовать достаточно простой и быстрый алгоритм маскирования. Он основан на сложении двух шестнадцатиразрядных чисел после которого остаётся один самый младший разряд, например: A+5=F C+6=2. В результате преобразования получаем Строку FA2E9, длина которой равна длине ВД. Пример алгебраического преобразования приведен на рис.1, где ВД равны ABCDE, а ХМС равен 5F61B.

Пример алгебраического преобразования
Рис.1

[2]  Все операции обратны действиям в примере из [1]. Нужно из значения элемента данных вычесть значение элемента ХМС методом дополнения. Т.е. если первое число меньше другого, то к получаемой разности прибавляется число, соответствующее системе счисления (например для шестнадцатеричной системы счисления — это 16).

Пример обратного алгебраического преобразования
Рис.2

Горчилин Вячеслав, 2014 г.
* Перепечатка статьи или реализация алгоритма возможны с условием установки ссылки на сайт и соблюдением авторских прав

« Назад
2009-2017 © Vyacheslav Gorchilin