오류 탐지 코드 (Error Detecting Code)
오류 탐지 코드(error detecting code)는 전송하거나 저장하는 데이터에 정해진 절차로 계산한 여분의 비트(검사 값)를 덧붙여, 수신 측이 데이터가 도중에 바뀌었는지 알아낼 수 있게 하는 부호입니다. 비트가 컴퓨터 네트워크를 통해 전송되거나 저장 장치에 기록될 때 잡음, 간섭, 장치 결함으로 손상될 수 있는데, 오류 탐지 코드는 이런 손상을 찾아냅니다.
원리
- 생성: 송신 측은 원본 데이터로 검사 값을 계산해 데이터에 덧붙입니다.
- 전송: 결합된 데이터(원본 + 검사 값)가 네트워크나 저장 장치를 거칩니다.
- 검증: 수신 측은 받은 데이터로 검사 값을 다시 계산해 받은 검사 값과 비교합니다. 일치하면 정상으로, 일치하지 않으면 손상된 것으로 판단하고 보통 재전송을 요청합니다.
대표적인 종류
- 패리티 비트: 데이터의 1의 개수가 짝수(또는 홀수)가 되도록 비트 하나를 덧붙입니다. 가장 단순하며, 1비트 오류처럼 홀수 개의 비트 오류는 찾지만 짝수 개의 비트가 함께 바뀌면 놓칩니다.
- 체크섬: 데이터를 일정 단위로 나누어 더한 값을 검사 값으로 씁니다. 인터넷에서는 IPv4 헤더와 TCP·UDP 세그먼트(헤더와 데이터)가 16비트 1의 보수 합 체크섬을 사용합니다. 계산이 간단한 대신 검출력은 CRC보다 약합니다.
- CRC(순환 중복 검사): 데이터를 GF(2) 위의 다항식으로 보고 정해진 생성 다항식으로 나눈 나머지를 검사 값으로 씁니다. 연속된 비트가 한꺼번에 손상되는 버스트 오류를 잘 찾아내며, 이더넷(CRC-32), 저장 장치, 압축 파일 형식 등에 널리 쓰입니다.
- 암호화폐 주소의 체크섬: 비트코인의 Base58Check 주소는 이중 SHA-256 해시의 앞 4바이트를, Bech32 주소는 BCH 부호 기반 체크섬을 붙여 주소를 잘못 입력하면 지갑이 이를 알아채도록 합니다.
오류 정정 코드와의 차이
오류 탐지 코드는 오류가 있다는 사실만 알려 줍니다. 손상된 부분을 고치려면 데이터를 다시 받아야 합니다. 반면 해밍 부호, 리드-솔로몬 부호 같은 오류 정정 코드는 더 많은 여분 비트를 써서 수신 측이 일정 수의 오류를 스스로 고칠 수 있게 합니다. 재전송이 쉬운 네트워크에서는 탐지 후 재전송 방식이, 재전송이 어려운 저장 매체나 위성 통신에서는 정정 코드가 주로 쓰입니다.
장점과 한계
- 데이터 무결성: 수신된 데이터가 전송된 데이터와 같은지 확인해 전송의 신뢰성을 높입니다.
- 오버헤드: 검사 값만큼 전송·저장 크기가 늘어납니다.
- 정정 불가: 오류를 찾을 뿐 고치지는 못하므로 재전송이 필요합니다.
- 우발적 손상만 검출: 잡음 등으로 바뀐 데이터를 찾아내지만, 의도적인 변조는 막지 못합니다. 공격자는 데이터를 바꾼 뒤 검사 값도 다시 계산할 수 있기 때문입니다. 변조를 막으려면 메시지 인증 코드(MAC)나 전자 서명 같은 암호 기법이 필요합니다.
응용 분야
- 통신: 유선·무선 네트워크를 통한 데이터 전송의 오류 검출.
- 네트워킹: 이더넷 프레임의 CRC, IPv4·TCP·UDP의 체크섬처럼 프로토콜마다 검사 값이 들어갑니다.
- 데이터 저장: 하드 드라이브, SSD 및 기타 저장 장치와 파일 형식에서 데이터 무결성 확인.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.