FIPS 202는 SHA3-256을 KECCAK[512](M || 01, 256)으로 정의합니다. 메시지 뒤에 두 비트 01을 붙이고, 용량을 출력 길이의 두 배로 잡는 것이 핵심입니다. 이 글은 2026-10-27에 받아 연 FIPS 202(2015년 8월) PDF의 본문으로 확인한 범위만 다룹니다.
확인 기준일 2026-10-27 · 다음 확인 예정 2026-11-26
01 접미는 왜 붙을까?
원문은 SHA-3 해시 네 종이 SHA-3 대회에 제안된 KECCAK과 조금 다르며, 특히 메시지에 두 비트 접미가 붙는다고 밝힙니다. 이 접미는 해시 함수 입력과 확장 출력 함수(XOF) 입력을 구별하고 앞으로 응용 분야별 변형을 만들기 쉽게 하는 도메인 분리 장치입니다. 해시를 어디에 쓰는지 읽는 법은 머클 증명 글에서 이어집니다.
| 함수 | 정의 | 출력 |
|---|---|---|
| SHA3-224 | KECCAK[448](M || 01, 224) | 224비트 |
| SHA3-256 | KECCAK[512](M || 01, 256) | 256비트 |
| SHA3-384 | KECCAK[768](M || 01, 384) | 384비트 |
| SHA3-512 | KECCAK[1024](M || 01, 512) | 512비트 |
| SHAKE128 | KECCAK[256](M || 1111, d) | 임의 길이 d |
| SHAKE256 | KECCAK[512](M || 1111, d) | 임의 길이 d |
용량과 rate는 어떻게 정해질까?
KECCAK[c]는 KECCAK-p[1600, 24] 순열과 패딩 pad10*1을 쓰고 rate는 1600−c입니다. SHA-3 해시는 용량이 출력 길이의 두 배라서 SHA3-256의 rate는 1088비트입니다. 순열 KECCAK-p[1600, 24]는 KECCAK-f[1600]와 같다고 원문이 적습니다. 패딩 pad10*1은 1, 0 여러 개, 1로 이뤄지며 0의 개수는 길이가 rate의 배수가 되도록 정해집니다.
SHAKE는 SHA-3 해시와 무엇이 다를까?
SHAKE128과 SHAKE256은 출력 길이 d를 정할 수 있는 XOF이고 접미는 1111입니다. 이름의 128, 256은 지원하는 보안 강도를 뜻해, 해시 이름의 숫자가 출력 길이인 것과 다릅니다. 원문은 SHAKE128(M, d)가 RawSHAKE128(M || 11, d)와 같다는 다른 정의도 줍니다.
이 표준만으로 판단할 수 없는 것은?
원문은 이더리움 같은 특정 체인을 언급하지 않으므로, 체인이 어느 방식을 쓰는지는 해당 체인의 명세에서 따로 확인해야 합니다. 해시 결과를 쓰는 규칙의 예는 EIP-55 체크섬 글에 있습니다. 파일 검증에 해시를 쓸 때의 한계는 설치 파일 서명 검증 글을 보세요.
자주 묻는 질문
SHA3-256과 SHAKE256은 같은 함수인가요?
아닙니다. 용량은 같은 512이지만 접미가 01과 1111로 다르고, SHAKE256은 출력 길이를 d로 고를 수 있습니다.
XOF는 무엇을 뜻하나요?
원문은 출력을 원하는 길이로 늘일 수 있는 함수라고 설명하며, SHAKE128과 SHAKE256이 NIST가 처음 표준화한 XOF입니다.
접미 01이 없으면 어떻게 되나요?
정의상 KECCAK[c]에 들어가는 입력 N이 M || 01이므로, 접미 없이 같은 메시지를 넣으면 입력이 다릅니다.
SHA3-256의 다이제스트 길이는?
256비트입니다. 용량 c는 512비트로 출력 길이의 두 배이고 상태 크기는 1600비트입니다.



