Pergunta

O meu entendimento é que um código hash e verificação são coisas semelhantes -. Um valor numérico, computados para um bloco de dados, que é relativamente única

i. A probabilidade de dois blocos de dados produzindo o mesmo valor de hash / numérico da soma de verificação é baixo o suficiente para que ele possa ser ignorada para os fins da aplicação.

Assim, temos duas palavras para a mesma coisa, ou existem diferenças importantes entre os códigos de hash e checksums?

Foi útil?

Solução

Eu diria que um soma de verificação é necessariamente a hashcode . No entanto, nem todos os hashcodes fazer boas somas de verificação.

A soma de verificação tem um propósito especial --- verifica ou verificações a integridade dos dados (alguns podem ir além disso, permitindo a correção de erros ). "Good" checksums são fáceis de computação, e pode detectar vários tipos de corrupções de dados (por exemplo, um, dois, três bits errados).

Um hashcode simplesmente descreve um função matemática que mapeia dados para algum valor. Quando utilizado como um meio de indexação em estruturas de dados (por exemplo, uma tabela de hash), uma baixa probabilidade de colisão é desejável.

Outras dicas

Há um propósito diferente por trás de cada um deles:

  • código Hash - projetado para ser aleatória através de seu domínio (para minimizar colisões em tabelas de hash e tal). códigos de hash criptográficas também são projetados para ser computacionalmente impossível de reverter.
  • Verifique soma -. Projetado para detectar a maioria dos erros comuns na dados e muitas vezes que ser rápido para computação (para checksumming eficaz rápido fluxos de dados)

Na prática, as mesmas funções são frequentemente bom para ambos os fins. Em particular, um criptograficamente forte código hash é uma boa soma de verificação (que é quase impossível que um erro aleatório vai quebrar uma função hash forte), se você pode pagar o custo computacional.

De fato, há algumas diferenças:

  • Checksums só precisa ser diferente quando a entrada é diferente (o mais rápido possível), mas é quase tão importante que eles são rápidos para computação.
  • códigos de hash (para uso em hashtables) têm os mesmos requisitos e, além disso eles devem ser distribuídos uniformemente em todo o espaço de código, especialmente para entradas que são semelhantes.
  • hashes criptográficos têm o muito requisitos mais rigorosos que, dado um hash, você não pode construir uma entrada que produz este hash. tempos de computação vem em segundo lugar, e dependendo do applicatin pode até ser desejável para o hash para ser muito lento para computação (para ataques de combate força bruta).

Wikipedia coloca-lo bem:

funções soma de verificação estão relacionados com haxixe funções, impressões digitais, aleatorização funções, e hash criptográfico funções. No entanto, cada um desses conceitos tem aplicações diferentes e objetivos do projeto, portanto, diferentes. Dígitos de verificação e bits de paridade são casos especiais de somas de verificação, apropriar para pequenos blocos de dados (Tais como números de segurança social, o banco números de contas, palavras computador, bytes simples, etc.). Alguns códigos de correção de erros são baseados em checksums especiais que não só detectar erros comuns, mas também permitir que o dados originais a serem recuperados em certos casos.

hashcodes e somas de verificação são utilizados tanto para criar valor numérico curta a partir de um item de dados. A diferença é que um valor de checksum deve mudar, mesmo se uma pequena modificação é feita para o item de dados. Para um valor de hash, a exigência é apenas que os itens de dados do mundo real devem ter valores de hash distintos.

Um exemplo claro são strings. A soma de verificação para uma string deve incluir todos e cada bit, e assuntos de ordem. Um código hash sobre o outro lado pode muitas vezes ser implementada como uma soma de verificação de um prefixo de comprimento limitado. Isso significaria que "aaaaaaaaaaba" iria botar o mesmo que "aaaaaaaaaaab", mas algoritmos de hash pode lidar wth tais colisões.

Hoje em dia eles são intercambiáveis, mas em dias de outrora um checksum era um techique muito simples onde você gostaria de acrescentar todos os dados para cima (geralmente em bytes) e alinhavar um byte no fim com esse valor em .. então você 'd espero sei se algum dos dados originais haviam sido corrompido. Semelhante a um bit de verificação, mas com bytes.

A soma de verificação protege contra alterações acidentais.

A hash de criptografia protege contra um atacante muito motivado.

Quando você envia os bits sobre o fio, pode acidentalmente acontecer que alguns bits são ou invertida, ou excluído, ou inseridos. Para permitir que o receptor para detectar (ou às vezes correta) acidentes como este, o remetente usa uma soma de verificação.

Mas se você assumir que há alguém ativa e inteligente modificar a mensagem no fio e você deseja proteger contra esse tipo de atacante, em seguida, usar um hash criptográfico (estou ignorando cryptographically assinar o hash, ou utilizando um canal secundário ou tal, uma vez que a questão não parece iludir a este).

A diferença entre as funções de hash de código e de soma de verificação é, eles estão sendo projetados para diferentes fins.

  • A soma de verificação é usado para descobrir o se algo na entrada mudou.

  • Um hash-código é utilizado para descobrir o se algo na entrada mudou e para ter o máximo de "distância" entre os valores de hash de código individuais quanto possível.

    Além disso, há força ser mais requisitos para uma função de hash, em oposição a esta regra, como a capacidade de árvores formam / agrupamentos / baldes de valores de hash de código de início.

    E se você adicionar um pouco de randomização inicial compartilhado, você chegar ao conceito de modernos de encriptação / chave-troca.


Sobre a Probabilidade:

Por exemplo, vamos supor que os dados de entrada, na verdade, sempre muda (100% do tempo). E vamos supor que você tem uma função de "perfeita" de hash / checksum, que gera um valor de 1 bit de hash / soma de verificação. Portanto, você terá diferentes de hash / valores de checksum, 50% do tempo, para a entrada em dados aleatórios.

  • Se exatamente 1 bit em seus dados de entrada aleatória mudou, você será capaz de detectar que 100% do tempo, não importa quão grande a entrada de dados é.

  • Se 2 bits em seus dados de entrada aleatórios mudaram, sua probabilidade de detectar "uma mudança" é dividido por 2, pois ambas as mudanças poderiam neutralizar um ao outro, e nenhuma função hash / soma de verificação iria detectar que 2 bits são realmente diferente nos dados de entrada.

    ...

Este significa que, se o número de bits em seus dados de entrada é várias vezes maior do que o número de bits em seu valor de hash / checksum, sua probabilidade de realmente recebendo diferentes valores de hash / soma de verificação, para diferentes valores de entrada, fica reduzida e não é uma constante .

I tendem a usar a palavra soma de verificação quando se refere ao código (numérico ou de outra forma) criado para um arquivo ou parte de dados que pode ser usado para verificação que o arquivo ou os dados não foi corrompido . O uso mais comum me deparo é verificar que os arquivos enviados através da rede não foram alteradas (deliberadamente ou não).

Apesar de hashing e somas de verificação são semelhantes em que ambos criar um valor com base no conteúdo de um arquivo, hash não é o mesmo que a criação de uma soma de verificação. A soma de verificação se destina a verificar (verificar) o de integridade de dados e identificar dados de transmissão de erros, enquanto um hash é projetado para criar uma impressão digital única de dados.

Fonte: CompTIA ® Security + Guia para Fundamentos de Segurança de Rede - Fifth Edition - Mark Ciampa -Page 191

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top