Salsa20/ChaCha20
핵심 인사이트 (3줄 요약)
- 본질: Salsa20과 ChaCha20은 Daniel J. Bernstein가 설계한 ARX (Add-Rotate-XOR) 기반 스트림 암호다. 단순하고 효율적인 구조로 다양한 플랫폼에서高速実装可能하며, 특히 측면 채널 공격에 강한 것으로 알려져 있다.
- 가치: RC4와 달리 현재까지 알려진有效的攻撃이 없으며, TLS 1.3 표준에 포함되고 Signal Protocol에서使用된다. 모바일 및 IoT 환경에서 AES-GCM보다優れた性能을 보인다.
- 차이: ChaCha20은 Salsa20의 개선 버전으로, Quarter Round 연산의 순서를 변경하여更容易한実装と更强的并行性을 제공하며, Poly1305와 결합하여 AEAD를実現한다.
Ⅰ. 개요 및 필요성
개념 정의
Salsa20과 ChaCha20은 다음과 같은 특성을 공유한다:
- 설계자: Daniel J. Bernstein (djb)
- 구조: ARX (Add-Rotate-XOR) 기반
- 키 길이: 256비트 (일부 128비트版本あり)
- 상태 크기: 512비트 (64바이트)
- 라운드 수: Salsa20: 20, ChaCha20: 20
역사
- 2005년: Salsa20-eStream 프로젝트에 제출
- 2008년: ChaCha20-djb가 설계, SALSA20의 변형
- 2014년: IETF가 ChaCha20-Poly1305를 RFC 7539로 표준화
- 2018년: TLS 1.3에서 ChaCha20-Poly1305 표준 포함
비유
Salsa20과 ChaCha20은 정교한 주방용 믹서와 같다. 재료 (평문)을 넣고高速で回すと (ARX 연산), 재료가 완전히 섞여서 원래 무엇이 있었는지 알 수 없게 된다 (암호문). 믹서가高速으로 돌아가면 도둑이 내부을 살펴보거나 샘플을 탈취하기도 어렵다. 그리고 ChaCha20은 Salsa20의改良된 버전으로, 더 빠르게 더 고르게 섞는 다.\ \ 📢 비유: 이 암호들은 "계속해서 다른 속도로 회전하는 다단계 믹서"와 같다. 각 단계에서 재료가 완전히 섞여서 이전에 무슨 재료가 어느 위치에 있었는지 추적할 수 없게 된다. RC4가単純な羽根で 돌아가서 반복적으로 패턴이 드러난 것과 달리, 이 믹서는段階적으로 다른 속도로 돌아가므로 패턴을 발견하기가极其 어렵다.
등장 배경
기존 스트림 암호의 문제로 인해新型 암호가 필요했다:
- RC4의 쇠퇴: 2000년대 RC4의 심각한 취약점 발견
- AES의 한계: AES-NI 없이는低速, 특히 모바일에서
- 侧信道攻击: 기존 암호의 상수 시간 구현 어려움
┌────────────────────────────────────────────────────────────────────┐
│ ChaCha20 Quarter Round 연산 │
├────────────────────────────────────────────────────────────────────┤
│
│ 【Quarter Round (QR)】 │
│ ──────────────────────────────────────────────────────────────── │
│ │
│ 입력: a, b, c, d (32비트 정수 4개) │
│ │
│ a += b; d ^= a; d = ROTL(d, 16) │
│ c += d; b ^= c; b = ROTL(b, 12) │
│ a += b; d ^= a; d = ROTL(d, 8) │
│ c += d; b ^= c; b = ROTL(b, 7) │
│ │
│ 출력: a, b, c, d │
│ │
│ 【설명】 │
│ - Add: mod 2^32 加算 (상수 시간) │
│ - Rotate: 왼쪽 순환 시프트 (상수 시간) │
│ - XOR: 배타적 논리합 │
│ │
│ → 모두 상수 시간 연산 → 側信道攻撃에 강함 │
│ │
│ 【ChaCha20 상태 행렬】 │
│ ──────────────────────────────────────────────────────────────── │
│ │
│ ┌ ┐ │
│ │ 00 01 02 03 │ 상수 "expa" │
│ │ 04 05 06 07 │ 키 0-3 │
│ │ 08 09 10 11 │ 키 4-7 │
│ │ 12 13 14 15 │ 키 8-11 + counter(0) │
│ │ │ │
│ │ 16 17 18 19 │ 키 0-3 (반복) │
│ │ 20 21 22 23 │ 키 4-7 (반복) │
│ │ 24 25 26 27 │ 키 8-11 (반복) │
│ │ 28 29 30 31 │ nonce + counter(1) │
│ └ ┘ │
│ │
│ 20 라운드 반복: (Column Rounds + Diagonal Rounds) │
│ │
└────────────────────────────────────────────────────────────────────┘
[다이어그램 해설] ChaCha20의 핵심인 Quarter Round (QR)은 Add, Rotate, XOR의 3가지 단순한 연산으로 구성된다. 각 연산은 상수 시간에実行되므로 侧信道攻撃 (정수 분석, 시간 분석 등)에 강하다. 상태 행렬은 16개의 32비트 워드로 구성되며, "expa" 상수, 256비트 키, 64비트 nonce/counter를 포함한다. 20 라운드의 연산 후 완전한 키 스트림이 生成される。
Ⅱ. 아키텍처 및 핵심 원리
Salsa20 vs ChaCha20 비교
| 특성 | Salsa20 | ChaCha20 |
|---|---|---|
| 설계 연도 | 2005 | 2008 |
| Quarter Round | 원본 순서 | 변경된 순서 |
| 병렬화 | 부분적 | 더 나은 병렬화 |
| 추가 라운드 | Salsa20/8, /12 | ChaCha20/8, /12 |
| 표준화 | eStream | IETF RFC 7539 |
ChaCha20의 개선점
1. 더 좋은 병렬화:
Salsa20: 순차적 Column + Diagonal 연산
ChaCha20: 더 많은 병렬성 확보
→ SIMD 명령어로高速화
2. 더 명확한 구조:
Salsa20: 약간複雑な 순서
ChaCha20: 더 단순하고 이해하기 쉬운 순서
→ 구현 실수 줄음, 검증 용이
Poly1305 메시지 인증
ChaCha20과 결합하여 AEAD를实现한다:
【ChaCha20-Poly1305 구조】
1. ChaCha20: 평문 암호화 (키 스트림과 XOR)
2. Poly1305: 메시지 인증 태그 생성
- 일회성 키 r을 생성
- 메시지를 polynomial로 처리
- GHASH와 유사하지만異なる算術 사용
3. 최종 출력: 암호문 || 인증 태그
Poly1305의 특징
- 일회성 키: 각 메시지마다 다른 r 사용 (nonce 기반)
- 상수 시간: 구현이 비교적 용이
- 64바이트 태그: 128비트 AES-GCM 태그보다 김
- 안전성: StrongEUA抵当攻撃に対して坚固
📢 아날로그: ChaCha20과 Poly1305의 조합은 "물건을 포장하고封印하는 것"과 같다. ChaCha20은 물건을 완전하게 섞어서 내용을 보지 못하게 하고 (기밀성), Poly1305는 包みを封印해서 도둑이 包み 자체를 조작했는지 알 수 있게 한다 (무결성). 두 가지를 함께 사용하여初めて完整的인 보호가 가능하다.
Ⅲ. 융합 비교 및 다각도 분석
ChaCha20 vs AES-GCM
| 구분 | ChaCha20-Poly1305 | AES-256-GCM |
|---|---|---|
| 안전성 | 우수 | 우수 |
| 하드웨어 가속 | 제한적 | AES-NI (높음) |
| 소프트웨어 성능 | 우수 | 보통 |
| 모바일/IoT | 우수 | 보통 |
| 侧信道攻撃 | 강함 | 구현에 따라 다름 |
| 태그 크기 | 128비트 | 128비트 |
| 표준화 | RFC 7539 | NIST SP 800-38D |
성능 비교 ( cycles per byte)
| 플랫폼 | ChaCha20 | AES-128-GCM |
|---|---|---|
| Intel Haswell (AES-NI) | ~3.0 | ~1.3 |
| Intel Haswell (no AES-NI) | ~3.0 | ~14.0 |
| ARM Cortex-A15 | ~4.5 | ~10.0 |
| ARM Cortex-M4 | ~28.0 | ~100.0+ |
선택 기준
- 하드웨어 AES-NI 있음: AES-GCM이 더빠름
- 모바일/IoT: ChaCha20-Poly1305 권장
- 양호한 성능 필요: 두 가지 모두优秀
- 旧式 하드웨어: ChaCha20 권장
Ⅳ. 실무 적용 및 기술사적 판단
주요 용도
1. TLS 1.3:
CipherSuite: TLS_CHACHA20_POLY1305_SHA256
- 支持: 모든 주요 브라우저와 서버
- 用途: AES-GCM과 함께 주요 CipherSuite 중 하나
2. Signal Protocol:
X3DH (Extended Triple Diffie-Hellman):
- Curve25519로 키 교환
- ChaCha20-Poly1305로 메시지 암호화
- 轴적된 키로 전방 비밀성 제공
3. WireGuard:
- ChaCha20-Poly1305로 데이터 보호
- Curve25519로 키 교환
- 효율적이고 단순한 VPN 프로토콜
설계 시 고려사항
1. nonce 관리:
- ChaCha20의 nonce: 64비트 (8바이트)
- 동일한 nonce 재사용 금지 (키 재사용과 同様の catastrophic 결과)
- 일회성: counter + random nonce 조합
2. 키 관리:
- 256비트 키는十分に長い (양자 컴퓨터 Grover에도)
- 키 생성은 criptographically 안전한 RNG 사용
- 키 파생 시 HKDF 활용
안티패턴
- nonce 재사용: 동일한 nonce로 두 번 암호화하면 키 스트림이丸見え
- 비표준 구현: 검증된 라이브러리 (libsodium, OpenSSL 등) 사용
- 혼합 사용: ChaCha20-Poly1305와 다른 모드를 섞어서 사용
Ⅴ. 기대효과 및 결론
기대효과
| 구분 | RC4 | ChaCha20-Poly1305 |
|---|---|---|
| 안전성 | 취약 | 우수 |
| 성능 (모바일) | 빠름 (但是脆弱) | 빠르고 안전 |
| 標準化 | 폐기 | IETF RFC 7539 |
| 主要 用法 | 레거시 系统 | TLS 1.3, Signal |
미래 전망
- 지속적 사용: TLS 1.3 표준화 통해 ChaCha20-Poly1305 확산
- 양자 컴퓨터 대비: Grover으로 256비트 키의 安全性が128비트 수준으로 감소하지만,仍然十分
- 下一代 스트림 암호: 可視化攻撃にも強い設計의 스트림 암호 연구 중
📢 정리: ChaCha20-Poly1305는 현대 스트림 암호의 대표적 구현으로, 안전성과 효율성을 모두 제공한다. RC4가废弃된 이유는的多數攻撃が実用可能だったからであり, ChaCha20은 현재까지 알려진有效的な攻撃이 없다. TLS 1.3과 Signal Protocol에서 표준으로 채택되어 널리 사용되고 있으며, 특히 모바일 및 IoT 환경에서 AES-GCM보다優れた性能을 보인다.
📌 관련 개념 맵 (Knowledge Graph)
| 개념 명칭 | 관계 및 시너지 설명 |
|---|---|
| ARX | Add-Rotate-XOR 연산으로 구성된 스트림 암호 구조 |
| Poly1305 | ChaCha20과 결합하여 AEAD를实现하는 메시지 인증 코드 |
| Signal Protocol | ChaCha20-Poly1305를활용한 안전한 메시징 프로토콜 |
| TLS 1.3 | ChaCha20-Poly1305를표준 CipherSuite로 포함 |
| WireGuard | ChaCha20-Poly1305를사용하는 효율적 VPN 프로토콜 |
| 양자 컴퓨터 위협 | Grover 알고리즘으로 ChaCha20의 강도가 半감하지만 256비트는仍然十分 |
👶 어린이를 위한 3줄 비유 설명
- ChaCha20은**"매우 빠른 다단계 주방 믹서"**와 같아. 재료 (데이터)를 넣으면 각 단계에서高速으로 돌아가는 날이 다른 속도로 회전하며 완전히 섞여서, 도둑이 믹서를 열어봐도 원래 재료가 무엇이었는지 알 수 없어.
- Poly1305는**"물건을密封한後 찜 stamp"**와 같아. 물건이 섞여서 아무도 내용을 알 수 없게 되었지만, 그래도 누군가 包み를 뜯거나 조작하면 그 흔적이 stamp에 남어서 알 수 있게 하는 거야.
- 그래서 ChaCha20으로 섞고 Poly1305로封印하면, 내용도保密되고 조작도 탐지되는完整的인 보호가 되는 거다! 마치 맛있게 만든 요리를 완전하게 밀폐해서 도둑이 열어볼 수도, 조작할 수도 없게 하는 것과 같아.