XOF-функции, TupleHash, Argon2 и bcrypt.

Всем привет! Сегодня я хочу рассказать Вам про XOF-функции, TupleHash, Argon2 и bcrypt.

Что такое XOF-функции? В стандарте SHA-3 был введён универсальный примитив с произвольным размером дайджеста. Этот примитив называется функцией расширенного выхода (XOF). Рассмотрим две стандартизированные XOF-функции: SHAKE и cSHAKE. SHAKE по сути тот же SHA-3, но имеет больший размер rate (как следствие работает быстрее) и на этапе выжимания выполняет столько перестановок, сколько нужно. Он принимает входные данные и нужный размер дайджеста. cSHAKE — это настраиваемая версия SHAKE (customizable SHAKE). Она аналогична SHAKE, но вместе с входными данными принимает строку настройки, которая может быть пустой. Эта строка позволяет нам менять выход XOF-функции для одних и тех же данных. То есть может использоваться для разделения предметных областей. Эта строка после преобразования просто конкатенируется с нашими входными данными и потом впитывается. TupleHash TupleHash, как следует из названия, позволяет хешировать кортеж. Основан он на cSHAKE и позволяет обойти следующие проблемы про хешировании списков чего-либо:

echo -n "pxi""geses""100""98" | openssl dgst -sha256

Хеш этой строки составленной из кортежа будет равен хешу этого кортежа:

echo -n "pxi""geses""1009""8" | openssl dgst -sha256

TupleHash однозначно сериализует данные в удобную для хеширования строку. По сути под капотом он вызовет функцию cSHAKE и передаст ей входные данные с указанием длины в начале каждого отдельного поля кортежа. Кратко про Argon2 и bcrypt Представим, что вы авторизуете пользователей на сайте и храните только хеши паролей и для каждого пароля добавляете свою соль. Однако, у злоумышленника оборудование может быть в десятки и сотни раз мощнее вашего, таким образом при наличии доступа к вашей базе данных с хешами он сможет достаточно быстро перебирать много паролей одновременно. Для решения этой проблемы были разработаны специальные медленные хеш-функции. Среди них чаще всего используют bcrypt, scrypt и старый PBKDF2. Но в 2021 стал стандартизован и продвигается активно Argon2 (RFC 9106). Argon2 и scrypt защищают от высокого уровня оптимизации со стороны злоумышленников, так как являются схемами зависимыми от памяти. Это значит, что алгоритм может быть оптимизирован только за счёт оптимизации доступа к памяти. Таким образом эти функции выполняются медленно на любом типе устройств. На этом всё! Буду рад вашим вопросам и комментариям.

22