SHA-3 암호엔진 구조와 Verilog 설계 완전정복
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
🔐 SHA-3 암호 엔진과 SHAKE/cSHAKE/KMAC: 알고리즘부터 Verilog RTL까지
📅 2026-05-13 · IT/과학 · 암호 하드웨어 · PQC
NIST가 2015년 FIPS 202로 공표한 SHA-3는 단순한 차세대 해시가 아니다. 스펀지 구성(Sponge Construction)이라는 단일 프리미티브 위에서 해시·XOF·MAC·KDF를 한 코어로 처리할 수 있는 멀티퍼퍼스 암호 엔진의 기반이며, 양자내성암호(PQC) 표준 ML-KEM·ML-DSA·SLH-DSA가 모두 SHAKE 계열에 의존하는 만큼 차세대 보안 SoC의 필수 IP로 자리잡고 있다. 본 글은 알고리즘 수학적 정의부터 Verilog RTL 설계 트레이드오프, 부채널 저항성까지 종합 정리한다.
1. 🧽 스펀지 구성: SHA-2와 결별한 새 패러다임
SHA-1과 SHA-2는 머클-담가드(Merkle-Damgård) 구조를 채택했지만, 이 방식은 길이 확장 공격(Length-extension attack)에 취약했다. 공격자가 원본을 모른 채 H(M) 값만으로 H(M‖suffix)를 만들 수 있어 HMAC 같은 별도 래퍼가 강제됐다. SHA-3는 이를 구조적으로 차단하기 위해 스펀지 구성을 도입했다.
🔄 2단계 동작 메커니즘
▶ 흡수(Absorbing): 입력 메시지를 rate r비트 블록으로 분할 → 내부 상태와 XOR → 블록마다 Keccak-f[1600] 순열 1회 적용
▶ 스퀴징(Squeezing): 흡수 종료 후 내부 상태에서 r비트씩 출력 추출 → 더 많은 출력이 필요하면 Keccak-f 재호출
▶ 내부 상태 b = r + c = 1600비트 고정. Capacity c가 보안 강도를 결정.
📊 흡수→스퀴징 데이터 흐름
2. ⚙️ Keccak-f[1600] 라운드 함수 분해
코어 순열은 24라운드에 걸쳐 5단계 변환을 반복한다. 곱셈·덧셈이 전혀 없고 비트 논리 연산만 사용한다는 점이 SHA-3가 하드웨어 친화적인 결정적 이유다.
| 단계 | 기호 | 역할 | 하드웨어 비용 |
|---|---|---|---|
| Theta | θ | 열(column) 단위 확산 | XOR 트리만 사용 |
| Rho | ρ | 레인별 비트 회전 | 배선(wire)만 — 0 게이트 |
| Pi | π | 비트 위치 재배치 | 배선(wire)만 — 0 게이트 |
| Chi | χ | 유일한 비선형 변환 | AND·NOT·XOR (면적 핵심) |
| Iota | ι | 대칭성 파괴 | 라운드 상수 24개 LUT |
💡 χ만 비선형이라 실제 게이트가 발생하고, ρ/π는 "배선만 다시 그으면 끝"이다. 그래서 RTL 면적의 대부분이 χ 게이트와 1600-bit 상태 플립플롭에서 나온다. — FIPS 202 §3.2
3. 🌐 SHA-3 패밀리와 SHAKE — XOF의 위력
3.1 고정 출력 해시 (FIPS 202)
SHA3-224 / SHA3-256 / SHA3-384 / SHA3-512 — 출력 길이가 함수 이름의 숫자(비트)로 고정. 보안 강도는 Capacity의 절반(c/2) 비트.
📐 보안 파라미터 비교
3.2 SHAKE — Extendable-Output Function
SHAKE128(M, L): 보안강도 128비트, L비트 가변 출력
SHAKE256(M, L): 보안강도 256비트, L비트 가변 출력
▶ 동일 입력의 짧은 출력은 긴 출력의 정확한 prefix가 된다. 이 성질로 PRNG, KDF, 마스크 생성, SPHINCS+·Dilithium 같은 PQC 서명에 자연스럽게 활용된다.
▶ 도메인 분리: 메시지 끝에 1111 접미사 + pad10*1 부착 (SHA-3 해시는 01). 이 2비트 차이가 같은 Keccak-f를 공유하면서도 패밀리를 분리한다.
4. 🔑 cSHAKE와 KMAC: SP 800-185가 정의하는 인코딩 계층
4.1 인코딩 보조 함수 — "왜 필요한가"
가변 길이 인자(키, 커스터마이징 문자열, 출력 길이)를 한 스트림에 흡수시킬 때 경계 모호성이 생기면 서로 다른 입력 조합이 같은 해시로 충돌할 수 있다. SP 800-185는 이를 차단하는 4개의 인코딩 함수를 정의한다.
| 함수 | 정의 | 용도 |
|---|---|---|
| left_encode(x) | 바이트 수 n을 앞에 prefix | 길이를 메시지 앞에 표시 |
| right_encode(x) | 바이트 수 n을 뒤에 suffix | KMAC의 출력 길이 L 명시 |
| encode_string(S) | left_encode(비트길이) ‖ S | 문자열 모호성 제거 |
| bytepad(X, w) | w 바이트 배수까지 0 패딩 | rate 경계 정렬 |
4.2 cSHAKE — 도메인 분리 가능한 SHAKE
cSHAKE128(X, L, N, S) = KECCAK[256] ( bytepad(encode_string(N) ‖ encode_string(S), 168) ‖ X ‖ 00 , L )
▶ N: NIST 예약 함수 이름 (KMAC, TupleHash 등). 사용자 응용에서는 빈 문자열.
▶ S: 응용 측 커스터마이징 문자열 (도메인 분리용)
▶ 168: SHAKE128 rate (1344 bit). SHAKE256은 136바이트.
▶ 접미사 00: cSHAKE 도메인을 일반 SHAKE(1111)와 분리
※ N과 S가 모두 비어있으면 정의상 일반 SHAKE로 폴백 (SP 800-185 §3.3)
4.3 KMAC — Keccak Message Authentication Code
KMAC128(K, X, L, S) = cSHAKE128 ( bytepad(encode_string(K), 168) ‖ X ‖ right_encode(L), L, "KMAC", S )
왜 안전한가: 키 K를 메시지 앞에 흡수시킨 뒤 출력 길이 L을 right_encode로 메시지 끝에 명시한다. 동일 (K, X) 쌍이라도 L이 다르면 출력이 통계적으로 독립이라 prefix-relation 공격이 차단된다. HMAC이 해시를 두 번 호출해야 했던 비효율을 단일 스펀지로 해소한 것이 가장 큰 실용적 가치다.
📋 KMAC 동작 시퀀스 — 키 32B + "Hello" 메시지 예시
5. 🔧 Verilog 하드웨어 구현 — 핵심 설계 트레이드오프
5.1 데이터패스 폭과 면적/성능 매트릭스
| 구조 | 처리 단위 | ASIC GE | Throughput |
|---|---|---|---|
| Serialized (8/16-bit) | 다중 클럭/라운드 | 2.5k – 5k | 수백 Mbps |
| Iterative (1라운드/클럭) | 1600-bit | 10k – 25k | 8 – 15 Gbps |
| Pipelined (Unrolled) | 다단 파이프 | 40k – 100k+ | 최대 100 Gbps |
📊 구조별 Throughput 비교 (대략값)
5.2 라운드 회로의 실제 RTL 구조
권장 구조 = 상태 레지스터(1600-bit) + 조합 라운드 함수(θ→ρ→π→χ→ι) + 24-카운트 FSM
▶ θ: 8-input XOR이 25개 column 각각에서 발생하는 column-parity XOR 트리
▶ ρ: 비트 회전 — 배선 reorder만으로 0 게이트
▶ π: lane swap — wire-only
▶ χ: a ⊕ ((¬b) ∧ c)를 lane 25개 × 64비트마다 평가 — 실제 게이트 발생
▶ ι: 24개 라운드 상수 LUT
5.3 라우팅 혼잡(Routing Congestion)
ρ/π가 wire-only인 대신 1600개의 비트가 사실상 임의 위치로 셔플된다. 이 때문에 ASIC P&R 단계에서 배선 혼잡과 wire delay 증가가 발생한다(Keccak Team 공식 문서). FPGA에서는 LUT 내부 매핑으로 흡수되어 영향이 적다.
5.4 패딩·인코딩 제어 회로 — cSHAKE/KMAC FSM
SHA-3 해시 단독 구현에 cSHAKE/KMAC을 추가하면 아래 회로가 새로 들어간다.
▶ left_encode / right_encode 직렬화기: 입력 길이 카운터의 상위 0-바이트 제거 + 바이트 수를 prefix/suffix로 부착하는 가변 길이 시리얼라이저
▶ bytepad 페이서: rate 경계(SHAKE128=168B, SHAKE256=136B)까지 0을 채우는 카운터
▶ 함수 식별 접미사 MUX: SHA-3=01, SHAKE=1111, cSHAKE=00을 마지막 흡수 블록 직전에 삽입
▶ 메인 FSM: IDLE → ABSORB_PREFIX(N,S) → ABSORB_KEY → ABSORB_MSG → ABSORB_L → FINALIZE → SQUEEZE
KMAC에서 키와 N(="KMAC")이 정적이면 prefix-precomputation으로 초기 상태를 ROM/레지스터에 박제해 흡수 클럭을 절감할 수 있다 — 일명 zero-latency keying.
5.5 부채널(SCA) 저항성 — χ가 표적이다
⚠️ 물리 구현에서는 χ 단계의 AND 게이트가 전력 분석(DPA/SPA)의 1차 표적이다. 표준 대응은 Threshold Implementation(TI) 또는 Domain-Oriented Masking(DOM)으로, 데이터를 3개 이상의 share로 분할한다. 페널티는 약 3–4배 면적 증가(≈100k GE 수준)로 알려져 있다(PQShield, Keccak Team 자료). 또한 글리치(glitch)가 마스킹을 무력화하므로 share 사이에 레지스터 장벽을 둔다.
5.6 실무 권장 인터페이스
✓ AXI-Stream으로 메시지·키 입력, AXI-Lite로 N/S/L 컨피그 레지스터 노출
✓ start / busy / done / squeeze_more 핸드셰이크
✓ 출력 길이가 rate를 초과하면 자동으로 추가 Keccak-f를 돌려 다음 r비트를 스퀴징
6. 🎯 결론 — 단일 IP, 다중 기능
💡 SHA-3 계열은 동일한 Keccak-f[1600] 코어 위에서 도메인 분리 접미사와 인자 인코딩 규칙만 바꿔 해시(SHA-3), XOF(SHAKE), MAC(KMAC), KDF(cSHAKE)를 모두 처리한다. Verilog 관점에서는 1600-bit 상태 + 24라운드 조합 회로 + 패딩/인코딩 FSM 한 벌로 멀티 모드 암호 IP가 완성된다.
다만 (a) ρ/π에서 비롯되는 배선 혼잡, (b) χ에서 발생하는 SCA 표적, (c) 1600-bit 레지스터의 면적/누설 비용은 IoT급 ASIC에서 여전히 부담이다. PQC 표준(ML-KEM, ML-DSA, SLH-DSA)이 모두 SHAKE/cSHAKE에 의존하는 만큼, 차세대 보안 SoC에서 SHA-3 코어는 사실상 필수 IP가 될 것으로 전망된다.
📚 핵심 시사점 5가지
① 길이 확장 공격 면역 — Capacity c-bit는 외부에 절대 노출되지 않아 머클-담가드의 구조적 약점 해결
② 하드웨어 친화 — 곱셈·덧셈 없이 XOR·AND·NOT·시프트만 사용. 1600-bit 상태 + 24R FSM = 단순 RTL
③ 멀티모드 IP — 동일 코어 + 접미사 2비트 차이로 SHA-3 / SHAKE / cSHAKE / KMAC 통합
④ PQC 필수 의존성 — ML-KEM·ML-DSA·SLH-DSA가 SHAKE/cSHAKE를 핵심 프리미티브로 사용
⑤ SCA 대응 비용 — χ 게이트 마스킹은 면적 3–4배 증가. IoT급 SoC는 TI/DOM 비용 vs 보안 트레이드오프 선택 필요
📖 참고 자료
▶ NIST FIPS 202 — SHA-3 Standard (Permutation-Based Hash and Extendable-Output Functions)
▶ NIST SP 800-185 — SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, ParallelHash
⚠️ 본 글은 NIST 공개 표준과 학계 발표 자료를 기반으로 한 기술 정리이며, 특정 제품·IP의 실측 성능을 보증하지 않습니다. 실제 ASIC/FPGA 구현 시 면적·전력·타이밍은 사용 공정·합성 옵션·툴체인에 따라 큰 편차가 발생할 수 있으므로 반드시 자체 검증을 진행하시기 바랍니다.
📄 Raw Data
# SHA-3 암호 엔진과 SHAKE/cSHAKE/KMAC: 알고리즘 구조부터 Verilog 하드웨어 구현까지
본 보고서는 NIST 표준 SHA-3 계열 알고리즘의 구조적 특징과 파생 함수(SHAKE, cSHAKE, KMAC)의 수학적 정의를 정리하고, 이를 Verilog로 RTL 구현할 때 마주치는 설계 트레이드오프, 인자 인코딩 회로, 부채널 저항성까지 종합 분석한다. SHA-3는 단순한 해시 함수가 아니라 "스펀지 구성(Sponge Construction)"이라는 단일 프리미티브 위에서 해시·XOF·MAC·KDF를 모두 처리할 수 있는 **멀티퍼퍼스 암호 엔진**의 기반이라는 점이 핵심 시사점이다.
---
## 1. SHA-3의 기초: 스펀지 구성과 Keccak-f[1600]
### 1.1 SHA-2와의 결정적 차이
SHA-3는 2012년 NIST가 Keccak 알고리즘을 차세대 표준으로 선정하여 2015년 **FIPS 202**로 공표한 해시 표준이다. SHA-1·SHA-2가 머클-담가드(Merkle-Damgård) 구조를 사용한 것과 달리, SHA-3는 **스펀지 구성(Sponge Construction)**을 채택해 길이 확장 공격(Length-extension attack)에 원천적으로 면역을 갖는다.
### 1.2 스펀지 구성의 2단계 동작
- **흡수(Absorbing)**: 입력 메시지를 rate `r`비트 블록으로 쪼개 내부 상태와 XOR한 뒤, 매 블록마다 Keccak-f[1600] 순열을 1회 적용한다.
- **스퀴징(Squeezing)**: 흡수 종료 후 내부 상태에서 r비트씩 출력을 뽑으며, 더 많은 출력이 필요하면 Keccak-f를 재호출한다.
내부 상태 크기는 `b = r + c = 1600`비트로 고정되며, `c`(Capacity)가 보안 강도를 결정한다. SHA3-256은 `c=512`(보안강도 128비트), SHA3-512는 `c=1024`(보안강도 256비트) 구조다.
### 1.3 Keccak-f[1600] 라운드 함수
24라운드에 걸쳐 5단계 변환을 반복한다.
| 단계 | 역할 | 연산 특성 |
|------|------|----------|
| θ (Theta) | 열(column) 단위 확산 | XOR만 사용 |
| ρ (Rho) | 비트 회전 | 시프트(라우팅) |
| π (Pi) | 비트 위치 재배치 | 시프트(라우팅) |
| χ (Chi) | **유일한 비선형 변환** | AND, NOT, XOR |
| ι (Iota) | 대칭성 파괴 | 라운드 상수 XOR |
곱셈·덧셈이 전혀 없고 비트 논리 연산만 사용한다는 점이 SHA-3가 하드웨어 친화적인 이유이며, 이는 FIPS 202에 명시된 설계 철학이다.
---
## 2. SHA-3 함수 패밀리와 SHAKE
### 2.1 고정 출력 해시 (FIPS 202)
`SHA3-224 / SHA3-256 / SHA3-384 / SHA3-512` — 출력 길이가 이름의 숫자(비트)로 고정.
### 2.2 SHAKE — Extendable-Output Function (XOF)
SHAKE128, SHAKE256은 **출력 길이를 호출자가 지정하는 가변 길이 XOF**다.
- `SHAKE128(M, L)`: 보안강도 128비트, L비트 출력
- `SHAKE256(M, L)`: 보안강도 256비트, L비트 출력
특징적으로 동일 입력에 대해 짧은 출력은 긴 출력의 접두(prefix)와 정확히 일치한다. 이 성질 덕분에 PRNG, KDF, 서명 스킴(SPHINCS+, Dilithium 등 PQC), 마스크 생성 함수(MGF)에 자연스럽게 활용된다.
도메인 분리를 위해 SHAKE는 메시지 끝에 `1111` 접미사 + `pad10*1` 패딩을 부착한다(SHA-3 해시는 `01` 접미사). 이 2비트 차이가 같은 Keccak-f를 공유하면서도 함수 패밀리를 분리하는 핵심 장치다.
---
## 3. cSHAKE와 KMAC: SP 800-185
### 3.1 인코딩 보조 함수
NIST SP 800-185는 가변 길이 인자를 모호성 없이 흡수시키기 위한 인코딩 함수를 정의한다.
- **`left_encode(x)`**: 정수 x를 바이트 표현으로 만든 뒤, 그 바이트 수 n을 1바이트로 앞에 붙임. 예: `left_encode(4) = 0x01 || 0x04`.
- **`right_encode(x)`**: 동일하지만 바이트 수 n을 뒤에 붙임. KMAC에서 출력 길이 L을 메시지 끝에 명시할 때 사용.
- **`encode_string(S) = left_encode(len_bits(S)) || S`**: 문자열 S를 길이-prefix 형태로 인코딩.
- **`bytepad(X, w) = left_encode(w) || X || 0…0`**: X 앞에 블록 너비 w를 left_encode로 붙이고 w 바이트 배수까지 0 패딩.
### 3.2 cSHAKE — Customizable SHAKE
```
cSHAKE128(X, L, N, S) =
KECCAK[256] ( bytepad(encode_string(N) || encode_string(S), 168)
|| X || 00 , L )
```
- `X`: 입력 메시지
- `L`: 요청 출력 비트 길이
- `N`: NIST가 예약한 **함수 이름**(KMAC, TupleHash 등). 사용자 응용에서는 빈 문자열.
- `S`: 응용 측 **커스터마이징 문자열**(도메인 분리용)
- `168`: SHAKE128의 rate(=1344비트=168바이트). SHAKE256은 136바이트.
- 접미사 `00`: cSHAKE 도메인을 일반 SHAKE(`1111`)와 분리하는 비트.
`N`과 `S`가 모두 비어있으면 정의상 일반 SHAKE로 폴백된다(SP 800-185 §3.3).
### 3.3 KMAC — Keccak Message Authentication Code
```
KMAC128(K, X, L, S) =
cSHAKE128 ( bytepad(encode_string(K), 168)
|| X
|| right_encode(L) ,
L, "KMAC", S )
```
- `K`: 비밀키 (가변 길이)
- `X`: 메시지
- `L`: 출력 비트 길이
- `S`: 커스터마이징 문자열(없으면 `""`)
- `N`은 내부적으로 `"KMAC"`으로 고정
**왜 안전한가**: 키 K를 메시지 앞에 흡수시킨 뒤 추가로 출력 길이 L을 `right_encode`로 메시지 끝에 명시하므로, 동일 (K, X) 쌍이라도 L이 다르면 출력이 통계적으로 독립이다(prefix-relation 차단). HMAC이 해시를 두 번 호출해야 했던 비효율을 단일 스펀지로 해소한다.
### 3.4 KMAC 동작 예시
상황: 키 `K = 0x404142…5F` (32바이트), 메시지 `X = "Hello"`, `L = 256`, `S = "Auth"`.
1. `encode_string(K)` = `left_encode(256) || K` (키 길이를 비트 단위로 표시)
2. `bytepad(…, 168)` → 168바이트 블록 경계까지 0 패딩
3. 그 뒤에 `"Hello"` 부착
4. 마지막에 `right_encode(256)` 부착 (출력 길이 메타데이터)
5. `cSHAKE128(전체, 256, "KMAC", "Auth")` 호출 → 흡수 단계에서 24라운드 Keccak-f 반복
6. 스퀴징으로 32바이트 태그 출력
---
## 4. Verilog 하드웨어 구현 — 핵심 설계 고려사항
### 4.1 데이터패스 폭과 면적/성능 트레이드오프
| 구조 | 처리 단위 | ASIC GE | FPGA Slice (Virtex-7) | Throughput |
|------|----------|---------|------------------------|------------|
| Serialized (8/16-bit) | 다중 클럭/라운드 | 2.5k–5k GE | — | 수백 Mbps |
| Iterative (1라운드/클럭) | 1600-bit | 10k–25k GE | 1k–2.5k Slices | 8–15 Gbps |
| Pipelined (Unrolled) | 다단 파이프 | 40k–100k+ GE | 다수 BRAM/LUT | 최대 100 Gbps |
(NIST FIPS 202 기반 다수 학술 구현 벤치마크 — Pessl 외, IAESCORE 등)
### 4.2 라운드 회로의 실제 RTL 구조
권장 구조는 **상태 레지스터(1600-bit) + 조합 라운드 함수(θ→ρ→π→χ→ι) + 24-카운트 FSM**이다.
- θ는 column-parity XOR 트리. 8-input XOR이 25개 column 각각에서 발생.
- ρ는 단순 비트 회전 — 배선(wire reordering)만으로 0 게이트.
- π도 lane swap — 마찬가지로 wire-only.
- χ만 비선형이라 게이트가 실제로 발생: `a ⊕ ((¬b) ∧ c)`를 lane 25개 × 64비트마다 평가.
- ι는 24개 라운드 상수 LUT.
→ 실제 면적의 대부분은 **χ 게이트**와 **1600-bit 상태 플립플롭**에서 나온다. ρ/π가 무료라는 점이 Keccak의 큰 장점이다(FIPS 202 §3.2).
### 4.3 라우팅 혼잡(Routing Congestion)
ρ/π가 wire-only인 대신 1600개의 비트가 사실상 임의 위치로 셔플된다. 이 때문에 ASIC P&R 단계에서 **배선 혼잡과 wire delay 증가**가 발생한다(Keccak Team 공식 문서). FPGA에서는 LUT 내부 매핑으로 흡수되어 영향이 적다.
### 4.4 패딩·인코딩 제어 회로
cSHAKE/KMAC을 추가하면 다음 회로가 필요하다.
1. **`left_encode/right_encode` 직렬화기**: 입력 길이 카운터의 상위 0-바이트를 제거하고 바이트 수를 prefix/suffix로 붙이는 가변 길이 시리얼라이저.
2. **`bytepad` 페이서**: rate 경계(SHAKE128=168B, SHAKE256=136B)까지 0을 채우는 카운터.
3. **함수 식별 접미사 MUX**: SHA-3=`01`, SHAKE=`1111`, cSHAKE=`00`을 마지막 흡수 블록 직전에 삽입.
4. **메인 FSM**: `IDLE → ABSORB_PREFIX(N,S) → ABSORB_KEY → ABSORB_MSG → ABSORB_L → FINALIZE → SQUEEZE`
KMAC에서 키와 N(="KMAC")이 정적이면 **prefix-precomputation**으로 초기 상태를 ROM/레지스터에 박제해 흡수 클럭을 절감할 수 있다(zero-latency keying).
### 4.5 부채널(SCA) 저항성
물리 구현에서는 χ 단계의 AND 게이트가 전력 분석(DPA/SPA) 표적이 된다. 표준 대응책은 **Threshold Implementation(TI)** 또는 **Domain-Oriented Masking(DOM)**으로, 데이터를 3개 이상의 share로 분할한다. 페널티는 약 3–4배 면적 증가(≈100k GE 수준)로 알려져 있다(PQShield, Keccak Team 자료). 또한 글리치(glitch)가 마스킹을 무력화하므로 share 사이에 레지스터 장벽을 둔다.
### 4.6 실무 권장 인터페이스
- **AXI-Stream**으로 메시지·키 입력, **AXI-Lite**로 N/S/L 컨피그 레지스터 노출
- `start / busy / done / squeeze_more` 핸드셰이크
- 출력 길이가 rate를 초과하면 자동으로 추가 Keccak-f를 돌려 다음 r비트를 스퀴징
---
## 5. 결론 — 단일 IP, 다중 기능
SHA-3 계열은 동일한 Keccak-f[1600] 코어 위에서 도메인 분리 접미사와 인자 인코딩 규칙만 바꿔 해시(SHA-3), XOF(SHAKE), MAC(KMAC), KDF(cSHAKE)를 모두 처리한다. Verilog 관점에서 보면 1600-bit 상태 + 24라운드 조합 회로 + 패딩/인코딩 FSM 한 벌로 **멀티 모드 암호 IP**가 완성된다는 뜻이다.
다만 (a) ρ/π에서 비롯되는 배선 혼잡, (b) χ에서 발생하는 SCA 표적, (c) 1600-bit 레지스터의 면적/누설 비용은 IoT급 ASIC에서 여전히 부담이다. PQC 표준(ML-KEM, ML-DSA, SLH-DSA)이 모두 SHAKE/cSHAKE에 의존하는 만큼, 차세대 보안 SoC에서는 SHA-3 코어가 사실상 필수 IP가 될 것으로 전망된다.
---
## References
- [NIST FIPS 202 SHA-3 Standard](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf)
- [NIST SP 800-185 SHA-3 Derived Functions](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-185.pdf)
- [Keccak Team Hardware Notes](https://keccak.team/hardware.html)
댓글
댓글 쓰기