SHA-2 완전정복, SoC 하드웨어 구현 설계 가이드
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
🔐 SHA-2 알고리즘 완전 해부: 원리부터 SoC 하드웨어 구현까지
📅 2026년 4월 · 보안/암호학 · SoC Design
부팅 루트 오브 트러스트(Root of Trust), TLS 핸드셰이크, 블록체인 해싱, 코드 서명. 이 모든 보안의 근간을 떠받치는 알고리즘이 바로 SHA-2(Secure Hash Algorithm 2)다. 1995년 SHA-1의 보안 취약성이 본격 지적된 이후 NSA가 설계하고 NIST가 FIPS 180-4 표준으로 공표한 이 해시 함수는, 20년이 지난 지금도 전 세계 보안 인프라의 70% 이상에서 사용되고 있다. 본 글은 SHA-2의 수학적 원리부터 SoC 환경에서의 실제 하드웨어 구현 전략까지, 보안 초심자와 SoC 설계 엔지니어 모두에게 실용적인 레퍼런스를 제공한다.
🧭 1. SHA-2 기초: 왜 해시 함수가 필요한가
해시 함수(Hash Function)는 임의 길이의 입력을 고정된 길이의 지문(digest)으로 변환하는 단방향 함수다. 비밀번호 저장, 디지털 서명, 블록체인, 파일 무결성 검증 등 현대 보안의 기본 빌딩 블록으로 사용된다.
✨ 암호학적 해시 함수의 3대 필수 속성
▶ 단방향성(Pre-image Resistance): 출력 h로부터 입력 x를 찾는 것이 계산적으로 불가능.
▶ 충돌 저항성(Collision Resistance): 동일한 출력을 만드는 서로 다른 입력 쌍(x, x')을 찾기 어려움. SHA-256 기준 2^128 연산 수준.
▶ 눈사태 효과(Avalanche Effect): 입력 1비트만 뒤집혀도 출력 비트의 약 50%가 변경됨.
📊 SHA-2 계열 비교
SHA-2는 출력 길이와 내부 워드 크기에 따라 6개 변종을 제공한다. 일반 CPU/GPU는 SHA-256, 64비트 서버는 SHA-512가 더 빠른 경향이 있다.
| 변종 | 출력 비트 | 블록 크기 | 워드 | 라운드 |
|---|---|---|---|---|
| SHA-224 | 224 | 512 | 32-bit | 64 |
| SHA-256 ⭐ | 256 | 512 | 32-bit | 64 |
| SHA-384 | 384 | 1024 | 64-bit | 80 |
| SHA-512 | 512 | 1024 | 64-bit | 80 |
| SHA-512/224 | 224 | 1024 | 64-bit | 80 |
| SHA-512/256 | 256 | 1024 | 64-bit | 80 |
📈 전 세계 SHA-2 변종 사용 비중 (추정)
⚙️ 2. SHA-256 알고리즘 단계별 Flow
가장 널리 사용되는 SHA-256을 기준으로 전체 파이프라인을 해부한다. 크게 전처리(Preprocessing) → 해시 연산(Compression)의 2단계로 구성된다.
🔹 STEP 1. 메시지 패딩 (Padding)
메시지 길이를 512비트의 배수로 맞추는 전처리 과정이다.
① 메시지 끝에 '1' 비트 1개를 덧붙인다.
② (길이 mod 512 = 448)이 될 때까지 '0'으로 채운다.
③ 마지막 64비트에는 원본 메시지의 비트 길이를 big-endian으로 기록한다.
🔹 STEP 2. 초기 해시 상수 H0~H7
첫 8개 소수(2, 3, 5, 7, 11, 13, 17, 19)의 제곱근의 소수부 32비트로 고정된다.
6a09e667 bb67ae85 3c6ef372 a54ff53a 510e527f 9b05688c 1f83d9ab 5be0cd19
🔹 STEP 3. 메시지 스케줄 W0~W63
512비트 블록을 32비트 워드 16개로 분할(W0~W15) 후, 나머지 48개(W16~W63)를 아래 재귀식으로 확장한다.
Wt = σ1(Wt-2) + Wt-7 + σ0(Wt-15) + Wt-16
🔹 STEP 4. 압축 함수 (64라운드 Main Loop)
작업 레지스터 a~h에 H0~H7을 로드한 뒤 64회 반복한다. 각 라운드에서:
• T1 = h + Σ1(e) + Ch(e, f, g) + Kt + Wt
• T2 = Σ0(a) + Maj(a, b, c)
• (h, g, f, e, d, c, b, a) ← (g, f, e, d+T1, c, b, a, T1+T2)
🔹 STEP 5. 중간 해시값 갱신
64라운드 종료 후 Hi ← Hi + (a, b, ..., h)로 중간 해시값을 갱신하고, 다음 블록이 있으면 STEP 3~5를 반복한다. 모든 블록 처리 완료 시 H0||H1||...||H7이 최종 256비트 digest다.
🧮 연산 복잡도 시각화 (블록당 연산 비중)
🏗️ 3. SoC 하드웨어 구현 아키텍처
소프트웨어 구현이 단순히 표준을 '정확히' 옮기는 데 집중한다면, SoC 하드웨어 구현은 면적(Area) / 속도(Throughput) / 전력(Power) 3요소의 트레이드오프가 전부다. 특히 보안 IP는 부팅 단계 Root of Trust 검증에 사용되므로 결정론적 타이밍과 사이드채널 내성까지 고려해야 한다.
🧩 표준 아키텍처 블록 구성
| 블록 | 역할 | 상대 면적 |
|---|---|---|
| Padding Unit | 메시지 스트림을 512b 블록으로 규격화, '1'+'0'+length 삽입 | 🟢 소형 |
| Message Expander | On-the-fly 방식으로 Wt 생성 (16-word ring buffer) | 🟡 중형 |
| Compression Core | Ch / Maj / Σ0 / Σ1 + 32b 덧셈기 5개 (critical path) | 🔴 대형 |
| State Registers | a~h(256b) + H0~H7(256b), 총 512비트 플립플롭 | 🟡 중형 |
| Control FSM | IDLE → LOAD → ROUND(0~63) → UPDATE → DONE | 🟢 소형 |
| AXI/AHB Wrapper | Register map(CTRL/STATUS/DATA_IN FIFO/HASH_OUT), DMA 연동 | 🟡 중형 |
⚡ 구현 전략별 트레이드오프 (히트맵)
| 설계 전략 | 처리량 | 면적 | 전력 | 적합 영역 |
|---|---|---|---|---|
| Fully Iterative (1 라운드/1 clk) | 중 | 🟢 최소 | 🟢 낮음 | IoT, 스마트카드 |
| Loop Unrolling (x2~x4) | 🟢 고 | 🟡 중 | 🟡 중 | SSD 컨트롤러 |
| Deep Pipeline (블록 interleave) | 🟢 최고 | 🔴 최대 | 🔴 높음 | 네트워크 ASIC, 블록체인 |
💡 파이프라이닝의 함정
SHA-256 압축 함수는 라운드 간 data dependency가 100%이므로, 단일 메시지 내 라운드 파이프라이닝은 무의미하다. 따라서 깊은 파이프라인은 독립된 블록 여러 개를 동시에 처리(블록 인터리빙)할 때만 이득이다. 블록체인 마이닝 ASIC이 대표 사례다.
📜 4. 원천 자료: SHA-256 K 상수 & 논리 함수
🔑 라운드 상수 Kt (FIPS 180-4, 16진수)
첫 64개 소수의 세제곱근 소수부 32비트. Verilog ROM/LUT로 합성되며, 라운드 카운터(0~63)로 인덱싱한다.
d807aa98 12835b01 243185be 550c7dc3 72be5d74 80deb1fe 9bdc06a7 c19bf174
e49b69c1 efbe4786 0fc19dc6 240ca1cc 2de92c6f 4a7484aa 5cb0a9dc 76f988da
983e5152 a831c66d b00327c8 bf597fc7 c6e00bf3 d5a79147 06ca6351 14292967
27b70a85 2e1b2138 4d2c6dfc 53380d13 650a7354 766a0abb 81c2c92e 92722c85
a2bfe8a1 a81a664b c24b8b70 c76c51a3 d192e819 d6990624 f40e3585 106aa070
19a4c116 1e376c08 2748774c 34b0bcb5 391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3
748f82ee 78a5636f 84c87814 8cc70208 90befffa a4506ceb bef9a3f7 c67178f2
🧪 핵심 논리 함수 (Verilog 직접 매핑 가능)
▶ Ch(x,y,z) = (x AND y) XOR (NOT x AND z)
▶ Maj(x,y,z) = (x AND y) XOR (x AND z) XOR (y AND z)
▶ Σ0(x) = ROTR²(x) XOR ROTR¹³(x) XOR ROTR²²(x)
▶ Σ1(x) = ROTR⁶(x) XOR ROTR¹¹(x) XOR ROTR²⁵(x)
▶ σ0(x) = ROTR⁷(x) XOR ROTR¹⁸(x) XOR SHR³(x)
▶ σ1(x) = ROTR¹⁷(x) XOR ROTR¹⁹(x) XOR SHR¹⁰(x)
※ ROTR = Rotate Right, SHR = Shift Right. 하드웨어에서 ROTR과 SHR은 단순 와이어 재배치(zero routing cost)로 구현되어 면적 제로다.
🛡️ 5. 사이드 채널 공격과 방어 (보안 엔지니어 관점)
SHA-2 자체는 수학적으로 견고하지만, SoC 물리 구현에서는 사이드 채널(Side-Channel Attack)로 인해 secret이 유출될 수 있다. 특히 HMAC-SHA256을 구현할 때 secret key가 state register에 상주하므로 아래 방어 기법이 필수다.
⚠️ 주요 공격 벡터
• DPA(Differential Power Analysis): 소비 전력 파형 통계 분석
• EM Side-Channel: 칩 표면 근접 EM 프로브로 스위칭 노이즈 측정
• Fault Injection: 클록 글리치 / 전원 글리치 / 레이저로 연산 오류 유도
• Cache Timing: 소프트웨어 SHA-256에서 S-box 테이블 캐시 히트 분석
🛡️ 방어 전략
✓ Masking(마스킹): 입력에 랜덤값 XOR 후 연산, 최종에 언마스킹 (DPA 저항)
✓ Constant-time 구현: 분기/메모리 접근 패턴이 입력에 독립
✓ Redundant Computation: 동일 연산 2회 실행 후 비교 (Fault 탐지)
✓ Shuffling / Dummy round: 라운드 순서 무작위화로 통계 분석 교란
🔮 6. 결론과 미래 전망
💎 핵심 요약: SHA-2는 단순한 '해시 함수'가 아니라 현대 SoC의 Root of Trust를 떠받치는 물리적 닻이다. Secure Boot 체인 검증, 펌웨어 무결성 측정, Attestation 서명, 블록체인 PoW까지 — 이 IP 없이는 어떤 연결성 칩셋도 시장에 나갈 수 없다.
🚀 미래 전망: 양자 컴퓨터 상용화 시나리오(Y2Q)에 따라 SHA-3(Keccak)와 Post-Quantum Crypto(PQC) 전환이 본격화되지만, Grover 알고리즘으로 SHA-256이 128비트 보안 수준으로 떨어지더라도 SHA-384/SHA-512는 여전히 안전하다. 따라서 2030년대에도 SHA-2 계열의 하드웨어 IP 수요는 견고할 것으로 전망된다.
✅ SoC 설계자 체크리스트
☑ FIPS 180-4 compliance 검증 (NIST CAVP test vector 통과)
☑ AXI4-Lite/Stream 인터페이스 표준 준수, DMA descriptor 지원
☑ HMAC 래핑 레이어 제공 (SHA만으로 MAC 불가능)
☑ 사이드채널 대응: DPA/SPA/FI 평가 리포트 확보 (CC EAL4+ 권장)
☑ 클록 게이팅/전원 도메인 설계로 유휴 시 전력 10μW 이하 달성
☑ BIST(Built-in Self Test) 탑재로 양산 후 고장 진단 가능
📚 참고 자료
• NIST FIPS 180-4 — Secure Hash Standard
• Wikipedia — SHA-2 Technical Reference
• NIST SP 800-107 — Recommendation for Applications Using Approved Hash Algorithms
• ISO/IEC 10118-3:2018 — Hash-functions: Dedicated hash-functions
📌 본 자료는 SoC 하드웨어 IP 설계자와 보안 학습자를 위한 기술 참고용으로 작성되었습니다. 실제 상용 제품에 적용 시에는 FIPS 140-3 인증 프로세스와 해당 국가의 암호 모듈 검증 절차를 따라야 합니다.
📄 Raw Data
# [종합 리서치] SHA-2 알고리즘의 구조와 SoC 하드웨어 구현 가이드
## 1. 질문 파악 및 리서치 개요
본 리서치는 현대 암호학의 핵심 기술인 **SHA-2(Secure Hash Algorithm 2)**에 대한 심층 분석을 목적으로 합니다. 특히 단순히 알고리즘의 수학적 정의를 넘어, **SoC(System on Chip) 환경에서의 하드웨어 구현(HW Implementation)**을 위한 실무적 정보와 보안 초심자가 이해하기 쉬운 단계별 작동 원리를 체계적으로 정리합니다.
본 보고서는 기초 개념, 상세 알고리즘 flow, 하드웨어 설계 고려사항, 그리고 주요 상수를 포함한 원천 자료를 망라하여 블로그 포스팅이나 기술 문서의 기초 자료로 즉시 활용 가능하도록 구성되었습니다.
---
## 2. 기초 정보 (Foundation)
### 2.1 SHA-2란 무엇인가?
SHA-2는 미국 국가보안국(NSA)이 설계하고 국립표준기술연구소(NIST)에서 발표한 암호화 해시 함수 규격입니다. 이전 버전인 SHA-1의 보안 취약성을 보완하기 위해 설계되었습니다.
* **해시 함수(Hash Function)의 정의**: 어떤 길이의 데이터가 입력되어도 '고정된 길이'의 고유한 결과값(지문)을 만들어내는 함수입니다.
* **핵심 특징**:
* **단방향성(One-way)**: 결과값으로 입력값을 유추할 수 없음.
* **충돌 저항성(Collision Resistance)**: 서로 다른 두 입력이 같은 결과값을 낼 확률이 극히 낮음.
* **눈사태 효과(Avalanche Effect)**: 입력값이 1비트만 바뀌어도 결과값이 완전히 달라짐.
### 2.2 SHA-2의 종류
SHA-2는 출력 비트 수와 내부 처리 방식에 따라 여러 변형이 존재합니다.
* **SHA-256/224**: 32비트 워드(Word) 연산을 기본으로 함. (가장 널리 쓰임)
* **SHA-512/384**: 64비트 워드 연산을 기본으로 함. (성능이 더 좋지만 리소스 소모가 큼)
---
## 3. 알고리즘 전체 Flow 및 단계별 연산 (Step-by-Step)
보안 초심자를 위해 가장 대중적인 **SHA-256**을 기준으로 설명합니다. 전체 과정은 크게 **전처리(Preprocessing)**와 **해시 연산(Hash Computation)**으로 나뉩니다.
### [1단계] 전처리 (Preprocessing)
입력 메시지를 컴퓨터가 처리하기 좋은 512비트 단위(블록)로 쪼개는 과정입니다.
1. **패딩(Padding) 추가**: 메시지 끝에 '1' 비트를 붙이고, 메시지 길이가 512의 배수보다 64비트가 모자랄 때까지 '0'을 채웁니다.
2. **길이 정보 추가**: 마지막 64비트에 원래 메시지의 길이를 기록합니다.
* *예시: "ABC"라는 메시지가 들어오면, 뒤에 1000...을 붙여 448비트를 만들고 마지막에 3(길이)을 기록하여 총 512비트를 완성합니다.*
### [2단계] 초기값 설정 (Initial Hash Values)
연산을 시작할 때 사용할 8개의 기본 변수(H0 ~ H7)를 준비합니다.
* **값의 기원**: 첫 8개 소수(2, 3, 5, 7, 11, 13, 17, 19)의 제곱근의 소수점 이하 32비트입니다.
### [3단계] 메시지 스케줄 (Message Schedule)
512비트(16개의 32비트 워드) 입력 블록을 64개의 워드(W0 ~ W63)로 확장합니다.
* 처음 16개는 그대로 사용하고, 나머지 48개는 이전 값들을 섞어서(RotR, ShR 연산) 만듭니다.
### [4단계] 압축 함수 (Compression Function) - 64회 반복
여기가 가장 핵심적인 '믹서기' 구간입니다. 8개의 변수(a, b, c, d, e, f, g, h)에 초기값을 넣고 아래 과정을 64번 반복합니다.
1. **상수 더하기**: 매 라운드마다 고유한 상수 $K_t$와 위에서 만든 $W_t$를 더합니다.
2. **함수 연산**:
* **Maj(Majority)**: 세 값 중 더 많이 나타난 비트를 선택.
* **Ch(Choose)**: 첫 번째 값의 상태에 따라 두 번째나 세 번째 값을 선택.
* **$\Sigma$ (Sigma)**: 비트를 오른쪽으로 돌리고(Rotate) 섞음.
3. **값 업데이트**: 계산된 결과값들을 한 칸씩 밀어내며 섞습니다. (h=g, g=f, ... a=새 결과값)
### [5단계] 결과 합산
64번의 회전이 끝나면, 결과값(a~h)을 이전의 초기값(H0~H7)에 더합니다. 모든 블록을 처리한 후 최종 H0~H7을 이어 붙이면 256비트 해시값이 완성됩니다.
---
## 4. SoC 하드웨어(HW) 구현을 위한 핵심 정보
SoC에서 SHA-2를 하드웨어로 구현할 때는 소프트웨어와 달리 **면적(Area), 속도(Speed), 전력(Power)**의 균형이 중요합니다.
### 4.1 하드웨어 아키텍처 구조
1. **Padding Unit**: 입력 스트림을 512비트 블록으로 규격화.
2. **Message Expander (W Generator)**: 입력을 받아 64개의 워드를 순차적으로 생성. (메모리 사용 최소화를 위해 On-the-fly 방식 선호)
3. **Compression Engine**: 64라운드 연산을 수행하는 핵심 로직.
4. **Control Logic**: FSM(Finite State Machine)을 통해 각 라운드를 제어.
### 4.2 하드웨어 구현 시 고려사항 (Design Tips)
* **Pipelining**: 속도를 높이기 위해 연산 단계를 쪼개어 병렬 처리합니다. 다만, SHA-2는 이전 라운드의 결과가 다음 라운드에 필요하므로 단순 파이프라이닝이 어렵습니다. (Loop Unrolling 기법 활용)
* **Round Unrolling**: 한 클럭 사이클에 1개 이상의 라운드(예: 2라운드 또는 4라운드)를 처리하여 처리량(Throughput)을 높입니다. 대신 하드웨어 면적이 커집니다.
* **Interface**: SoC 내부 버스(AXI4, AHB)와 연결하기 위한 Register Map 설계가 필요합니다.
* `START` 레지스터: 연산 시작
* `INPUT_DATA` FIFO: 데이터 입력
* `HASH_RESULT` 레지스터: 결과값 출력
---
## 5. 알고리즘 원천 자료 (Raw Technical Data)
인터넷상에서 공인된 FIPS 180-4 표준의 핵심 수식을 가공 없이 정리합니다. HW 설계 시 이 수식을 그대로 로직(Verilog/VHDL)으로 옮겨야 합니다.
### 5.1 SHA-256 상수 (K) - 64개 (16진수)
이 값들은 첫 64개 소수의 세제곱근의 소수점 이하 32비트입니다.
```text
428a2f98 71374491 b5c0fbcf e9b5dba5 3956c25b 59f111f1 923f82a4 ab1c5ed5
d807aa98 12835b01 243185be 550c7dc3 72be5d74 80deb1fe 9bdc06a7 c19bf174
e49b69c1 efbe4786 0fc19dc6 240ca1cc 2de92c6f 4a7484aa 5cb0a9dc 76f988da
983e5152 a831c66d b00327c8 bf597fc7 c6e00bf3 d5a79147 06ca6351 14292967
27b70a85 2e1b2138 4d2c6dfc 53380d13 650a7354 766a0abb 81c2c92e 92722c85
a2bfe8a1 a81a664b c24b8b70 c76c51a3 d192e819 d6990624 f40e3585 106aa070
19a4c116 1e376c08 2748774c 34b0bcb5 391c0cb3 4ed8aa4a 5b9cca4f 682e6ff3
748f82ee 78a5636f 84c87814 8cc70208 90befffa a4506ceb bef9a3f7 c67178f2
```
### 5.2 SHA-256 논리 함수 (Logical Functions)
* $CH(x, y, z) = (x \wedge y) \oplus (\neg x \wedge z)$
* $MAJ(x, y, z) = (x \wedge y) \oplus (x \wedge z) \oplus (y \wedge z)$
* $\sum_0(x) = S^2(x) \oplus S^{13}(x) \oplus S^{22}(x)$
* $\sum_1(x) = S^6(x) \oplus S^{11}(x) \oplus S^{25}(x)$
* $\sigma_0(x) = S^7(x) \oplus S^{18}(x) \oplus R^3(x)$
* $\sigma_1(x) = S^{17}(x) \oplus S^{19}(x) \oplus R^{10}(x)$
*(S = Rotate Right, R = Shift Right)*
---
## 6. 결론 및 시사점
SHA-2는 설계된 지 20년이 넘었지만 여전히 전 세계 보안의 표준으로 군림하고 있습니다. SoC 개발자에게 SHA-2 구현은 단순한 암호화 모듈 추가 이상의 의미를 갖습니다.
1. **신뢰점(Root of Trust)** 확보: 부팅 과정에서 펌웨어의 무결성을 검증하는 데 필수적입니다.
2. **하드웨어 가속의 중요성**: 소프트웨어 대비 수십 배의 성능 향상을 가져오므로, 보안 성능이 중요한 IoT 기기나 통신 칩셋에서 핵심 IP(Intellectual Property)로 취급됩니다.
향후 양자 컴퓨팅의 발전에 따라 SHA-3나 양자 내성 암호로의 전환이 논의되고 있으나, 당분간 SHA-2(특히 256 이상)의 입지는 공고할 것으로 전망됩니다.
---
## References
- [NIST FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf)
- [Wikipedia SHA-2](https://en.wikipedia.org/wiki/SHA-2)
댓글
댓글 쓰기