Documentação / 08
Veja como funciona o registro de evidências
Uma mensagem pode ser alterada. O registro do que o senhor observou deve permanecer verificável.
Explore dois pequenos experimentos a seguir. Eles utilizam mensagens fictícias, permanecem no seu navegador e nunca se conectam ao Telegram.
Uma mensagem, três observações
Quando o Telegram entrega uma nova mensagem, uma edição ou um aviso de exclusão, o coletor acrescenta três observações distintas. A edição não substitui o registro original. Um aviso de exclusão não o apaga.
A mensagem desapareceu da visualização do chat.
- 01✓
message.newEncontro às 10h
- 02✓
message.editedEncontro às 11h
- 03✓
message.deletedAviso de exclusão para o nº 42
Todas as três observações recebidas permanecem no registro.
Uma notificação de exclusão não fornece nem a hora confiável da exclusão nem a identidade da pessoa que excluiu a mensagem. Manter esses valores desconhecidos preserva a distinção entre uma observação e uma suposição.
Altere um registro. Siga o hash.
Cada registro contém o hash do registro anterior. Seu próprio hash abrange os campos do evento, incluindo esse link. Um ponto de verificação mantido externamente fixa um comprimento específico do diário e o hash inicial.
h₁ = SHA-256(e₁)Links para 64 zerosh₂ = SHA-256(e₂)Inclui h₁h₃ = SHA-256(e₃)Inclui h₂h₃Compare esse limite fixo com o registro fornecido.A alteração de um evento modifica seu hash. A reconstrução da cadeia altera seu ponto inicial. A remoção do ponto final torna a cadeia mais curta do que o ponto de verificação retido.
Inspecione o registro 2 e os hashes completos
Este é exatamente o JSON em UTF-8 com hash apresentado neste exemplo. Os valores são fictícios; os nove campos e a serialização correspondem ao formato do registro.
- Hash do registro 2 salvo
- Hash do registro 2 recalculado
As regras propriamente ditas, em poucas linhas
hi = hex(SHA-256(C(ei)))
σi = Ed25519.Sign(sk, unhex(hi))
C serializa os nove campos do evento como JSON em UTF-8: chaves ordenadas, sem espaços em branco extras, sem escape ASCII e sem NaN/infinito. O previous_hash do evento é hi−1. O h0 exibido significa 64 caracteres zero; as assinaturas abrangem os 32 bytes brutos do resumo.
Os nove campos são seq, observed_at, source_at, kind, chat_id, message_id, actor_id, payload e previous_hash. Esta é a codificação JSON documentada do TgWitness; o hash e a assinatura em si não são campos de entrada de hash.
hexport[Ncheckpoint] = Hcheckpoint
Verifique a assinatura do ponto de verificação sob a chave do coletor fixada e, em seguida, compare seus limites com os do registro verificado. Uma exportação posterior pode conter mais registros; mesmo assim, deve estar em conformidade com o ponto de verificação anterior.
Três perguntas, três verificações diferentes
Verifique os hashes e as assinaturas em relação a uma chave confiável separada.
02 / CONTINUIDADEO que foi mantido anteriormente?Compare uma exportação assinada com os pontos de verificação mantidos por uma testemunha independente.
03 / ENTREGAEsses eventos de teste chegaram?Compare as ações controladas de envio, edição e exclusão com o registro de cada conta.
Uma cadeia de hashes correspondente responde a uma questão de integridade. Ela não comprova a entrega completa do Telegram, a veracidade de uma mensagem ou um horário de observação considerado confiável de forma independente.
Acompanhe toda a investigação da conta, desde a aquisição até o pacote do caso.