SHABAL — алгоритм криптографического хеширования. Является одним из участников конкурса SHA-3, который проводится Национальным институтом стандартов и технологий, объявление окончательных результатов и победителя запланировано на 2012 год[1]. Был представлен на конкурс исследовательским проектом «Сапфир» (Saphir: Security and Analysis of Hash Primitives), спонсором которого является Французское исследовательское агентство (ANR), а главной организацией — France Telecom.
Авторы алгоритма: Эммануэль Брессон, Анна Кантеоут, Беноит Шевалье-Мамес, Кристоф Клавьер, Томас Фухр, Алина Гоуджет, Томас Икарт, Жен-Франсуа Мисарски, Мария Ная-Пласенкия, Паскаль Пайлер, Томас Порнини, Жан-Рене Рейнхард, Селина Тьюлльет, Марион Видеау.
Алгоритм, по утверждению авторов, назван в честь «Себастьяна Шабала, французского игрока регби, известного агрессивным стилем игры, а также бородой и длинными волосами, за которые ему дали кличку „Пещерный человек“ (Caveman)»[2].
По утверждению разработчиков, SHABAL является одним из самых быстрых кандидатов конкурса SHA-3.[3]
SHABAL может принимать на вход битовые последовательности любой длины, однако криптографическая стойкость для сообщений с длиной более, чем бит, не гарантируется.
Принцип работы
SHABAL называется SHABAL-512 , SHABAL-384, SHABAL-256, SHABAL-224, SHABAL-192 в зависимости от длины получаемого хэша , соответственно равного 512, 384, 256, 224, 192 бит.
После того как на вход алгоритма приходит битовая последовательность, она разбивается на блоки по 512 бит вне зависимости от используемой вариации SHABAL (SHABAL-512, SHABAL-384 и т. д.). Отметим, что размер блока кратен 32. К последнему блоку, если его битовая длина не равна 512 битам, приписывается одна битовая единица и необходимое число нулей для достижения заданного размера блока.
При вычислении хеш-функции используется буфер, поделенный на три части , где и и — это длины буферов , и соответственно. Также используется вспомогательный буфер W размером в 64 бита, который является счетчиком номера блока. Длины буферов и равны , где — это длина блока на которые разбивается поданное на вход сообщение.
SHABAL обладает двумя настраиваемыми параметрами и . Длина буфера определяется через , а именно . Параметр — количество раундов в преобразовании , чем больше это значение, тем гарантируется большая безопасность. Заявленный на конкурс алгоритм SHABAL строго определяет
SHABAL — итеративный алгоритм. Количество повторений равно количеству блоков исходной битовой последовательности плюс две итерации на добавляемые в начало сообщения блоки (подробнее об этих двух блоках написано в описании работы алгоритма по шагам), плюс ещё три финальные итерации. На каждой итерации происходит преобразование . При каждом повторении кроме трех финальных число, хранимое в , увеличивается на 1, то есть как уже упоминалось — это счетчик.
Действие алгоритма по шагам
Отметим, что операции суммирования и вычитания далее производятся в пределах слов (то есть 4-байтовых блоков) и без переноса.
Инициализация
В заносятся нули. В начало основного сообщения добавляются два блока, в каждый 4-байтовый фрагмент которых записываются фиксированные числа варьирующиеся от до , где — это длина выхода хеш-функции . Если более подробно, то в два добавленных блока, которые мы назовем и (каждый размером по =512 бит), записываются следующие слова (32-битные блоки): , , , . Промежуточные слова и заполняются по аналогии.
Числу в присваивается значение −1, таким образом после обработки добавленных в начало блоков, первому блоку входного сообщения будет соответствовать , равная 1.
Разбиение на блоки
Входная битовая последовательность разбивается на блоки по 512 бит, если длина сообщения не кратна указанной длине, то к последней части добавляется одна битовая единица и нужное для достижения заданного размера количество нулей.
Обычные итерации
Для всех w ( и -32 битные части W) от −1 до k (где k количество блоков изначального сообщения) сделать следующее:
сложить B и M по словам, результат заносим в B
применить XOR на счетчике и A
сделать преобразование P
вычесть из C M по словам
поменять местами B и С
Заключительные итерации
После выполнения обычных итераций нужно выполнить еще три финальных итерациях. Они отличаются от обычных тем, что за блок принимается последний блок сообщения , значение счетчика фиксируется и равняется k общему числу блоков.
Результат
Выходные слова(32 битные блоки) от до являются результатом. и игнорируются.
Примечание
Стоит отметить, что рассчитывать преобразования от двух первых добавленных блоков каждый раз при использовании SHABAL совершенно необязательно. С таким же успехом, значения от этих двух блоков можно рассчитать один раз и потом использовать их как IV(initial vector).
SHABAL является чем-то средним между схемой Меркле-Дамгаарда и впитывающей функцией (sponge function). Для стойкости этих схем необходима криптостойкость преобразования . И создатели SHABAL стремились к этой цели. К сожалению оказалось нестойким, но криптоаналитики пришли к выводу, что безопасность SHABAL от этого не пострадала. Данный факт вызывает отдельный интерес и сейчас изучается.[3]