ChaCha20-Poly1305 – nowoczesne szyfrowanie AEAD
ChaCha20-Poly1305 to jeden z najważniejszych współczesnych mechanizmów szyfrowania danych. Podobnie jak AES-GCM zapewnia jednocześnie:
- poufność – dane są zaszyfrowane,
- integralność – wykrywa zmianę danych,
- uwierzytelnienie – potwierdza, że dane nie zostały zmodyfikowane.
Jest to konstrukcja typu AEAD (Authenticated Encryption with Associated Data).
Najprościej:
ChaCha20-Poly1305
|
+-----------+-----------+
| |
ChaCha20 Poly1305
| |
Szyfrowanie Autentykacja
| |
+-----------+-----------+
|
Secure Data
ChaCha20-Poly1305 ≠ jeden algorytm
To połączenie dwóch mechanizmów:
ChaCha20
|
+--> szyfrowanie danych
Poly1305
|
+--> tworzenie tagu uwierzytelniającego
Razem:
Plaintext
|
v
ChaCha20
|
v
Ciphertext
|
+
|
Poly1305
|
v
Authentication Tag
Efekt:
Ciphertext + Tag
Jak działa ChaCha20?
ChaCha20 jest szyfrem strumieniowym.
W przeciwieństwie do AES, który pracuje na blokach:
AES:
[ blok ][ blok ][ blok ]
ChaCha20 generuje strumień pseudolosowych danych:
ChaCha20:
Key + Nonce
|
v
Keystream
|
v
XOR
|
v
Encrypted Data
Schemat:
Plaintext
XOR
Keystream
|
v
Ciphertext
Dlaczego XOR?
To klasyczna konstrukcja szyfrów strumieniowych:
10110101 plaintext
XOR
01101010 keystream
=
11011111 ciphertext
Odbiorca mając ten sam klucz generuje identyczny keystream i odzyskuje dane.
Poly1305 – ochrona integralności
Samo szyfrowanie nie wystarczy.
Załóżmy:
Dane:
"Transfer 100 PLN"
Atakujący zmienia:
"Transfer 900 PLN"
Bez mechanizmu uwierzytelniania odbiorca może nie wiedzieć, że dane zostały zmienione.
Poly1305 generuje:
Message
|
v
Poly1305
|
v
Authentication Tag
Przykład:
Ciphertext:
8F93AB22...
Tag:
71AF91CC...
Odbiorca sprawdza:
Ciphertext + Tag
|
v
VALID / INVALID
AEAD – czyli szyfrowanie + uwierzytelnienie
ChaCha20-Poly1305 działa jako AEAD:
AEAD
|
+----------+----------+
| |
Encryption Authentication
| |
ChaCha20 Poly1305
Może chronić:
Dane tajne:
Password=secret123
oraz:
Dane jawne, ale chronione:
Header:
User-ID: 12345
Nagłówek może nie być szyfrowany, ale jego zmiana zostanie wykryta.

