Использование функции crypt PHP с алгоритмом хеширования Blowfish, это симметричное шифрование или нет?

как я могу прочитать в сети: алгоритм Blowfish симметричен. И функция шифрования PHP.net является одним из способов шифрования. Функция шифрования также позволяет использовать Blowfish в качестве алгоритма хеширования.

Итак, если я прав, когда связываю симметричное шифрование с процедурой двустороннего шифрования. Я вижу противоречие.

Определенно, использование crypt() + Blowfish даст кому-то возможность расшифровать строку, если он когда-нибудь узнает секретную соль? (На самом деле я думаю, что нет, поскольку, как я вижу из зашифрованной строки, включена соль шифрования)

Большое спасибо


person koalaok    schedule 14.07.2014    source источник


Ответы (3)


Алгоритм шифрования, такой как иглобрюх, может использоваться как часть алгоритма хеширования. 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

зашифрованные вещи расшифровываются, если это не расшифровывается, это называется хешированием, хеширование является односторонним.

person Azrael    schedule 14.07.2014

Вы думаете об этом неправильно; соль и пароль вместе используются в качестве ключа, в то время как есть волшебная строка, которая является данными (пароль не является данными). Без ключа нет расшифровки. Затем это повторяется (что и делает bcrypt).

См. sha512 vs blowfish vs bcrypt для очень хорошего ответа.

person MatsLindh    schedule 14.07.2014