
Recupera continuamente e verifica crittograficamente gli aggiornamenti del registro di trasparenza delle chiavi, mantiene una vista condensata del prefisso e dell'albero del registro e restituisce le testate dell'albero firmate quando gli aggiornamenti sono validi.
key-transparency-auditor ======================== Un'implementazione di riferimento di un auditor di terze parti per il servizio di key transparency di Signal, basata sulla specifica [key transparency](https://bren2010.github.io/draft-key-transparency/draft-mcmillion-key-transparency.html). Panoramica -------- Questo servizio è scritto in Java utilizzando il framework [Micronaut](https://docs.micronaut.io/4.4.10/guide/). Per compilare ed eseguire i test unitari, eseguire ```shell ./mvnw clean test ``` nella directory principale. La classe principale è [`Auditor`](https://github.com/signalapp/key-transparency-auditor/blob/main/src/main/java/org/signal/keytransparency/audit/Auditor.java), che esegue un job programmato che richiede uno stream di aggiornamenti dal servizio di key transparency. Mantiene una vista condensata del [prefix tree](https://bren2010.github.io/draft-key-transparency/draft-mcmillion-key-transparency.html#name-prefix-tree) e del [log tree](https://bren2010.github.io/draft-key-transparency/draft-mcmillion-key-transparency.html#name-log-tree), memorizzando informazioni sufficienti per verificare e accettare ogni aggiornamento in sequenza. Se l'auditor ha elaborato un certo numero di aggiornamenti o è trascorso un certo periodo di tempo, l'auditor invia una [signed tree head](https://bren2010.github.io/draft-key-transparency/draft-mcmillion-key-transparency.html#name-tree-head-signature) al servizio di key transparency, indicando che la sua visione dei prefix e log tree fino all'aggiornamento indicato corrisponde. Se la chiamata remota ha successo, l'auditor scrive i propri dati di stato in un [`AuditorStateRepository`](https://github.com/signalapp/key-transparency-auditor/blob/main/src/main/java/org/signal/keytransparency/audit/storage/AuditorStateRepository.java), che può utilizzare per riprendere dalla posizione più recente nel log di key transparency se l'auditor viene riavviato. Se l'auditor rileva un'incoerenza nella verifica di un aggiornamento, lancia un'`InvalidProofException` e smette di inviare signed tree head al servizio di key transparency. Configurazione ------------- Il servizio necessita dei bean `Auditor`, `KeyTransparencyServiceClient` e `AuditorStateRepository` per essere eseguito. La tabella seguente descrive le [proprietà](https://docs.micronaut.io/latest/guide/#configurationProperties) di [configurazione](https://docs.micronaut.io/latest/guide/#valueAnnotation) necessarie per istanziare questi bean. | Property | Required? | Description | |-------------------------------------------------------|------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `auditor.private-key` | sì | Una chiave privata Ed25519 in formato PKCS#8 codificata in base64 standard e utilizzata per firmare la tree head inviata al servizio di key transparency. Può essere generata tramite `openssl genpkey -algorithm ed25519` e rimuovendo l'intestazione e il piè di pagina PEM. | | `auditor.public-key` | sì | Una chiave pubblica Ed25519 in formato X509 codificata in base64 standard che è la controparte di `auditor.private-key`. | | `auditor.key-transparency-service-signing-public-key` | sì | Una chiave pubblica Ed25519 in formato PKCS#8 codificata in base64 standard e utilizzata dai client per verificare la firma del servizio di key transparency sulla tree head. | | `auditor.key-transparency-service-vrf-public-key` | sì | Una chiave pubblica Ed25519 in formato PKCS#8 codificata in base64 standard e utilizzata dai client per verificare che l'input di una [Verifiable Random Function](https://www.rfc-editor.org/rfc/rfc9381.html) (chiave di ricerca richiesta) corrisponda all'output (indice di impegno utilizzato per attraversare il prefix tree). | | `auditor.client-certificate` | sì | Un certificato in formato PKCS#8 codificato PEM utilizzato per dimostrare l'identità del client durante la mutual TLS. | | `auditor.client-private-key` | sì | Una chiave privata codificata PEM in formato PKCS#8 utilizzata per verificare la proprietà del certificato client durante la mutual TLS. | | `auditor.batch-size` | sì | Il numero massimo di aggiornamenti che il servizio di key transparency deve restituire in una singola risposta. Questo valore deve essere minore o uguale a 1000. | | `auditor.interval` | no | L'intervallo di tempo con cui il job dell'auditor deve essere eseguito per elaborare gli aggiornamenti di key transparency. Il valore predefinito è 1 minuto. | | `auditor.signature.interval` | no | L'intervallo con cui l'auditor deve inviare una signed tree head al servizio di key transparency, in termini di durata. Il valore predefinito è 1 ora. | | `auditor.signature.page-size` | no | L'intervallo con cui l'auditor deve inviare una signed tree head al servizio di key transparency, in numero di aggiornamenti. Il valore predefinito è 1.000.000. | | `auditor.key-transparency-host` | sì | Il nome host del servizio di key transparency. | | `auditor.key-transparency-port` | sì | La porta a cui connettersi per il servizio di key transparency. | | `storage.dynamodb.region` | È necessario specificare esattamente uno `storage.<type>` | La regione AWS della tabella DynamoDB utilizzata per memorizzare lo stato dell'auditor. | | `storage.dynamodb.table-name` | È necessario specificare esattamente uno `storage.<type>` | Il nome della tabella DynamoDB utilizzata per memorizzare lo stato dell'auditor. | | `storage.file.name` | È necessario specificare esattamente uno `storage.<type>` | Il nome del file utilizzato per memorizzare lo stato dell'auditor. | Segnalazione di bug ------------------------ Utilizziamo [GitHub][github issues] per il tracciamento dei bug. I problemi di sicurezza devono essere inviati a <a href="mailto:[email protected]">[email protected]</a>. Aiuto ---- Non possiamo fornire supporto tecnico diretto. Ottieni aiuto per eseguire questo software nel tuo ambiente nel nostro [forum della community non ufficiale][community forum]. Licenza ------- Copyright 2025 Signal Messenger, LLC Licenziato sotto 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