CoderTools

Salsa20 암호화

확장 논스 변형을 지원하는 고속 스트림 암호

클라이언트 측 보안

Salsa20은 조회 테이블 없는 ARX 스트림 암호로 태생적으로 일정 시간이며 캐시 타이밍 공격에 면역입니다. 같은 키에서 nonce 재사용은 치명적입니다. 안전한 무작위 nonce 생성을 위해 XSalsa20(192비트 nonce)을 사용하세요.

Salsa20/20: 256비트 키, 64비트 nonce, 20라운드; eSTREAM Profile 1; 2⁷⁴바이트 최대; 전체 라운드 공격 없음.

초기 블록 카운터 값 (암호화는 보통 0, 복호화는 같은 값 사용)

형식 옵션
🔒 100% 로컬 처리입력하신 데이터는 브라우저에서 완전히 처리되며, 서버로 전송되지 않습니다.

Salsa20 소개

Salsa20은 Daniel J. Bernstein이 설계한 ARX 스트림 암호(2005년 eSTREAM 제출)입니다. 32비트 워드 4×4 행렬(512비트 전체 상태)에서 덧셈(mod 2³²), 비트 회전, XOR만 사용합니다. S-box나 조회 테이블이 없어 실행 시간이 키나 데이터 값과 무관합니다. 64비트 스트림 카운터로 이전 블록 처리 없이 키스트림의 임의 위치에 접근 가능합니다.

Salsa20은 2008년 eSTREAM Profile 1(소프트웨어)에 선정되었습니다. Bernstein은 2011년 XSalsa20을 정의했습니다: HSalsa20으로 192비트 nonce의 앞 128비트와 원래 키에서 256비트 하위 키를 유도하여 Salsa20/20에 입력합니다. 이 구조로 생일 경계 우려 없이 무작위 192비트 nonce 생성이 가능하며 NaCl secretbox(XSalsa20-Poly1305)의 기반이 됩니다.

알고리즘 비교

알고리즘 라운드 Nonce 길이 속도 최적 용도
Salsa20/20 20 64 bits (8 bytes) 표준 순차적 nonce를 사용하는 세션 암호화; 고처리량; eSTREAM 인증 배포
Salsa20/12 12 64 bits (8 bytes) 빠름 충분한 보안 여유의 고성능; Bernstein 추천
Salsa20/8 8 64 bits (8 bytes) 가장 빠름 벤치마킹 및 연구 전용
XSalsa20 20 192 bits (24 bytes) 표준 무작위 nonce 생성 앱; NaCl/libsodium secretbox 호환성

Salsa20 작동 원리

Salsa20은 4×4 행렬을 초기화합니다: “expand 32-byte k”를 인코딩하는 4개 상수 워드, 256비트 키에서 8×32비트, 64비트 스트림 카운터에서 2×32비트, 64비트 nonce에서 2×32비트.

(a,b,c,d)에 대한 쿼터 라운드: b⊕=(a+d)⋘7; c⊕=(b+a)⋘9; d⊕=(c+b)⋘13; a⊕=(d+c)⋘18. 이중 라운드 = 열 라운드 + 대각선 라운드. Salsa20/20 = 10 이중 라운드. 출력 = 변환된 상태와 원래 입력 상태의 XOR.

64비트 카운터: 64바이트 블록마다 +1로 2⁷⁴바이트 키스트림/(키, nonce). 카운터 값 설정으로 임의 위치 접근 가능. 64바이트 독립 세그먼트 병렬 처리 지원.

라운드 변형

  • Salsa20/20(20라운드): 최대 보안 여유, eSTREAM 후보, 전체 라운드 공격 없음. 모든 보안 중요 용도에 권장.
  • Salsa20/12(12라운드): Salsa20/20보다 약 35% 빠름, 12라운드 공격 없음, Bernstein 성능-보안 균형 추천, eSTREAM portfolio 주요 후보.
  • Salsa20/8(8라운드): 가장 빠름, 알려진 감소 공격 있음(Aumasson 2008, 2²⁴⁹). 보안 민감 용도에 비권장. 벤치마킹 전용.

주요 특징

  • ARX 설계: S-box 없음, 조회 테이블 없음. 실행 시간이 데이터와 무관. 캐시 타이밍 공격에 태생적으로 면역.
  • 대규모 키스트림: 64비트 카운터로 2⁷⁴바이트/(키, nonce). 이전 블록 처리 없이 임의 위치 접근 가능.
  • 64비트 nonce: 엄격한 고유성 관리 필요. 같은 키 2³² 메시지 후 무작위 nonce 충돌 무시불가. 장기/공유 키에는 XSalsa20(192비트) 사용.
  • XSalsa20(192비트 nonce, 2011): HSalsa20으로 하위 키 유도, 무작위 nonce 생성 가능. NaCl secretbox 표준.
  • eSTREAM Profile 1(소프트웨어, 2008): 4년 공개 평가 선정. 12 또는 20라운드 공격 없음.

보안 고려사항

  • nonce 재사용은 치명적: 같은 (키, nonce, 카운터)로 두 메시지 암호화 → 평문 XOR 노출. XSalsa20 192비트 무작위 nonce가 생일 위험 제거.
  • 짧은 nonce 생일 경계: 64비트 → 같은 키 2³² 메시지 후 충돌 약 50%. XSalsa20(192비트) 사용.
  • 감소 라운드 공격: /20 또는 /12에 없음. Salsa20/8: 구별자 공격 존재. 보안 중요 용도에는 /20만.
  • 인증 없음: XSalsa20-Poly1305 또는 ChaCha20-Poly1305(RFC 8439)로 AEAD 제공.

실제 사용

  • NaCl secretbox(XSalsa20-Poly1305): NaCl 라이브러리의 원래 AEAD 원어, 192비트 nonce + Poly1305; libsodium에서 광범위 배포.
  • eSTREAM Profile 1(2008): ECRYPT 4년 공개 경쟁에서 Salsa20/12가 주요 소프트웨어 스트림 암호로 선정.
  • ChaCha20에 대한 영향: Bernstein이 2008년 Salsa20 변체로 ChaCha20 설계, 라운드당 확산 개선.
  • 레거시 시스템: RFC 7539/8439 이전 많은 libsodium 기반 VPN·파일 암호화·메시지 앱에서 XSalsa20-Poly1305 사용.

참고 자료

빠른 메뉴

최근 사용 도구 없음