Base de conhecimento Sob o capô
Verificando a compilação
O código aberto só ajuda se o código que você está executando for o código que foi publicado. O Nymchat é construído de forma determinística para que você mesmo possa verificar isso, de dentro do aplicativo ou de um terminal.
Esta página foi traduzida automaticamente por conveniência. O original em inglês é a versão aplicável.
Construções reproduzíveis
Construir o aplicativo emite um build-manifest.json contendo o commit de origem, um
Hash SHA-256 de cada ativo HTML, JavaScript e CSS veiculado e um único
bundleHash sobre todo esse conjunto de ativos.
A saída depende apenas do conteúdo de origem — até mesmo o tempo de construção registrado é o
o carimbo de data e hora do commit em vez do momento em que a compilação foi executada - portanto, qualquer pessoa que esteja reconstruindo o mesmo
commit obtém arquivos idênticos em bytes e os mesmos bundleHash.
Uma ação do GitHub então reconstrói cada commit de forma independente e assina a proveniência do build
atestados para o hash e o manifesto, então há um registro assinado vinculando um
bundleHash para um commit no repositório, produzido por algo diferente do
implantação.
O que a caixa de diálogo Sobre verifica
Sobre no cabeçalho executa a verificação ao vivo, no seu navegador.
Ele busca novamente cada ativo que a página está realmente executando, faz o hash com a API Web Crypto e
compara com o manifesto. Então – e esta é a parte que importa – é
recalcula o bundleHash dos hashes isto apenas calculado, não de
qualquer coisa que o manifesto reivindique e procure isso nos atestados assinados do repositório
por meio da API GitHub.
Isso é o que impede uma implantação de garantir a si mesma: servir arquivos modificados junto com um manifesto correspondente ainda falha porque o hash recalculado não tem atestado.
| Status | Significa |
|---|---|
| &verificar; Aplicativo oficial verificado (n/n) | Cada ativo corresponde, o hash do pacote recalculado é atestado pelo repositório, e a página é veiculada a partir do domínio oficial. |
| ⚠ Versão verificada · não é o aplicativo oficial | O código é genuíno e atestado, mas é um espelho de outro domínio. Um espelho não pode remover este aviso sem falhar na verificação. |
| ✗ Incompatibilidade | Um ativo não corresponde ao que o manifesto diz. |
| ✗ Compilação não oficial | O hash do pacote recalculado não tem atestado do repositório – um manifesto feito por ele mesmo. |
| ⚠ Proveniência inacessível | A API do GitHub não pôde ser acessada, portanto o atestado não pôde ser verificado de qualquer maneira. |
Verificando você mesmo
Reconstrua o commit dos nomes da caixa de diálogo Sobre e 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>"
O hash impresso deve corresponder tanto ao da caixa de diálogo Sobre quanto ao do commit resumo da execução de origem de construção. Você também pode verificar a assinatura diretamente com a CLI do GitHub:
gh attestation verify dist/build-manifest.json --repo Spl0itable/NYM
Os aplicativos Android e iOS
A verificação acima é uma verificação de aplicativo da web, e vale a pena declarar claramente o motivo: um aplicativo nativo não pode fazer a mesma coisa consigo mesmo. O que é executado no seu telefone é o código de máquina compilado, não o fonte no repositório, e nada que o aplicativo possa calcular no dispositivo se relaciona com o outro.
O Android pode fazer a próxima melhor coisa. O instalado .apk é um arquivo que o aplicativo pode ler
e hash, e o hash de cada lançamento publicado já é público: publicar no
Zapstore
assina um evento Nostr carregando o SHA-256 do APK e o SHA-256 do seu certificado de assinatura. Então o
Android Sobre caixa de diálogo faz o hash do APK do qual está sendo executado, busca aqueles assinados
eventos, mantém apenas aqueles assinados pela chave do desenvolvedor e compara. Mostra os dois
hashes também, para que você possa repetir a verificação no dispositivo: baixe o APK publicado, execute
sha256sum nele e observe você mesmo o mesmo evento.
Um aplicativo instalado do Google Play não pode ser verificado desta forma, e isso não é um sinal de que nada está errado. O Google assina cada upload com sua própria chave e constrói um APK separado para cada dispositivo, então o que aterra no seu telefone não é o arquivo produzido pelo desenvolvedor e seu hash não corresponde a nada que pudesse ser publicado. O aplicativo reconhece uma instalação do Play e diz isso em vez de relatar um fracasso. Para verificar um build você mesmo, instale o APK publicado diretamente.
iOS não pode ser verificado de forma alguma. A Apple criptografa e assina novamente cada download individualmente, portanto, um hash calculado no seu iPhone é exclusivo do seu iPhone e não corresponde a nada publicado em qualquer lugar. A caixa de diálogo Sobre diz isso abertamente, em vez de mostrar uma resposta tranquilizadora. status que não significa nada. Se você quiser um Nymchat que possa verificar no hardware da Apple, use a web app, que verifica todos os arquivos que está executando.
Uma verificação que um aplicativo executa em si mesmo não pode provar que o aplicativo é honesto – quem o modificou poderia remover o cheque também. O que isso prova é o caso comum: que a cópia que você instalada é a cópia que foi publicada. Vale a pena ter isso porque os valores que as comparações são públicas, então alguém que não seja você pode verificá-las e discordar.
O canário mandado
Um warrant canary é uma declaração, publicada em um cronograma fixo, de que o desenvolvedor não receberam uma ordem secreta do governo que estão proibidos de divulgar - uma Carta de Segurança Nacional, uma ordem da FISA. O desenvolvedor pode ser obrigado a permanecer em silêncio sobre tal ordem, mas não pode ser obrigado a mentir, então o canário que envelhece ou desaparece é em si o sinal.
Ele vive em canary.json na raiz do repositório e é obtido diretamente
do GitHub, portanto, seu histórico pode ser auditado independentemente do que o site implantado diz.
A caixa de diálogo Sobre codifica-o por cores:
| Cor | Significa |
|---|---|
| Verde - tudo claro | Assinado, atual e a assinatura corresponde à chave do desenvolvedor. Nenhuma ordem secreta foi recebida. |
| Amarelo - atrasado ou nem tudo claro | Não foi atualizado até a data declarada ou allClear bandeira é falsa. Uma ordem silenciada não pode ser descartada. |
| Vermelho - assinatura inválida ou desaparecida | A assinatura não corresponde à chave do desenvolvedor ou o arquivo foi totalmente removido. Trate isso como um aviso sério. |
A âncora do frescor
O canário assinado incorpora a altura e o hash mais recentes do bloco Bitcoin no momento da assinatura. Esse hash não poderia ser conhecido antes da existência do bloco, o que prova que o canário era assinado depois um ponto específico no tempo, em vez de pré-assinado em massa meses antes. A caixa de diálogo Sobre vincula a âncora a um explorador de blocos para que você possa verificá-la.