
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.
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.
Este serviço é escrito em Java usando o framework Micronaut. Para compilar e executar os testes unitários, execute
./mvnw clean test
no diretório raiz.
A classe principal é o Auditor, 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
e da árvore de log, 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
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,
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.
O serviço precisa dos beans Auditor, KeyTransparencyServiceClient e AuditorStateRepository para ser executado.
A tabela abaixo descreve as propriedades de configuração necessárias para instanciar esses beans.
Usamos o GitHub para o rastreamento de bugs. Problemas de segurança devem ser enviados para [email protected].
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.
Copyright 2025 Signal Messenger, LLC
Licenciado sob a AGPLv3: https://www.gnu.org/licenses/agpl-3.0.html
| 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 (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. |