Pular para o conteúdo
De volta ao Nymchat

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.

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.

A caixa de diálogo Sobre do Nymchat, mostrando a versão, integridade da construção e garantia do status canário.
A caixa de diálogo Sobre: ​​versão, integridade de construção, canário de garantia e uma linha direta com o desenvolvedor.

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.

StatusSignifica
&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 oficialO 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.
✗ IncompatibilidadeUm ativo não corresponde ao que o manifesto diz.
✗ Compilação não oficialO hash do pacote recalculado não tem atestado do repositório – um manifesto feito por ele mesmo.
⚠ Proveniência inacessívelA 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

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:

CorSignifica
Verde - tudo claroAssinado, atual e a assinatura corresponde à chave do desenvolvedor. Nenhuma ordem secreta foi recebida.
Amarelo - atrasado ou nem tudo claroNão foi atualizado até a data declarada ou allClear bandeira é falsa. Uma ordem silenciada não pode ser descartada.
Vermelho - assinatura inválida ou desaparecidaA 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.