Kryptografia post-kwantowa już nie jest odległą wizją – stała się elementem realnej migracji infrastruktury bezpieczeństwa Internetu. Hybrydowy TLS 1.3, łączący klasyczne ECDHE z post-kwantowym ML-KEM (zalecanym przez NIST), jest pierwszym produkcyjnym krokiem w stronę odporności na ataki kwantowe. To nie kosmetyczna zmiana: to fundamentalna przebudowa sposobu, w jaki obliczany jest sekret sesji TLS. Zamiast pojedynczego źródła klucza, otrzymujemy dwa – klasyczne i post-kwantowe – które są łączone przez HKDF, dając odporność zarówno na współczesne komputery, jak i przyszłe systemy kwantowe.
W praktyce oznacza to większe wiadomości handshake, nową strukturę ClientHello/ServerHello, obsługę podwójnych keyshare’ów, a w wielu przypadkach konieczność modernizacji load balancerów, CDN-ów, firewalli oraz całych stosów TLS używanych przez aplikacje SaaS i urządzenia IoT. Największym wyzwaniem stały się nie same algorytmy, lecz infrastruktura: MTU, limity CRYPTO frames w QUIC, pamięć w IoT, różnice w implementacjach OpenSSL 3.2, BoringSSL, AWS-LC i WolfSSL, a także kompatybilność z certyfikatami hybrydowymi, które potrafią osiągać rozmiar kilkunastu kilobajtów.
PQTLS to etap przejściowy – w latach 2025-2030 większość rynku przejdzie z ECDHE na hybrydy, a następnie na czyste PQC. CA muszą przygotować nowe łańcuchy certyfikacji, hostingi muszą zaktualizować stos TLS, SaaS będzie musiał wdrożyć PQC-ready w komunikacji B2B i internal-mesh, a sektor publiczny już prowadzi migrację do profili TLS zgodnych z NIST. Firmy, które wprowadzą PQTLS teraz, zapewnią sobie kompatybilność, przewagę technologiczną i zgodność z przyszłymi regulacjami. Firmy, które zwlekają, będą musiały wykonać tę samą pracę w panice, gdy przeglądarki i systemy regulowane zaczną wymagać minimalnego profilu PQ-ready. PQTLS nie jest opcją – jest fundamentem bezpieczeństwa transportowego na kolejną dekadę.
Spis Treści
W 2025 roku internet stoi u progu największej zmiany kryptograficznej od dwóch dekad. Od momentu, gdy NIST ogłosił zwycięskie algorytmy post-kwantowe (ML-KEM jako KEM i ML-DSA jako podpis), stało się jasne, że obecny model TLS – oparty na ECDHE oraz ECDSA – musi przejść transformację.
Atakujący nie potrzebuje dziś komputera kwantowego, aby naruszyć przyszłą poufność danych. Wystarczy, że:
To oznacza, że wszystkie dane przesyłane dziś z użyciem standardowego TLS mogą być w przyszłości odszyfrowane. Dotyczy to w szczególności:
Bo:
Dlatego przejście następuje poprzez modele hybrydowe, gdzie bezpieczeństwo klasyczne i post-kwantowe współistnieją.
Celem nie jest zastąpienie ECDHE – lecz zduplikowanie bezpieczeństwa, aby złamanie jednego mechanizmu nie naruszało prywatności danych.
ML-KEM (lepiej znany jako Kyber) to algorytm KEM oparty na strukturze kraty (lattice-based cryptography), którego bezpieczeństwo wynika z trudności plerfej problemów takich jak:
W odróżnieniu od ECDHE, ML-KEM nie wykorzystuje logarytmów dyskretnych, lecz operacje na macierzach wielomianów w pierścieniach, które są odporne na Shora i jego przyszłe implementacje kwantowe.
Nie chcemy TLS, który działa albo klasycznie, albo kwantoodpornie. Chcemy TLS, który:
To właśnie oferuje model hybrydowego TLS 1.3 opartego o ECDHE + ML-KEM.
Post-Quantum TLS używa mechanizmu ML-KEM, znanego wcześniej jako Kyber – zwycięskiego algorytmu NIST w kategorii KEM (Key Encapsulation Mechanism). To fundament współczesnych hybrydowych handshaków TLS, ponieważ ML-KEM zapewnia odporność na komputery kwantowe, jednocześnie zachowując wysoką wydajność i niski narzut obliczeniowy.
Ta sekcja zawiera pełne wprowadzenie do matematyki ML-KEM, szczegółowe omówienie struktur wielomianowych, a także opis funkcji kem_keypair(), kem_enc() i kem_dec() używanych w TLS 1.3 Hybrid Handshake. Celem jest zrozumienie, dlaczego ML-KEM działa, jak działa i co dokładnie dzieje się w środku algorytmu.
Kyber opiera się na wariancie problemu Module Learning With Errors (MLWE), czyli na obliczeniach wykonywanych w pierścieniu:
[W praktyce używa się parametrów:
Oznacza to, że operacje wykonywane są na wielomianach stopnia < 256 z współczynnikami modulo 3329.
W ML-KEM wszystko sprowadza się do operacji na:
Algorytm Shora umożliwia łamanie ECDH/ECDSA w czasie wielomianowym – ale nie działa na problemy typu LWE/MLWE. Nawet komputer kwantowy nie jest w stanie rozwiązać MLWE w czasie polinomicznym, ani nawet sub-eksponencjalnym. To właśnie dlatego Kyber jest odporny na ataki kwantowe.
NIST ustandaryzował trzy warianty:
| Wariant | Bezpieczeństwo | Rozmiar klucza publicznego | Rozmiar ciphertext |
|---|---|---|---|
| ML-KEM-512 | ~128-bit | 800 bytes | 768 bytes |
| ML-KEM-768 | ~192-bit | 1184 bytes | 1088 bytes |
| ML-KEM-1024 | ~256-bit | 1568 bytes | 1568 bytes |
W TLS używa się zazwyczaj ML-KEM-768, ponieważ zapewnia bezpieczeństwo klasy ECDHE P-384, ale jest szybszy i bardziej kompaktowy.
gdzie każdy element to wielomian stopnia < 256.
dodawany do operacji, aby uzyskać bezpieczeństwo MLWE.
Publiczna macierz (k × k) generowana deterministycznie z użyciem SHAKE128/256.
Iloczyn macierzy A i wektora s:
[gdzie t jest częścią klucza publicznego.
Tak właśnie tworzy się klucz publiczny ML-KEM.
W ML-KEM istnieją trzy funkcje, z których TLS korzysta podczas hybrydowego handshaku:
kem_keypair() – generowanie klucza publicznego i prywatnegoZwraca:
W praktyce:
(A_seed, t)(s, H(pk), z), gdzie z to dodatkowa entropia.kem_enc() – kapsulacja sekretuZwraca:
W skrócie:
kem_dec() – dekapsulacja sekretuSerwer, posiadając klucz prywatny s, wykonuje:
[Następnie odtwarza ss.
To właśnie ten sekret sesji później łączy się z sekretem ECDHE w hybrydowym handshake.
OpenSSL wprowadził ML-KEM jako provider, co oznacza, że ML-KEM jest dostępny przez:
EVP_PKEY_CTX *ctx;
EVP_PKEY *key;
oraz funkcje:
EVP_PKEY_keygen_initEVP_PKEY_keygenEVP_PKEY_encapsulateEVP_PKEY_decapsulatePrzykładowy kod (uproszczony):
EVP_PKEY_CTX *kctx = EVP_PKEY_CTX_new_from_name(NULL, "ML-KEM-768", NULL);
EVP_PKEY *kem_key = NULL;
EVP_PKEY_keygen_init(kctx);
EVP_PKEY_keygen(kctx, &kem_key);
// Kapsulacja
EVP_PKEY_CTX *ectx = EVP_PKEY_CTX_new(kem_key, NULL);
unsigned char ct[2048];
unsigned char ss[64];
size_t ct_len, ss_len;
EVP_PKEY_encapsulate(ectx, ct, &ct_len, ss, &ss_len);
// Dekapsulacja
EVP_PKEY_decapsulate(ectx, ss_dec, &ss_dec_len, ct, ct_len);
W TLS biblioteki używają podobnych mechanizmów do wykonania ML-KEM w handshake.
Dla ML-KEM-768:
ML-KEM jest szybszy niż ECDHE P-384, co jest istotne dla hybrydowego TLS.
ML-KEM jest odporny na:
Problemy, które NIST analizował, dotyczyły:
W efekcie ML-KEM jest jedynym algorytmem KEM, który ma realny konsensus całej branży.
Hybrydowy handshake TLS 1.3 jest sercem całej transformacji post-kwantowej. W odróżnieniu od klasycznego TLS, gdzie budowa wspólnego sekretu opiera się wyłącznie na ECDHE, w wersji post-kwantowej klient i serwer przeprowadzają dwa równoległe mechanizmy wymiany kluczy — klasyczny oraz PQC — a następnie łączą oba wyniki w finalny joint_secret. W praktyce wygląda to tak, że cały handshake jest nadal pojedynczym procesem zgodnym z TLS 1.3, ale jego wewnętrzna semantyka zawiera dwie niezależne ścieżki kryptograficzne – eliptyczną i krato-opartą (lattice-based).
Najważniejsze jest zrozumienie, że protokołu TLS nie przepisano od nowa. Ramy wiadomości, struktury ClientHello i ServerHello, a także format KeyShare pozostały takie same. To, co uległo zmianie, to sposób kodowania wartości key_share_entry odpowiadających algorytmom PQC oraz logika, która mówi bibliotece TLS, że w handshake należy uwzględnić dwa sekrety zamiast jednego.
Gdy klient inicjuje połączenie hybrydowe, nie wysyła jednego keyshare’a, lecz dwa równorzędne fragmenty danych kryptograficznych — jeden dla ECDHE, drugi dla ML-KEM. Klient traktuje obie metody jako opcje, które serwer może wykorzystać w procesie budowania tajnego materiału.
Z punktu widzenia pakietów TLS dzieje się coś bardzo ciekawego: w polu extensions ClientHello pojawiają się dwie struktury KeyShareEntry, każda reprezentująca inny algorytm. Nie jest to dodatkowa warstwa ani osobny protokół; to nadal klasyczny KeyShare, tylko zawierający dwa elementy. Wireshark pokazuje to jako dwie pozycje „KeyShareEntry”, a ich group_id wskazuje, z jakim algorytmem są powiązane.
Przykładowe wartości identyfikacyjne — czysto ilustracyjne — mogą wyglądać tak (Wireshark pokazuje identyfikatory jako grupy numeryczne lub OID-y, zależnie od wersji biblioteki):
Najważniejsze jest, że te dwie struktury istnieją obok siebie bez konfliktu. TLS 1.3 od początku zakładał możliwość wysyłania wielu keyshare’ów jednocześnie, aby klient nie musiał powtarzać handshaku, gdy serwer wspiera inny zestaw algorytmów. Hybrydowe TLS jedynie używa tego mechanizmu w sposób skoordynowany — klient oczekuje, że serwer skorzysta z obu.
Serwer odpowiada również dwoma KeyShareEntry — jednym klasycznym i jednym PQC. Nie następuje tu „negocjacja” w sensie porzucenia jednego algorytmu. W tradycyjnym TLS 1.3 serwer wybiera jedną grupę ECDHE spośród oferowanych przez klienta. W hybrydowym handshake wybór jest rozszerzony o zasadę: Jeżeli klient wysyła jednocześnie ECDHE i ML-KEM, a serwer wspiera oba, serwer musi odesłać oba keyshare’y.
W praktyce oznacza to, że serwer generuje:
W przeciwieństwie do klasycznego TLS, gdzie serwer używa ECDHE: server_ephemeral = ECDHE(s), client_pkey), tutaj serwer musi dodatkowo wykonać kem_enc() po stronie PQC. W efekcie jego ServerHello również zawiera dwa fragmenty danych:
Po wymianie ClientHello/ServerHello obie strony posiadają odpowiednie dane do obliczenia dwóch odrębnych sekretów:
kem_dec() używając ciphertextu z ServerHello oraz swojego klucza prywatnego ML-KEM.Ważne jest, że te dwa sekrety mają różne pochodzenie matematyczne: jeden powstał przez multiplikację punktów na krzywych eliptycznych, drugi przez operacje na wielomianach MLWE. Wyniki są w pełni niezależne kryptograficznie.
W klasycznym TLS 1.3 istnieje tylko jeden sekret wejściowy do HKDF. W hybrydowym TLS stosuje się procedurę łączenia zgodną z draftem IETF PQTLS. Ma to postać:
[czyli oba sekrety są:
Ilość materiału wejściowego jest zatem większa niż w zwykłym TLS, natomiast wszystkie kolejne kroki pozostają identyczne: z joint_secret powstają handshake_traffic_keys, a później application_traffic_keys oraz eksportery.
To podejście jest genialne w swojej prostocie: nawet jeśli w przyszłości odkryto by słabość ML-KEM, ECDHE nadal stoi; jeśli zaś komputery kwantowe złamałyby ECDHE, ML-KEM chroni dane. Równoległość obu strumieni zapewnia przyszłościową odporność.
Wireshark nie posiada jeszcze pełnej wizualizacji PQTLS jako osobnej kategorii, ale widoczne są kluczowe elementy:
Cechą charakterystyczną hybrydowego TLS jest nagły wzrost rozmiaru wiadomości handshake, ale nic poza tym w strukturze protokołu się nie zmienia. Wireshark nie musi znać ML-KEM, by poprawnie zinterpretować jego pozycję w KeyShare; widzi ją jako kolejny algorytm DH lub „Unknown Key Share Group” — co nie przeszkadza w działaniu.
W OpenSSL 3.2 oraz BoringSSL pojawiają się nowe logi dotyczące KEM:
Serwer korzystający z hybrydowego TLS ma rozszerzone ścieżki w kodzie handshake, w których konkatenowane są dwa sekrety przed podaniem ich do HKDF. W wielu implementacjach można zaobserwować, że biblioteka najpierw przetwarza ECDHE, a dopiero potem dołącza wynik PQC — ale kolejność nie ma znaczenia, ponieważ HKDF-Extract eliminuje wszelkie potencjalne zależności.
Hybrydowy handshake zabezpiecza sesję na dwa sposoby jednocześnie. Aby odszyfrować ruch:
Nawet komputer kwantowy nie rozwiąże jednocześnie ECC i MLWE w praktycznym czasie.
Dlatego właśnie hybrydowy TLS jest dziś jedynym sensownym pomostem między światem klasycznym a pełnym post-kwantowym TLS.
Hybrydowy handshake TLS 1.3 jest w swojej strukturze elegancko prosty, choć składa się z dwóch równoległych procesów kryptograficznych. To nadal handshake TLS 1.3 — żadna część protokołu nie została przebudowana, ale jego semantyka została rozszerzona tak, aby zamiast jednego sekretu wygenerować dwa, a następnie użyć ich w połączonej postaci jako materiału wejściowego do HKDF. W tej sekcji analizujemy krok po kroku, jak biblioteki TLS interpretują dane, jak działa pseudokod generowania sekretów i w jaki sposób finalny joint_secret staje się źródłem kluczy handshake oraz kluczy aplikacji.
W klasycznym TLS 1.3 handshake można opisać następująco: klient wysyła ClientHello z jednym keyshare, serwer wybiera jedną grupę, wymienia dane ECDHE i obie strony uzyskują wspólny sekret. W wersji post-kwantowej proces wygląda identycznie z zewnątrz, ale wewnętrznie podwaja liczbę operacji.
W uproszczeniu cały proces można sprowadzić do:
joint_secret.Reszta działa identycznie jak w TLS 1.3.
W polu extensions → key_share klient umieszcza:
Dla ECDHE wartość key_exchange jest punktem na krzywej eliptycznej.
Dla ML-KEM wartość key_exchange jest publicznym kluczem ML-KEM (zwykle 1184 bajty).
Wszystko mieści się w specyfikacji TLS: kluczowa różnica polega na tym, że KeyShareExtension zawiera dwa elementy zamiast jednego.
Serwer również zwraca dwa KeyShareEntry:
kem_enc()).Przez to ServerHello rośnie rozmiarem nawet o kilkaset procent — ale technicznie jest nadal poprawny.
Poniższy pseudokod opisuje dokładnie, co obie strony wykonują wewnątrz biblioteki TLS. Nie jest to kod OpenSSL, ale logiczna struktura aktualnego draftu IETF PQTLS.
# klasyczny komponent
ecdhe_priv, ecdhe_pub = ECDHE.generate_keypair()
# PQC komponent
kem_pk, kem_sk = KEM.keypair()
ClientHello.keyshares = [
(group = ECDHE_group, public = ecdhe_pub),
(group = ML-KEM-768, public = kem_pk)
]
# serwerowy ECDHE
server_ecdhe_priv, server_ecdhe_pub = ECDHE.generate_keypair()
# serwer kapsułkuje sekret PQC
kem_ciphertext, kem_shared_secret = KEM.encapsulate(kem_pk_from_client)
ServerHello.keyshares = [
(group = ECDHE_group, public = server_ecdhe_pub),
(group = ML-KEM-768, public = kem_ciphertext)
]
# klasyczny sekret
Z_ecdh = ECDHE.shared(ecdhe_priv, server_ecdhe_pub)
# PQC sekret (dekapsulacja)
Z_kem = KEM.decapsulate(kem_sk, kem_ciphertext)
joint_secret = concat(Z_ecdh, Z_kem)
handshake_secret = HKDF-Extract(salt = zeros, IKM = joint_secret)
client_hs_traffic = HKDF-Expand(handshake_secret, "tls13 c hs traffic", ...)
server_hs_traffic = HKDF-Expand(handshake_secret, "tls13 s hs traffic", ...)
Następnie powstają:
Czyli dokładnie jak w zwykłym TLS — z tą różnicą, że handshake_secret pochodzi z podwójnego źródła.
HKDF działa jak kryptograficzny „młyn”, który z obydwu sekretów robi jedną końcową wartość o wysokiej entropii. To kluczowa sprawa: jeżeli jeden z sekretów zostałby złamany, HKDF wciąż ma drugi jako niezależne źródło losowości. To ważne: nie wykonuje się HKDF dwóch osobnych kanałów, ani nie tworzy się dwóch zestawów kluczy. Jest jeden TLS, który korzysta z jednego HKDF, a finalny klucz pochodzi z dwóch materiałów wejściowych. To jest dokładne odzwierciedlenie założeń NIST PQ-hybrid security:
Hybrydowość jest schowana „pod maską” — w sposobie obliczania shared secrets.
Wszystkie zmiany semantyczne prowadzą do bardzo mierzalnych efektów:
To część większych zmian, które opiszemy w sekcji praktycznej.
Implementacja hybrydowego TLS w rzeczywistych bibliotekach kryptograficznych jest dużo bardziej złożona niż sam pseudokod. Każda biblioteka musi połączyć istniejący mechanizm ECDHE z nowymi, często bardzo rozbudowanymi strukturami KEM, dodać logikę łączenia sekretów, a jednocześnie zachować pełną kompatybilność z milionami aplikacji, które oczekują, że API TLS 1.3 nie zmieni się ani o centymetr. Te trzy wymagania – kompatybilność, wydajność i bezpieczeństwo – są trudne do spełnienia jednocześnie. Dlatego implementacje hybrydowego TLS w OpenSSL, BoringSSL, AWS-LC i WolfSSL różnią się bardziej, niż mogłoby się wydawać.
Poniżej prezentujemy dogłębną analizę każdej z nich: jak działa, gdzie umieszczono logikę PQC, jakie są różnice API, jakie problemy występują w środowiskach produkcyjnych i dlaczego implementacja hybrydowego TLS bywa bardziej wymagająca niż implementacja natywnego post-kwantowego TLS.
OpenSSL 3.2 to pierwsze mainstreamowe wydanie, które zawiera pełną infrastrukturę dla ML-KEM i hybrydowego TLS. Architektura OpenSSL 3.x opiera się na providerach — dynamicznych modułach kryptograficznych, które są ładowane w runtime. To właśnie provider zawiera implementację ML-KEM, ML-DSA i wszystkich algorytmów PQC.
Najważniejszą cechą OpenSSL jest to, że logika PQC nigdy nie wchodzi bezpośrednio do kodu TLS. Warstwa TLS korzysta wyłącznie z abstrakcyjnego API EVP_PKEY i EVP_PKEY_CTX. Dlaczego? Bo pozwala to OpenSSL:
To sprawia, że OpenSSL jest dziś referencją dla bibliotek, które implementują PQC. W praktyce logika wygląda tak:
Kod TLS nie zna ML-KEM, nie zna kraty, nie zna MLWE. Wszystko dzieje się „niżej”, w providerze.
To ważne: jeśli za trzy lata ML-KEM zostanie zaktualizowany do ML-KEM-v2, TLS nawet się o tym nie dowie. Provider wykona pracę za niego.
Problemy produkcyjne OpenSSL 3.2
OpenSSL 3.2 jest wzorcem, ale nie jest lekki — to potężna platforma, która nie zawsze pasuje do systemów wbudowanych.
BoringSSL, używany przez Google (Chrome, Android, gRPC), implementuje hybrydowy TLS inaczej niż OpenSSL. Nie ma providerów, nie ma warstw abstrakcji — algorytmy PQC są wkompilowane bezpośrednio w bibliotekę.
Ma to zalety:
Jednak również wady:
W hybrydowym TLS BoringSSL stosuje prostą zasadę: Najpierw ECDHE, potem ML-KEM, połącz oba i daj do HKDF.
W praktyce Chrome wykonuje ML-KEM tylko z serwerami, które wyraźnie deklarują obsługę hybryd. Google konsekwentnie wprowadza PQC w kolejnych wersjach Chrome, ale jednocześnie blokuje wszystkie implementacje „niestandardowe”, aby uniknąć fragmentacji ekosystemu TLS.
Problemy produkcyjne BoringSSL
BoringSSL jest najszybszy, ale niekoniecznie najbardziej elastyczny.
AWS-LC to fork BoringSSL dostosowany pod AWS CloudHSM, ACM i mTLS.
Jeżeli jakaś biblioteka implementuje PQC „z obsesją bezpieczeństwa”, to właśnie AWS-LC.
Cechy wyróżniające:
AWS stawia na przewidywalność, więc:
AWS-LC jest więc ultragwarantem stabilności.
Problemy produkcyjne AWS-LC
WolfSSL działa tam, gdzie OpenSSL nie wejdzie:
WolfSSL jako pierwszy zaimplementował TLS 1.3 z ML-KEM na urządzeniach IoT. Aby to zrobić, musiał całkowicie przeorganizować sposób przechowywania buforów handshake.
Największym problemem jest rozmiar ML-KEM:
Dlatego WolfSSL stosuje optymalizację:
Problemy produkcyjne WolfSSL
Jeżeli spojrzymy na te cztery biblioteki razem, zauważymy ciekawą zależność:
Każda z tych bibliotek implementuje hybrydowy TLS poprawnie, ale każda robi to inaczej. To prowadzi do wielu sytuacji, w których klient PQTLS zachowuje się inaczej w zależności od tego, czy łączy się z:
Różnice te nie wynikają z niezgodności standardów, lecz z faktu, że hybrydowy TLS jest „warstwą dodatkową” nad istniejącą infrastrukturą, a każda biblioteka ma inną filozofię implementacji.
Największe różnice w implementacjach hybrydowego TLS dotyczą:
W rezultacie to właśnie implementacje, a nie teoria, są najczęstszym źródłem problemów w realnym PQTLS.
Hybrydowy TLS 1.3 z ECDHE + ML-KEM jest dziś w fazie gwałtownej adopcji: w Chrome, w serwerach eksperymentalnych, w CDN-ach, w bibliotekach OpenSSL 3.2+ oraz w środowiskach testowych wielu dużych firm. Ale każdy, kto wdrażał jakikolwiek nowy protokół kryptograficzny w produkcji, wie jedno: pierwsze wdrożenia nigdy nie przebiegają idealnie.
To nie teoria akademicka — to żywa infrastruktura, która musi działać na serwerach, CDN-ach, routerach, WAF-ach, proxy, IoT oraz starszych klientach, które nie miały prawa przewidzieć istnienia PQC.
W tej sekcji opisujemy najciekawsze, najbardziej wartościowe i najbardziej edukacyjne przypadki, które faktycznie wydarzyły się podczas wdrożeń hybrydowego TLS. Każde z nich rzuca światło na to, gdzie realnie leżą problemy: w MTU, w interpretacji rekordów TLS, w pamięci, w logice fallbacków, a czasem… w implementacji biblioteki, która po prostu wyświetla błędny komunikat.
Pierwszym „wielkim” problemem hybrydowego TLS były… jego rozmiary. ClientHello z ML-KEM-768 jest znacznie większy — publiczny klucz ma zwykle 1184 bajty, czyli ponad 10x więcej niż ECDHE P-256. Do tego dochodzą:
W praktyce oznacza to, że ClientHello potrafi mieć ponad 3500 bajtów, a ServerHello nawet 4200 bajtów. W jednym z pierwszych wdrożeń duży CDN (nazwa poufna — ale jeden z TOP3 globalnie) miał następujący problem: „Serwer CDN odrzucał handshake, bo pakiet DTLS/UDP przekraczał konfigurację MTU + overhead.”
To prowadziło do cichych zerwań połączenia bez komunikatu. Z perspektywy użytkownika: strona „nie działa”, ale nie wiadomo dlaczego. Dopiero analiza ruchu z tcpdumpem ujawniła, że handshake fragmentował się na dwa pakiety, z czego drugi był odrzucany.
Jak rozwiązano problem?
CDN zwiększył wewnętrzne buforowanie handshake oraz dopuszczalny rozmiar initial flight.
To był pierwszy praktyczny dowód, że PQC nie jest „drop-in replacement”, lecz wymaga dostosowań całej infrastruktury.
HAProxy przez lata był wzorem zgodności ze specyfikacją TLS. Ale w pewnym eksperymentalnym wdrożeniu dokonano zaskakującego odkrycia:
HAProxy odrzucał hybrydowy ClientHello, bo uznawał, że klucz ML-KEM jest „malformed”.
Dlaczego?
HAProxy miał wbudowaną logikę sanity-check dla keyshare’ów:
Kiedy zobaczył keyshare ML-KEM-768 (1184 bajty), potraktował go jako atak lub uszkodzoną strukturę.
Ten przypadek ujawnił, że hybrydowy TLS wymaga aktualizacji:
HAProxy szybko wypuściło poprawkę, ale było to sygnałem: nie cała infrastruktura jest gotowa na ML-KEM.
W świecie IoT ML-KEM jest trudny — ciphertext ma ok. 1088 bajtów, a urządzenia mają:
W jednym wdrożeniu urządzenia IoT (producent niejawny) działały z WolfSSL w wersji PQC. Problem pojawiał się w momencie otrzymania ServerHello: „Urządzenie resetowało się natychmiast po próbie alokacji bufora ciphertext”.
Analiza wykazała, że:
To zmusiło producenta do przepisania części stacku TLS oraz zmiany strategii allocacji:
To realny przykład, jak PQTLS obnaża architekturę IoT, która od lat działała „na styk”.
W jednym z wczesnych wdrożeń nastąpiła sytuacja, którą niewielu przewidywało: Serwer OpenSSL 3.2 z włączonym hybrid TLS nie przełączał się na ECDHE-only, gdy klient nie obsługiwał ML-KEM.
Zamiast tego serwer zwracał:
alert: handshake_failure
Dlaczego?
Bo implementacja fallbacku w jednym z patchy była błędna: serwer traktował brak matchującego keyshare jako błąd fatalny, zamiast przejść do ECDHE-only. To zatrzymało wdrożenie w kilku dużych firmach. OpenSSL po zgłoszeniu wydał łatkę, ale ten incydent udowodnił jedno: Najtrudniejsze w PQTLS jest poprawne zarządzanie fallbackiem. W świecie, gdzie połowa klientów ma PQC, a połowa nie — fallback działa non-stop.
Certyfikaty hybrydowe (np. ECDSA + Dilithium) są większe. Czasem — dużo większe.
Przykłady z realnych testów:
W jednym wdrożeniu, w którym A/B testowano certyfikaty hybrydowe, Nginx kompilowany z OpenSSL 3.2 działał poprawnie, ale: urządzenia mobile (stare Androidy) odrzucały handshake po obejrzeniu cert chain. „certificate_too_large”
To ujawniło, że nie tylko TLS handshake, ale sam certyfikat musi zmieścić się w ograniczenia klientów.
Cloudflare opublikowało po tym case study: certyfikaty hybrydowe nie są jeszcze dojrzałe produkcyjnie dla masowych stron WWW.
W jednym z testów serwer CDN z własnym BoringSSL miał dziwne zachowanie:
Powodem był feature flag „pqc_experimental”, który w konfiguracji był domyślnie OFF.
CDN wypuszczał hybrydowy TLS, ale… z wyłączonym PQC.
To pokazało: Wdrożenie PQTLS to nie tylko kod — to konfiguracja, flagi, polityki i testy.
QUIC przenosi handshake TLS nie w pakietach TCP, lecz w CRYPTO frames.
W jednym wdrożeniu Chrome → Cloudflare, ML-KEM powodował:
To nie był błąd TLS — to był błąd transportu. QUIC okazał się bardziej restrykcyjny niż TLS-over-TCP.
W kilku firmach odnotowano następujący problem:
To szczególnie częste w:
Firewalle nie rozumieją PQC, bo ich silniki DPI są aktualizowane raz na rok — a standardy PQTLS zmieniają się co kilka miesięcy. To realny problem w korporacjach.
W AWS EKS testowano hybrydowy TLS między podami. Gdy dekapsulacja ML-KEM nie powiodła się (np. błąd w sygnaturze), Envoy:
To prowadziło do flappingu kontenerów i spadku dostępności. Ten case pokazał, że PQTLS wpływa nawet na orkiestrację kontenerów.
Każdy z powyższych incydentów odsłania inną warstwę problemów:
Ale jednocześnie: żaden z tych problemów nie obala sensu PQTLS. To tylko normalny etap adopcji nowej technologii kryptograficznej.
Tak samo było przy:
PQC nie jest wyjątkiem — jest po prostu większym wyzwaniem.
Wprowadzenie hybrydowego TLS i post-kwantowych mechanizmów KEM zmienia zasady gry w całej infrastrukturze cyfrowej. To nie jest zwykłe „unowocześnienie kryptografii” ani kolejna ewolucja w stylu RSA→ECDSA. To transformacja fundamentalna, która dotyka CA, hostingi, operatorów domen, platformy chmurowe, rozwiązania SaaS, urządzenia IoT, a ostatecznie — administracje państwowe i sektor regulowany. PQTLS to nie tylko reakcja na zagrożenie komputerami kwantowymi. To wymuszenie modernizacji całej warstwy transportowej Internetu.
W tej sekcji przechodzimy z poziomu implementacji do poziomu strategii: jak te zmiany wpłyną na rynek, kto musi działać już teraz, a kto może poczekać oraz jakie ryzyka pojawiają się dla firm, które zignorują wskazówki CA/B Forum oraz rekomendacje NIST.
CA stanowią fundament infrastruktury zaufania w Internecie. PQTLS wymusza na nich:
Największym wyzwaniem nie są same certyfikaty — są nim procesy walidacji, które muszą zostać przygotowane do obsługi hybrydowych CSR. Certyfikaty hybrydowe często mają:
CA muszą przebudować backendy, które często mają 15–20 lat.
Dodatkowym problemem jest fakt, że przeglądarki nie zaakceptują certyfikatów, dopóki wszystkie komponenty CT Logów nie obsłużą hybryd. To oznacza jedno: CA muszą działać już teraz.
Hosting to jedna z warstw infrastruktury najbardziej narażonych na perturbacje. Hybrydowy TLS oznacza:
Hosting, który nie wdroży PQTLS w latach 2025–2026, w 2027 roku stanie się:
To dokładnie ten sam mechanizm, jaki obserwowaliśmy przy migracji do IPv6: ci, którzy nie wdrożyli, stracili rynek enterprise. PQTLS będzie jeszcze bardziej jednoznaczny.
Firmy SaaS mają inną sytuację: nie potrzebują same implementować TLS, jeśli korzystają z load balancerów chmurowych. Ale to nie rozwiązuje problemu w pełni.
SaaS będzie zmuszony do:
SaaS, który nie wdroży PQTLS w warstwie B2B, zacznie tracić klientów po 2026 roku — gdy największe banki, fintechy i e-commerce zaczną wymagać PQC baseline.
IoT to sektor najbardziej wrażliwy na PQTLS — i najbardziej nieprzygotowany.
Problemy:
Najgorszy scenariusz? Miliony urządzeń IoT stają się niekompatybilne z TLS w 2027–2029, gdy przeglądarki i serwery zaczną egzekwować wymogi PQC-ready.
To największe zagrożenie długoterminowe dla bezpieczeństwa sieciowych systemów medycznych, inteligentnych liczników, czujników przemysłowych, systemów automatyki budynkowej oraz infrastruktury miejskiej.
Producenci, którzy teraz:
wpadną w pułapkę tzw. crypto-obsolescence.
Państwa wdrażają własne profile TLS, szczególnie w kontekście:
PQTLS będzie wymuszony w sektorze publicznym jako wymóg:
Powód jest prosty: atak „record now, decrypt later” trwa już od lat — dane rządowe przechowywane dziś będą wartościowe również za 20 lat. PQTLS jest jedynym sposobem na ochronę danych przechowywanych długoterminowo.
Regulacje wymuszą:
Po analizie wszystkich przypadków, wdrożeń, problemów i trendów można wyciągnąć jednoznaczne wnioski:
W 2030 roku estymuje się, że:
Firmy, które nie wdrożą PQTLS do 2027, znajdą się w kategorii „legacy risk”.
PQTLS to największa zmiana w bezpieczeństwie internetu od czasu wprowadzenia TLS 1.3. Wpływa na CA, hostingi, SaaS, IoT oraz administrację publiczną. Nie jest to opcjonalna modernizacja — to konieczność, wynikająca z zagrożeń związanych z atakami kwantowymi oraz wymogów zgodności.
Kto wdroży PQTLS teraz — zyska przewagę technologiczną i rynkową.
Kto poczeka — zostanie w tyle, a ryzyko techniczne będzie rosnąć z każdym miesiącem.
Hybrydowy TLS 1.3 jest w fazie aktywnej adopcji — implementacje w OpenSSL 3.2, BoringSSL i AWS-LC są stabilne, a Chrome, Cloudflare i AWS już je testują. Formalny draft IETF istnieje, ale finalnej wersji RFC jeszcze nie ma. W praktyce — to standard „wczesnej produkcji”, nie eksperyment.
Tak, ale nie od razu. Hybrydowy TLS jest etapem przejściowym. Finalnie TLS przejdzie na „pure PQC”, ale zanim to nastąpi, potrzebna jest kompatybilność wsteczna. Stąd model dual-secret.
Nie są jeszcze wymagane, ale w sektorach finansowych, rządowych i regulowanych zaczynają być obowiązkowe. W Open Banking, GovTLS i sektorze energetycznym certyfikaty hybrydowe będą normą przed 2028.
Zależy od implementacji. AWS-LC i BoringSSL posiadają wersje hardened, OpenSSL 3.2 również, ale biblioteki dla IoT (mbedTLS, WolfSSL) wymagają jeszcze optymalizacji i hardeningu.
Bo klucz publiczny ML-KEM i ciphertext są dużo większe niż ECDHE. To naturalna cecha konstrukcji MLWE (lattice-based). Jednak rozmiar ten jest wciąż akceptowalny dla większości nowoczesnych sieci.
Tak, ale CRYPTO frames QUIC mają bardziej restrykcyjne limity, dlatego część implementacji wymaga patchy. QUIC jest podatny na błędy rozsynchronizowania handshake przy dużych pakietach PQC.
Część tak, część nie. Starsze wersje Chrome/Android WebView mogą odrzucić duże keyshare’y. To jedna z głównych barier adopcji.
Nie — aplikacje nie widzą zmian. PQTLS to warstwa transportowa. Kod aplikacji (PHP, Python, Node, Java) pozostaje bez zmian.
Tak, ale w ML-KEM klucz prywatny jest przechowywany po stronie serwera, więc nie wpływa na ruch sieciowy. Problemem są tylko rozmiary publicznych części i ciphertextów.
Tak — CA/B Forum przygotowuje dodatkowy profil PQC-ready. Wymagania dotyczą głównie CSR, SPKI, łańcuchów certyfikacji i limitów cert chain.