Кривель И.А.*, Моргун А.Н.**

*Киевский национальный университет технологий и дизайна, Украина;

**Черкасский институт пожарной безопасности, Украина

К вопросу о хэшировании сообщений

В соответствии с [1], хэш-функцией h(m) в криптографии называется некоторый алгоритм, в результате применения которого исходное сообщение m произвольной длины преобразуется в последовательность фиксированного числа байт. Одно из основных применений хэш-функции состоит в образовании сжатого образа данного сообщения, используемого для его цифровой подписи.

Хэш-функция должна быть стойкой как в смысле её обращения, так и в смысле возникновения коллизий при её вычислении. Первое из указанных требований означает, что по известному значению хэш-функции h(m) должно быть невозможно (достаточно сложно) определить значение её аргумента m. В соответствии со вторым требованием, для данного аргумента m должно быть невозможно (достаточно маловероятно) найти другой аргумент m1 такой, что h(m) = h(m1).

Интересные возможности построения хэш-функции для числовых данных предоставляет двоичное дерево Штерна-Броко [2], содержащее в качестве вершин рациональные числа в виде неотрицательных несократимых дробей.

Построению двоичного дерева Штерна-Броко (дерево SHB) предшествует получение последовательности Штерна-Броко. Рассмотрим стартовую последовательность двух дробей 0/1 и 1/0. Новую дробь 1/1 образуем, сложив числители и знаменатели стартовых. В новой последовательности 0/1, 1/1, 1/0 рассматриваем все соседние пары и вставляем в неё очередные дроби по тому же принципу. Получаем последовательность 0/1, 1/2, 1/1, 2/1, 1/0. На следующем этапе последовательность приобретает вид 0/1, 1/3, 1/2, 2/3, 1/1, 3/2, 2/1, 3/1, 1/0. Описанный процесс можно продолжать бесконечно.

Дроби последовательности можно расположить на двоичном дереве SHB, которое для удобства обозрения представлено в виде нижеследующей таблицы. При этом вершину 1/1 будем считать корнем.

Основное свойство дерева SHB состоит в том, что в нём представлены все рациональные числа, причём каждое – только один раз. Пронумеруем вершины дерева, начиная от корня и обозначая нулями перемещения по левым ветвям, а единицами – по правым. Например, дробь 2/3 будет иметь двоичный номер 01, а дробь 3/1 – двоичный номер 11, дробь 2/5 – двоичный номер 001, дробь 5/3 – двоичный номер 101 и т.д. Таким образом, мы получили возможность сопоставлять двум числам (числителю и знаменателю дроби) одно число – номер дроби.

0/1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1/0

 

 

 

 

 

 

 

 

1/1

 

 

 

 

 

 

 

 

 

 

 

 

1/2

 

 

 

 

 

 

 

2/1

 

 

 

 

 

 

1/3

 

 

 

2/3

 

 

 

3/2

 

 

 

3/1

 

 

 

1/4

 

2/5

 

3/5

 

3/4

 

4/3

 

5/3

 

5/2

 

4/1

 

Одно из свойств такого сопоставления состоит в том, что номера некоторых дробей имеют в своём составе ведущие нули. В результате этого численно равные номера могут соответствовать разным дробям. Например, номера дробей 2/3 и 2/5 имеют численно равные представления 01 и 001 соответственно, дроби 3/1 и 3/4 также имеют численно равные номера 11 и 011. Благодаря этому становится невозможным однозначное обратное сопоставление и таким образом обеспечивается требование стойкости хэш-функции в смысле её обращения.

В приведённых примерах обращает на себя внимание то, что дробь не имеет в составе своего двоичного номера ведущих нулей тогда, когда её числитель больше знаменателя, то есть дробь – неправильная. Все неправильные дроби содержатся только в правом поддереве дерева SHB.

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

Дробь

Номер дроби

Десятичное представление номера

3/1

11

3

5/3

101

5

7/3

1100

12

11/7

10100

20

14/5

110111

55

Данная таблица показывет, как двум десятичным числам (числителю и знаменателю дроби) сопоставляется одно десятичное число (номер дроби в десятичном представлении). При этом суммарное количество разрядов двоичных представлений числителя и знаменателя оказывается больше количества разрядов двоичного номера. Например, компоненты дроби 11/7 имеют двоичные представления 1011 и 111 соответственно, что составляет в сумме 7 двоичных разрядов. А вот двоичное представление номера этой дроби 10100 содержит всего 5 двоичных разрядов. 

На возможности сопоставить двум десятичным числам одно с меньшим количеством разрядов двоичного представления и базируется алгоритм хэш-функции на основе двоичного дерева Штерна-Броко.

Некоторое сообщение представляется в виде последовательности целых десятичных чисел. Теоретически это всегда возможно, если использовать, например, таблицу кодов ASCII. Каждая пара соседних чисел, рассматриваемая как числитель и знаменатель некоторой дроби, заменяется одним числом. Во вновь образованной последовательности чисел каждая пара соседей снова рассматривается как дробь и также заменяется одним числом. Процесс продолжается до тех пор, пока таким образом не будет получено единственное число с нужным числом разрядов. Именно это число и рассматривается как значение хэш-функции данного сообщения.

Пример применения рассмотренной хэш-функции приведён в таблице, каждая строка которой представляет собой постепенно сжимаемое исходное сообщение, содержащее изначально 16 чисел.

7

4

5

4

5

3

3

1

8

5

4

1

4

1

3

1

11

8

5

3

10

7

7

3

18

5

19

12

58

41

307

Каждая пара соседних чисел некоторого исходного сообщения (первая строка таблицы) рассматривается как дробь, которой сопоставляется её двоичный номер. Полученный номер преобразуется в десятичное число. Процесс продолжается до получения единственного числа, которое следует рассматривать как значение хэш-функции данного сообщения. Например, воспользовавшись второй из приведённых программ, для дроби 7/4 получим двоичный номер 1011, что соответствует десятичному числу 11. Для следующей дроби 5/4 двоичный номер равен 1000, что соответствует десятичному числу 8. В свою очередь, для дроби 11/8 получим номер 10010, что равно 18, и т.д. В последней строке таблицы находится значение хэш-функции, равное десятичному числу 307.

Литература

1. Гундарь К.Ю., Гундарь А.Ю., Янишевский Д.А. Защита информации в компьютерных системах – К.: “Корнейчук”, 2000.

2. Грэхем Р., Кнут Д., Паташник О. Конкретная математика. Основание информатики ­– М.: Мир, 1998.