УДК 004.021
Гапанович Д.А., Чубариков В.Н.
Московский! государственный! университет имени М.В. Ломоносова, г. Москва, Россия
ХЭШ-АЛГОРИТМ С УПРАВЛЯЮЩЕЙ ДРЕВОВИДНОЙ СТРУКТУРОЙ И МЕТОД ЕГО РЕАЛИЗАЦИИ НА ПАРАЛЛЕЛЬНЫХ АРХИТЕКТУРАХ
Аннотация
Статья посвящена исследованию и разработке новых методов хэширования, обладающих возможностью адаптации к повышенным требованиям криптостойкости, а также поддерживающих распараллеливание вычислений, что особенно важно для ускорения вычисления хэш-значений больших и сверх больших файлов, и отражает тенденцию все более широкого распространения вычислительных архитектур с высокой степенью параллелизма. В работе предложен оригинальный метод построения хэш-алгоритма на основе древовидных управляющих структур, а также метод реализации предложенного хэш-алгоритма на параллельных архитектурах по технологии MapReduce.
Ключевые слова
Хэширование; хэш-функции; хэш-алгоритмы; криптографические хэш-алгоритмы; двоичные деревья; управляющие древовидные структуры; схема вычислений MapReduce; параллельные вычисления.
Gapanovich D.A., Chubarikov V.N.
Lomonosov Moscow State University, Moscow, Russia
HASH ALGORITHM WITH THE CONTROLLING TREE-LIKE STRUCTURE AND THE METHOD OF ITS IMPLEMENTATION ON PARALLEL ARCHITECTURES
Abstract
The article is devoted to research and development of new hashing methods that have the ability to adapt to increased requirements for cryptographic stability, and also support parallelization of computations, which is especially important for accelerating the computation of hash values of large and super large files and reflects the trend of increasingly widespreading computational architectures with a high degree of parallelisation . An original method for constructing a hash algorithm based on tree-like control structures is proposed, as well as a method for implementing the proposed hash algorithm on parallel architectures using MapReduce technology.
Keywords
Hashing; hash functions; hash algorithms; cryptographic hash algorithms; binary trees; control tree structures; MapReduce calculation scheme; parallel computations.
1. Введение
Хэширование является широко используемым в информатике и программировании
алгоритмическим решением для оптимизации важнейших операции с данными, таких, как, например, поиск данных в больших информационных массивах, реорганизация информационных массивов, манипулирование с файлами в операционных системах, персонализация данных с целью обеспечение их целостности.
Область применения механизма хэширования чрезвычайно обширна — это реализация
словарных систем, построение индексов в базах данных, построение таблиц имен в компиляторах, ускорение работы с файлами в операционных системах, организация списков ссылок в браузерах, организация словарей в программах переводчиках с одного языка на другои, конструирование электронных подписей электронных документов, реализация базовых операции в системах анализа больших данных и системах принятия решении и т.д.
Механизм хэширования был разработан в 50-х годах XX века, и однои из первых областей его применения стало решение «проблемы словаря». В
числе первопроходцев, опубликовавших свои методы хэширования в открытой печати, называются [1, 2]: Ханс Петер Лун (нем. Hans Peter Luhn) — сотрудник фирмы IBM, в 1953 г. предложивший идею «хэш-кодирования»; Арнольд Думи (англ. Arnold Dumey), в своеи пионерской работе «Computers and automation» первым описавшии метод хэширования применительно к построению словареи в том виде, в каком он известен и в наше время, и предложивший также использовать в качестве «хэш-адреса» остаток от деления на простое число; Уэсли Питерсон (англ. W. Wesley Peterson), которьш в 1957 г. в журнале «IBM Journal of Research and Development» опубликовал статью о поиске текста в больших фаилах, где исследовал возможности хэширования и предложил метод «открытой адресации», и т.д. Среди отечественных ученых, участвовавших в развитии методов хэширования на начальных этапах его становления, следует назвать академика А.П. Ершова, независимо
разработавшего в 1957 г. метод открытой адресации [2].
Особенно интенсивное развитие методов хэширования осуществлялось в 80-90 гг. 20-го столетия в связи с масштабными разработками в таких областях системного программирования, как операционные системы, компиляторы языков программирования, базы данных и, конечно же, в области информационной безопасности.
В этот период Дональд Кнут [2] особенно выделял как важное практическое открытие хэш-метод, предложенный Witold Litwin и получивший название линейным хэшированием, а также ряд сложных методов, гарантирующих время выполнения операторов поиска и вставки данных (ключеи) в информационные массивы со средним временем 0(1) независимо от размера ключа.
Исследование и разработка новых методов хэширования с учетом быстрого развития области информационных технологии и, в том числе, новых вычислительных архитектур с высокой степенью параллелизма, представляет собои актуальную задачу.
В даннои работе предложен оригинальный метод построения хэш-алгоритма на основе древовидных управляющих структур, а также метод реализации предложенного хэш-алгоритма на параллельных архитектурах по технологии MapReduce.
2. Хэш-функции и их свойства
Идея метода хэширования состоит в разбиении (потенциально неконечного) множества ключеи А (символьных строк или, возможно, абстрактных типов данных, таких как, например, записи фаилов) на конечное число В классов, пронумерованных от 0 до ( В-1 ) с помощью хэш-функции h (z ), отображающей любои ключ
(объект) г из А в целочисленное значение, принадлежащее отрезку [0,...,В — 1] . Число Ь (г), называемое хэш-значением z, ассоциируется с номером "класса", и, самое главное, это число в контексте некоторым образом организованной модели данных может почти биективно (с точностью до коллизии) соответствовать исходному объекту и использоваться вместо этого объекта в операторах/операциях
манипулирования данными, существенно ускоряя их исполнение. А при использовании в приложениях информационной безопасности играть роль дайджеста или «отпечатков пальцев» фаила, сообщения или некоторого блока данных.
Однако эффективность работы хэш-механизма зависит прежде всего от того, насколько удачно построена для него хэш-функция. Таким образом, не каждая функция вида f: 0—(В —1)] применима в хэшировании.
Процитируем наиболее распространенные определения хэш-функции.
Определение 1 [1]. Хэш-функцией называется такое математическое или алгоритмическое преобразование заданного блока данных, которое обладает следующими свойствами:
1. хэш-функция имеет бесконечную область определения,
2. хэш-функция имеет конечную область значении,
3. она необратима,
4. изменение входного потока информации на один бит меняет около половины всех бит выходного потока, то есть результата хэш-функции.
Определение 2 [3]. Пусть задано некоторое входное сообщение М. Хэш-функцией (или функцией сгущения, или контрольной функциеи) называется легко вычислимое необратимое числовое отображение Ь (М) , ставящее в соответствие сообщению М некоторое «короткое» сообщение Ь (М) . Другими словами, хэш-функцией называется любая функция у=^х_1 х_2 ... х_п), которая сообщению
х=х_1х_2...х_п произвольной длины п ставит в соответствие целое число «у» фиксированной длины (х_/ - текстовое представление /-го элемента сообщения вместо традиционного с нижним индексом).
Определение 3 [4]: Хэш-функцией называется односторонняя функция, предназначенная для получения дайджеста или «отпечатков пальцев» фаила, сообщения или некоторого блока данных.
Хэш-код создается функциеи Н: Ь= Н(М) ,
где М является сообщением произвольной длины и Ь является хэш-кодом фиксированной длины.
Опыт использования данного механизма и его теоретические исследования позволили выявить наиболее важные и полезные свойства хэш-
функции. При этом свойства хэш-функции могут отражать и специфические требования со стороны приложении, в которых они используются.
Так, например, широкое применение механизм хэширования получил в криптографии и в приложениях информационной безопасности. Хэш-функции, применяемые в этои сфере, часто называют криптографическими, и им приписываются дополнительные свойства с учетом интересов области использования.
Для таких хэш-функции сформулированы следующие наборы требовании с учетом требовании к их криптостоикости, которые мы и рассмотрим.
В [1] определяются три основных требования, на которых основано большинство применении хэш-функции в криптографии:
1) Необратимость или стойкость к восстановлению прообраза: для заданного значения хэш-функции m не должен быть вычислен блок данных X, для которого Н(X) = т .
2) Стойкость к коллизиям первого рода или восстановлению вторых прообразов: для заданного сообщения М должно быть вычислительно невозможно подобрать другое сообщение N, для которого Н(N) = Н(М) .
3) Стойкость к коллизиям второго рода: должно быть вычислительно невозможно подобрать пару сообщении ДО M'), имеющих одинаковый хэш.
Для криптографических хэш-функции также важно, чтобы при малых изменениях аргумента значение функции сильно изменялось (лавинньш эффект), т.е. значение хэша не должно давать утечки информации даже об отдельных битах аргумента. Это требование необходимо для обеспечения криптостоикости алгоритмов хэширования пользовательских паролей для получения ключеи.
В работе [3] свойства криптографических хэш-функции определены с помощью следующих требовании:
1) Для любого заданного х из Л значение функции у=Ь (х) должно вычисляться достаточно «легко» и «быстро».
2) Для любого « х » практически невозможно наити «у» такое, что у=Ь (х).
3) Для любого сообщения « х » практически невозможно наити « х '» такое, что х'гх и й(У)=й(х).
4) Практически невозможно наити пару различных сообщении х и х' таких, что й(х>й(х).
В работе [4] требования к хэш-функциям сформулированы следующим образом.
1) Хэш-функция должна быть применима к любому блоку данных любои длины.
2) Хэш-функция создает выход фиксированной длины.
3) Н (М) - вычислимо за полиномиальное время относительно длины сообщения М.
4) для любого данного значения хэш-кода h вычислительно невозможно наити М такое, что Н (М ) = И .
5) Для любого данного сообщения х вычислительно невозможно наити у^х такое, что Н(У)= Н (х).
6) Вычислительно невозможно наити пару (х,у) такую, что Н(у) = Н(х).
Остановимся на последнем наборе требовании
[4].
Первые три требования предписывают, чтобы хэш-функция достаточно легко (не более чем за полиномиальное время относительно длины сообщения) вычисляла хэш-код для сообщения любои длины.
Четвертое свойство означает, что хэш-функция должна обладать свойством односторонности, т.е. при том, что с помощью ее вычисления легко получить хэш-код для данного сообщения, решить обратную задачу - восстановить сообщение по хэш-коду в вычислительном плане было практически невозможно.
Данное свойство необходимо, если для аутентификации исходного сообщения М применяется хэш-значение, используемое вместе с секретным значением исходного сообщения.
Пятое свойство гарантирует невозможность наити или построить другое сообщение, значение хэш-функции которого совпадало бы со значением хэш-функции данного сообщения, что предотвращает подделку сообщения, когда в качестве аутентификатора используется защищенный от изменения хэш-код.
Хэш-функция, которая удовлетворяет первым пяти свойствам, называется простой или слабои хэш-функциеи. Если кроме того выполняется шестое свойство, то такая функция называется сильной хэш-функциеи.
Шестое свойство защищает против класса атак, известных как атака «день рождения» [4].
Атака «днеи рождения» позволяет находить коллизии для хэш-функции с длинои значении п бит в среднем за примерно 2(п'2) вычислении хэш-функции. Поэтому п-битная хэш-функция считается криптостоикои, если вычислительная сложность нахождения коллизии для нее близка к 2("/2)
(Парадокс «днеи рождения» состоит в противоречии интуитивного восприятия человеком с результатом математического расчета вероятности того, что в группе из 23 или более человек, хотя бы у двух из них дни рождения (число и месяц) совпадут, превышает 50%, а для 60 человек - более 99%. Это может показаться противоречащим здравому смыслу, так как вероятность родиться человеку в определенный день года мала (1/365), а вероятность того, что двое родились в конкретный день — еще меньше, но является верным в соответствии с теорией
вероятностей Подробнее этот вопрос описан в работе по адресу -
http://ru.wikipedia.org/wiki/Парадокс_днеИ_рожде ния).
Все рассмотренные выше наборы требовании к хэш-функциям равносильны и приводят к теории односторонних функции [3].
3. Подход к построению хэш-функций
Существует большое разнообразие хэш-функции, и исследования в этои области продолжаются. Широкое использование при разработке хэш-функции получили итерационные методы. Типичная итеративная последовательная схема построения хэш-функции [5] описана ниже.
В качестве ядра итеративного алгоритма выбирается сжимающая функция / (или функция свертки), которая преобразует k входных бит в п выходных бит, где п — разрядность хэш-функции, а k — произвольное число, большее п. При этом сжимающая функция должна удовлетворять всем условиям криптостоикости, описанным выше для хэш-функции.
Далее входные данные рассматриваются как последовательность (поток) блоков
фиксированной длины, равнои (к — п) бит. Итеративный алгоритм использует для хранения результатов итерации рабочую переменную размером в п бит. Этои переменной перед выполнением первои итерации в качестве начального значения присваивается некоторое общеизвестное число. На каждои итерации исполняется следующая последовательность деиствии:
- выбирается следующий за текущим блок данных,
- формируется конкатенация этого блока с выходным значением сжимающей функции на предыдущем шаге итерации,
- вычисляется п-битное значение хэш-функции текущеи итерации.
Работа итерационного алгоритма
иллюстрируется на рис. 1.
Заметим, что описанная выше схема вычисления хэш-значения позволяет реализовать упомянутый выше лавинньш эффект, т.е. обеспечить зависимость каждого бита значения хэш-функции от всего входного потока данных и, естественно, начального значения итерационного алгоритма.
Заметим также, что при реализации хэш-функции на основе итеративного алгоритма предполагается, что размер входного потока данных должен быть кратен (к — п) . Естественно, что данное ограничение легко снимается посредством расширения исходного потока данных необходимым числом бит некоторым заранее известным способом.
Описанная выше итерационная схема в
литературе называется также конструкцией Меркла-Дамгарда. Она используется в таких известных хэш-функциях, как MD5, SHA-1, SHA-2. Широкую популярность схема приобрела после того, как было доказано, что устойчивость к коллизиям всеи конструкции зависит только от устойчивости к коллизиям функции сжатия (или функция свертки).
Входной поток
¿1
Рис.1. Схема работы итерационного алгоритма
4. Проектирование хэш-функции
специального вида
В разделе 4 была рассмотрена типовая итерационная схема построения хэш-функции, называемая также конструкцией Меркла-Дамгарда, которая получила широкое использование на практике и, в частности, при разработке таких известных хэш-функциях, как MD5, SHA-1, SHA-2.
Впоследствии было показано, что данная конструкция обладает некоторыми недостатками, связанными с множественными коллизиями, наличием остаточной статистической зависимости в данных, с уязвимостью для атак в силу предсказуемости структуры алгоритма, которые частично переносятся на все подобные схемы.
Еще одним недостатком хэш-решении, построенных на основе известных итерационной схем, является линеиныи характер вычисления.
Учитывая, что основной тенденцией развития вычислительных средств является создание вычислительных систем с высокой степенью параллелизма, включая систем с массовым параллелизмом, интересным представляется поиск моделеи вычисления хэш-функции, характеризующихся возможностью
распараллеливания вычислении, а также возможностью параметризации самои
управляющей схемы организации вычислении.
В поиске такого решения будем отталкиваться от вычислительной модели схемы Меркла-
Дамгарда, которую можно описать следующим образом.
На вход хэш-функции подаются данные, которые разбиваются на блоки одинаковой длины. В некоторых случаях при построении хэш-функции на основе рассматриваемой схемы, используется предварительная перестановка блоков для уменьшения статистической зависимости в исходных данных, которая биективно отображает исходную последовательность бит данных в другую последовательность.
Затем итеративно для каждого ¿-го блока данных (х_[) и хэш-значения й_{[-1} предыдущего блока (или инициализирующего хэш-значения) применяются функции свертки, как правило, односторонние функции. Такие преобразования можно обозначить функцией й_{[+1} = /(й_1, х_[), где - результат предыдущей итерации (или инициализирующее значение на первом шаге итерации), х_ - следующий блок данных, й_{[+1} -результат даннои итерации.
Графически это можно изобразить как на рис.2.
Н
Т.е. структуру алгоритма можно представить с помощью вырожденного дерева, определяющего порядок исполнения функциональных элементов дерева при его обходе снизу вверх слева направо.
Тогда в обобщенном виде схема вычисления хэш-функции будет представлять собои пару Н=<F,G> , где Р = {/_1, /_2, .../_к} - множество функциональных элементов (функции свертки), преобразующих два блока данных в промежуточное хэш-значение (в случае базовой схемы F состоит из одного элемента - {/}), а С -управляющее дерево, определяющее порядок вычисления функциональных элементов.
Учитывая тот факт, что применяемые в хэш-алгоритмах функции свертки, как правило, принимают на вход два блока данных (текущий блок входного фаила и промежуточное хэш-значение, полученное на предыдущей итерации) и продуцируют один, естественно попытаться описать процесс вычисления хэш-значения с помощью двоичнои иерархической структуры, осуществляющей свертку входного фаила к вершине дерева-хэш-значению.
В этои интерпретации листьям такого дерева будут соответствовать блоки входного фаила, а остальным узлам дерева, кроме вершины -промежуточные значения применения функции свертки к узлам на предыдущем уровне. Вершина
же фаила будет соответствовать итоговому хэш-значению фаила.
Тогда представление управляющей структуры хэш-алгоритма в виде двоичного дерева имело бы вид, показанный на рис. 3.
Я
Рис. 3. Пример управляющей структуры в виде двоичного дерева
Утверждение 1. Такая управляющая структура обладает следующими свойствами — это:
1) Возможность использования рекурсивных алгоритмов обхода дерева вычислении хэш-значении без реального развертывания самои древовидной структуры и хранения ее в памяти.
2) Относительно небольшая высота дерева, пропорциональная log2(n) , где п - количество блоков разбиения исходных данных.
3) Очевидная независимость конечного результата от выбранного маршрута обхода узлов дерева.
4) Независимость вычисления поддеревьев, что несет в себе значительный потенциал для применения методов распараллеливания вычислении.
5) При вычислении хэш-значения посредством линейного и бинарного древовидного порядков количество применении функции свертки одинаково.
Тогда базовая схема вычисления хэш-значении, соответствующая предлагаемому методу, будет состоять из следующих шагов:
1. Начальная обработка входных данных, включая определение длины входного фаила в блоках, заполнение при необходимости последнего блока фаила последовательностью бит до полноразмерного блока.
2. Генерация управляющей структуры в виде двоичного дерева. Такую генерацию можно назвать виртуальной так как само дерево не разворачивается в памяти, а моделируется программным способом рекурсивным алгоритмом обхода узлов дерева, которые создаются и редуцируются динамически в процессе их обработки.
3. Обход узлов дерева с помощью выбранного алгоритма обхода и применение функции свертки к данным, соответствующим пройденным узлам-аргументам для получения (промежуточного) хэш-значения и сохранения его в данном узле для использования на более высоком уровне
обработки дерева.
4. Выполнение функции финализации, применяемой к корню дерева.
Базовая схема вычисления хэш-значении может быть расширена с помощью введения следующих дополнительных преобразовании:
1) Начальная перестановка блоков.
2) Выбор функции свертки из некоторого конечного набора функции.
3) Выбор типа дерева.
4) Выбор стратегии и алгоритма обхода дерева, а также способа хранения промежуточных значении.
5) Добавление блоков с мета-данными, например, размером фаила.
6) Инициализация начальных значении алгоритма константами или посредством алгоритмических деиствии.
7) Функция финализации, обеспечивающая дополнительное перемешивание результата для создания лавинного эффекта.
Рассмотрим работу описанной базовой схемы на примере.
Предварительно введем следующие понятия.
Определение 4. Полное бинарное дерево уровня п - это дерево, в котором каждыи узел уровня п является листом и каждыи узел уровня меньше п имеет непустые правое и левое поддеревья.
Определение 5. Степенным бинарным деревом назовем дерево, у которого любое левое поддерево является полным по определению 4.
Пусть есть входнои фаил, разбитый последовательно на п блоков длины 1. Если размер последнего блока данных меньше 1, то недостающие биты доопределим заранее выбранным образом, например, блоком (0...01).
Для данного примера будем описывать управляющую структуру хэш-алгоритма в виде степенного бинарного дерева, листья которого будем интерпретировать как блоки данных входного фаила, обозначенные на рис. 3 как х_/.
Достоинством выбранного типа древа, как отмечалось, является возможность моделировать и интерпретировать такие деревья с помощью рекурсивных последовательных алгоритмов, т.е. без их реального развертывания в памяти вычислителей
На дереве такого типа выберем алгоритм обхода от левого листа к вершине так, что, если попадаем в некоторый узел, где значение на правом поддереве не вычислено, то сначала вычисляем значение этого поддерева с его левого листа, а затем выполняем вычисления для первоначального узла и продолжаем обход дерева до достижения ситуации, когда будет обработан корень дерева. В частности для рассматриваемого примера порядок обхода узлов показан на рисунке 4.
Рассмотрим характеристики выбраннои схемы.
1) Вычислительные:
а) хранение дерева в памяти не требуется, а реализуется рекурсивным алгоритмом обхода дерева;
б) количество применении функции свертки равно п-1 , т.е. не превышает число сверток в случае линейно реализации;
Рис. 4. Порядок операций при обходе дерева
в) требуемая память для хранения промежуточных значении пропорциональна высоте дерева ( п) , где п - количество блоков разбиения);
г) возможность параллелизма вычислении.
2) Характеристики безопасности:
а) при выборе функции свертки, обладающей хорошим параметром перемешивания данных, устраняется зависимость в данных в общем случае не хуже, чем в случае линеинои управляющей структуры;
б) при «обращении» хэша противником в случае линеинои управляющей структуры на каждои итерации будет получаться блок исходных данных, а в случае древовидной управляющей структуры для получения части исходных данных нужно «обратить» количество итерации, равное высоте поддерева, а если в качестве управляющего дерева использовать деревья, построенные на основе псевдослучайной последовательности, то противник, получив блок исходных данных, даже не будет знать, что он получил.
Рассмотрим характеристики безопасности подробнее:
Устранение зависимостей в данных при линеинои управляющей структуре достигается с помощью начальной перестановки блоков и устройством используемой функции свертки. Последнее, зачастую, увеличивает время выполнения алгоритма, если устранение зависимостей достигается более сложными вычислениями или большим количеством операции/повторении (раундов).
При использовании древовидной управляющей структуры дополнительным фактором
перемешивания служит разнообразие вариантов наборов аргументов для функции свертки, т.е. не только результат предыдущей итерации и следующего блока исходных данных, но и применение функции свертки и к промежуточным
значениям разных поддеревьев, и к исходным данным.
Теперь рассмотрим криптографическую устойчивость. Как уже было сказано, при линейном варианте противник после каждои итерации получает блок исходных данных, а при древовидной управляющей структуре - не всегда. Также выше были упомянуты "псевдослучайные" деревья, построенные на основе псевдослучайной последовательности. Они обеспечат
дополнительный уровень криптографической безопасности в задачах, где требуется проверить подлинность и целостность большого фрагмента данных, передаваемых через открытый информационный канал между пользователями, если для генерации последовательности использовать разделяемый ими секретный ключ.
Важно отметить, что данныи подход легко обобщается на случаи к-деревьев, т.е. деревьев, каждыи неконечныи узел которого имеет к исходящих ребер, при этом все сформулированные утверждения для двоичных деревьев переносятся и на случаи к- деревьев.
Как уже отмечалось, еще одним достоинством представления управляющих структур хэш-алгоритмов в виде дерева является независимость итогового результата вычисления хэш-значения от порядка свертывания поддеревьев, что обусловливает возможность использовать методы параллельных вычислении для сокращения времени получения результата. В следующем разделе показан один из возможных методов вычисления хэш-значении с использованием параллельных архитектур.
5. Метод реализации хэш-алгоритма с древовидной управляющей структурой на параллельных архитектурах
Вычисление хэш-значении для массивных и сверхмассивных файлов требует больших объемов вычислении. Естественно, что использование технологии параллельных вычислении даст возможность существенно сократить время вычисления хэш-значении для файлов большого размера. Однако анализ используемых на практике алгоритмов хэширования показывает, что все они построены для реализации с помощью последовательных схем вычисления.
Введенная выше модель хэш-алгоритмов с разделением элементов функциональных преобразовании и логики/схемы управления порядком вычислении, реализуемой с помощью древовидной управляющей структуры,
предоставляет возможность построения алгоритмов, допускающих применение методов многопоточных вычислении.
Рассмотрим основную идею метода распараллеливания вычисления хэш-значении для предложенного выше подхода, в котором
управляющая структура вычислении задается степенными двоичными деревьями.
Общии подход предлагаемого метода включает следующие шаги.
1) Разбиение исходного фаила на q порции так, чтобы q * 2Тк + г = п, где п - количество блоков в исходном фаиле, q - число предполагаемых независимых задач, к>1, 2Тк - размер порции, определяющий объем работы для однои задачи, которому соответствует поддерево высотой к с 2Тк листьями-блоками (полное бинарное дерево из определения 7.4), а г, 0<г=<2Тк - оставшиеся кусок данных, обрабатываемый (д+1)-ои задачей (заданнои степенным деревом с г листьями из определения 7.5). Размер порции фаила может определяться, исходя из ресурсных возможностей вычислительной платформы, например, числа доступных вычислительных узлов или размера локальнои памяти узла для загрузки в нее целиком порции фаила.
2) Независимое исполнение (^+1) задачи (на независимых рабочих процессах/вычислительных узлах), что равносильно свертке управляющего дерева («обрезанию» снизу ветвеи высотой к) к его верхушке-поддереву, т.е. степенному дереву с (^+1) листом, где каждыи лист верхушки соответствует промежуточному хэш-значению, полученному в результате свертки исходящей из него ранее ветви высотои к.
3) Если число полученных (^+1) блоков (промежуточных хэш-значении) больше размера порции из 2Тк блоков при начальном разбиении, то следует продолжить процесс параллельной редукции верхушки, повторяя пункт 1 для набора (фаила) из (^+1) промежуточных хэш-значении (блоков).
4) Вычисление верхушки дерева на родительском процессе и выполнение функции финализации для получения конечного хэш-значения.
Данныи метод легко реализуется в среде схемы MapReduce [6] следующим образом:
1) (^+1) задач вычисления поддеревьев размером 2Тк из метода выше будут соответствовать q тар-задачам (задачам-распределителям), которые будут назначаться мастер-процессом на вычислительные элементы (рабочие процессы).
2) Результатом выполнения задач-распределителей будет выходнои фаил с промежуточными хэш-значениями.
3) Формирование задачи-редуктора для свертки промежуточных значении (верхушки дерева) к итоговому значению хэш-кода фаила.
Следует отметить, что возможны разнообразные модификации базового алгоритма с целью улучшения его характеристик (повышение степени криптостоикости, усиление лавинного эффекта, снижение времени вычислении хэш-
значения).
В заключение оценим время выполнения хэш-алгоритма по определенному выше методу. Пусть L - размер файла в битах, I - размер блока данных в битах, а p - количество выполняемых параллельно задач. Тогда п = L/1 - количество блоков разбиения фаила.
Пусть т - время выполнения однои функции свертки, а t - время, требуемое на организацию вычислении, связанных с алгоритмом обхода для одного узла. Заметим, что т >> t.
Тогда время Т вычисления хэш-значения будет оцениваться следующим образом:
1) Линеиныи вариант: Т ~ (п - 1) х т (в случае без инициализирующего хэш-значения, иначе -(п х т)).
2) Древовидная схема управления: Т ~ (п/p - 1) х т + (p - 1) х т + (п - 1) х t,
где
(п/р-1)хт - время свертки поддерева обработки однои порции фаила;
(p-1) х т - время свертки верхушки дерева;
(п-1^ - время, требуемое на вычисления, связанные с обходом дерева.
6. Заключение
В представленной работе рассмотрен оригинальный метод построения хэш-функции на основе разделения функциональных элементов хэш-алгоритма и его схемы управления в виде древовидной структуры. Достоинством такого подхода является возможность распараллеливания вычислении хэш-значении и, как следствие, значительного ускорения реализации хэш-алгоритмов на параллельных вычислительных архитектурах, а также гибкость в выборе способов смешивания исходных и промежуточных блоков данных для нивелирования статистических зависимостей в исходных данных. При этом важно отметить, что эти возможности обеспечиваются при относительно небольших накладных расходах на реализацию древовидной схемы управления. Для данного метода приведены временные оценки выполнения. Также предложен способ реализации предложенного хэш-алгоритма на параллельных архитектурах по схеме технологии MapReduce.
Представляется, что данньш подход имеет перспективу использования на практике и заслуживает дальнейших исследовании его возможностей
Литература
1. https://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD % D0%B8%D0%B5,
2. Donald Knuth The Art of Computer Programming, vol.3. Sorting and Searching. — P. 824. — ISBN 0-201-89685-0.
3. Mineev M.P., Chubarikov V.N. Lectures on arithmetic questions of cryptography. - Moscow. Scientific and Publishing Center «Ray», 2014. - 224p.
4. Laponina. O.R. Fundamentals of network security. Cryptographic algorithms and protocols of interaction. Lecture course. Tutorial. -Internet University of Information Technologies. 2005, 608 p.
5. Peterson W.W., Weldon E.J. Error-Correcting Codes, Pub. "Peace", Moscow, 1976, 595 p.
6. Rajaraman A., Leskovec J., Ullman J.D. Mining of Massive datasets. Moscow, DMK Press, 2016. - 498 p.
References
1. https://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD %D0%B8%D0%B5,
2. Donald Knuth The Art of Computer Programming, vol.3. Sorting and Searching. — P. 824. — ISBN 0-201-89685-0.
3. Mineev M.P., Chubarikov V.N. Lectures on arithmetic questions of cryptography. - Moscow. Scientific and Publishing Center «Ray», 2014. - 224p.
4. Laponina. O.R. Fundamentals of network security. Cryptographic algorithms and protocols of interaction. Lecture course. Tutorial. -Internet University of Information Technologies. 2005, 608 p.
5. Peterson W.W., Weldon E.J. Error-Correcting Codes, Pub. "Peace", Moscow, 1976, 595 p.
6. Rajaraman A., Leskovec J., Ullman J.D. Mining of Massive datasets. Moscow, DMK Press, 2016. - 498 p.
Поступила 28.04.2017 г.
Об авторах:
Гапанович Дмитрий Антонович, студент механико-математического факультета, Московский
государственный университет имени М.В. Ломоносова, [email protected] Чубариков Владимир Николаевич, доктор физико-математических наук, профессор, декан механико-математического факультета, Московский государственный университет имени М.В. Ломоносова, [email protected]
Note on the authors:
Gapanovich Dmitry, student of Faculty of Mechanics and Mathematics, Lomonosov Moscow State University, [email protected]
Chubarikov Vladimir, Doctor of Physical and Mathematical Sciences, Professor, Dean of the Faculty of Mechanics and Mathematics, Lomonosov Moscow State University, [email protected]