CRC
CRC, do inglês Cyclic redundancy check, ou verificação de redundância cíclica é um código detector de erros, um tipo de função hash que gera um valor expresso em poucos bits em função de um bloco maior de dados, como um pacote de dados, ou um ficheiro, por forma a detectar erros de transmissão ou armazenamento.
O CRC é calculado e anexado à informação a transmitir (ou armazenar) e verificada após a recepção ou acesso, para confirmar se não ocorreram alterações. O CRC é popular por ser simples de implementar em hardware binário, simples de ser analisado matematicamente, e pela eficiência em detectar erros típicos causados por ruído em canais de transmissão.
Índice |
Propriedades [editar]
A utilidade do CRC advém das seguintes propriedades:
- Como todos os bits são usados no cálculo do CRC, a mudança em apenas um bit provoca uma mudança no CRC.
- Mesmo mudanças pequenas nos dados levam a CRCs muito diferentes. Experiências com o CRC-32 (usando polinômios de 32 bits) mostram que é muito raro que a introdução de erros nos dados não seja detectado pelo CRC.
- A probabilidade de qualquer dos 232 valores possíveis para o CRC é praticamente uniforme.
Cálculo [editar]
O CRC é calculado através das operações da aritmética módulo 2. Com efeito, é o resto da divisão polinomial entre os dados a enviar, e um polinômio gerador adequadamente escolhido. Para efetuar esta divisão , cada posição dos bits no bloco de dados ou arquivo é considerado como uma potência de x no polinômio, e o valor do bit é o coeficiente correspondente (0 ou 1). Por exemplo, a seqüencia de bits 1001101100110100 deve ser considerada como sendo o polinômio:

ou seja:

O polinômio composto por todos os bits do arquivo é dividido usando-se aritmética módulo 2 1 pelo polinômio gerador. O resto da divisão dos polinômios gera sempre um polinômio cujo grau é sempre menor que o grau do polinômio gerador, então se usamos um polinômio de grau 32, temos como resto um polinômio de grau 31 ou menos que podemos representar com 32 bits, um para cada coeficiente (o primeiro coeficiente é o de x0, por isso temos um coeficiente a mais que o grau).
Existem alguns polinômios geradores padronizados para serem usados no cálculo de CRC que foram testados para garantir as propriedades listadas acima. Os mais comuns são:
- CRC-32 que usa o polinômio gerador
ou 100000100110000010001110110110111em notação binária. - CRC-16 que usa o polinômio gerador
ou 11000000000000101em notação binária. - CRC-12 que usa o polinômio gerador
ou 1000000001011em notação binária. - CRC-8 que usa o polinômio gerador
ou 100000111em notação binária. - CRC-1 que usa o polinômio gerador
ou 1em notação binária. Este tipo de códificação é usualmente designada por código de paridade, a qual adiciona um bit 1 ou 0 á direita do conjunto de digitos binários a codificar.
É de salientar que o CRC é, contudo, inútil para validar a integridade dos dados - pelas suas características, é possível alterar os dados sem que o CRC reflita a alteração. Nestes casos pode-se utilizar as funções de hash criptográficas.
Notas e referências [editar]
- ↑ A aritmética módulo 2 é uma forma de aritmética binária onde a soma e subtração não propagam dígitos para a próxima casa, facilitando assim os cálculos. Em termos computacionais, tanto a soma como a subtração são representados pela operação de ou exclusivo nessa aritmética. Ver também Aritmética modular
Bibliografia [editar]
- (em inglês) SALOMON, David. Data Compression: The Complete Reference. 2 ed. Nova Iorque: Springer, 2000. ISBN 0-387-95045-1
ou
ou
ou
ou
ou