Hybrydowy postkwantowy protokół QuarkDash: implementacja w TypeScript dla systemów wysokonakładowych
QuarkDash łączy Ring-LWE do postkwantowej wymiany kluczy, szyfry strumieniowe ChaCha20 lub Gimli, SHAKE-256 do KDF i MAC, plus ochronę przed atakami replay i timing. Rozmiar klucza publicznego ~2 KB, prywatnego ~1 KB. Ustanowienie sesji zajmuje ~8-9 ms na średnim CPU. Nadaje się dla systemów klient-serwer bez przywiązywania do architektury.
Wybór prymitywów w QuarkDash
Ring-LWE do wymiany kluczy
Ring-LWE używa pierścienia wielomianów z parametrami N=256, Q=7681, ω=7. Zapewnia 128-bitową postkwantową bezpieczeństwo. Mnożenie wielomianów poprzez NTT z O(N log N). Generacja kluczy: ~12 ms, inkapsulacja/dekapsulacja ~8-9 ms.
Szyfrowanie symetryczne
- ChaCha20: 20 rund, 256-bitowy klucz, 12-bajtowy nonce. Wysoka prędkość w oprogramowaniu, odporność na timing-ataki.
- Gimli: 24 rundy, 384-bitowy stan, 256-bitowa bezpieczeństwo. Szybszy niż ChaCha20 na 32-bitowych architekturach, mniej kodu dla IoT.
KDF i MAC na SHAKE-256
SHAKE-256 (oparty na Keccak) do kwantowo-odpornej pochodnej kluczy i autentykacji. KDF: SHAKE256(salt || sharedSecret || "session-key", 64) → sessionKey (32 bajty) + macKey (32 bajty). MAC: SHAKE256(macKey || header || ciphertext, 32) z constant-time weryfikacją.
Krok po kroku algorytm działania
Generacja kluczy
- Wybrać a ∈ Z_Q^N.
- Małe s, e ze współczynnikami {-1,0,1}.
- b = a ⊗ s + e (NTT).
- Publiczny: (a, b), prywatny: s.
KEM dla sesji
Inicjator:
- u = a ⊗ s' + e'.
- sharedSecret z b ⊗ s'.
Odbiorca: sharedSecret z u ⊗ s.
Szyfrowanie wiadomości
- header = timestamp (8 bajtów) || sequence (4 bajty).
- ciphertext = streamCipher.encrypt(plaintext, sessionKey, nonce).
- mac = SHAKE256(macKey || header || ciphertext, 32).
- Pakiet: header || ciphertext || mac.
Odszyfrowanie
- Podzielić pakiet.
- Weryfikacja MAC (constant-time).
- timestamp w granicach 5 min.
- sequence nie powtarza się (okno 1000).
- plaintext = streamCipher.decrypt(ciphertext).
Środki bezpieczeństwa
- Postkwantowa odporność: Ring-LWE bez znanych kwantowych ataków, SHAKE-256 przeciw Groverowi.
- Kanały boczne: constant-time porównania, secureZero kluczy, bez rozgałęzień na sekretach.
- Forward secrecy: efemeryczne klucze na sesję.
- Ochrona przed replay: timestamp + sequence.
Ogólny poziom: 128-256 bitów przeciw klasycznym/kwantowym zagrożeniom.
Benchmarki wydajności
Ustanowienie sesji (ms, średnia z 1000)
| Operacja | QuarkDash (ChaCha20) | QuarkDash (Gimli) | ECDH P-256 | RSA-2048 |
|----------|----------------------|-------------------|------------|----------|
| Generacja kluczy | 12.3 | 12.1 | 1.2 | 48 |
| KEM inkapsulacja | 8.7 | 8.5 | 3.4 | 42 |
| KEM dekapsulacja | 9.2 | 9.0 | 3.4 | 0.1 |
Przepustowość (MB/s)
| Rozmiar | ChaCha20 | Gimli | AES-256-GCM | ECIES |
|--------|----------|-------|-------------|-------|
| 1 KB | 125 | 132 | 117 | 10 |
| 1 MB | 2380 | 2630 | 1176 | 48 |
| 10 MB | 2450 | 2710 | 1200 | 50 |
Nakłady: klucz publiczny 2 KB, prywatny 1 KB, overhead pakietu 44 bajty.
Porównanie z alternatywami
- Vs AES: QuarkDash dodaje wbudowany KEM, forward secrecy, replay-ochronę. ChaCha20 szybszy niż AES bez sprzętu.
- Vs ECC: odporny na Shora, mniejszy overhead pakietu (44 vs 61 bajtów), wyższa prędkość dla dużych danych.
Protokół zoptymalizowany dla TypeScript w aplikacjach webowych, z emulacją SHAKE-256 na Keccak.
Co ważne
- Ring-LWE (N=256, Q=7681) dla 128-bit PQC z NTT-mnożeniem.
- Podwójny wybór szyfrów: ChaCha20 dla oprogramowania, Gimli dla IoT.
- SHAKE-256 KDF/MAC z constant-time operacjami.
- Ochrona przed replay przez timestamp + sequence (okno 1000).
- Benchmarki: do 2710 MB/s szyfrowania, sesja ~9 ms.
— Editorial Team
Brak komentarzy.