해시 함수(Hash Function)는 임의 길이의 입력 데이터를 고정된 길이의 출력값(해시값, 다이제스트)으로 변환하는 단방향 수학 함수다. 암호학, 데이터 무결성 검증, 자료구조, 블록체인 등 현대 컴퓨팅의 핵심 기반 기술로 사용된다.
핵심 특성
1. 결정론적(Deterministic): 동일 입력은 항상 동일 출력을 생성한다.
2. 단방향성(One-way): 해시값으로부터 원본 데이터를 역산하는 것이 계산적으로 불가능하다.
3. 충돌 저항성(Collision Resistance): 서로 다른 두 입력이 동일 해시값을 생성하는 경우(충돌)를 찾기 극히 어렵다.
4. 눈사태 효과(Avalanche Effect): 입력의 1비트 변화가 출력의 약 50% 비트를 변화시킨다.
5. 고정 길이 출력: 입력 크기에 무관하게 출력 길이가 일정하다.
주요 알고리즘
MD5 (Message Digest 5)
128비트(32자리 16진수) 출력
1991년 Ron Rivest 설계
현재 암호학적으로 파괴됨: 2004년 Wang Xiaoyun 팀이 충돌 쌍 생성 기법 발표. 현재 수초 내 충돌 생성 가능
암호학적 용도로 사용 금지; 비암호학적 체크섬 용도로만 제한 사용
SHA-1 (Secure Hash Algorithm 1)
160비트 출력
2017년 구글 SHAttered 프로젝트로 실제 충돌 쌍 공개
NIST에 의해 2011년 공식 사용 중단 권고
SHA-256 / SHA-2 계열
SHA-256: 256비트 출력 / SHA-512: 512비트 출력
NIST FIPS 180-4 표준
현재 가장 널리 사용되는 암호학적 해시 함수
TLS/SSL, 비트코인, 코드 서명, 비밀번호 저장(PBKDF2 등) 등에 활용
양자 컴퓨터에 대한 그로버 알고리즘 공격 시 보안 강도 절반으로 감소 → 256비트가 128비트 수준으로
SHA-3 (Keccak)
2015년 NIST 표준화
SHA-2와 완전히 다른 스펀지 구조(Sponge Construction) 사용
이더리움 블록체인이 Keccak-256 사용
BLAKE3
2020년 발표, SHA-256 대비 수배~수십 배 빠른 처리 속도
병렬화 최적화, 현대 하드웨어에 적합
비밀번호 저장에서의 해시
단순 SHA-256으로 비밀번호를 저장하는 것은 불충분하다. 레인보우 테이블 공격과 브루트 포스에 취약하기 때문이다.
올바른 비밀번호 해싱 방식:
bcrypt: 비용 인수(cost factor)로 연산 속도 조절 가능, 솔트 내장
scrypt: 메모리 집약적 설계로 GPU 병렬 공격 방어
Argon2: 2015년 Password Hashing Competition 우승, id2 모드 권장
PBKDF2: NIST/FIPS 표준, 반복 횟수 설정 가능
핵심 원칙: 솔트(무작위 값)를 비밀번호에 추가하여 해싱하면 동일 비밀번호도 다른 해시값 생성.
블록체인에서의 활용
비트코인: SHA-256 이중 해싱으로 블록 헤더 해시 생성; 작업증명(PoW) 채굴에서 특정 조건의 해시값 탐색
블록 연결: 각 블록이 이전 블록의 해시값을 포함하여 변경 불가능한 체인 형성
머클 트리(Merkle Tree): 트랜잭션을 해시로 이진 트리 구성, 효율적 검증
이더리움: Keccak-256 활용, 스마트 컨트랙트 주소 생성
취약점 및 공격 유형
| 공격 유형 | 설명 |
|-----------|------|
| 레인보우 테이블 | 해시값→원문 역조회 테이블; 솔트로 방어 |
| 생일 공격(Birthday Attack) | 확률론적 충돌 탐색; n비트 함수는 약 2^(n/2)회 시도로 충돌 발견 가능 |
| 길이 확장 공격(Length Extension) | SHA-1/SHA-2 취약점; SHA-3, BLAKE3는 해당 없음 |
| 양자 컴퓨팅 | 그로버 알고리즘으로 2차 가속; 256비트 이상 권장 |
비암호학적 해시 함수
성능 최적화 목적의 해시 함수는 암호학적 강도보다 속도를 우선한다.
MurmurHash, xxHash: 해시 테이블, 데이터베이스 인덱싱
CRC32: 네트워크 패킷 오류 검출
이 함수들은 의도적 충돌 생성이 가능하므로 보안 목적 사용 금지
현황 및 권고사항 (2026 기준)
신규 시스템: SHA-256 이상 또는 SHA-3 사용
비밀번호: Argon2id 우선, bcrypt/scrypt 차선
MD5/SHA-1: 즉시 폐기
양자 내성 고려 시: SHA-384/SHA-512 또는 SHA-3-256 이상 권장
해시 함수란? (청소년을 위한 설명)
한 줄 요약
해시 함수는 어떤 데이터든 받아서 정해진 길이의 암호 같은 문자열로 바꿔주는 마법 같은 함수야.
쉬운 비유로 이해하기
음식을 믹서기에 갈면 어떻게 될까? 어떤 재료를 넣든 결과물은 항상 같은 컵에 담기고, 원래 재료가 뭔지 역으로 알아내기 거의 불가능해. 해시 함수가 딱 이런 원리야.
예를 들어 SHA-256이라는 해시 함수에 넣으면:
"안녕" → a3b4c5d6... (64자리 문자열)
"안녕하세요" → f8e7d6c5... (64자리 문자열)
소설 전체를 넣어도 → (64자리 문자열)
입력이 얼마나 크든 작든 항상 64자리가 나와!
해시 함수의 특징 3가지
1. 돌아오는 길이 없다 (단방향)
결과값을 보고 원래 데이터를 알아낼 수가 없어. 믹서기에 간 음식을 다시 원래대로 되돌릴 수 없는 것처럼.
2. 조금만 바꿔도 완전히 달라진다 (눈사태 효과)
"안녕"과 "안녕!"의 해시값은 완전히 다른 문자열이야. 글자 하나 차이인데 결과는 50% 이상 바뀐다!
3. 같은 입력 → 항상 같은 결과
"안녕"을 넣으면 언제 어디서나 항상 똑같은 해시값이 나와.
실생활에서 어디에 쓰일까?
비밀번호 저장
웹사이트들은 네 비밀번호를 그대로 저장하지 않아. 해시값으로 변환해서 저장해. 그래서 해킹을 당해도 진짜 비밀번호는 노출되지 않아.
네가 로그인할 때: 비밀번호 입력 → 해시 변환 → 저장된 해시값과 비교 → 로그인 성공/실패
파일 무결성 확인
소프트웨어를 다운로드할 때 "SHA-256: abc123..."라고 쓰여 있는 거 본 적 있어? 이걸 확인하면 파일이 중간에 변조되지 않았는지 알 수 있어.
블록체인과 비트코인
비트코인은 SHA-256을 사용해. 모든 거래 기록을 해시로 연결하면 과거 기록을 몰래 수정하는 게 불가능해져.
MD5는 왜 위험할까?
MD5는 오래된 해시 함수인데, 2004년에 중국 수학자들이 다른 두 파일에서 같은 해시값을 만드는 방법을 발견했어. 이걸 "충돌"이라고 해. 충돌이 가능하면 위조 서류를 만드는 게 가능해지므로 MD5는 보안 용도로 사용하면 안 돼.
SHA-256이 안전한 이유
SHA-256의 경우의 수는 2의 256승 = 우주의 원자 수보다 훨씬 많아서 억지로 뚫는 건 사실상 불가능해.
정리
| | MD5 | SHA-1 | SHA-256 |
|--|-----|-------|---------|
| 출력 길이 | 32자리 | 40자리 | 64자리 |
| 현재 안전한가? | ❌ 위험 | ❌ 위험 | ✅ 안전 |
| 주요 용도 | 사용 금지 | 사용 금지 | 비밀번호, 블록체인, SSL |
해시 함수 - 데이터를 변신시키는 마법 함수!
해시 함수가 뭐예요?
해시 함수는 컴퓨터 세계의 마법 분쇄기예요!
어떤 글이나 파일을 넣으면, 항상 정해진 길이의 암호 문자열로 바꿔줘요.
짧은 글을 넣어도, 아주 긴 책을 넣어도 결과물의 길이는 항상 똑같아요!
믹서기처럼 생각해봐요
🍎 사과를 믹서기에 넣으면 → 사과 주스
🍌 바나나를 믹서기에 넣으면 → 바나나 주스
그런데 이 주스를 다시 원래 과일로 되돌릴 수 있을까요? 절대 안 되죠!
해시 함수도 똑같아요. 한번 변환하면 되돌릴 수가 없어요.
어떻게 생겼어요?
"안녕"이라는 글자를 SHA-256 해시 함수에 넣으면 이렇게 변해요:
``
안녕 → a3b4c5d6e7f8... (긴 암호 같은 문자열)
`
"안녕하세요"를 넣으면 완전히 다른 문자열이 나와요:
`
안녕하세요 → f9e8d7c6b5... (전혀 다른 암호 문자열)
``
어디에 쓰여요?
비밀번호를 안전하게 보관해요
여러분이 게임 사이트에 가입할 때 비밀번호를 정하잖아요?
사이트는 그 비밀번호를 그대로 저장하지 않아요.
해시 함수로 변환한 값을 저장해요.
그래서 나쁜 사람이 사이트를 해킹해도 진짜 비밀번호는 알 수 없어요!
파일이 바뀌지 않았는지 확인해요
게임을 다운받을 때 "해시값"을 비교하면 파일이 안전한지 확인할 수 있어요.
블록체인에서 사용해요
비트코인 같은 암호화폐는 해시 함수로 거래 기록을 연결해요. 한번 기록되면 아무도 바꿀 수 없어요!
중요한 종류 두 가지
SHA-256: 지금 가장 많이 쓰이는 안전한 해시 함수예요. 비트코인도 이걸 써요!
MD5: 오래됐고 이제는 안전하지 않아서 중요한 곳에는 쓰지 않아요.
해시 함수의 신기한 점
글자 하나만 달라도 결과가 완전히 달라져요
아무리 긴 글을 넣어도 결과 길이는 같아요
역으로 되돌리는 건 불가능해요
이런 특징 덕분에 해시 함수는 인터넷을 안전하게 지키는 중요한 도구예요!
Hash Function
Overview
A hash function is a deterministic mathematical algorithm that converts input data of arbitrary length into a fixed-length output (hash value or digest). It serves as a foundational technology across various modern computing domains including cryptography, data integrity verification, data structures, and blockchain technology.
Core Characteristics
1. Deterministic: Identical inputs always produce identical outputs.
2. One-Way: Reversing the original data from its hash value computationally infeasible.
3. Collision Resistance: Extremely difficult to find collisions—instances where different inputs produce the same hash value.
4. Avalanche Effect: A minor change in input (about 50%) significantly alters the output hash value.
5. Fixed Output Length: Output length remains constant regardless of input size.
Major Algorithms
MD5 (Message Digest 5)
Output: 128 bits (32 hexadecimal characters)
Designer: Ron Rivest (1991)
Current Status: Cryptographically Broken: Collision pairs were demonstrated by Wang Xiaoyun's team in 2004, allowing collisions within seconds.
Usage: Restricted to non-cryptographic checksum purposes only.
SHA-1 (Secure Hash Algorithm 1)
Output: 160 bits
Notable Event: Google's SHAttered project revealed actual collision pairs in 2017.
Official Discontinuation: NIST recommended discontinuation in 2011.