Salsa20/ChaCha20

핵심 인사이트 (3줄 요약)

  1. 본질: Salsa20과 ChaCha20은 Daniel J. Bernstein가 설계한 ARX (Add-Rotate-XOR) 기반 스트림 암호다. 단순하고 효율적인 구조로 다양한 플랫폼에서高速実装可能하며, 특히 측면 채널 공격에 강한 것으로 알려져 있다.
  2. 가치: RC4와 달리 현재까지 알려진有效的攻撃이 없으며, TLS 1.3 표준에 포함되고 Signal Protocol에서使用된다. 모바일 및 IoT 환경에서 AES-GCM보다優れた性能을 보인다.
  3. 차이: ChaCha20은 Salsa20의 개선 버전으로, Quarter Round 연산의 순서를 변경하여更容易한実装と更强的并行性을 제공하며, Poly1305와 결합하여 AEAD를実現한다.

Ⅰ. 개요 및 필요성

개념 정의

Salsa20ChaCha20은 다음과 같은 특성을 공유한다:

  • 설계자: 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 비교

특성Salsa20ChaCha20
설계 연도20052008
Quarter Round원본 순서변경된 순서
병렬화부분적더 나은 병렬화
추가 라운드Salsa20/8, /12ChaCha20/8, /12
표준화eStreamIETF 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-Poly1305AES-256-GCM
안전성우수우수
하드웨어 가속제한적AES-NI (높음)
소프트웨어 성능우수보통
모바일/IoT우수보통
侧信道攻撃강함구현에 따라 다름
태그 크기128비트128비트
표준화RFC 7539NIST SP 800-38D

성능 비교 ( cycles per byte)

플랫폼ChaCha20AES-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와 다른 모드를 섞어서 사용

Ⅴ. 기대효과 및 결론

기대효과

구분RC4ChaCha20-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)

개념 명칭관계 및 시너지 설명
ARXAdd-Rotate-XOR 연산으로 구성된 스트림 암호 구조
Poly1305ChaCha20과 결합하여 AEAD를实现하는 메시지 인증 코드
Signal ProtocolChaCha20-Poly1305를활용한 안전한 메시징 프로토콜
TLS 1.3ChaCha20-Poly1305를표준 CipherSuite로 포함
WireGuardChaCha20-Poly1305를사용하는 효율적 VPN 프로토콜
양자 컴퓨터 위협Grover 알고리즘으로 ChaCha20의 강도가 半감하지만 256비트는仍然十分

👶 어린이를 위한 3줄 비유 설명

  1. ChaCha20은**"매우 빠른 다단계 주방 믹서"**와 같아. 재료 (데이터)를 넣으면 각 단계에서高速으로 돌아가는 날이 다른 속도로 회전하며 완전히 섞여서, 도둑이 믹서를 열어봐도 원래 재료가 무엇이었는지 알 수 없어.
  2. Poly1305는**"물건을密封한後 찜 stamp"**와 같아. 물건이 섞여서 아무도 내용을 알 수 없게 되었지만, 그래도 누군가 包み를 뜯거나 조작하면 그 흔적이 stamp에 남어서 알 수 있게 하는 거야.
  3. 그래서 ChaCha20으로 섞고 Poly1305로封印하면, 내용도保密되고 조작도 탐지되는完整的인 보호가 되는 거다! 마치 맛있게 만든 요리를 완전하게 밀폐해서 도둑이 열어볼 수도, 조작할 수도 없게 하는 것과 같아.