base de conocimientos Debajo del capó
Verificando la construcción
El código abierto sólo ayuda si el código que está ejecutando es el código que se publicado. Nymchat está construido de forma determinista para que puedas comprobarlo tú mismo, desde dentro del app o desde un terminal.
Esta página está traducida automáticamente para mayor comodidad. La versión original en inglés es la que se aplica.
Construcciones reproducibles
La construcción de la aplicación emite un build-manifest.json que contiene la confirmación de origen, un
Hash SHA-256 de cada activo HTML, JavaScript y CSS servido, y un único
bundleHash sobre todo ese conjunto de activos.
El resultado depende únicamente del contenido de origen; incluso el tiempo de compilación registrado es el
marca de tiempo de la confirmación en lugar del momento en que se ejecutó la compilación, por lo que cualquiera que reconstruya la misma
commit obtiene archivos de bytes idénticos y lo mismo bundleHash.
Luego, una acción de GitHub reconstruye cada confirmación de forma independiente y firma la procedencia de la compilación.
certificaciones para el hash y el manifiesto, por lo que hay un registro firmado que vincula un
bundleHash a una confirmación en el repositorio, producida por algo que no sea el
despliegue.
Lo que comprueba el cuadro de diálogo Acerca de
Acerca de en el encabezado ejecuta la verificación en vivo, en su navegador.
Vuelve a buscar cada activo que la página realmente está ejecutando, lo codifica con Web Crypto API y
se compara con el manifiesto. Entonces (y ésta es la parte que importa)
recalcula el bundleHash de los hashes él recién calculado, no de
cualquier cosa que reclame el manifiesto, y lo busca en las certificaciones firmadas del repositorio
a través de la API de GitHub.
Eso es lo que impide que una implementación responda por sí misma: servir archivos modificados junto con un manifiesto coincidente aún falla porque el hash recalculado no tiene certificación.
| Estado | Medio |
|---|---|
| &controlar; Aplicación oficial verificada (n/n) | Cada activo coincide, el repositorio certifica el hash del paquete recalculado, y la página es servida desde el dominio oficial. |
| ⚠ Compilación verificada · no es la aplicación oficial | El código es genuino y está certificado, pero es un espejo en otro dominio. Un espejo no puede eliminar esta advertencia sin fallar la verificación. |
| ✗ Falta de coincidencia | Un activo no se ajusta a lo que dice el manifiesto. |
| ✗ Construcción no oficial | El hash del paquete recalculado no tiene ninguna certificación del repositorio: es un manifiesto elaborado por usted mismo. |
| ⚠ Procedencia inalcanzable | No se pudo acceder a la API de GitHub, por lo que no se pudo verificar la certificación de ninguna manera. |
Verificándolo usted mismo
Reconstruya la confirmación de los nombres del cuadro de diálogo Acerca de y compare:
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>"
El hash impreso debe coincidir tanto con el del cuadro de diálogo Acerca de como con el de esa confirmación. resumen de ejecución de procedencia de compilación. También puedes verificar la firma directamente con la CLI de GitHub:
gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM
Las aplicaciones de Android e iOS
La comprobación anterior es una comprobación de una aplicación web y vale la pena indicar claramente el motivo: una aplicación nativa. no puede hacerse lo mismo a sí mismo. Lo que se ejecuta en su teléfono es código de máquina compilado, no el fuente en el repositorio, y nada que la aplicación pueda calcular en el dispositivo se relaciona con el otro.
Android puede hacer la mejor opción. El instalado .apk es un archivo que la aplicación puede leer
y hash, y el hash de cada lanzamiento publicado ya es público: publicar en el
Zapstore
firma un evento Nostr que lleva el SHA-256 del APK y el SHA-256 de su certificado de firma. Entonces el
androide Acerca de El cuadro de diálogo codifica el APK desde el que se está ejecutando y recupera los firmados.
eventos, mantiene solo los firmados por la clave del desarrollador y los compara. muestra los dos
hashes también, para que puedas repetir la verificación fuera del dispositivo: descarga el APK publicado, ejecuta
sha256sum en él, y observe el mismo evento usted mismo.
Una aplicación instalada desde Google Play no se puede verificar de esta manera, y eso no es un signo de que nada está mal. Google vuelve a firmar cada carga con su propia clave y construye un APK separado para cada dispositivo, por lo que lo que aterriza en su teléfono no es el archivo producido por el desarrollador y su hash no coincide con nada que pueda ser publicado. La aplicación reconoce una instalación de Play y dice así en lugar de informar de un fallo. Para comprobar una construcción usted mismo, instale el APK publicado directamente.
iOS no se puede comprobar en absoluto. Apple cifra y vuelve a firmar cada descarga individualmente, por lo que un hash calculado en su iPhone es exclusivo de su iPhone y no coincide con nada publicado en cualquier lugar. El cuadro de diálogo Acerca de dice esto directamente en lugar de mostrar una información tranquilizadora. estatus que no significa nada. Si quieres un Nymchat que puedas verificar en el hardware de Apple, usa la web aplicación, que verifica cada archivo que se está ejecutando.
Una verificación de que una aplicación se ejecuta a sí misma no puede demostrar que la aplicación sea honesta: quienquiera que la haya modificado También podría eliminar el cheque. Lo que prueba es el caso ordinario: que la copia que usted instalada es la copia que se publicó. Vale la pena tenerlo porque los valores que Las comparaciones son públicas, por lo que alguien que no sea usted puede verificarlas y no estar de acuerdo.
el canario orden
Un warrant canary es una declaración, publicada en un cronograma fijo, de que el desarrollador ha no recibieron una orden secreta del gobierno que tienen prohibido revelar: una Carta de Seguridad Nacional, una orden FISA. El promotor puede verse obligado a guardar silencio sobre tal orden, pero no se le puede obligar a mentir, por lo que el canario se vuelve obsoleto o desaparece. en sí la señal.
vive en canary.json en la raíz del repositorio y se recupera directamente
de GitHub, por lo que su historial se puede auditar independientemente de lo que diga el sitio implementado.
El cuadro de diálogo Acerca de lo codifica con colores:
| Color | Medio |
|---|---|
| Verde — todo claro | Firmado, actual y la firma coincide con la clave del desarrollador. No se ha recibido ninguna orden secreta. |
| Amarillo — vencido o no todo claro | No fue actualizado en la fecha indicada, ni en su allClear La bandera es falsa. No se puede descartar una orden silenciada. |
| Rojo - firma no válida o desaparecida | La firma no coincide con la clave del desarrollador o el archivo se ha eliminado por completo. Trate esto como una advertencia seria. |
El ancla de frescura
El canario firmado incorpora la última altura del bloque de Bitcoin y el hash en el momento de la firma. Ese hash no podría haberse conocido antes de que existiera el bloque, lo que demuestra que el canario era firmado después en un momento específico en lugar de firmarse previamente en masa meses antes. El cuadro de diálogo Acerca de vincula el ancla a un explorador de bloques para que pueda verificarlo.