홈으로 돌아가기

QuarkDash: TypeScript의 양자내성 암호

QuarkDash — 키 교환을 위한 Ring-LWE 기반 하이브리드 양자내성 프로토콜, 암호화를 위한 ChaCha20/Gimli, 인증을 위한 SHAKE-256. 최대 2710 MB/s 성능의 128비트 보안 제공. 재생 공격 및 측채널 공격 방어 포함.

양자내성 QuarkDash: Ring-LWE와 TypeScript 코드
Advertisement 728x90

# QuarkDash: TypeScript 기반 하이브리드 후양자 프로토콜 - 고부하 시스템용

QuarkDash는 후양자 키 교환을 위한 Ring-LWE, 스트림 암호 ChaCha20 또는 Gimli, 키 유도 및 MAC를 위한 SHAKE-256을 결합하며, 재전송 및 타이밍 공격 방지를 제공합니다. 공개키 크기 ~2 KB, 개인키 ~1 KB. 세션 설정은 평균 CPU에서 ~8-9 ms 소요. 아키텍처 종속성 없이 클라이언트-서버 시스템에 이상적입니다.

QuarkDash의 기본 원시 선택

키 교환을 위한 Ring-LWE

Ring-LWE는 N=256, Q=7681, ω=7 파라미터의 다항환을 사용합니다. 128비트 후양자 보안을 제공합니다. NTT를 통한 다항 곱셈으로 O(N log N) 효율. 키 생성: ~12 ms, 캡슐화/디캡슐화 ~8-9 ms.

대칭 암호화

  • ChaCha20: 20라운드, 256비트 키, 12바이트 논스. 소프트웨어에서 초고속, 타이밍 공격에 강함.
  • Gimli: 24라운드, 384비트 상태, 256비트 보안. 32비트 아키텍처에서 ChaCha20 초과, IoT용 가벼운 코드.

SHAKE-256을 활용한 KDF 및 MAC

SHAKE-256(Keccak 기반)은 양자 내성 키 유도 및 인증에 사용. KDF: SHAKE256(솔트 || 공유비밀 || "session-key", 64) → 세션키(32바이트) + MAC키(32바이트). MAC: SHAKE256(MAC키 || 헤더 || 암호문, 32)로 상수시간 검증.

Google AdInline article slot

프로토콜 단계별 흐름

키 생성

  • a ∈ Z_Q^N 선택.
  • 계수 {-1,0,1}인 작은 s, e.
  • b = a ⊗ s + e (NTT).
  • 공개: (a, b), 개인: s.

세션용 KEM

시작자:

  • u = a ⊗ s' + e'.
  • 공유비밀 = b ⊗ s'.

수신자: 공유비밀 = u ⊗ s.

메시지 암호화

  • 헤더 = 타임스탬프(8바이트) || 시퀀스(4바이트).
  • 암호문 = streamCipher.encrypt(평문, 세션키, 논스).
  • MAC = SHAKE256(MAC키 || 헤더 || 암호문, 32).
  • 패킷: 헤더 || 암호문 || MAC.

메시지 복호화

  • 패킷 파싱.
  • MAC 검증(상수시간).
  • 타임스탬프 5분 이내 확인.
  • 시퀀스 유일성 확인(1000 윈도우).
  • 평문 = streamCipher.decrypt(암호문).

보안 조치

  • 후양자 내성: 알려진 양자 공격 없는 Ring-LWE, Grover 알고리즘에 강한 SHAKE-256.
  • 사이드채널 보호: 상수시간 비교, 안전 키 지움, 비밀 의존 분기 없음.
  • 완전 순방향 비밀성: 일회용 세션 키.
  • 재전송 방지: 타임스탬프 + 시퀀스.

전체 보안: 고전/양자 위협에 128-256비트.

Google AdInline article slot

성능 벤치마크

세션 설정 (ms, 1000회 평균)

| 작업 | QuarkDash (ChaCha20) | QuarkDash (Gimli) | ECDH P-256 | RSA-2048 |

|------|----------------------|-------------------|------------|----------|

| 키 생성 | 12.3 | 12.1 | 1.2 | 48 |

Google AdInline article slot

| KEM 캡슐화 | 8.7 | 8.5 | 3.4 | 42 |

| KEM 디캡슐화 | 9.2 | 9.0 | 3.4 | 0.1 |

처리량 (MB/s)

| 크기 | ChaCha20 | Gimli | AES-256-GCM | ECIES |

|------|----------|-------|-------------|-------|

| 1 KB | 125 | 132 | 117 | 10 |

| 1 MB | 2380 | 2630 | 1176 | 48 |

| 10 MB | 2450 | 2710 | 1200 | 50 |

오버헤드: 공개키 2 KB, 개인키 1 KB, 패킷 오버헤드 44바이트.

대안 비교

  • AES 대비: 내장 KEM, 완전 순방향 비밀성, 재전송 방지 추가. 하드웨어 가속 없이 소프트웨어에서 ChaCha20 우위.
  • ECC 대비: Shor 내성, 패킷 오버헤드 적음(44 vs 61바이트), 대용량 페이로드에서 빠름.

웹 앱용 TypeScript 최적화, Keccak으로 SHAKE-256 에뮬레이션.

주요 요약

  • NTT 곱셈으로 128비트 PQC 제공하는 Ring-LWE (N=256, Q=7681).
  • 듀얼 암호: 소프트웨어용 ChaCha20, IoT용 Gimli.
  • 상수시간 SHAKE-256 KDF/MAC.
  • 타임스탬프 + 시퀀스(1000 윈도우)로 재전송 방지.
  • 벤치마크: 암호화 최대 2710 MB/s, 세션 ~9 ms.

— Editorial Team

Advertisement 728x90

다음 읽기