Saltar al contenido
Volver a Nymchat

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.

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.

El cuadro de diálogo Acerca de de Nymchat, que muestra la versión, la integridad de la compilación y el estado canario de la garantía.
El cuadro de diálogo Acerca de: versión, integridad de compilación, garantía canaria y una línea directa con el desarrollador.

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.

EstadoMedio
&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 oficialEl 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 coincidenciaUn activo no se ajusta a lo que dice el manifiesto.
✗ Construcción no oficialEl hash del paquete recalculado no tiene ninguna certificación del repositorio: es un manifiesto elaborado por usted mismo.
⚠ Procedencia inalcanzableNo 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.

Lo que nada de esto prueba

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:

ColorMedio
Verde — todo claroFirmado, actual y la firma coincide con la clave del desarrollador. No se ha recibido ninguna orden secreta.
Amarillo — vencido o no todo claroNo 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 desaparecidaLa 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.