Zweryfikuj pobrany plik
Router robi to automatycznie. Zrób to ręcznie, gdy wgrywasz obraz, odtwarzasz urządzenie albo po prostu nie chcesz wierzyć temu serwerowi na słowo.
1. Zdobądź klucz publiczny wydań
Z repozytorium albo z działającego routera, ze ścieżki /etc/gadnet/release-public-key-slhdsa.pem. Nie bierz go stamtąd, skąd wziąłeś sprawdzany plik - klucz i artefakt pobrane z jednego przejętego źródła weryfikują się nawzajem bez zarzutu.
2. Zweryfikuj podpis
openssl pkeyutl -verify -pubin \
-inkey release-public-key-slhdsa.pem \
-rawin -in <file> \
-sigfile <file>.slhdsa.sig
Powodzenie wypisuje Signature Verified Successfully. Cokolwiek innego znaczy: zatrzymaj się. Wymaga OpenSSL 3.5 lub nowszego, ze wsparciem ML-DSA/SLH-DSA.
3. Sprawdź skrót
sha256sum <file>
Porównaj z polem sha256 tego artefaktu w manifeście — tym zweryfikowanym w kroku 2, nie tym właśnie pobranym bez weryfikacji. Najpierw podpis, potem skrót: skrót wzięty z niezweryfikowanego dokumentu dowodzi tylko tego, że plik zgadza się z zamiarem napastnika.
Przykład na żywo: stable 0.1.0
curl -fsSLO https://updates.gadnet.pl/dist/stable/manifest.json
curl -fsSLO https://updates.gadnet.pl/dist/stable/manifest.json.slhdsa.sig
openssl pkeyutl -verify -pubin -inkey release-public-key-slhdsa.pem \
-rawin -in manifest.json -sigfile manifest.json.slhdsa.sig
curl -fsSLO https://updates.gadnet.pl/dist/stable/bundles/gadnet-0.1.0.tar.gz
sha256sum gadnet-0.1.0.tar.gz
# oczekiwane: 0c586aa7c48cd1cf1faaf8d8b04206d41b47dc7591782615828b39e90fcf4eb7
Wskaż routerowi ten serwer
# /etc/gadnet/system.conf
UPDATE_MANIFEST_URL=https://updates.gadnet.pl/v1/manifest.json
To ustawienie można spokojnie oddać operatorowi. Wrogi host poda bajty, ale nie wytworzy poprawnego podpisu, więc najgorszym skutkiem błędnego adresu jest nieudana aktualizacja. HTTPS jest mimo to wymagany: zwykły HTTP zdradza, jaką wersję ma urządzenie, i utrudnia zauważenie, że aktualizacja jest wstrzymywana.
Czego weryfikacja nie mówi
Poprawny podpis dowodzi, że wydanie pochodzi z procesu wydawniczego GADNET. Nie dowodzi, że wydanie jest aktualne. Serwer, który wciąż podaje podpisany manifest sprzed miesiąca, prowadzi atak przez wstrzymanie aktualizacji, a każdy podpis nadal się zgadza. Dlatego urządzenia zapisują znacznik generated z manifestu, a panel pokazuje ostatnie udane sprawdzenie - sygnałem jest sprawdzenie, które przestaje się udawać.