ChaCha20-Poly1305 – nowoczesne szyfrowanie AEAD
Algorytmy

ChaCha20-Poly1305 – nowoczesne szyfrowanie AEAD

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 – nowoczesne szyfrowanie AEAD
ChaCha20-Poly1305 – nowoczesne szyfrowanie AEAD

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.

Polecane wpisy
Programowanie dynamiczne: rozwiązywanie złożonych problemów przez podział na mniejsze podproblemy
Programowanie dynamiczne: rozwiązywanie złożonych problemów przez podział na mniejsze podproblemy

🧠 Programowanie dynamiczne: rozwiązywanie złożonych problemów przez podział na mniejsze podproblemy 📌 Wprowadzenie Programowanie dynamiczne (ang. Dynamic Programming, DP) to Czytaj dalej

Wyzwania związane z zarządzaniem kluczami w złożonych systemach szyfrujących
Wyzwania związane z zarządzaniem kluczami w złożonych systemach szyfrujących

Wyzwania związane z zarządzaniem kluczami w złożonych systemach szyfrujących 🔑 Współczesne systemy kryptograficzne odgrywają kluczową rolę w zapewnianiu prywatności, poufności Czytaj dalej

Marek "Netbe" Lampart Inżynier informatyki Marek Lampart to doświadczony inżynier informatyki z ponad 25-letnim stażem w zawodzie. Specjalizuje się w systemach Windows i Linux, bezpieczeństwie IT, cyberbezpieczeństwie, administracji serwerami oraz diagnostyce i optymalizacji systemów. Na netbe.pl publikuje praktyczne poradniki, analizy i instrukcje krok po kroku, pomagając administratorom, specjalistom IT oraz zaawansowanym użytkownikom rozwiązywać realne problemy techniczne.