SHA-3(Secure Hash Algorithm 3)는 2015년 NIST(미국 국립표준기술연구소)가 표준화한 최신 암호화 해시 함수다. Keccak 팀이 설계한 Keccak 알고리즘을 기반으로 하며, SHA-2와 구조적으로 완전히 다른 스펀지 구조(Sponge Construction)를 채택했다.
기본 특성
| 항목 | 내용 |
|---|
| 표준 | FIPS 202 (2015년 8월) |
| 기반 | Keccak 알고리즘 |
| 구조 | Sponge Construction |
| 상태 크기 | 1600비트 |
| 라운드 | 24라운드 (Keccak-f[1600]) |
| 설계자 | Guido Bertoni 외 3인 |
변형 (Variants)
고정 출력 (Fixed-length)
| 알고리즘 | 출력 길이 | 보안 강도 |
|---|
| SHA3-224 | 224비트 | 112비트 |
| SHA3-256 | 256비트 | 128비트 |
| SHA3-384 | 384비트 | 192비트 |
| SHA3-512 | 512비트 | 256비트 |
가변 출력 (XOF)
| 알고리즘 | 특징 |
|---|
| SHAKE128 | 가변 길이 출력, 128비트 보안 |
| SHAKE256 | 가변 길이 출력, 256비트 보안 |
SHA-2와의 비교
| 항목 | SHA-2 (SHA-256) | SHA-3 (SHA3-256) |
|---|
| 구조 | Merkle-Damgard | Sponge |
| 설계 | NSA | Keccak 팀 |
| 표준화 | 2001년 | 2015년 |
| Length Extension Attack | 취약 | 면역 |
| 보안 | 안전 | 안전 |
코드 예시
python
import hashlib
data = "Hello, SHA-3!"
sha3_256 = hashlib.sha3_256(data.encode()).hexdigest()
print(f"SHA3-256: {sha3_256}")
sha3_512 = hashlib.sha3_512(data.encode()).hexdigest()
print(f"SHA3-512: {sha3_512}")
# SHAKE-256 가변 출력 (64바이트)
shake = hashlib.shake_256(data.encode()).hexdigest(64)
print(f"SHAKE256(64B): {shake}")
이더리움이 사용하는 Keccak-256은 SHA-3 표준화 이전의 원본 Keccak 파라미터를 사용한다. 패딩 방식이 달라 같은 입력에 대해 다른 해시값을 출력한다.
관련 개념
- •SHA-256 — SHA-2 계열의 주요 해시 함수
- •Keccak-256 — SHA-3 기반 이더리움 해시
- •MD5 — 구형 128비트 해시 함수
- •해시 (Hash) — 해시 함수 개요