Přejít na obsah
Zpět k Nymchatu

Znalostní základna Pod kapotou

Ověření sestavení

Open source pomáhá pouze v případě, že kód, který používáte, je kód, který byl zveřejněno. Nymchat je postaven deterministicky, takže si to můžete ověřit sami zevnitř aplikace nebo z terminálu.

Reprodukovatelné sestavení

Vytvoření aplikace vydává a build-manifest.json obsahující zdrojové potvrzení, a SHA-256 hash každého poskytnutého podkladu HTML, JavaScript a CSS a jednoho bundleHash nad celým tímto souborem aktiv.

Výstup závisí pouze na zdrojovém obsahu – dokonce i zaznamenaný čas sestavení je spíše časové razítko commitu než okamžik spuštění sestavení – takže kdokoli přestaví totéž commit dostane bajtově identické soubory a to samé bundleHash.

Akce GitHub poté znovu sestaví každé potvrzení nezávisle a podepíše stav sestavení atestace pro hash a manifest, takže existuje podepsaný záznam svázaný a bundleHash k odevzdání v úložišti, vytvořeném něčím jiným než nasazení.

Co kontroluje dialogové okno O aplikaci

O v záhlaví spustí kontrolu živě ve vašem prohlížeči.

Dialog O Nymchatu zobrazující verzi, integritu sestavení a stav záruky.
Dialog O aplikaci: verze, integrita sestavení, záruka a přímá linka na vývojáře.

Znovu načte každé aktivum, na kterém stránka skutečně běží, hašuje ho pomocí rozhraní Web Crypto API a porovnává s manifestem. Pak – a to je ta část, na které záleží – to přepočítává bundleHash z hashů to jen vypočítané, ne z cokoliv, co manifest tvrdí, a vyhledá to v podepsaných atestacích úložiště prostřednictvím GitHub API.

To je to, co brání nasazení v ručení za sebe: obsluhovat upravené soubory společně s odpovídající manifest stále selže, protože přepočítaný hash nemá žádné ověření.

PostaveníProstředek
&kontrola; Ověřená oficiální aplikace (n/n)Každé aktivum se shoduje, přepočítaný hash balíčku je ověřen úložištěm, a stránka je obsluhována z oficiální domény.
⚠ Ověřené sestavení · není oficiální aplikaceKód je pravý a ověřený, ale toto je zrcadlo na jiné doméně. Zrcadlo nemůže toto varování odstranit, aniž by neprošlo ověřením.
✗ NeshodaAktivum nehašuje to, co říká manifest.
✗ Neoficiální sestaveníPřepočítaný haš svazku nemá žádné potvrzení z úložiště – vlastní manifest.
⚠ Provenience nedosažitelnáRozhraní GitHub API nebylo dostupné, takže atestaci nebylo možné zkontrolovat ani v jednom případě.

Ověřte si to sami

Znovu sestavte názvy dialogů o odevzdání a porovnejte:

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

Vytištěný hash by se měl shodovat jak s hashem v dialogovém okně About, tak s hashem v tomto odevzdání shrnutí běhu výroby a výroby. Podpis můžete také zkontrolovat přímo pomocí GitHub CLI:

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

Aplikace pro Android a iOS

Výše uvedená kontrola je kontrola webové aplikace a důvod stojí za to uvést jasně: nativní aplikace nemůže udělat totéž pro sebe. To, co běží na vašem telefonu, je kompilovaný strojový kód, nikoli zdroj v úložišti a nic z toho, co může aplikace na zařízení vypočítat, s ním nesouvisí jiné.

Android umí další nejlepší věc. Nainstalovaný .apk je soubor, který může aplikace číst a hash a hash každé publikované verze je již veřejný: publikování do Zapstore podepisuje událost Nostr nesoucí SHA-256 souboru APK a SHA-256 jeho podpisového certifikátu. Takže Android O dialog hashuje soubor APK, ze kterého běží, a načte ty podepsané události, uchovává pouze ty podepsané klíčem vývojáře a porovnává. Ukazuje ty dva hash také, takže můžete zopakovat zaškrtnutí zařízení: stáhnout publikovaný APK, spustit sha256sum a podívejte se na stejnou událost sami.

Aplikaci nainstalovanou z Google Play nelze tímto způsobem zkontrolovat, a to není znamení, že je něco špatně. Google znovu podepisuje každé nahrávání s vlastním klíčem a vytváří samostatný APK pro každé zařízení, takže to, co přistane na vašem telefonu, není soubor, který vytvořil vývojář a jeho hash se neshoduje s ničím, co by mohlo být zveřejněno. Aplikace rozpozná instalaci Play a říká, že spíše než hlášení selhání.

iOS nelze vůbec zkontrolovat. Apple zašifruje a znovu podepíše každé stažení individuálně, takže hash vypočítaný na vašem iPhone je jedinečný pro váš iPhone a nic se neshoduje zveřejněny kdekoliv. Dialogové okno O to říká přímo, místo aby ukazovalo uklidnění stav, který nic neznamená. Pokud chcete Nymchat, který můžete ověřit na hardwaru Apple, použijte web aplikace, která kontroluje každý spuštěný soubor.

Co nic z toho nedokazuje

Kontrola, že aplikace běží sama na sobě, nemůže prokázat, že je aplikace poctivá – ať už ji upravil kdokoli mohl také odstranit kontrolu. Dokazuje to běžný případ: že vás kopíruje nainstalována je kopie, která byla publikována. To stojí za to mít, protože si toho váží srovnání jsou veřejná, takže je může zkontrolovat a nesouhlasit někdo jiný než vy.

Kanárek

Warrant kanár je prohlášení zveřejněné v pevném plánu, které má developer ne obdrželi tajný vládní příkaz, který je zakázáno zveřejňovat — a National Security Letter, příkaz FISA. Vývojář může být nucen o tom mlčet takový příkaz, ale nelze ho přinutit lhát, takže kanárek zatuchne nebo zmizí samotný signál.

Žije to v canary.json v kořenovém adresáři úložiště a načítá se přímo z GitHubu, takže jeho historii lze auditovat nezávisle na tom, co říká nasazený web. Dialog O aplikaci to barevně odlišuje:

BarvaProstředek
Zelený — vše jasnéPodepsaný, aktuální a podpis odpovídá klíči vývojáře. Nebyl přijat žádný tajný rozkaz.
Žluť — po splatnosti nebo není vše jasnéNebylo obnoveno svým uvedeným datem nebo jeho allClear vlajka je falešná. Umlčený příkaz nelze vyloučit.
Červený — neplatný podpis nebo pryčPodpis neodpovídá klíči vývojáře nebo byl soubor zcela odstraněn. Berte to jako vážné varování.

Kotva čerstvosti

Podepsaný kanárek obsahuje nejnovější výšku bitcoinového bloku a hash v okamžiku podpisu. Tento hash nemohl být znám před tím, než blok existoval, což dokazuje, že kanár byl podepsané po spíše než předem hromadně podepsané měsíce dříve. Dialog O aplikaci propojí kotvu s průzkumníkem bloků, abyste ji mohli zkontrolovat.