
Ruft kontinuierlich Key-Transparency-Log-Updates ab und verifiziert diese kryptografisch, pflegt eine kondensierte Präfix- und Log-Baumansicht und gibt signierte Baumköpfe zurück, wenn die Updates gültig sind.
Eine Referenzimplementierung eines Drittanbieter-Auditors für den Key-Transparency-Dienst von Signal, basierend auf der Key-Transparency-Spezifikation.
Dieser Dienst ist in Java mit dem Micronaut-Framework geschrieben. Zum Erstellen und Ausführen von Unit-Tests führen Sie im Stammverzeichnis Folgendes aus:
./mvnw clean test
Die Hauptklasse ist der Auditor, der einen geplanten Job ausführt, der einen Stream von Updates vom Key-Transparency-Dienst anfordert. Er verwaltet eine komprimierte Ansicht des Präfixbaums und Logbaums des Key-Transparency-Dienstes und speichert gerade genug Informationen, um jedes Update sequenziell zu verifizieren und zu akzeptieren. Wenn der Auditor eine bestimmte Anzahl von Updates verarbeitet hat oder eine bestimmte Zeitspanne vergangen ist, sendet der Auditor einen signierten Baumkopf an den Key-Transparency-Dienst zurück, der angibt, dass seine Ansicht des Präfix- und Logbaums bis zum angegebenen Update übereinstimmt. Wenn der Remote-Aufruf erfolgreich ist, schreibt der Auditor seine Zustandsdaten in ein AuditorStateRepository, das er verwenden kann, um bei einem Neustart des Auditors von seiner letzten Position im Key-Transparency-Log fortzufahren.
Wenn der Auditor bei der Verifizierung eines Updates eine Inkonsistenz feststellt, wirft er eine InvalidProofException und sendet keine signierten Baumköpfe mehr an den Key-Transparency-Dienst zurück.
Der Dienst benötigt die Beans Auditor, KeyTransparencyServiceClient und AuditorStateRepository, um ausgeführt zu werden. Die folgende Tabelle beschreibt die Konfigurations-eigenschaften, die zum Instanziieren dieser Beans erforderlich sind.
Wir verwenden GitHub zur Fehlerverfolgung. Sicherheitsprobleme sollten an [email protected] gesendet werden.
Wir können keinen direkten technischen Support leisten. Hilfe zur Ausführung dieser Software in Ihrer eigenen Umgebung erhalten Sie in unserem inoffiziellen Community-Forum.
Copyright 2025 Signal Messenger, LLC
Lizenziert unter der AGPLv3: https://www.gnu.org/licenses/agpl-3.0.html
| Eigenschaft | Erforderlich? | Beschreibung |
|---|
auditor.private-key | Ja | Ein PKCS#8-formatierter, in Standard-Base64 kodierter privater Ed25519-Schlüssel, der zum Signieren des an den Key-Transparency-Dienst zurückgesendeten Baumkopfs verwendet wird. Kann über openssl genpkey -algorithm ed25519 erzeugt werden, wobei PEM-Header und -Footer verworfen werden. |
auditor.public-key | Ja | Ein X509-formatierter, in Standard-Base64 kodierter öffentlicher Ed25519-Schlüssel, der das Gegenstück zu auditor.private-key darstellt. |
auditor.key-transparency-service-signing-public-key | Ja | Ein PKCS#8-formatierter, in Standard-Base64 kodierter öffentlicher Ed25519-Schlüssel, der von Clients verwendet wird, um die Signatur des Key-Transparency-Dienstes über den Baumkopf zu verifizieren. |
auditor.key-transparency-service-vrf-public-key | Ja | Ein PKCS#8-formatierter, in Standard-Base64 kodierter öffentlicher Ed25519-Schlüssel, der von Clients verwendet wird, um zu verifizieren, dass die Eingabe einer Verifiable Random Function (angeforderter Suchschlüssel) mit der Ausgabe (Commitment-Index, der zum Durchlaufen des Präfixbaums verwendet wird) übereinstimmt. |
auditor.client-certificate | Ja | Ein PKCS#8-formatiertes, PEM-kodiertes Zertifikat, das verwendet wird, um die Identität des Clients während des gegenseitigen TLS nachzuweisen. |
auditor.client-private-key | Ja | Ein PKCS#8-formatierter, PEM-kodierter privater Schlüssel, der verwendet wird, um den Besitz des Client-Zertifikats während des gegenseitigen TLS zu überprüfen. |
auditor.batch-size | Ja | Die maximale Anzahl von Updates, die der Key-Transparency-Dienst in einer einzelnen Antwort zurückgeben soll. Dieser Wert sollte kleiner oder gleich 1000 sein. |
auditor.interval | Nein | Das Zeitintervall, in dem der Auditor-Job ausgeführt werden soll, um Key-Transparency-Updates zu verarbeiten. Standardwert: 1 Minute. |
auditor.signature.interval | Nein | Das Intervall, in dem der Auditor einen signierten Baumkopf an den Key-Transparency-Dienst senden soll, als Zeitspanne. Standardwert: 1 Stunde. |
auditor.signature.page-size | Nein | Das Intervall, in dem der Auditor einen signierten Baumkopf an den Key-Transparency-Dienst senden soll, gemessen in der Anzahl von Updates. Standardwert: 1.000.000. |
auditor.key-transparency-host | Ja | Der Hostname des Key-Transparency-Dienstes. |
auditor.key-transparency-port | Ja | Der Port, über den die Verbindung zum Key-Transparency-Dienst hergestellt wird. |
storage.dynamodb.region | Es muss genau ein storage.<type> angegeben werden | Die AWS-Region der DynamoDB-Tabelle, die zum Speichern des Auditor-Zustands verwendet wird. |
storage.dynamodb.table-name | Es muss genau ein storage.<type> angegeben werden | Der Name der DynamoDB-Tabelle, die zum Speichern des Auditor-Zustands verwendet wird. |
storage.file.name | Es muss genau ein storage.<type> angegeben werden | Der Name der Datei, die zum Speichern des Auditor-Zustands verwendet wird. |