ChaCha20-Poly1305 vs AES-GCM
To najważniejsze porównanie.
| Cecha | ChaCha20-Poly1305 | AES-GCM |
|---|---|---|
| Typ | szyfr strumieniowy | szyfr blokowy |
| AEAD | ✅ | ✅ |
| Klucz | 256 bitów | 128/256 bitów |
| Nonce | 96 bitów | 96 bitów |
| Wydajność bez AES-NI | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| Wydajność z AES-NI | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Mobile | bardzo dobry | dobry |
| TLS 1.3 | ✅ | ✅ |
| WireGuard | ✅ | ❌ |
Dlaczego ChaCha20 jest popularny?
Główny powód:
działa bardzo dobrze nawet bez specjalnego sprzętowego wsparcia.
AES może korzystać z instrukcji procesora:
Intel AES-NI
ARM Crypto Extensions
Ale starsze urządzenia lub małe urządzenia IoT mogą nie mieć takiej akceleracji.
ChaCha20 działa bardzo szybko:
CPU bez AES acceleration
ChaCha20 ██████████
AES-GCM ██████
ChaCha20-Poly1305 w TLS
TLS 1.3 obsługuje:
TLS 1.3 Cipher Suites:
TLS_AES_128_GCM_SHA256
TLS_AES_256_GCM_SHA384
TLS_CHACHA20_POLY1305_SHA256
Przykład:
Browser
|
|
TLS 1.3
|
|
ChaCha20-Poly1305
|
|
Server
ChaCha20-Poly1305 w WireGuard
To jedno z najbardziej znanych zastosowań.
WireGuard wykorzystuje:
WireGuard Cryptography:
Curve25519
|
v
Key Exchange
ChaCha20-Poly1305
|
v
Encryption
BLAKE2s
|
v
Hashing
HKDF
|
v
Key Derivation
Schemat:
Peer A Peer B
X25519 <--------------------> X25519
Shared Secret
|
v
ChaCha20-Poly1305
|
v
VPN Encrypted Tunnel
ChaCha20-Poly1305 a VPN
Typowy tunel:
Laptop
|
|
Encrypted VPN Tunnel
|
|
Server
Wewnątrz:
Packet
|
v
ChaCha20
|
v
Encrypted Packet
|
v
Poly1305 Tag
|
v
Internet
Jeżeli ktoś zmodyfikuje pakiet:
Modified Packet
|
v
Poly1305 Check
|
v
DROP
ChaCha20-Poly1305 a Signal
Nowoczesne komunikatory często wykorzystują podobne konstrukcje AEAD.
Model:
Identity
|
Ed25519
|
Authentication
Key Agreement
|
X25519
|
Shared Secret
Encryption
|
ChaCha20-Poly1305
|
Messages
Czyli:
Ed25519
→ kim jesteś?
X25519
→ jak uzgodnić sekret?
ChaCha20-Poly1305
→ jak zabezpieczyć wiadomości?
ChaCha20-Poly1305 a AES-GCM – praktycznie
W większości współczesnych systemów oba są bardzo bezpieczne.
Wybór często zależy od środowiska:
Serwer z nowym CPU:
AES-NI dostępne
AES-GCM
|
v
świetny wybór
Telefon / router / IoT:
brak AES acceleration
ChaCha20-Poly1305
|
v
świetny wybór
Nonce w ChaCha20-Poly1305
Tak samo jak AES-GCM:
nonce nie może być ponownie użyty z tym samym kluczem.
Poprawnie:
Key A + Nonce 1
|
Message 1
Key A + Nonce 2
|
Message 2
Źle:
Key A + Nonce 1
|
Message 1
Key A + Nonce 1
|
Message 2
Reuse nonce może zniszczyć bezpieczeństwo.
ChaCha20-Poly1305 a hasła
Nie używamy go do przechowywania haseł.
Źle:
password
|
ChaCha20
|
database
Do haseł:
password
|
Argon2id
|
stored hash
ChaCha20-Poly1305 służy do szyfrowania danych, nie do przechowywania haseł.
ChaCha20-Poly1305 a klucze
Tak jak AES-GCM:
Największym problemem często nie jest algorytm:
ChaCha20-Poly1305
|
v
bardzo mocny
Problemem jest:
❌ klucz w kodzie
❌ brak rotacji
❌ wyciek sekretu
❌ złe zarządzanie nonce
ChaCha20-Poly1305 i Docker/Kubernetes
W środowiskach kontenerowych może wyglądać to tak:
Kubernetes Secret
|
v
Application
|
v
ChaCha20-Poly1305 Key
|
v
Encrypted Data
Ale:
Secret Management
≠
Encryption
Kubernetes Secret dostarcza sekret, a aplikacja wykorzystuje go do kryptografii.
ChaCha20-Poly1305 i post-quantum
Sam ChaCha20-Poly1305 jest szyfrem symetrycznym.
Problem post-quantum dotyczy głównie:
RSA
ECC
X25519
Ed25519
czyli kryptografii asymetrycznej.
Schemat przyszłości:
Key Exchange
X25519 + ML-KEM
|
v
KDF
|
v
ChaCha20-Poly1305
|
v
Encrypted Data
Czyli:
- ML-KEM chroni wymianę kluczy,
- ChaCha20-Poly1305 chroni dane.
ChaCha20-Poly1305 w całej architekturze bezpieczeństwa
Po połączeniu z poprzednimi tematami:
CRYPTOGRAPHY
|
+----------------+----------------+
| |
Authentication Key Exchange
| |
Ed25519 X25519
| |
+----------------+----------------+
|
Shared Secret
|
v
KDF
|
+-----------+-----------+
| |
AES-GCM ChaCha20-Poly1305
| |
+-----------+-----------+
|
Encrypted Transport
Najważniejsze do zapamiętania
Ed25519
→ podpis cyfrowy
→ "kto podpisał?"
X25519
→ wymiana kluczy
→ "jak uzgodnić sekret?"
AES-GCM
→ szyfrowanie + uwierzytelnienie
ChaCha20-Poly1305
→ szyfrowanie + uwierzytelnienie
→ świetne na urządzenia bez AES acceleration
ChaCha20-Poly1305 jest obecnie jednym z najważniejszych mechanizmów szyfrowania w internecie. Razem z X25519 i Ed25519 tworzy fundament wielu nowoczesnych protokołów, takich jak WireGuard, TLS 1.3 i bezpieczne systemy komunikacji.






