# 오류 탐지 코드 (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)나 전자 서명 같은 암호 기법이 필요합니다.

## 응용 분야

1. **통신:** 유선·무선 네트워크를 통한 데이터 전송의 오류 검출.
2. **네트워킹:** 이더넷 프레임의 CRC, IPv4·TCP·UDP의 체크섬처럼 프로토콜마다 검사 값이 들어갑니다.
3. **데이터 저장:** 하드 드라이브, SSD 및 기타 저장 장치와 파일 형식에서 데이터 무결성 확인.

---
출처: https://achivx.kr/glossary/error-detecting-code-%EC%98%A4%EB%A5%98-%ED%83%90%EC%A7%80-%EC%BD%94%EB%93%9C/ · ACHIVX 용어 사전 · 수정일 2026-10-20
