Por que o 'cksum' estaria rodando mais devagar que 'md5sum'?

3

Estou fazendo backup de imagens do instalador do Windows para minha máquina virtual e, para verificar se os dados foram transferidos corretamente, estou usando cksum . Por curiosidade, decidi comparar os tempos que demoraram para que cksum corresse contra md5sum para os mesmos arquivos. Os resultados depois de executar cada operação várias vezes (para ter certeza de que não estava relacionado ao armazenamento em cache de E / S) foi que md5sum consistentemente demorou cerca de metade do tempo como cksum . Eu tenho duas perguntas ...

  1. Por que md5sum será muito mais rápido que cksum ?
  2. Para o propósito de encontrar erros aleatórios, existe algum motivo para eu escolher cksum over md5sum .

Estou executando o Arch Linux.

Nota: esta não é uma questão sobre qual é o melhor. Isso foi coberto muitas vezes antes, e eu sei que md5sum não deve ser usado como um hash criptográfico . Eu estou perguntando especificamente sobre o uso de md5sum como um meio de encontrar erros aleatórios .

    
por Caleb Reister 10.02.2017 / 04:19

1 resposta

4

Os cálculos realizados por ambos os algoritmos de hash são diferentes, portanto não é surpreendente que eles tenham características de desempenho diferentes. Nos sistemas Linux, md5sum e cksum são geralmente as versões GNU coreutils . md5sum usa as funções MD5 da biblioteca C que são muito bem otimizadas e operam no conteúdo do bloco 32 bits por vez (consulte md5.c e md5-block.c ). cksum usa sua própria implementação CRC que opera no conteúdo um byte de cada vez (veja cksum.c ). Isso pode ser um fator que contribui para a velocidade de md5sum em comparação com cksum ; não há dúvida de que outros.

Para decidir qual ferramenta é mais apropriada para encontrar erros aleatórios, você precisa analisar as propriedades matemáticas dos algoritmos envolvidos. Em um nível muito básico, cksum produz um hash de 32 bits, enquanto md5sum produz um hash de 128 bits, de modo que o último deve ser mais resistente a colisões acidentais (e, portanto, melhor detectar erros aleatórios, especialmente à medida que o número de bits invertidos aumenta).

A única razão pela qual eu vejo para escolher cksum over md5sum é que o primeiro é especificado por POSIX, então qualquer sistema POSIX o terá - se isso for um fator então cksum seria mais apropriado.

(Quanto ao seu comentário sobre hashes criptográficos, cksum não é um hash criptográfico, então a questão é discutível.)

    
por 10.02.2017 / 10:40