Алгоритм шифрования, такой как иглобрюх, может использоваться как часть алгоритма хеширования. Blowfish — это всего лишь «кирпичик», который можно использовать для разных целей. Он может быть реализован как инструмент шифрования/дешифрования или как криптографический примитив алгоритма хеширования. Это не означает, что вы вдруг сможете изменить алгоритм хеширования.
Тот простой факт, что результат алгоритма хеширования всегда имеет постоянную длину, говорит о том, что его нельзя обратить вспять. Вы не можете зашифровать бесконечное количество потенциальных входных значений обратимым образом в выход фиксированной длины. Алгоритм по необходимости с потерями.
В качестве простой иллюстрации, blowfish можно использовать для шифрования данных (которые впоследствии могут быть расшифрованы):
ABCD EFGH IJKL MNOP ...
| | | |
v v v v
NPCQ JQ0C MPZW LKAQ
Blowfish индивидуально превращает каждый блок ввода в зашифрованный текст. Вот почему Blowfish называется блочным шифром (в отличие от потокового шифра, который обрабатывает входные данные как поток, а не как набор блоков фиксированной длины). Результатом этой операции является набор блоков, которые можно реверсировать. Вывод имеет ту же длину, что и ввод (плюс дополнение для заполнения блока, где это необходимо).
Хеш-функция, использующая Blowfish, работает следующим образом:
ABCD EFGH IJKL MNOP ...
| | | |
v v v v
NPCQ JQ0C MPZW LKAQ
| | | |
+----+--> PMQZ --+--> OLMQ --+--> UALG ...
Вывод каждого блока обрабатывается функцией сжатия, которая объединяет два блока в один. Выход первых двух блоков объединяется (в PMQZ
), затем это значение объединяется с выходом третьего блока (в OLMQ
) и так далее. Вывод последнего сжатия является результатом хеширования.
Как видите, blowfish используется внутри в качестве криптографического шифра, но его выходные данные сочетаются с функцией сжатия с потерями, что делает невозможным реверсирование вывода.
person
deceze♦
schedule
14.07.2014