Открыть сервис

RFC 7693

RFC 7693 — это запрос комментариев (Request for Comments) Интернет-инженерного совета (IETF), описывающий криптографическую хеш-функцию BLAKE2. Документ был опубликован в ноябре 2015 года и определяет два основных варианта функции: BLAKE2b (оптимизированная для 64-битных платформ) и BLAKE2s (оптимизированная для 8-битных и 32-битных платформ). RFC 7693 является информационным (Informational) и не устанавливает стандарт, но широко используется как эталонная спецификация для реализации BLAKE2.

История и предпосылки создания

Разработка BLAKE2 началась в 2012 году как ответ на потребность в более быстрой и безопасной альтернативе широко распространённым хеш-функциям MD5, SHA-1 и SHA-2. Предшественником BLAKE2 была функция BLAKE, которая участвовала в конкурсе SHA-3, организованном Национальным институтом стандартов и технологий США (NIST). BLAKE заняла четвёртое место в финале конкурса, уступив Keccak (победителю, стандартизированному как SHA-3), но продемонстрировала высокую производительность и криптостойкость.

Авторы BLAKE2 — Жан-Филипп Омассон, Сэмюэль Невес, Зуко Уилкокс-О’Хирн и Кристиан Виннерлейн — взяли за основу алгоритм BLAKE и внесли в него ряд оптимизаций, направленных на повышение скорости работы на программном уровне, особенно на современных процессорах. Целью было создание хеш-функции, которая превосходила бы SHA-2 по производительности и была бы сопоставима по безопасности с SHA-3.

RFC 7693 был подготовлен рабочей группой IETF по криптографическим примитивам (Crypto Forum Research Group, CFRG) и опубликован в ноябре 2015 года. Документ закрепил спецификацию BLAKE2 как готового к использованию протокола, что способствовало его внедрению в различные программные проекты, включая операционные системы, библиотеки шифрования и криптовалюты.

Основные характеристики и алгоритм

BLAKE2 представляет собой криптографическую хеш-функцию, основанную на структуре схемы Меркла — Дамгора с использованием сжимающей функции на базе шифра ChaCha (вариант с 20 раундами). В отличие от BLAKE, в BLAKE2 количество раундов было сокращено с 16 до 12 (для BLAKE2b) и с 14 до 10 (для BLAKE2s), что значительно ускорило вычисления без потери криптостойкости.

Варианты BLAKE2

RFC 7693 определяет два основных варианта:

ПараметрBLAKE2bBLAKE2s
Размер слова64 бита32 бита
Размер дайджестаот 1 до 64 байтот 1 до 32 байт
Размер блока128 байт64 байта
Количество раундов1210
Рекомендуемая платформа64-битные (x86-64, ARM64)8-битные, 32-битные (AVR, ARM Cortex-M)

BLAKE2b выдаёт хеш длиной до 64 байт (512 бит), что соответствует стандартному размеру для SHA-512. BLAKE2s выдаёт хеш до 32 байт (256 бит), аналогично SHA-256. Оба варианта поддерживают произвольную длину дайджеста (от 1 байта), что позволяет использовать их для генерации ключей или в схемах с сокращённой длиной хеша.

Сжимающая функция

Сжимающая функция BLAKE2 выполняет 12 (или 10) раундов, каждый из которых состоит из четырёх шагов. В каждом шаге применяется операция G, которая включает в себя сложение, XOR и циклические сдвиги. Входные данные для сжимающей функции — это 16-словное состояние (512 или 256 бит), 16-словный блок сообщения и 2-словная соль (необязательно). В отличие от BLAKE, в BLAKE2 отсутствует константа соли, но добавлена возможность задания ключа (для HMAC-подобных режимов) и персонализации (для уникальной идентификации контекста).

Режимы работы

RFC 7693 описывает несколько режимов работы BLAKE2:

  • Обычный хеш — без ключа, для целостности данных.
  • Ключевой хеш (MAC) — с использованием ключа длиной до 64 байт (для BLAKE2b) или 32 байт (для BLAKE2s). Этот режим заменяет HMAC.
  • Солёный хеш — с добавлением соли (до 16 байт) для предотвращения атак по словарю.
  • Персонализированный хеш — с добавлением строки персонализации (до 16 байт) для привязки хеша к конкретному приложению.

Безопасность и криптостойкость

BLAKE2 считается одной из самых безопасных хеш-функций, доступных на сегодняшний день. По состоянию на 2024 год не известно ни одной практической атаки, которая позволяла бы найти коллизию (два разных сообщения с одинаковым хешем) или выполнить прообразную атаку (восстановить сообщение по хешу) для полных раундов BLAKE2b или BLAKE2s.

Криптостойкость BLAKE2 основана на следующих факторах:

  • Стойкость к коллизиям: для BLAKE2b-512 — 2^512 операций, для BLAKE2s-256 — 2^256 операций.
  • Стойкость к прообразу: для BLAKE2b-512 — 2^512 операций, для BLAKE2s-256 — 2^256 операций.
  • Стойкость ко второму прообразу: аналогично прообразу.
  • Отсутствие уязвимостей к атакам удлинения сообщения (length extension attack) — в отличие от SHA-256 и SHA-512, BLAKE2 не подвержен этому типу атак благодаря использованию финальной обработки (finalization) с добавлением длины сообщения.

