Liberação da implementação de referência da função hash criptográfica BLAKE3 1.0

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.

Liberação da implementação de referência da função hash criptográfica BLAKE3 1.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

Adicionar um comentário