Uma implementação de referência da função hash criptográfica BLAKE3 1.0 foi lançada, notável por seu desempenho de cálculo de hash muito alto, garantindo ao mesmo tempo confiabilidade no nível SHA-3. No teste de geração de hash para um arquivo de 16 KB, BLAKE3 com uma chave de 256 bits supera SHA3-256 em 17 vezes, SHA-256 em 14 vezes, SHA-512 em 9 vezes, SHA-1 em 6 vezes e BLAKE2b - 5 vezes. Uma lacuna significativa permanece ao processar grandes quantidades de dados, por exemplo, o BLAKE3 revelou-se 256 vezes mais rápido que o SHA-8 ao calcular um hash para 1 GB de dados aleatórios. O código de implementação de referência BLAKE3 está disponível nas versões C e Rust sob domínio público duplo (CC0) e licença Apache 2.0.
A função hash foi projetada para aplicações como verificação de integridade de arquivos, autenticação de mensagens e geração de dados para assinaturas digitais criptográficas. BLAKE3 não se destina a hash de senhas, pois visa calcular hashes o mais rápido possível (para senhas, recomenda-se usar as funções hash lentas yescrypt, bcrypt, scrypt ou Argon2). A função hash em consideração é insensível ao tamanho dos dados hash e é protegida contra ataques de seleção de colisão e localização de pré-imagem.
O algoritmo foi desenvolvido por conhecidos especialistas em criptografia (Jack O'Connor, Jean-Philippe Aumasson, Samuel Neves, Zooko Wilcox-O'Hearn) e continua o desenvolvimento do algoritmo BLAKE2 e usa o mecanismo Bao para codificar a árvore da cadeia de blocos . Ao contrário do BLAKE2 (BLAKE2b, BLAKE2s), o BLAKE3 oferece um algoritmo único para todas as plataformas, não vinculado à profundidade de bits e ao tamanho do hash.
O aumento de desempenho foi alcançado reduzindo o número de rodadas de 10 para 7 e hashing de blocos separadamente em pedaços de 1 KB. Segundo os criadores, eles encontraram provas matemáticas convincentes de que é possível sobreviver com 7 rodadas em vez de 10, mantendo o mesmo nível de confiabilidade (para maior clareza, podemos dar um exemplo de misturar frutas em uma batedeira - após 7 segundos a fruta já está completamente misturada e mais 3 segundos não afetarão a consistência da mistura). No entanto, alguns pesquisadores expressam dúvidas, acreditando que mesmo que 7 rodadas sejam atualmente suficientes para conter todos os ataques conhecidos a hashes, então 3 rodadas adicionais podem ser úteis se novos ataques forem identificados no futuro.
Quanto à divisão em blocos, no BLAKE3 o fluxo é dividido em pedaços de 1 KB e cada pedaço é hash independentemente. Com base nos hashes das peças, um grande hash é formado com base na árvore binária Merkle. Essa divisão nos permite resolver o problema de paralelização do processamento de dados ao calcular hashes - por exemplo, você pode usar instruções SIMD de 4 threads para calcular simultaneamente hashes de 4 blocos. As funções hash SHA-* tradicionais processam dados sequencialmente.
Características do BLAKE3:
- Alto desempenho, BLAKE3 é significativamente mais rápido que MD5, SHA-1, SHA-2, SHA-3 e BLAKE2.
- Segurança, incluindo resistência a ataques de alongamento de mensagens aos quais o SHA-2 é suscetível;
- Disponível em Rust, otimizado para instruções SSE2, SSE4.1, AVX2, AVX-512 e NEON.
- Garantindo a paralelização de cálculos em qualquer número de threads e canais SIMD.
- Possibilidade de atualização incremental e processamento verificado de streams;
- Use nos modos PRF, MAC, KDF, XOF e como hash regular;
- Um único algoritmo para todas as arquiteturas, rápido em sistemas x86-64 e processadores ARM de 32 bits.
As principais diferenças entre BLAKE3 e BLAKE2:
- Uso de uma estrutura de árvore binária que permite paralelismo ilimitado em cálculos de hash.
- Reduzindo o número de rodadas de 10 para 7.
- Três modos de operação: hashing, hashing com chave (HMAC) e geração de chave (KDF).
- Nenhuma sobrecarga adicional ao fazer hash com uma chave devido ao uso da área anteriormente ocupada pelo bloco de parâmetros-chave.
- Mecanismo de operação integrado em forma de função com resultado estendido (XOF, Extendable Output Function), permitindo paralelização e posicionamento (seek).
Fonte: opennet.ru