BLAKE2 также прошёл проверку на устойчивость к атакам на основе дифференциального криптоанализа и линейного криптоанализа. В 2019 году группа исследователей под руководством Дмитрия Ховратовича опубликовала работу, в которой была показана возможность атаки на 2,5 раунда BLAKE2b (из 12), что не представляет практической угрозы.

Применение

BLAKE2 нашёл широкое применение в различных областях информационных технологий, особенно там, где требуется высокая производительность и криптостойкость.

Операционные системы и библиотеки

  • Linux: начиная с версии 4.16 (2018 год), ядро Linux использует BLAKE2s для хеширования паролей в файле /etc/shadow (алгоритм yescrypt). Также BLAKE2 используется в системе инициализации systemd для проверки целостности файлов.
  • OpenBSD: BLAKE2b используется в качестве хеш-функции по умолчанию для проверки целостности системных файлов.
  • Libsodium: популярная криптографическая библиотека включает реализацию BLAKE2b и BLAKE2s, а также использует их для генерации ключей и в схеме подписи Ed25519.
  • OpenSSL: начиная с версии 1.1.1 (2018 год), OpenSSL включает поддержку BLAKE2b и BLAKE2s.

Криптовалюты и блокчейн

BLAKE2 широко используется в криптовалютах, где требуется быстрый и безопасный хеш для майнинга или проверки транзакций:

  • Decred (DCR): использует BLAKE2b-256 в качестве основного алгоритма хеширования для майнинга (алгоритм Blake-256).
  • Siacoin (SC): использует BLAKE2b для хеширования блоков и транзакций.
  • Nano (NANO): использует BLAKE2b для генерации адресов и подписей.
  • Handshake (HNS): использует BLAKE2b-256 для хеширования доменных имён.

Протоколы и стандарты

  • DNSSEC: BLAKE2b используется в некоторых реализациях DNSSEC для подписи зон.
  • ZFS: файловая система ZFS использует BLAKE2b для проверки целостности данных (алгоритм checksum=blake2b).
  • IPFS: распределённая файловая система IPFS использует BLAKE2b для хеширования содержимого.

Сравнение с другими хеш-функциями

BLAKE2 значительно превосходит SHA-2 по скорости на программном уровне, особенно на 64-битных процессорах. По данным тестов, проведённых авторами, BLAKE2b-512 работает в 1,5–2 раза быстрее SHA-512, а BLAKE2s-256 — в 2–3 раза быстрее SHA-256. При этом BLAKE2 обеспечивает сопоставимый или более высокий уровень безопасности.

По сравнению с SHA-3 (Keccak), BLAKE2 также демонстрирует лучшую производительность на большинстве платформ, хотя SHA-3 имеет преимущество в аппаратной реализации. BLAKE2 также проще в реализации, чем SHA-3, так как не требует сложных перестановок.

Критика и ограничения

Несмотря на широкое признание, BLAKE2 имеет некоторые недостатки:

  • Отсутствие стандартизации: BLAKE2 не является стандартом NIST, в отличие от SHA-2 и SHA-3. Это может ограничивать его использование в государственных и регулируемых системах, где требуется соответствие стандартам.
  • Зависимость от платформы: производительность BLAKE2 сильно зависит от архитектуры процессора. На 32-битных платформах BLAKE2s работает медленнее, чем SHA-256 на некоторых реализациях.
  • Сложность реализации: хотя BLAKE2 проще SHA-3, его реализация требует внимания к деталям, особенно при работе с ключами и солью.

Интересные факты

  • Название «BLAKE2» происходит от имени автора схемы сжимающей функции — Bernstein (Даниэль Бернстайн, автор ChaCha) и Lamport (Лесли Лампорт, автор схемы Меркла — Дамгора).
  • BLAKE2 является основой для более новой хеш-функции BLAKE3, опубликованной в 2020 году. BLAKE3 использует древовидную структуру и работает в 2–3 раза быстрее BLAKE2.
  • В RFC 7693 также описана функция BLAKE2bp и BLAKE2sp — параллельные версии BLAKE2b и BLAKE2s, которые могут использовать несколько ядер процессора для ускорения хеширования больших объёмов данных.

Источники

  1. RFC 7693 — The BLAKE2 Cryptographic Hash and Message Authentication Code (MAC). IETF, 2015.
  2. Aumasson, J.-P., Neves, S., Wilcox-O’Hearn, Z., Winnerlein, C. «BLAKE2: Simpler, Smaller, Fast as MD5». In: Applied Cryptography and Network Security (ACNS), 2013.
  3. Saarinen, M.-J. «BLAKE2: Secure Hashing for the Internet». In: IEEE Security & Privacy, 2016.
  4. Bernstein, D. J. «ChaCha, a variant of Salsa20». In: Workshop Record of SASC, 2008.
  5. NIST. «SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions». FIPS PUB 202, 2015.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →