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 определяет два основных варианта:
| Параметр | BLAKE2b | BLAKE2s |
|---|---|---|
| Размер слова | 64 бита | 32 бита |
| Размер дайджеста | от 1 до 64 байт | от 1 до 32 байт |
| Размер блока | 128 байт | 64 байта |
| Количество раундов | 12 | 10 |
| Рекомендуемая платформа | 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, которые могут использовать несколько ядер процессора для ускорения хеширования больших объёмов данных.
Источники
- RFC 7693 — The BLAKE2 Cryptographic Hash and Message Authentication Code (MAC). IETF, 2015.
- 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.
- Saarinen, M.-J. «BLAKE2: Secure Hashing for the Internet». In: IEEE Security & Privacy, 2016.
- Bernstein, D. J. «ChaCha, a variant of Salsa20». In: Workshop Record of SASC, 2008.
- NIST. «SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions». FIPS PUB 202, 2015.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →