테마
01. 체크섬과 해시 기초
학습 목표
- 체크섬(Checksum)이 무엇이고 왜 사용하는지 설명할 수 있다.
- 해시(Hash) 함수의 단방향성이 무엇인지 이해한다.
- 해시 함수의 고정 길이 출력 특성을 설명할 수 있다.
- 체크섬과 해시의 차이를 명확히 구분할 수 있다.
- 정보보안 3원칙 중 무결성의 의미를 이해한다.
전체 구조
1. 체크섬(Checksum)이란?
핵심 개념
체크섬은 데이터에 오류가 있는지 확인하기 위한 방법이다. 원본 데이터를 보낼 때 체크섬 값을 함께 보내고, 수신 측에서 같은 방법으로 재계산하여 두 값을 비교한다.
체크섬의 계산 원리
체크섬의 계산은 매우 단순하다. 핵심 규칙은 딱 두 가지다.
- 일정 단위로 잘라서 더한다 (누산)
- 자리 올림은 버린다 (자릿수 유지)
예를 들어 5 + 7 = 12인데, 자리 올림(1)을 버리면 2만 남는다.
이름궁합으로 이해하는 체크섬
이름궁합을 해본 적이 있다면, 이미 체크섬을 이해하고 있는 것이다.
성(5) 이(2) 완(7) 완(7) 종(9) 구(2)각 글자의 획수를 구한 뒤, 인접한 두 수를 더하면서 자리 올림을 버린다.
이 과정에서 중요한 것은:
- 일정한 규칙(획수→누산→자리올림 제거)으로 계산한다
- 원본이 같으면 항상 같은 결과가 나온다
- 원본이 달라지면 결과도 달라진다 (대부분의 경우)
체크섬의 한계: 보안성이 없다
체크섬의 치명적 약점은 누구나 재계산할 수 있다는 것이다.
공격자가 데이터를 변조한 뒤 체크섬을 재계산하면, 수신자는 변조 사실을 알 수 없다. 이것이 체크섬에 기밀성도, 무결성도 없다고 말하는 이유다.
암기 포인트: 체크섬 = 오류 검출 목적 / 보안성 없음 / 재계산으로 바꿔치기 가능
2. 해시(Hash)란?
핵심 개념
해시는 단방향 함수다. 입력을 넣으면 결과가 나오지만, 그 결과로 원래 입력을 역추적할 수 없다.
이름궁합에서 이미 본 단방향성
앞의 이름궁합 예시를 다시 보자.
| 과정 | 설명 |
|---|---|
| "성" → 5획 | 글자로부터 획수를 구할 수 있다 (순방향) |
| 5획 → "?" | 5획인 글자는 많다. 글자를 특정할 수 없다 (역방향 불가) |
| "성이완완종구" → 90 | 이름으로부터 궁합 결과를 구할 수 있다 (순방향) |
| 90 → "?" | 90이라는 결과로 원래 이름을 알아낼 수 없다 (역방향 불가) |
이것이 바로 단방향성이다. 해시 함수의 가장 중요한 특성이다.
나머지 연산(mod)으로 이해하는 단방향성
단방향성이 왜 성립하는지, 나머지 연산으로 직관적으로 이해할 수 있다.
7 % 5 = 2 (7을 5로 나누면 나머지는 2)여기서 결과 2만 가지고 원래 숫자 7을 찾을 수 있을까?
5로 나눠서 나머지가 2인 숫자는 무한히 많다. 결과만으로는 원본을 알 수 없다. 이것이 나머지 연산(mod)이 해시에서 핵심적으로 사용되는 이유다.
핵심: 나머지 연산을 하면 몫이라는 정보가 유실된다. 유실된 정보는 복구할 수 없으므로 역계산이 불가능하다.
해시의 핵심 특성 3가지
(1) 단방향성
해시 결과로 원본을 역계산할 수 없다. 위에서 충분히 설명했다.
(2) 고정 길이 출력
입력이 "A" 한 글자든 백과사전 전체든, 해시 결과의 길이는 항상 동일하다.
| 입력 | 길이 | 해시 결과 (예시) | 결과 길이 |
|---|---|---|---|
| "A" | 1글자 | 7fc56270e7a70fa8... | 32바이트 |
| "test string" | 11글자 | 661f8009fa8e56a... | 32바이트 |
| 소설 한 권 전체 | 수만 글자 | a3f2b8c9d1e4f7... | 32바이트 |
길이가 일정하다는 것은 경우의 수가 제한된다는 뜻이다. 그리고 이 범위가 넓을수록 좋은 해시 알고리즘이다.
(3) 충돌 저항성
서로 다른 두 입력이 같은 해시 결과를 내는 것을 **충돌(collision)**이라 한다. 좋은 해시 알고리즘일수록 충돌이 발생하기 어렵다.
3. 체크섬 vs 해시 비교
| 구분 | 체크섬 (Checksum) | 해시 (Hash) |
|---|---|---|
| 목적 | 데이터 오류 검출 | 데이터 무결성 검증 |
| 보안성 | 없음 | 있음 (단방향성) |
| 역계산 | 의미 없음 (재계산 가능) | 불가능 |
| 변조 감지 | 재계산으로 속일 수 있음 | 속이기 매우 어려움 |
| 연산 복잡도 | 매우 단순 (덧셈) | 복잡 (연산량 많음) |
| 사용 사례 | 네트워크 전송 오류 검출 | 패스워드 저장, 인증서 검증, 서명 |
4. 정보보안 3원칙과 해시의 위치
해시는 정보보안 3원칙 중 무결성을 담당한다.
| 원칙 | 영문 | 의미 | 구현 기술 |
|---|---|---|---|
| 기밀성 | Confidentiality | 허가되지 않은 자가 정보에 접근할 수 없다 | 암호화 (대칭키, 비대칭키) |
| 무결성 | Integrity | 정보가 변조되지 않았음을 보장한다 | 해시 |
| 가용성 | Availability | 필요할 때 정보에 접근할 수 있다 | 이중화, 백업 |
5. 해시의 활용 분야
해시는 단방향성 덕분에 다양한 곳에서 사용된다.
핵심 암기 포인트
체크섬: 데이터 오류 검출 목적. 보안성 없음. 누구나 재계산 가능.
해시: 단방향 함수. 결과로 원본 역추적 불가. 고정 길이 출력.
단방향성의 비유: 글자 → 획수는 가능하지만, 획수 → 글자는 불가능.
나머지 연산(mod): 해시의 핵심 원리. 몫이 유실되므로 역계산 불가.
무결성: 정보보안 3원칙 중 하나. 해시로 구현. 데이터가 변조되지 않았음을 보장.
확인 질문
- 체크섬에 보안성이 없다고 말하는 이유는 무엇인가?
- 해시 함수의 "단방향성"을 일상 생활의 예시로 설명해 보라.
- 나머지 연산(mod)이 왜 역계산을 불가능하게 만드는가?
- 체크섬과 해시의 가장 근본적인 차이는 무엇인가?
- 정보보안 3원칙(CIA) 중 해시가 담당하는 것은 무엇이며, 나머지 두 가지는 무엇으로 구현하는가?