
Непрерывно получает и криптографически проверяет обновления журнала прозрачности ключей, поддерживает сжатый префикс и представление дерева журнала, а также возвращает подписанные заголовки дерева, когда обновления действительны.
Эталонная реализация стороннего аудитора для сервиса прозрачности ключей Signal, основанная на спецификации key transparency.
Сервис написан на Java с использованием фреймворка Micronaut. Для сборки и запуска модульных тестов выполните
./mvnw clean test
в корневом каталоге.
Основной класс — Auditor, который запускает задание по расписанию, запрашивающее
поток обновлений от сервиса прозрачности ключей. Он поддерживает сжатое представление префиксного дерева
и дерева журнала
сервиса прозрачности ключей, сохраняя ровно столько информации, сколько необходимо для последовательной проверки и принятия каждого обновления. Если аудитор обработал определённое количество обновлений или истёк определённый промежуток времени, аудитор отправляет обратно в сервис прозрачности ключей
подписанную голову дерева,
указывающую, что его представление префиксного дерева и дерева журнала вплоть до указанного обновления совпадает.
Если удалённый вызов завершается успешно, аудитор записывает данные своего состояния в ,
который он может использовать для возобновления работы с последней позиции в журнале прозрачности ключей в случае перезапуска аудитора.
Если при проверке обновления аудитор обнаруживает несоответствие, он выбрасывает исключение InvalidProofException и прекращает
отправлять подписанные головы дерева обратно в сервис прозрачности ключей.
Для работы сервису требуются bean-компоненты Auditor, KeyTransparencyServiceClient и AuditorStateRepository.
В таблице ниже описаны конфигурационные свойства, необходимые для создания этих компонентов.
| Свойство | Обязательно? | Описание |
|---|---|---|
auditor.private-key | да | Приватный ключ Ed25519 в формате PKCS#8, закодированный в стандартном base64 и используемый для подписи головы дерева, отправляемой обратно в сервис прозрачности ключей. Можно сгенерировать с помощью openssl genpkey -algorithm ed25519, отбросив PEM-заголовок и подвал. |
auditor.public-key | да | Публичный ключ Ed25519 в формате X509, закодированный в стандартном base64, являющийся парой к auditor.private-key. |
auditor.key-transparency-service-signing-public-key | да | Публичный ключ Ed25519 в формате PKCS#8, закодированный в стандартном base64 и используемый клиентами для проверки подписи сервиса прозрачности ключей над головой дерева. |
auditor.key-transparency-service-vrf-public-key | да | Публичный ключ Ed25519 в формате PKCS#8, закодированный в стандартном base64 и используемый клиентами для проверки того, что входные данные проверяемой случайной функции (запрашиваемый поисковый ключ) соответствуют выходным данным (индекс обязательства, используемый для обхода префиксного дерева). |
auditor.client-certificate | да | Сертификат в формате PKCS#8 с PEM-кодированием, используемый для подтверждения личности клиента при взаимной TLS-аутентификации. |
auditor.client-private-key | да | Приватный ключ в формате PKCS#8 с PEM-кодированием, используемый для подтверждения владения клиентским сертификатом при взаимной TLS-аутентификации. |
auditor.batch-size | да | Максимальное количество обновлений, которое сервис прозрачности ключей должен возвращать в одном ответе. Это значение должно быть меньше или равно 1000. |
auditor.interval | нет | Временной интервал, с которым должно запускаться задание аудитора для обработки обновлений прозрачности ключей. По умолчанию — 1 минута. |
auditor.signature.interval | нет | Интервал, с которым аудитор должен отправлять подписанную голову дерева в сервис прозрачности ключей, выраженный в длительности. По умолчанию — 1 час. |
auditor.signature.page-size | нет | Интервал, с которым аудитор должен отправлять подписанную голову дерева в сервис прозрачности ключей, выраженный в количестве обновлений. По умолчанию — 1 000 000. |
Мы используем GitHub для отслеживания ошибок. Проблемы безопасности следует отправлять на [email protected].
Мы не можем предоставить прямую техническую поддержку. Получить помощь по запуску этого программного обеспечения в собственном окружении можно в нашем неофициальном форуме сообщества.
Авторское право 2025 Signal Messenger, LLC
Лицензировано на условиях AGPLv3: https://www.gnu.org/licenses/agpl-3.0.html
auditor.key-transparency-host | да | Имя хоста сервиса прозрачности ключей. |
auditor.key-transparency-port | да | Порт для подключения к сервису прозрачности ключей. |
storage.dynamodb.region | Необходимо указать ровно один storage.<type> | Регион AWS таблицы DynamoDB, используемой для хранения состояния аудитора. |
storage.dynamodb.table-name | Необходимо указать ровно один storage.<type> | Имя таблицы DynamoDB, используемой для хранения состояния аудитора. |
storage.file.name | Необходимо указать ровно один storage.<type> | Имя файла, используемого для хранения состояния аудитора. |