Passa al contenuto
Torniamo a Nymchat

Base di conoscenza Sotto il cofano

Verifica della build

L'open source aiuta solo se il codice che stai eseguendo è il codice che era pubblicato. Nymchat è costruito in modo deterministico in modo che tu possa verificarlo tu stesso, dall'interno del file app o da terminale.

Build riproducibili

La creazione dell'app genera un file build-manifest.json contenente il commit sorgente, a Hash SHA-256 di ogni asset HTML, JavaScript e CSS servito e un singolo bundleHash su tutto l'insieme di risorse.

L'output dipende solo dal contenuto sorgente: anche il tempo di creazione registrato è lo stesso il timestamp del commit anziché il momento in cui è stata eseguita la build, quindi chiunque ricostruisca lo stesso commit ottiene file identici in byte e lo stesso bundleHash.

Un'azione GitHub ricostruisce quindi ciascun commit in modo indipendente e firma la provenienza della build attestazioni per l'hash e il manifest, quindi esiste un record firmato che lega a bundleHash a un commit nel repository, prodotto da qualcosa di diverso da distribuzione.

Cosa controlla la finestra di dialogo Informazioni

Di nell'intestazione esegue il controllo in tempo reale, nel tuo browser.

La finestra di dialogo Informazioni su Nymchat, che mostra la versione, l'integrità della build e garantisce lo stato canary.
La finestra di dialogo Informazioni su: versione, integrità della build, warrant canary e una linea diretta con lo sviluppatore.

Recupera ogni risorsa effettivamente in esecuzione sulla pagina, ne esegue l'hashing con l'API Web Crypto e confronta con il manifesto. Poi – e questa è la parte che conta – è così ricalcola il bundleHash dagli hash Esso appena calcolato, non da tutto ciò che il manifest afferma e lo cerca nelle attestazioni firmate del repository tramite l'API GitHub.

Questo è ciò che impedisce a una distribuzione di garantire se stessa: servire file modificati insieme a un manifest corrispondente continua a fallire, perché l'hash ricalcolato non ha alcuna attestazione.

StatoSignifica
&controllo; App ufficiale verificata (n/n)Ogni asset corrisponde, l'hash del bundle ricalcolato è attestato dal repository, E la pagina è servita dal dominio ufficiale.
⚠ Build verificata · non è l'app ufficialeIl codice è autentico e attestato, ma questo è uno specchio su un altro dominio. Un mirror non può rimuovere questo avviso senza fallire la verifica.
✗ Mancata corrispondenzaUna risorsa non corrisponde a ciò che dice il manifest.
✗ Compilazione non ufficialeL'hash del bundle ricalcolato non ha alcuna attestazione dal repository: un manifest creato autonomamente.
⚠ Provenienza non raggiungibileNon è stato possibile raggiungere l'API GitHub, quindi non è stato possibile verificare l'attestazione in alcun modo.

Verificalo tu stesso

Ricostruisci il commit dei nomi della finestra di dialogo Informazioni e confronta:

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>"

L'hash stampato dovrebbe corrispondere sia a quello nella finestra di dialogo Informazioni che a quello in quel commit riepilogo dell'esecuzione della build-provenienza. Puoi anche controllare la firma direttamente con la CLI GitHub:

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

Il canarino del mandato

Un warrant canary è una dichiarazione, pubblicata secondo un programma fisso, di cui dispone lo sviluppatore non hanno ricevuto un ordine governativo segreto di cui è vietato divulgare — a Lettera sulla sicurezza nazionale, un ordine FISA. Lo sviluppatore può essere costretto a tacere tale ordine, ma non può essere costretto a mentire, quindi il canarino diventa stantio o scompare stesso il segnale.

Vive dentro canary.json nella radice del repository e viene recuperato direttamente da GitHub, quindi la sua cronologia è verificabile indipendentemente da ciò che dice il sito distribuito. La finestra di dialogo Informazioni lo codifica a colori:

ColoreSignifica
Verde – tutto chiaroFirmato, corrente e la firma corrisponde alla chiave dello sviluppatore. Nessun ordine segreto è stato ricevuto.
Giallo - in ritardo o non tutto chiaroNon è stato aggiornato entro la data indicata o il suo allClear la bandiera è falsa. Non è da escludere un'ordinanza silenziosa.
Rosso - firma non valida o scomparsaLa firma non corrisponde alla chiave dello sviluppatore oppure il file è stato completamente rimosso. Considera questo come un avvertimento serio.

L'ancora della freschezza

Il canary firmato incorpora l'ultima altezza del blocco Bitcoin e l'hash al momento della firma. Quell'hashish non poteva essere conosciuto prima che esistesse il blocco, il che dimostra che il canarino lo era firmato Dopo in un momento specifico anziché prefirmati in massa mesi prima. La finestra di dialogo Informazioni collega l'ancora a un Block Explorer in modo che tu possa controllarlo.