Състоя се пускането на референтна реализация на криптографската хеш-функция BLAKE3 1.0, забележителна с изключително високата си производителност при изчисляване на хеш и осигуряване на надеждност на ниво SHA-3. В тест за генериране на хеш за файл с размер 16 КБ, BLAKE3 с 256-битов ключ надминава SHA3-256 с 17 пъти, SHA-256 с 14 пъти, SHA-512 с 9 пъти, SHA-1 с 6 пъти, а BLAKE2b с 5 пъти. Значителната разлика остава и при обработката на много големи обеми данни, например, BLAKE3 е по-бърз от SHA-256 с 8 пъти при изчисляване на хеш за 1 ГБ случайни данни. Кодът на референтната реализация на BLAKE3 е наличен на езици C и Rust под двойна лицензия — обществено достояние (CC0) и Apache 2.0.

Хеш-функцията е предназначена за употреба, като проверка на целостта на файловете, автентикация на съобщения и генериране на данни за криптографски цифрови подписи. BLAKE3 не е предназначена за хеширане на пароли, тъй като е насочена към максимално бързо изчисление на хешове (за пароли се препоръчва да се използват бавни хеш-функции като yescrypt, bcrypt, scrypt или Argon2). Обсъжданата хеш-функция е нечувствителна към размера на хешираните данни и е защитена от атаки за подбор на колизии и намиране на преобразуване.
Алгоритъмът е разработен от известни специалисти в криптографията (Jack O’Connor, Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O’Hearn) и продължава развитието на алгоритъма BLAKE2, прилага механизма Bao за кодиране на дървета от блокови вериги. В отличие от BLAKE2 (BLAKE2b, BLAKE2s), в BLAKE3 е предложен единен алгоритъм за всички платформи, независим от разрядността и размера на хеша.
Увеличението на производителността бе постигнато чрез намаляване на броя на цикли от 10 на 7 и отделно хеширане на блоковете с парчета от 1 КБ. Според създателите, те са намерили убедително математическо доказателство, че 7 цикъла са достатъчни вместо 10, при запазване на същото ниво на надеждност (за илюстрация може да се даде пример с разбиването на плодове в миксер — след 7 секунди плодовете вече са напълно смесени, и допълнителните 3 секунди нямат да се отразят на консистенцията на сместа). Въпреки това, някои изследователи изразяват съмнение, като смятат, че дори ако в момента 7 цикъла са достатъчни за противодействие на всички известни атаки на хешове, допълнителните 3 цикъла могат да се окажат полезни в случай на откритие на нови атаки в бъдеще.
Що се отнася до разделението на блокове, в BLAKE3 потокът се разбива на парчета от 1 КБ и всяко парче се хешира независимо. На базата на хешовете на парчетата се създава един голям хеш, използвайки бинарно дърво на Меркл. Това разделение позволява решаване на проблема с паралелната обработка на данните при изчислението на хеша — например, може да се използват 4-поточни SIMD-инструкции за едновременно изчисляване на хешовете на 4 блока. Традиционните хеш функции SHA-* обработват данните последователно.
Особености на BLAKE3:
- Висока производителност, BLAKE3 е значително по-бърз от MD5, SHA-1, SHA-2, SHA-3 и BLAKE2.
- Сигурност, включително устойчивост на атаки с удължаване на съобщението, на които е подложен SHA-2;
- Налични версии на Rust, оптимизирани за използване на инструкции SSE2, SSE4.1, AVX2, AVX-512 и NEON.
- Осигурява паралелизация на изчисленията на произволен брой потоци и SIMD канали.
- Възможност за инкрементално обновление и верифицирана обработка на потоци;
- Използване в режими PRF, MAC, KDF, XOF и като обикновен хеш;
- Единен алгоритъм за всички архитектури, бърз както в системи x86-64, така и на 32-битови ARM процесори.
Основните различия между BLAKE3 и BLAKE2:
- Използване на бинарна дървовидна структура, която позволява неограничен паралелизъм при изчисляването на хеша.
- Намаляване на броя на цикли от 10 на 7.
- Три режима на работа: хеширане, хеширане с ключ (HMAC) и генериране на ключ (KDF).
- Отсъствие на допълнителни разходи при хеширане с ключ, благодарение на използването на областта, която преди е била заета от блока на параметрите на ключа.
- Вграден механизъм за работа под формата на функция с удължаема изходна стойност (XOF, Extendable Output Function), допускаща паралелизиране и позициониране (seek).
Източник: opennet.ru
