Przejdź do treści
Wracając do Nymchata

Baza wiedzy Pod maską

Weryfikacja kompilacji

Open source pomaga tylko wtedy, gdy uruchomiony kod jest tym samym kodem, który był opublikowane. Nymchat jest zbudowany deterministycznie, więc możesz to sprawdzić samodzielnie, od wewnątrz aplikacji lub z terminala.

Powtarzalne kompilacje

Budowanie aplikacji powoduje emisję build-manifest.json zawierający zatwierdzenie źródłowe, a SHA-256 każdego udostępnianego zasobu HTML, JavaScript i CSS oraz jednego bundleHash nad całym tym zestawem aktywów.

Dane wyjściowe zależą tylko od zawartości źródłowej — nawet zarejestrowany czas kompilacji jest znacznik czasu zatwierdzenia, a nie moment uruchomienia kompilacji — więc każdy, kto przebuduje to samo zatwierdzenie pobiera pliki o identycznych bajtach i to samo bundleHash.

Następnie akcja GitHub niezależnie odbudowuje każde zatwierdzenie i podpisuje pochodzenie kompilacji poświadczenia dla skrótu i manifestu, więc istnieje podpisany rekord wiążący a bundleHash do zatwierdzenia w repozytorium, utworzonego przez coś innego niż wdrożenie.

Co sprawdza okno dialogowe Informacje

O w nagłówku uruchamia sprawdzanie na żywo w Twojej przeglądarce.

Okno dialogowe O Nymchat, pokazujące wersję, integralność kompilacji i gwarantujące status kanarkowy.
Okno dialogowe Informacje: wersja, integralność kompilacji, gwarancja Canary i bezpośredni kontakt z programistą.

Pobiera ponownie każdy zasób, który faktycznie jest uruchomiony na stronie, miesza go z interfejsem Web Crypto API i porównuje z manifestem. Następnie – i to jest najważniejsza część – to ponownie oblicza bundleHash z hashów To tylko obliczone, a nie z cokolwiek twierdzi manifest, i sprawdza to w podpisanych atestach repozytorium poprzez API GitHuba.

To właśnie powstrzymuje wdrożenie od ręczenia za siebie: udostępnianie zmodyfikowanych plików razem z pasujący manifest nadal kończy się niepowodzeniem, ponieważ przeliczony skrót nie ma żadnego poświadczenia.

StatusOznacza
&sprawdzać; Zweryfikowana oficjalna aplikacja (n/n)Każdy zasób pasuje, ponownie obliczony skrót pakietu jest potwierdzany przez repozytorium, I strona jest obsługiwana z oficjalnej domeny.
⚠ Sprawdzona wersja · nie oficjalna aplikacjaKod jest autentyczny i poświadczony, ale jest to lustrzane odbicie w innej domenie. Lustro nie może usunąć tego ostrzeżenia bez niezaliczenia weryfikacji.
✗ NiedopasowanieZasób nie jest skrótem zgodnym z treścią manifestu.
✗ Nieoficjalna wersjaPonownie obliczony skrót pakietu nie ma poświadczenia z repozytorium — jest to samodzielnie utworzony manifest.
⚠ Pochodzenie nieosiągalneNie można było uzyskać dostępu do interfejsu API GitHub, więc nie można było sprawdzić zaświadczenia w żaden sposób.

Weryfikując to samodzielnie

Odbuduj zatwierdzenie nazw okien dialogowych Informacje i porównaj:

git clone https://github.com/Spl0itable/NYM
cd NYM
git checkout <commit shown in the About dialog>
npm ci
npm run build   # prints "Build hash: <bundleHash>"

Wydrukowany skrót powinien pasować zarówno do tego w oknie dialogowym Informacje, jak i do tego w tym zatwierdzeniu podsumowanie przebiegu kompilacji. Możesz także sprawdzić podpis bezpośrednio za pomocą interfejsu CLI GitHub:

gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM

Kanarek nakazowy

Kanarek nakazowy to oświadczenie, publikowane według ustalonego harmonogramu, które posiada deweloper nie otrzymali tajne rozporządzenie rządowe, którego nie wolno ujawniać — a List dotyczący bezpieczeństwa narodowego, nakaz FISA. Deweloper może zostać zmuszony do milczenia taki rozkaz, ale nie można go zmusić do kłamstwa, więc kanarek staje się nieświeży lub znika sam sygnał.

Mieszka w canary.json w katalogu głównym repozytorium i jest pobierany bezpośrednio z GitHuba, więc jego historia może być kontrolowana niezależnie od tego, co mówi wdrożona witryna. Okno dialogowe Informacje oznacza to kolorami:

KolorOznacza
Zielony — wszystko jasnePodpisany, aktualny i podpis zgodny z kluczem dewelopera. Nie otrzymano żadnego tajnego zamówienia.
Żółty — spóźnione lub nie wszystko jasneNie został odświeżony według podanej daty lub jej allClear flaga jest fałszywa. Nie można wykluczyć wyciszenia rozkazu.
Czerwony — nieprawidłowy podpis lub zniknąłPodpis nie jest zgodny z kluczem programisty lub plik został całkowicie usunięty. Potraktuj to jako poważne ostrzeżenie.

Kotwica świeżości

Podpisany kanarek zawiera najnowszą wysokość bloku Bitcoin i skrót w momencie podpisania. Ten skrót nie mógł być znany przed istnieniem bloku, co dowodzi, że kanarek był podpisany Po w określonym momencie, zamiast podpisywać masowo kilka miesięcy wcześniej. Okno dialogowe Informacje łączy kotwicę z eksploratorem bloków, dzięki czemu można ją sprawdzić.