Calculando um código hash para um arquivo grande em paralelo

Gostaria de melhorar o desempenho do hash de arquivos grandes, por exemplo, nas dezenas de gigabytes de tamanh

Normalmente, você hash seqüencialmente os bytes dos arquivos usando uma função hash (por exemplo, SHA-256, embora eu provavelmente use Skein, portanto, o hash será mais lento quando comparado ao tempo necessário para ler o arquivo de um [rápido] SSD). Vamos chamar esse método 1.

A idéia é fazer o hash de vários blocos de 1 MB do arquivo em paralelo em 8 CPUs e, em seguida, o hash concatenado em um único hash final. Vamos chamar esse método 2.

Uma imagem representando este método é a seguinte:

Gostaria de saber se essa ideia é sólida e quanto "segurança" é perdida (em termos de probabilidade de colisões) versus fazer um único hash durante o período do arquivo inteir

Por exemplo

Vamos usar a variante SHA-256 do SHA-2 e definir o tamanho do arquivo como 2 ^ 34 = 34.359.738.368 bytes. Portanto, usando uma passagem única simples (método 1), eu obteria um hash de 256 bits para o arquivo inteir

Compare isso com:

Usando o hash paralelo (método 2), eu dividiria o arquivo em 32.768 blocos de 1 MB, hash esses blocos usando SHA-256 em 32.768 hashes de 256 bits (32 bytes), concatenar os hashes e fazer um hash final do resultante concatenou o conjunto de dados de 1.048.576 bytes para obter meu hash final de 256 bits para o arquivo inteir

O método 2 é menos seguro que o método 1, em termos de colisões serem mais possíveis e / ou prováveis? Talvez eu deva reformular esta pergunta como: O método 2 facilita para um invasor criar um arquivo que tenha o mesmo valor de hash que o arquivo original, exceto, é claro, pelo fato trivial de que um ataque de força bruta seria mais barato desde o hash pode ser calculado em paralelo em N cpus?

Atualiza: Acabei de descobrir que minha construção no Método 2 é muito semelhante à noção dehash list. No entanto, o artigo da Wikipedia mencionado no link na frase anterior não detalha a superioridade ou inferioridade de uma lista de hash em relação à chance de colisões em comparação ao método 1, um hash antigo e simples do arquivo, quando apenas otop hash da lista de hash é usad

questionAnswers(3)

yourAnswerToTheQuestion