# 해시 함수 (Hash Function)

해시 함수(Hash Function)는 임의의 크기 데이터를 고정 크기 데이터로 매핑하는 데 사용할 수 있는 모든 수학 함수입니다. 같은 입력에는 항상 같은 출력(해시값, 다이제스트)이 나옵니다. 암호화에서 쓰는 암호학적 해시 함수는 출력에서 입력을 되찾기 어려운 단방향 함수이며, 블록체인에서는 블록 연결, 주소 생성, 디지털 서명, 작업 증명 채굴 등에 쓰입니다.

## 암호학적 해시 함수의 성질

- **고정 길이 출력:** 작은 거래 확인서를 입력하든 전체 거래 내역을 입력하든 출력은 항상 같은 길이입니다. 예를 들어 SHA-256의 출력은 언제나 256비트입니다.
- **역상 저항성(단방향성):** 해시값만 보고 그 해시값을 만드는 입력을 찾는 것이 계산상 사실상 불가능합니다.
- **제2 역상 저항성:** 어떤 입력이 주어졌을 때, 같은 해시값을 내는 다른 입력을 찾기 어렵습니다.
- **충돌 저항성:** 같은 해시값을 내는 서로 다른 두 입력을 찾기 어렵습니다.
- **눈사태 효과:** 입력이 한 비트만 바뀌어도 출력이 완전히 달라지므로, 데이터가 조금이라도 변조되면 쉽게 드러납니다.

## 실생활 예시

- **도서관 도서 코드:** 도서관에 크기가 제각각인 책이 있다고 생각해 보십시오. 해시 함수는 책의 길이에 관계없이 책의 내용으로부터 같은 길이의 코드를 계산하는 것과 같습니다. 코드의 가짓수는 유한하므로 이론상 서로 다른 책이 같은 코드를 받을 수 있지만, 좋은 해시 함수에서는 그런 쌍을 찾는 것이 사실상 불가능합니다.
- **베이킹 레시피:** 여러 재료(데이터)를 섞어 케이크(해시)를 굽는 과정을 생각해 보십시오. 재료의 종류나 양과 관계없이 결과물은 항상 같은 크기의 케이크 1개이고, 구운 케이크를 다시 재료로 되돌릴 수는 없습니다.

## 주요 용도

- **데이터 무결성 검증:** 파일이나 메시지의 해시값을 함께 공개하면, 받은 쪽이 다시 해시를 계산해 비교함으로써 변조 여부를 확인할 수 있습니다.
- **블록체인 구조:** 각 블록은 이전 블록의 해시를 담고 있어, 과거 블록을 고치면 이후 모든 블록의 연결이 깨집니다. 블록 안의 거래는 머클 트리로 해시되어 하나의 루트 해시로 요약됩니다.
- **비밀번호 저장:** 시스템은 비밀번호를 일반 텍스트로 저장하는 대신 해시값을 저장하고, 로그인할 때 입력된 비밀번호의 해시와 비교합니다. 누군가 저장된 정보에 접근하더라도 해시에서 실제 비밀번호를 직접 알아내기는 어렵습니다. 다만 짧거나 흔한 비밀번호는 대입 공격으로 찾아낼 수 있으므로, 실제로는 솔트를 더하고 bcrypt나 Argon2처럼 일부러 느리게 만든 함수를 씁니다.
- **디지털 서명:** 긴 문서나 트랜잭션 전체 대신 그 해시값에 서명하므로, 서명의 진위성과 무결성을 효율적으로 검증할 수 있습니다.
- **작업 증명 채굴:** 비트코인 같은 작업 증명 방식에서 채굴자는 블록 헤더의 논스(nonce)를 바꿔 가며 해시값이 목표값보다 작아질 때까지 계산을 반복합니다. 이런 해시를 미리 예측할 방법이 없으므로 많은 계산을 한 쪽이 블록을 추가할 가능성이 높아지며, 이것이 네트워크 보안에 기여합니다.

## 해시 함수의 한계

- **충돌:** 두 개의 다른 입력이 동일한 해시를 생성하는 것을 충돌이라고 합니다. 출력 길이가 고정되어 있으므로 충돌은 원리상 반드시 존재합니다. 강력한 해시 함수에서는 충돌을 찾는 것이 계산상 사실상 불가능하지만, MD5나 SHA-1처럼 실제 충돌이 발견된 함수도 있습니다.
- **무차별 대입 공격:** 공격자는 가능한 입력을 하나씩 해시해 원하는 해시를 생성하는 입력을 찾으려고 시도할 수 있습니다. 그렇기 때문에 강력하고 긴 비밀번호와 강력한 해시 함수를 사용하는 것이 중요합니다.
- **보안은 해시만으로 정해지지 않음:** 해시 함수는 블록체인 기록을 사후에 변경하기 어렵게 만드는 요소 중 하나입니다. 다만 기록의 안전성은 해시 함수뿐 아니라 합의 메커니즘과 네트워크 참여자 분포에도 달려 있습니다.

---
출처: https://achivx.kr/glossary/hash-function-%ED%95%B4%EC%8B%9C-%ED%95%A8%EC%88%98/ · ACHIVX 용어 사전 · 수정일 2026-10-20
