You are on page 1of 5

Comprobacin de redundancia cclica

De Wikipedia, la enciclopedia libre Saltar a: navegacin, bsqueda La comprobacin de redundancia cclica (CRC) es un cdigo de deteccin de errores usado frecuentemente en redes digitales y en dispositivos de almacenamiento para detectar cambios accidentales en los datos. Los bloques de datos ingresados en estos sistemas contiene un valor de verificacin adjunto, basado en el residuo de una divisin de polinomios; el clculo es repetido, y la accin de correccin puede tomarse encontra de los datos presuntamente corrompidos en caso de que el valor de verificacin no concuerde; por lo tanto se puede afirmar que este cdigo es un tipo de funcin que recibe un flujo de datos de cualquier longitud como entrada y devuelve un valor de longitud fija como salida. El trmino suele ser usado para designar tanto a la funcin como a su resultado. Pueden ser usadas como suma de verificacin para detectar la alteracin de datos durante su transmisin o almacenamiento. Las CRC son populares porque su implementacin en hardware binario es simple, son fciles de analizar matemticamente y son particularmente efectivas para detectar errores ocasionados por ruido en los canales de transmisin. La CRC fue inventada y propuesta por W. Wesley Peterson en un artculo publicado en 1961.1

Contenido
[ocultar]

1 Introduccin 2 La integridad de los datos frente a la codificacin 3 Clculo de CRC 4 Matemticas del CRC 5 Especificacin de un CRC 6 Referencias 7 Vase tambin 8 Enlaces externos o 8.1 Herramientas en lnea

[editar] Introduccin
El CRC es un cdigo de deteccin de error cuyo clculo es una larga divisin de computacin en el que se descarta el cociente y el resto se convierte en el resultado, con la importante diferencia de que la aritmtica que usamos conforma que el clculo utilizado es el arrastre de un campo finito, en este caso los bits. El tamao del resto es siempre menor que la longitud del divisor, que, por lo tanto, determina el tamao del resultado. La definicin de un CRC especifica el divisor que se utilizar, entre otras cosas. Aunque un CRC se puede construir utilizando cualquier tipo de regla finita, todos los CRC de uso

comn emplean una base finita binaria, esta base consta de dos elementos, generalmente el 0 y 1. El resto de este artculo se centrar en este tipo de composicin, es decir el mbito binario y los principios generales de los CRC.

[editar] La integridad de los datos frente a la codificacin


Es til para deteccin de errores, pero, en condiciones de seguridad, no podemos confiar en que el CRC puede verificar plenamente que los datos son los correctos en caso de que se hayan producido cambios deliberados y no aleatorios. A menudo se piensa que si, cuando llega un mensaje, ste y su CRC coinciden, quiere decir que el mensaje no ha podido ser alterado durante su transmisin, aunque se haya transmitido por un canal abierto. Esta suposicin es falsa porque CRC es un mal mtodo de cifrado de datos. De hecho, el CRC no se trata realmente de un mtodo de cifrado, lo que realmente hace es utilizarse para el control de integridad de datos, pero en algunos casos se supone que se utilizarn para el cifrado. Cuando un CRC se calcula, el mensaje se conserva (no cifrado) y la constante de tamao CRC se sita hacia el final (es decir, el mensaje puede ser tan fcil como leer antes de la posicin que ocupa el CRC). Adems, la longitud del CRC es por lo general mucho ms pequea que la longitud del mensaje, es imposible para una relacin de 1:1 entre la CRC y el mensaje. As, numerosos cdigos producirn el mismo CRC. Por supuesto, estos cdigos estn diseados para ser lo suficientemente diferentes como para variar (y por lo general slo en uno o dos bits). Pequeos cambios en la palabra clave produciran una gran diferencia entre un CRC y otro; por ese motivo es posible detectar el error. Si la manipulacin del mensaje (cambios de los bits) es deliberada, entonces se tomara una nueva clave, produciendo un falso CRC el cual puede ser calculado para el nuevo mensaje y sustituir el CRC real en el final del paquete y esta modificacin no podr ser detectada. La CRC sirve para verificar la integridad, pero no para saber si el mensaje es correcto. Por el contrario, un medio eficaz para proteger a los mensajes contra la manipulacin intencional es el uso de un cdigo de autenticacin de mensajes como HMAC.

[editar] Clculo de CRC

La mecnica de la informtica con su lenguaje binario produce unas CRC simples. Los bits representados de entrada son alineados en una fila, y el (n + 1) representa el patrn de bits del divisor CRC (llamado polinomio) se coloca debajo de la parte izquierda del final de la fila. Aqu est la primera de ellas para el clculo de 3 bits de CRC:
11010011101100 <--- entrada 1011 <--- divisor (4 bits) -------------01100011101100 <--- resultado

Si la entrada que est por encima del extremo izquierdo del divisor es 0, no se hace nada y se pasa el divisor a la derecha de uno en uno. Si la entrada que est por encima de la izquierda del divisor es 1, el divisor es Or exclusiva en la entrada (en otras palabras, por encima de la entrada de cada bit el primer bit conmuta con el divisor). El divisor es entonces desplazado hacia la derecha, y el proceso se repite hasta que el divisor llega a la derecha, en la parte final de la fila de entrada. Aqu est el ltimo clculo:
00000000001110 <--- resultado de la multiplicacin de clculo 1011 <--- divisor -------------00000000000101 <--- resto (3 bits)

