基于 密钥透明度 规范,为 Signal 的密钥透明度服务实现的一个第三方审计器参考实现。
该服务使用 Java 编写,基于 Micronaut 框架。要构建并运行单元测试,请运行以下命令:
./mvnw clean test
在根目录中执行。
主类是 Auditor,它运行一个定时任务,从密钥透明度服务请求更新流。它维护该服务的前缀树和日志树的精简视图,仅存储足以按顺序验证并接受每次更新的信息。如果审计器已处理一定数量的更新,或经过一定时间,它会向密钥透明度服务返回一个已签名树头,表示其对截至该更新的前缀树和日志树的视图是匹配的。如果远程调用成功,审计器会将其状态数据写入 AuditorStateRepository,在审计器重启后,它可利用该状态从密钥透明度日志中的最近位置继续处理。
如果审计器在验证更新时遇到不一致,它会抛出 InvalidProofException,并停止向密钥透明度服务发送已签名树头。
该服务需要 Auditor、KeyTransparencyServiceClient 和 AuditorStateRepository 这些 bean 才能运行。下表描述了实例化这些 bean 所需的配置 属性。
我们使用 GitHub 进行缺陷跟踪。安全问题请发送至 [email protected]。
我们无法提供直接技术支持。如需在您自己的环境中运行此软件,请在我们的非官方社区论坛中获取帮助。
版权所有 2025 Signal Messenger, LLC
依据 AGPLv3 许可:https://www.gnu.org/licenses/agpl-3.0.html
| 属性 | 是否必填? | 描述 |
|---|
auditor.private-key | 是 | 以标准 base64 编码的 PKCS#8 格式 Ed25519 私钥,用于对发送回密钥透明度服务的树头进行签名。可通过 openssl genpkey -algorithm ed25519 生成,并去掉 PEM 头和尾。 |
auditor.public-key | 是 | 以标准 base64 编码的 X509 格式 Ed25519 公钥,是 auditor.private-key 的对应公钥。 |
auditor.key-transparency-service-signing-public-key | 是 | 以标准 base64 编码的 PKCS#8 格式 Ed25519 公钥,客户端用它来验证密钥透明度服务对树头的签名。 |
auditor.key-transparency-service-vrf-public-key | 是 | 以标准 base64 编码的 PKCS#8 格式 Ed25519 公钥,客户端用它来验证可验证随机函数(请求的搜索密钥)的输入与输出(用于遍历前缀树的承诺索引)是否匹配。 |
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。 |
auditor.key-transparency-host | 是 | 密钥透明度服务的主机名。 |
auditor.key-transparency-port | 是 | 用于连接密钥透明度服务的端口。 |
storage.dynamodb.region | 必须且只能指定一个 storage.<type> | 用于存储审计器状态的 DynamoDB 表的 AWS 区域。 |
storage.dynamodb.table-name | 必须且只能指定一个 storage.<type> | 用于存储审计器状态的 DynamoDB 表名称。 |
storage.file.name | 必须且只能指定一个 storage.<type> | 用于存储审计器状态的文件名称。 |