O algoritmo MD5 é útil apenas para bytes, em vez de bits?

Sep 21 2020

O algoritmo MD5 é projetado para aceitar uma mensagem de qualquer comprimento e produzir um resumo da mensagem de 512 bits. Devido à maneira como ele preenche a mensagem original, adicionando um bit de 1 e um número de bits de 0, o comprimento da mensagem pode ser qualquer número de bits. Não está limitado a um número inteiro de bytes. Mas também pode ser escrito para funcionar apenas em bytes, portanto, o estágio de preenchimento envolveria a adição de um byte 0x80 e depois um número de bytes 0x00. O resultado final é o mesmo, desde que os dados de entrada sejam um número inteiro de bytes.

No entanto, meu entendimento é que os dados quase sempre são armazenados em bytes. Este é especialmente o caso de cadeias de caracteres, onde cada caractere é representado por pelo menos 1 byte. Para este caso de uso, acredito que uma abordagem orientada a bytes funcionaria bem. Mas se eu quisesse escrever uma implementação MD5 que também aceite arquivos, a distinção bit / byte se torna importante? Eu precisaria escrever o algoritmo para lidar especificamente com bits ou uma implementação orientada a bytes funcionaria tão bem para strings (por exemplo, de STDIN) e arquivos?

Em outras palavras, os dados são sempre armazenados como bytes inteiros? E em caso afirmativo, quais aplicativos existem nos quais seria necessário escrever um algoritmo MD5 que usa bits individuais, em vez de bytes inteiros?

Respostas

2 fgrieu Sep 21 2020 at 01:09

Se eu quisesse escrever uma implementação MD5 que também aceita arquivos, a distinção bit / byte se torna importante?

Não , uma implementação de byte está bem. Em sistemas operacionais modernos, o hash de um arquivo, pipe, string (qualquer que seja a codificação) é o hash de bytes.

As únicas vezes que fiz e usei uma implementação de hash com suporte a bits foi para fazer ou verificar vetores de teste. Mas posso imaginar alguns casos de uso que exigiriam pouco suporte

  • hashing da expressão como um número mínimo de bits de um inteiro (por algum endianness especificado), para um algoritmo hipotético especificando isso.
  • deseja-se algumas variantes do MD5 e as obtém anexando um sufixo menor que um byte a uma cadeia de bytes alimentada ao MD5. Para mensagens de 15 bytes que faz uma economia computacional em comparação com o acréscimo de um byte inteiro (um bloco de mensagem interno preenchido de 32 bytes em vez de dois), além de evitar colisões triviais com MD5 regular.