
Busca continuamente e verifica criptograficamente as atualizações do log de transparência de chaves, mantém um prefixo condensado e uma visão da árvore do log, e retorna cabeçalhos de árvore assinados quando as atualizações são válidas.
key-transparency-auditor ======================== Uma implementação de referência de um auditor de terceiros para o serviço de transparência de chaves da Signal, com base na especificação de [transparência de chaves](https://bren2010.github.io/draft-key-transparency/draft-mcmillion-key-transparency.html). Visão geral ----------- Este serviço é escrito em Java usando o framework [Micronaut](https://docs.micronaut.io/4.4.10/guide/). Para compilar e executar os testes unitários, execute ```shell ./mvnw clean test ``` no diretório raiz. A classe principal é o [`Auditor`](https://github.com/signalapp/key-transparency-auditor/blob/main/src/main/java/org/signal/keytransparency/audit/Auditor.java), que executa uma tarefa agendada que solicita um fluxo de atualizações do serviço de transparência de chaves. Ela mantém uma visão condensada da [árvore de prefixos](https://bren2010.github.io/draft-key-transparency/draft-mcmillion-key-transparency.html#name-prefix-tree) e da [árvore de log](https://bren2010.github.io/draft-key-transparency/draft-mcmillion-key-transparency.html#name-log-tree), armazenando apenas informações suficientes para verificar e aceitar cada atualização sequencialmente. Se o auditor tiver processado um certo número de atualizações ou se tiver decorrido um certo período de tempo, o auditor envia de volta uma [cabeça de árvore assinada](https://bren2010.github.io/draft-key-transparency/draft-mcmillion-key-transparency.html#name-tree-head-signature) ao serviço de transparência de chaves, indicando que sua visão das árvores de prefixo e de log até a atualização fornecida corresponde. Se a chamada remota for bem-sucedida, o auditor grava seus dados de estado em um [`AuditorStateRepository`](https://github.com/signalapp/key-transparency-auditor/blob/main/src/main/java/org/signal/keytransparency/audit/storage/AuditorStateRepository.java), que ele pode usar para retomar da posição mais recente no log de transparência de chaves caso o auditor seja reiniciado. Se o auditor encontrar uma inconsistência ao verificar uma atualização, ele lança uma `InvalidProofException` e para de enviar cabeças de árvore assinadas de volta ao serviço de transparência de chaves. Configuração ------------ O serviço precisa dos beans `Auditor`, `KeyTransparencyServiceClient` e `AuditorStateRepository` para ser executado. A tabela abaixo descreve as [propriedades](https://docs.micronaut.io/latest/guide/#valueAnnotation) de [configuração](https://docs.micronaut.io/latest/guide/#configurationProperties) necessárias para instanciar esses beans. | Propriedade | Obrigatório? | Descrição | |-------------------------------------------------------|------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `auditor.private-key` | sim | Uma chave privada Ed25519 no formato PKCS#8, codificada em base64 padrão e usada para assinar a cabeça de árvore enviada de volta ao serviço de transparência de chaves. Pode ser gerada via `openssl genpkey -algorithm ed25519`, descartando o cabeçalho e o rodapé PEM. | | `auditor.public-key` | sim | Uma chave pública Ed25519 no formato X509, codificada em base64 padrão, que é a contraparte de `auditor.private-key`. | | `auditor.key-transparency-service-signing-public-key` | sim | Uma chave pública Ed25519 no formato PKCS#8, codificada em base64 padrão e usada pelos clientes para verificar a assinatura do serviço de transparência de chaves sobre a cabeça de árvore. | | `auditor.key-transparency-service-vrf-public-key` | sim | Uma chave pública Ed25519 no formato PKCS#8, codificada em base64 padrão e usada pelos clientes para verificar se a entrada de uma [Função Aleatória Verificável](https://www.rfc-editor.org/rfc/rfc9381.html) (chave de pesquisa solicitada) corresponde à saída (índice de compromisso usado para percorrer a árvore de prefixos). | | `auditor.client-certificate` | sim | Um certificado no formato PKCS#8 codificado em PEM, usado para comprovar a identidade do cliente durante o TLS mútuo. | | `auditor.client-private-key` | sim | Uma chave privada no formato PKCS#8 codificada em PEM, usada para verificar a propriedade do certificado do cliente durante o TLS mútuo. | | `auditor.batch-size` | sim | O número máximo de atualizações que o serviço de transparência de chaves deve retornar em uma única resposta. Esse valor deve ser menor ou igual a 1000. | | `auditor.interval` | não | O intervalo de tempo no qual a tarefa do auditor deve ser executada para processar as atualizações de transparência de chaves. O padrão é 1 minuto. | | `auditor.signature.interval` | não | O intervalo no qual o auditor deve enviar uma cabeça de árvore assinada ao serviço de transparência de chaves, em duração. O padrão é 1 hora. | | `auditor.signature.page-size` | não | O intervalo no qual o auditor deve enviar uma cabeça de árvore assinada ao serviço de transparência de chaves, em número de atualizações. O padrão é 1.000.000. | | `auditor.key-transparency-host` | sim | O nome de host do serviço de transparência de chaves. | | `auditor.key-transparency-port` | sim | A porta de conexão com o serviço de transparência de chaves. | | `storage.dynamodb.region` | Exatamente um `storage.<type>` deve ser especificado | A região da AWS da tabela do DynamoDB usada para armazenar o estado do auditor. | | `storage.dynamodb.table-name` | Exatamente um `storage.<type>` deve ser especificado | O nome da tabela do DynamoDB usada para armazenar o estado do auditor. | | `storage.file.name` | Exatamente um `storage.<type>` deve ser especificado | O nome do arquivo usado para armazenar o estado do auditor. | Relatando bugs -------------- Usamos o [GitHub][github issues] para o rastreamento de bugs. Problemas de segurança devem ser enviados para <a href="mailto:[email protected]">[email protected]</a>. Ajuda ----- Não podemos fornecer suporte técnico direto. Obtenha ajuda para executar este software em seu próprio ambiente em nosso [fórum comunitário não oficial][community forum]. Licença ------- Copyright 2025 Signal Messenger, LLC Licenciado sob a AGPLv3: https://www.gnu.org/licenses/agpl-3.0.html [github issues]: https://github.com/signalapp/key-transparency-auditor/issues [community forum]: https://community.signalusers.org