암호학
SHA-256SHA-256
SHA-256(Secure Hash Algorithm 256-bit)은 미국 국가안보국(NSA)이 설계하고 NIST가 표준화한 암호학적 해시 함수다. 임의 길이의 입력을 항상 256비트(32바이트) 고정 길이 출력으로 변환한다. Bitcoin 채굴·블록 해싱, SSL/TLS 인증서, 디지털 서명 등 현대 보안 시스템의 핵심 알고리즘이다.
핵심 특성
| 특성 | 설명 |
|---|---|
| 결정론적 | 같은 입력 → 항상 같은 출력 |
| 단방향성 | 해시값으로 원본 복원 불가 |
| 눈사태 효과 | 입력 1비트 변경 → 출력 완전히 달라짐 |
| 충돌 저항성 | 같은 해시를 가진 두 입력 찾기 불가 |
| 고정 출력 | 입력 크기 무관, 항상 256비트 출력 |
예시
SHA-2 패밀리
| 알고리즘 | 출력 크기 | 특징 |
|---|---|---|
| SHA-224 | 224비트 | SHA-256의 단축 버전 |
| SHA-256 | 256비트 | 가장 널리 사용 |
| SHA-384 | 384비트 | SHA-512 기반 단축 |
| SHA-512 | 512비트 | 64비트 시스템 최적화 |
동작 원리 (압축 함수)
Bitcoin에서의 활용
SHA-256은 Bitcoin의 핵심 알고리즘이다.
블록 해싱
채굴 (Mining)
주소 생성
개인키 → ECDSA 공개키 → SHA-256 → RIPEMD-160 → Bitcoin 주소
머클 트리 (Merkle Tree)
Bitcoin 블록의 모든 트랜잭션을 SHA-256으로 머클 트리에 압축 저장.
코드 예시
SHA-256 vs 다른 해시 함수
| 함수 | 출력 | 속도 | 용도 |
|---|---|---|---|
| SHA-256 | 256비트 | 중간 | 보안 일반, Bitcoin |
| SHA-3 (Keccak) | 256비트 | 느림 | Ethereum, 최신 표준 |
| MD5 | 128비트 | 빠름 | 파일 체크섬 (보안 취약) |
| bcrypt | 60자 | 매우 느림 | 비밀번호 저장 |
| BLAKE2 | 256비트 | 빠름 | 고성능 해싱 |
SHA-256은 빠른 만큼 비밀번호 해싱에는 부적합하다. 비밀번호는 의도적으로 느린 bcrypt나 Argon2를 사용해야 한다.
HMAC (Hash-based Message Authentication Code)
SHA-256과 비밀 키를 결합해 메시지 인증에 활용하는 방식.
HMAC-SHA256(key, message) = SHA256((key ⊕ opad) || SHA256((key ⊕ ipad) || message))
- •API 요청 서명 (AWS Signature V4)
- •JWT 서명 (HMAC-SHA256)
- •웹훅 페이로드 검증
비밀 키 없이는 올바른 HMAC을 생성할 수 없어, 무결성과 인증을 동시에 보장.
SHA-256의 한계
- •양자 컴퓨터: 그로버 알고리즘으로 SHA-256의 유효 보안 강도가 128비트로 줄어들 수 있음 → NIST는 SHA-3 또는 SHA-512 권장
- •길이 연장 공격(Length Extension Attack): SHA-256은 취약 (HMAC 사용으로 방어)
관련 개념
- •해시 (Hash) — 해시 함수 일반 개념
- •bcrypt — 비밀번호 전용 해시 함수
- •Bitcoin — SHA-256을 채굴·블록 해싱에 사용
- •머클 트리 — SHA-256으로 구성되는 트리 구조
- •SSL/TLS — TLS 인증서 서명에 SHA-256 사용
- •공개키 암호화 — SHA-256과 함께 디지털 서명 구성
참고문헌
- •NIST FIPS PUB 180-4 — Secure Hash Standard (SHS)
- •Nakamoto, S. (2008). Bitcoin: A Peer-to-Peer Electronic Cash System
- •Ferguson, N. et al. (2010). Cryptography Engineering