Klucze publiczne
Dwa klucze, dwa zadania. Ich rozdzielenie jest tu całym sensem: kto ma ten serwer, nie podpisze wydania, a kto ma klucz wydań, nie potrzebuje dostępu do tego serwera.
Klucz wydań — SLH-DSA-SHA2-128s
Podpisuje każdy manifest, paczkę i raport. Trzymany offline; nigdy nie dotyka tego hosta. Router ma połowę publiczną wbudowaną w obraz, w /etc/gadnet/release-public-key-slhdsa.pem - i dlatego wskazanie urządzeniu wrogiego serwera aktualizacji kończy się nieudaną aktualizacją, a nie przejęciem.
Podpisy oparte na funkcjach skrótu (NIST FIPS 205) opierają się wyłącznie na odporności skrótu na znalezienie przeciwobrazu, a tę komputer kwantowy jedynie połowi. Dlatego pochodzenie wydania potwierdza SLH-DSA, a nie klasyczny klucz GPG, który jedzie obok wyłącznie dla zgodności.
Kopia używana po stronie serwera: release-public-key-slhdsa.pem
Opublikowany zestaw kluczy
Routery uczą się nowego klucza podpisującego z tego dokumentu, który sam jest podpisany kluczem, któremu już ufają. Dlatego rotacja jest zwykłym zdarzeniem w tle, a nie nowym obrazem na każdym urządzeniu - i dlatego przejęty serwer nadal nie może wprowadzić własnego klucza.
Sekwencja 1, opublikowana 22.09.2026.
| Odcisk (SHA-256) | Status | Ważny |
|---|---|---|
66b2 74b0 ca6b 3153 c6dd 1496 ad29 5114 5925 b13c c5b4 14ad 857f 24cb b3c4 1431 |
current | 22.09.2026 – 21.09.2028 |
52db 3adc d469 d1af ce92 5d73 793f 58c6 50af 5ee0 43e3 2c9d 3396 fbd3 f80a 99ea |
next | 22.09.2026 – 21.09.2028 |
Jeśli router poprosi o potwierdzenie nowego klucza wydań, porównaj jego odcisk z tym z tabeli, znak po znaku.
Wersja maszynowa i jej odłączony podpis:
Odtwórz odcisk z klucza publicznego samodzielnie:
openssl pkey -pubin -in release-public-key-slhdsa.pem -outform DER | openssl dgst -sha256
Klucz tożsamości transportu — Ed25519
Podpisuje transkrypty wymiany kluczy i nic poza tym. Przypnij go w kliencie, a podmieniony serwer zostanie wykryty nawet wtedy, gdy jego certyfikat TLS się waliduje - a to jest normalna sytuacja za firmowym proxy albo portalem przechwytującym.
- Klucz publiczny (base64url)
tDvaWjcAqgAev3fxt2wagFEvhM5uXbRXpY01KR-zIag- Odcisk palca
b43b da5a 3700 aa00 1ebf 77f1 b76c 1a80 512f 84ce 6e5d b457 a58d 3529 1fb3 21a8
Przejęcie tego klucza pozwala napastnikowi podszyć się pod transport. Nie pozwala podrobić wydania ani odczytać wcześniejszych sesji: sekrety sesji pochodzą z kluczy efemerycznych, które istnieją tylko na czas jednego handshake'u.
Wymiana kluczy
Zestaw:
X25519MLKEM768 — X25519 w połączeniu z ML-KEM-768 (FIPS 203), w kolejności klasyczny || PQ. Noga klasyczna przetrwa złamanie ML-KEM; noga postkwantowa broni przed przeciwnikiem, który nagrywa ruch dziś, żeby odszyfrować go później.
Punkt końcowy handshake'u: POST https://updates.gadnet.pl/api/v1/kex/init
{
"version": 1,
"x25519_public": "<32 bajty, base64url>",
"mlkem768_public": "<PEM SubjectPublicKeyInfo, base64url>"
}
Odpowiedź niesie efemeryczny klucz publiczny X25519 serwera, szyfrogram ML-KEM, identyfikator sesji i podpis Ed25519 nad skrótem transkryptu. Obie strony liczą potem HKDF-SHA-384 nad x25519_shared || mlkem_shared, z solą równą skrótowi transkryptu - więc naruszony handshake daje inne klucze i pierwsze uwierzytelnione żądanie się nie powiedzie.