
Obtiene continuamente y verifica criptográficamente las actualizaciones del registro de transparencia de claves, mantiene un prefijo condensado y una vista de árbol del registro, y devuelve cabezas de árbol firmadas cuando las actualizaciones son válidas.
Una implementación de referencia de un auditor de terceros para el servicio de transparencia de claves de Signal, basada en la especificación de transparencia de claves.
Este servicio está escrito en Java utilizando el framework Micronaut. Para compilar y ejecutar las pruebas unitarias, ejecuta
./mvnw clean test
en el directorio raíz.
La clase principal es Auditor, que ejecuta un trabajo programado que solicita un
flujo de actualizaciones al servicio de transparencia de claves. Mantiene una vista condensada del árbol de prefijos
y del árbol de registro del servicio de transparencia de claves,
almacenando únicamente la información suficiente para verificar y aceptar cada actualización de forma secuencial. Si el auditor ha procesado un cierto número de actualizaciones o ha transcurrido un cierto tiempo, el auditor envía de vuelta una
cabecera de árbol firmada
al servicio de transparencia de claves, lo que indica que su vista de los árboles de prefijos y de registro hasta la actualización dada coincide.
Si la llamada remota tiene éxito, el auditor escribe sus datos de estado en un ,
que puede utilizar para reanudar desde su posición más reciente en el registro de transparencia de claves si el auditor se reinicia.
Si el auditor encuentra una inconsistencia al verificar una actualización, lanza una InvalidProofException y deja
de enviar cabeceras de árbol firmadas al servicio de transparencia de claves.
El servicio necesita los beans Auditor, KeyTransparencyServiceClient y AuditorStateRepository para ejecutarse.
La tabla siguiente describe la configuración y las propiedades necesarias para instanciar esos beans.
| Property | Required? | Description |
|---|---|---|
auditor.private-key | sí | Una clave privada Ed25519 con formato PKCS#8 codificada en base64 estándar y utilizada para firmar la cabecera de árbol enviada de vuelta al servicio de transparencia de claves. Puede generarse mediante openssl genpkey -algorithm ed25519 y descartando la cabecera y el pie PEM. |
auditor.public-key | sí | Una clave pública Ed25519 con formato X509 codificada en base64 estándar que es la contraparte de auditor.private-key. |
auditor.key-transparency-service-signing-public-key | sí | Una clave pública Ed25519 con formato PKCS#8 codificada en base64 estándar y utilizada por los clientes para verificar la firma del servicio de transparencia de claves sobre la cabecera de árbol. |
auditor.key-transparency-service-vrf-public-key | sí | Una clave pública Ed25519 con formato PKCS#8 codificada en base64 estándar y utilizada por los clientes para verificar que la entrada de una función aleatoria verificable (clave de búsqueda solicitada) coincide con la salida (índice de compromiso utilizado para recorrer el árbol de prefijos). |
auditor.client-certificate | sí | Un certificado con formato PKCS#8 codificado en PEM utilizado para demostrar la identidad del cliente durante TLS mutuo. |
auditor.client-private-key | sí | Una clave privada con formato PKCS#8, codificada en PEM, utilizada para verificar la propiedad del certificado de cliente durante TLS mutuo. |
auditor.batch-size | sí | El número máximo de actualizaciones que el servicio de transparencia de claves debe devolver en una única respuesta. Este valor debe ser menor o igual que 1000. |
auditor.interval | no | El intervalo de tiempo con el que debe ejecutarse el trabajo del auditor para procesar las actualizaciones de transparencia de claves. El valor predeterminado es 1 minuto. |
auditor.signature.interval | no | El intervalo con el que el auditor debe enviar una cabecera de árbol firmada al servicio de transparencia de claves, en duración. El valor predeterminado es 1 hora. |
auditor.signature.page-size |
Utilizamos GitHub para el seguimiento de errores. Los problemas de seguridad deben enviarse a [email protected].
No podemos proporcionar soporte técnico directo. Obtén ayuda para ejecutar este software en tu propio entorno en nuestro foro comunitario no oficial.
Copyright 2025 Signal Messenger, LLC
Licenciado bajo la AGPLv3: https://www.gnu.org/licenses/agpl-3.0.html
| no |
| El intervalo con el que el auditor debe enviar una cabecera de árbol firmada al servicio de transparencia de claves, en número de actualizaciones. El valor predeterminado es 1.000.000. |
auditor.key-transparency-host | sí | El nombre de host del servicio de transparencia de claves. |
auditor.key-transparency-port | sí | El puerto al que conectarse para el servicio de transparencia de claves. |
storage.dynamodb.region | Debe especificarse exactamente un storage.<type> | La región de AWS de la tabla de DynamoDB utilizada para almacenar el estado del auditor. |
storage.dynamodb.table-name | Debe especificarse exactamente un storage.<type> | El nombre de la tabla de DynamoDB utilizada para almacenar el estado del auditor. |
storage.file.name | Debe especificarse exactamente un storage.<type> | El nombre del archivo utilizado para almacenar el estado del auditor. |