
암호학
Keccak-256Keccak-256
Keccak-256은 Keccak 알고리즘의 256비트 출력 변형으로, 이더리움(Ethereum)의 핵심 해시 함수다. NIST SHA-3 공모전(2007-2012)에서 우승했으나, 이더리움은 NIST 표준화 이전의 원본 Keccak 파라미터를 그대로 사용한다.
기본 특성
| 항목 | 내용 |
|---|---|
| 설계자 | Guido Bertoni, Joan Daemen, Michael Peeters, Gilles Van Assche |
| 기반 구조 | Sponge Construction (스펀지 구조) |
| 출력 길이 | 256비트 (32바이트, 64자리 16진수) |
| 상태 크기 | 1600비트 |
| 보안 강도 | 128비트 (충돌 저항) |
| 이더리움 채택 | 2013년 (Vitalik Buterin 화이트페이퍼) |
SHA-3와의 차이
Keccak-256과 NIST SHA3-256은 같은 알고리즘이지만 다른 패딩을 사용한다.
| 항목 | Keccak-256 (이더리움) | SHA3-256 (NIST 표준) |
|---|---|---|
| 패딩 | 0x01 | 0x06 |
| 이더리움 사용 | O | X |
| 표준 라이브러리 | 별도 설치 필요 | hashlib 기본 포함 |
이더리움에서의 활용
| 용도 | 설명 |
|---|---|
| 주소 생성 | 공개키(64바이트) → Keccak-256 → 마지막 20바이트 = 이더리움 주소 |
| 트랜잭션 해시 | 트랜잭션 데이터의 고유 식별자 |
| 블록 해시 | 블록 헤더의 해시 |
| EVM 내장 | KECCAK256 opcode로 스마트 컨트랙트에서 직접 호출 |
| ABI 인코딩 | 함수 선택자: 함수 시그니처 Keccak-256의 첫 4바이트 |
스펀지 구조 (Sponge Construction)
기존 Merkle-Damgard 구조와 달리, Keccak은 스펀지 구조를 사용한다.
- •Absorbing — 입력 블록을 상태에 XOR 후 Keccak-f 치환 반복
- •Squeezing — 상태에서 출력 블록 추출 후 Keccak-f 치환 반복
Keccak-f는 5개의 스텝 매핑(theta, rho, pi, chi, iota)을 24라운드 반복한다.