Base de coñecemento Baixo o capó
Verificando a construción
O código aberto só axuda se o código que estás executando é o que estaba publicado. Nymchat está construído de forma determinista para que poidas comprobalo ti mesmo, desde o interior aplicación ou desde un terminal.
Esta páxina está traducida por máquina para maior comodidade. O orixinal en inglés é a versión que se aplica.
Construcións reproducibles
A creación da aplicación emite a build-manifest.json que contén o commit de orixe, a
Hash SHA-256 de todos os recursos HTML, JavaScript e CSS servidos e un único
bundleHash sobre todo ese conxunto de activos.
A saída depende só do contido de orixe, incluso o tempo de compilación rexistrado é o
a marca de tempo de commit en lugar do momento en que se executou a compilación, polo que calquera que reconstruíse o mesmo
commit obtén ficheiros idénticos ao byte e o mesmo bundleHash.
Despois, unha acción de GitHub reconstruíu cada commit de forma independente e asina a orixe da compilación
atestados para o hash e o manifesto, polo que hai un rexistro asinado que vincula a
bundleHash a un commit no repositorio, producido por algo distinto do
despregamento.
Que comproba o diálogo Acerca de
Sobre na cabeceira execútase a comprobación en directo, no teu navegador.
Volve a buscar cada recurso que realmente está a executar a páxina, emíteo coa API Web Crypto e
compara co manifesto. Entón, e esta é a parte que importa
recalcula o bundleHash dos hashes iso só calculado, non de
calquera cousa que reclame o manifesto e búscaseo nas certificacións asinadas do repositorio
a través da API de GitHub.
Iso é o que impide que unha implementación se avala por si mesma: servir ficheiros modificados xunto con un manifesto de coincidencia aínda falla porque o hash recalculado non ten ningún certificado.
| Estado | Medios |
|---|---|
| &verifica; Aplicación oficial verificada (n/n) | Cada activo coincide, o repositorio certifica o hash do paquete recalculado, e a páxina é servida desde o dominio oficial. |
| ⚠ Compilación verificada · non é a aplicación oficial | O código é xenuíno e certificado, pero este é un espello noutro dominio. Un espello non pode eliminar esta advertencia sen fallar a verificación. |
| ✗ Incompatibilidade | Un activo non responde ao que di o manifesto. |
| ✗ Construción non oficial | O hash do paquete recalculado non ten ningunha certificación do repositorio: un manifesto feito por si mesmo. |
| ⚠ Procedencia inalcanzable | Non se puido acceder á API de GitHub, polo que non se puido comprobar a certificación de ningún xeito. |
Verificándoo vostede mesmo
Reconstruír os nomes do diálogo Sobre a confirmación e comparar:
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>"
O hash impreso debe coincidir tanto co que aparece no diálogo Acerca de como co que se atopa no commit resumo da execución da construción-procedencia. Tamén podes comprobar a sinatura directamente coa CLI de GitHub:
gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM
As aplicacións para Android e iOS
A comprobación anterior é unha comprobación de aplicacións web e paga a pena indicar claramente o motivo: unha aplicación nativa non pode facer o mesmo por si mesmo. O que se executa no teu teléfono é un código máquina compilado, non o fonte no repositorio e nada que a aplicación poida calcular no dispositivo se relacione co outro.
Android pode facer o seguinte mellor. O instalado .apk é un ficheiro que pode ler a aplicación
e hash, e o hash de cada versión publicada xa é público: publicación no
Zapstore
asina un evento Nostr que leva o SHA-256 do APK e o SHA-256 do seu certificado de sinatura. Entón o
Android Sobre diálogo hash o APK desde o que se está a executar, obtén os asinados
eventos, mantén só os asinados pola chave do programador e compara. Mostra os dous
hash tamén, para que poidas repetir a verificación fóra do dispositivo: descarga o APK publicado, executa
sha256sum nel, e mira vostede mesmo o mesmo evento.
Unha aplicación instalada desde Google Play non se pode comprobar deste xeito, e iso non é un sinal de que nada está mal. Google rexistra cada carga coa súa propia clave e constrúe un APK separado para cada dispositivo, polo que o que aterra no seu teléfono non é o arquivo producido polo desenvolvedor e o seu hash non coincide con nada que podería ser publicado. A aplicación recoñece unha instalación de Play e di así en lugar de informar un fallo. Para comprobar unha construción vostede mesmo, instale o APK publicado directamente.
iOS non se pode comprobar en absoluto. Apple cifra e volve asinar cada descarga individualmente, polo que un hash calculado no teu iPhone é exclusivo do teu iPhone e non coincide con nada publicado en calquera lugar. O diálogo Acerca de di isto directamente en lugar de mostrar algo tranquilizador estado que non significa nada. Se queres un Nymchat que podes verificar no hardware de Apple, usa a web aplicación, que verifica todos os ficheiros que está a executar.
Unha comprobación que unha aplicación se executa por si mesma non pode demostrar que a aplicación é honesta, quen a modificou tamén podería eliminar o cheque. O que proba é o caso ordinario: que a copia ti instalada é a copia que se publicou. Iso paga a pena porque o valora as comparacións son públicas, polo que alguén que non sexa ti pode verificalas e non estea de acordo.
O mandado canario
Un canario de orde é unha declaración, publicada nun horario fixo, que ten o promotor non recibiu unha orde secreta do goberno que teñen prohibido revelar - a Carta de Seguridade Nacional, unha orde da FISA. O desenvolvedor pode verse obrigado a permanecer en silencio tal orde, pero non se pode obrigar a mentir, polo que o canario queda rancio ou desaparece. el mesmo o sinal.
Vive en canary.json na raíz do repositorio e obtense directamente
de GitHub, polo que o seu historial é auditable independentemente do que diga o sitio despregado.
O diálogo Sobre o código de cores:
| Cor | Medios |
|---|---|
| Verde - todo claro | Asinado, actual e a sinatura coincide coa clave do programador. Non se recibiu ningunha orde secreta. |
| Amarelo - atrasado, ou non todo claro | Non se actualizou na data indicada ou na súa allClear bandeira é falsa. Non se pode descartar unha orde silenciada. |
| Vermello — sinatura non válida ou desaparecida | A sinatura non coincide coa clave do programador ou o ficheiro eliminouse por completo. Trata isto como unha advertencia seria. |
A áncora da frescura
O canario asinado incorpora a última altura de bloque de Bitcoin e hash no momento da sinatura. Ese haxix non se puido coñecer antes de que existise o bloque, o que proba que o canario o era asinado despois un momento específico en lugar de asinar previamente a granel meses antes. O diálogo Acerca de enlaza a áncora cun explorador de bloques para que poidas comprobalo.