Desde la izquierda se divide por cero todos los bits de entrada, cuando este proceso termina el nico bits en la fila de entrada que puede ser distinto de cero es n bits ms a la derecha, en la parte final de la fila. Estos n bits son el resto de la divisin, y ser tambin el valor de la funcin CRC (es el CRC escogido a menos que la especificacin de algn proceso posterior lo cambie).

[editar] Matemticas del CRC


Matemticas del CRC Este apartado se refiere al anlisis matemtico de este proceso de divisin, como pone de manifiesto la manera de elegir un divisor que garantiza la deteccin de errores buenas propiedades. En este anlisis, los dgitos de las cadenas de bits son considerados como los coeficientes de un polinomio en algunos variables x/coeficientes, que son elementos del campo finito binario en lugar de los nmeros decimales. Este polinomio forma unas cadenas de bits que pueden observarse como elementos de un anillo. Un anillo es, hablando en trminos generales, un conjunto de elementos, es decir como los nmeros que pueden ser operados por una operacin semejante pero no idntica a la de la suma y adems alguna otra operacin semejante a la multiplicacin, estas operaciones poseen muchas de las propiedades de la aritmtica conmutatividad, asociativa, y distributiva.

[editar] Especificacin de un CRC

El CRC se utiliza como una deteccin de errores de cdigo, el cual tiene una serie de aplicaciones usadas cuando se implementa mediante normas, convirtindolo as en un sistema prctico. Estas son algunas de las aplicaciones:

Se usa un patrn de prefijos de bit para comprobar su autenticidad. Esto es til cuando la trama podra tener errores en los bits de delante de un mensaje, una alteracin que, de otro modo dejara sin cambios al CRC. A veces un envo agrega n bits (n es el tamao de la CRC) al mensaje que se debe controlar ya que se cogera un polinomio que no sera el correcto para la divisin. Esto tiene la conveniencia de que el CRC del mensaje original con el CRC adjunto es exactamente cero, por lo que el CRC se puede comprobar simplemente por la divisin polinmica y comparando con el resto cero. A veces se realiza una implementacin del CRC con OR exclusivos en el resto de la divisin polinmica. Orden de los bits: en ocasiones, el orden en el que se envan las tramas de datos no corresponden exactamente con la posicin que tendrn los bits en la divisin polinmica; es decir, que puede que el primer bit enviado sea el de ms peso o viceversa. Este convenio tiene sentido cuando las tramas a enviar se envan por puertos series ya que el CRC es comprobado por el hardware de cada mquina, y cada uno tendr un convenio conjunto de lectura y posicionamiento de paquetes para el envi a la capa siguiente. Omisin del orden del bit de ms peso del polinomio divisor: algunos escritores proponen omitir esto, puesto que el bit mayor peso es siempre 1, y ya que el bit CRC debe ser definido por un (n + 1) bits del divisor, es innecesario mencionar el divisor mayor peso en el mensaje y en el CRC.

[editar] Referencias
1. Peterson, W. W. y Brown, D. T. (enero 1961). Cyclic Codes for Error Detection. Proceedings of the IRE. doi:10.1109/JRPROC.1961.287814. ISSN 0096-8390.

[editar] Vase tambin


Algoritmo de los cdigos de redundancia cclica Matematicas del CRC (ingls)

[editar] Enlaces externos


Easy to understand CRC32 C++ Source Code Free CRC Source Code from the Boost C++ Libraries The CRC Pitstop Williams, R. (1993-09) A Painless Guide to CRC Error Detection Algorithms

Understanding Cyclic Redundancy Check Black, R. (1994-02) Fast CRC32 in Software; algorithm 4 is used in Linux and infozip's zip and unzip. Kounavis, M. and Berry, F. (2005). A Systematic Approach to Building High Performance, Software-based, CRC generators, Slicing-by-4 and slicing-by-8 algorithms CRC32: Generating a checksum for a file, C++ implementation by Brian Friesen CRC16 to CRC64 collision research Reversing CRC - Theory and Practice. 'CRC-Analysis with Bitfilters'. Another Bad CRC Reading Tool, but free MathPages - Cyclic Redundancy Checks Tool for Bad CRC Reading with advanced options A CRC calculation utility and C source code generator written in Python. (MIT licence) CRC Encoding - C# Implementation by Marcel de Wijs Cyclic Redundancy Check: theory, practice, hardware, and software with emphasis on CRC-32. A sample chapter from Henry S. Warren, Jr. Hacker's Delight. CRC32 PHP Funcin de PHP

[editar] Herramientas en lnea


Hash'em all! Free online text and file hashing with different algorithms (including CRC) Free CRC Verilog Circuit generator Online CRC32 and CRC32B calculator Online Tool to compute common CRCs (8/16/32/64) from strings Online CRC calculator Another online CRC calculator Online CRC Tool: Generator of synthesizable CRC functions Online Char (ASCII), HEX, Binary, Base64, etc. Encoder/Decoder with MD2, MD4, MD5, SHA1+2, CRC, etc., hashing algorithms Herramienta para cifrar con MD5 de CDmon