CRC
보이기
CRC(Cyclic Redundancy Check, 순환 중복 검사)는 데이터가 손상되었는지 확인할 수 있는 오류 검증 코드다.
16비트, 32비트, 64비트 버전이 많이 쓰이며, 그 중 32비트 버전(CRC32)이 압도적으로 많이 쓰인다. 오죽하면 AMD64 등 21세기의 왠만한 현대 CPU들은 CRC32 연산을 가속할 수 있는 장치를 내장할 정도다.
애석하게도 이걸로 데이터를 정정하거나 데이터의 무결성을 완전히 검증할 수는 없는데, 아래 나오듯 나눗셈의 몫과 나머지를 이용하는 특성 상 같은 나머지를 가지는 서로 다른 데이터를 여러 개 만들 수 있기 때문이다. 이것은 비대칭 키 알고리즘 형태를 지닌 ECC가 잡아주는 편이다.
검증 과정
- 송신자와 수신자는 같은 생성 다항식(Generator Polynomials)을 공유한다. 이 다항식은 이진수의 자릿수 단위로 항이 있는 다항식이다.
- 송신자는 데이터를 생성 다항식으로 나눈 체크섬을 데이터 뒤에 추가한다.
- 수신자가 체크섬이 부착된 데이터를 정상적으로 받았다면 받은 데이터를 공유한 생성 다항식으로 나누면 0으로 나누어 떨어진다. 수신자가 다항식으로 나누어 0이 아닌 경우 오류가 발생했다는 점에 주의한다.