Hash해시
해시(Hash)는 임의 길이의 데이터를 고정 길이의 문자열로 변환하는 단방향 함수의 출력값이다. 해시 함수는 같은 입력에 대해 항상 같은 출력을 내고, 출력으로 원본을 역추적하는 것은 계산적으로 불가능하다. 블록체인의 무결성·보안·PoW (작업증명) 등 핵심 메커니즘의 토대가 된다.
해시 함수의 특성
| 특성 | 설명 |
|---|---|
| 결정론적 | 같은 입력 → 항상 같은 해시 |
| 단방향성 | 해시 → 원본 역추적 불가 (일방향 암호화) |
| 눈사태 효과 | 입력 1비트 변경 → 출력 완전히 달라짐 |
| 충돌 저항성 | 같은 해시를 가진 두 입력 찾기 매우 어려움 |
| 고정 길이 | 입력 크기 무관하게 출력 길이 일정 |
| 빠른 연산 | 적은 시스템 자원으로 빠르게 계산 가능 |
주요 해시 알고리즘
| 알고리즘 | 출력 길이 | 특징 및 활용 |
|---|---|---|
| MD5 | 128비트 | 임의 길이를 128비트로 변환. 충돌 취약점 발견으로 보안 용도 부적합, 파일 무결성 검사에 제한적 사용 |
| SHA-256 | 256비트 | NSA 설계, NIST 채택. Bitcoin 채굴·블록 해시 |
| Keccak-256 | 256비트 | SHA-3의 기반. Ethereum 주소·EVM 내장 |
| SHA-3 | 256/512비트 | Keccak 기반 최신 표준. 다양한 보안 응용 |
| RIPEMD-160 | 160비트 | Bitcoin 주소 생성에 SHA-256과 함께 사용 |
해시 테이블 (Hash Table)
해시를 자료구조에 응용한 것이 해시 테이블이다. 키(Key)를 해시 함수로 변환해 인덱스로 사용하므로, 데이터 검색·삽입·삭제를 평균 O(1) 시간에 수행할 수 있다.
| 연산 | 평균 시간복잡도 | 최악 시간복잡도 |
|---|---|---|
| 검색 | O(1) | O(N) (해시 충돌 시) |
| 삽입 | O(1) | O(N) |
| 삭제 | O(1) | O(N) |
Python의 dict, Java의 HashMap, JavaScript의 Object·Map이 해시 테이블 기반이다.
해시 충돌과 해결 방법
서로 다른 두 입력이 같은 해시값을 가지는 현상을 해시 충돌(Hash Collision)이라 한다. 완전히 피할 수는 없으므로 해결 전략이 필요하다.
Chaining (체이닝)
같은 인덱스에 충돌한 항목들을 연결 리스트로 연결해 관리한다.
- •장점: 메모리 효율적, 구현 단순
- •단점: 최악의 경우 O(N), 포인터 메모리 오버헤드
Open Addressing (개방 주소법)
충돌 발생 시 다른 빈 버킷을 찾아 저장한다. 대표적으로 선형 탐사(Linear Probing) 방식이 있다.
- •장점: 추가 메모리 불필요, 캐시 효율적
- •단점: 데이터 밀집(클러스터링) 현상, 적재율이 높아지면 성능 저하
코드 예시
블록체인에서의 역할
블록 연결
각 블록 헤더에 이전 블록의 해시가 포함되어, 하나를 변조하면 이후 모든 블록의 해시가 달라진다 → 위변조 불가.
PoW (작업증명) 채굴
특정 조건(난스Nonce를 포함해 해시 앞부분이 0으로 시작)을 만족하는 해시를 찾는 것이 채굴 작업.
지갑 주소 생성
공개키에 해시 함수를 적용해 짧고 고유한 지갑 주소 생성.
머클 트리 (Merkle Tree)
트랜잭션들을 쌍으로 해시하고 반복해 최종 루트 해시(Merkle Root) 생성 → 블록 내 트랜잭션 무결성 검증.
실무 활용
| 분야 | 활용 |
|---|---|
| 메시지 무결성 | 전송된 데이터가 변조됐는지 해시 비교로 확인 |
| 패스워드 저장 | 원문 대신 해시를 DB에 저장. 유출돼도 원본 복구 불가 |
| 디지털 서명 | 문서의 해시에 개인 키로 서명해 위조 방지 |
| OTP 생성 | 시간 기반 해시로 일회용 패스워드 생성 (TOTP) |
| 소프트웨어 배포 | 다운로드 파일의 해시를 공개해 변조 여부 검증 |
| 캐시 키 | URL·쿼리를 해시해 캐시 저장 키로 사용 |
| 분산 시스템 | 일관성 해싱(Consistent Hashing)으로 서버 부하 분산 |
관련 개념
- •Bitcoin — SHA-256 해시로 채굴하는 블록체인
- •Ethereum — Keccak-256 해시 사용
- •PoW (작업증명) — 해시 퍼즐 풀기가 핵심
- •EVM — Keccak-256 내장
- •머클 트리 — 해시를 계층적으로 조합한 자료구조
참고문헌
- 1.colorful8315. (2024). Hash란 무엇인가. Velog.
- 2.Nakamoto, S. (2008). Bitcoin: A Peer-to-Peer Electronic Cash System.
- 3.NIST. Secure Hash Standard (SHS). https://csrc.nist.gov/publications/detail/fips/180/4/final