
키 투명성 로그 업데이트를 지속적으로 가져와서 암호학적으로 검증하고, 압축된 프리픽스와 로그 트리 뷰를 유지하며, 업데이트가 유효할 때 서명된 트리 헤드를 반환합니다.
Signal의 키 투명성 서비스를 위한 제3자 감사자의 참조 구현으로, key transparency 사양을 기반으로 합니다.
이 서비스는 Micronaut 프레임워크를 사용하는 Java로 작성되었습니다. 빌드 및 단위 테스트를 하려면 루트 디렉터리에서 다음을 실행하세요.
./mvnw clean test
메인 클래스는 Auditor로, 키 투명성 서비스로부터 업데이트 스트림을 요청하는 예약 작업을 실행합니다. 이 클래스는 키 투명성 서비스의 프리픽스 트리 및 로그 트리에 대한 압축된 뷰를 유지하며, 각 업데이트를 순차적으로 검증하고 수락하는 데 필요한 최소한의 정보만 저장합니다. 감사자가 일정 수의 업데이트를 처리하거나 일정 시간이 경과하면, 감사자는 서명된 트리 헤드를 키 투명성 서비스로 다시 보내어 주어진 업데이트까지의 프리픽스 및 로그 트리에 대한 자체 뷰가 일치함을 나타냅니다.
원격 호출이 성공하면 감사자는 상태 데이터를 AuditorStateRepository에 기록하며, 감사자가 다시 시작될 때 키 투명성 로그에서 가장 최근 위치부터 재개하는 데 사용할 수 있습니다.
감사자가 업데이트 검증 중 불일치를 발견하면 InvalidProofException을 발생시키고 키 투명성 서비스로 서명된 트리 헤드를 더 이상 보내지 않습니다.
서비스가 실행되려면 Auditor, KeyTransparencyServiceClient, AuditorStateRepository 빈(bean)이 필요합니다.
아래 표는 이러한 빈을 인스턴스화하는 데 필요한 구성 속성을 설명합니다.
우리는 버그 추적에 GitHub를 사용합니다. 보안 문제는 [email protected]로 보내주시기 바랍니다.
직접적인 기술 지원은 제공할 수 없습니다. 이 소프트웨어를 자체 환경에서 실행하는 데 필요한 도움은 비공식 커뮤니티 포럼에서 얻을 수 있습니다.
Copyright 2025 Signal Messenger, LLC
AGPLv3에 따라 라이선스가 부여됩니다: https://www.gnu.org/licenses/agpl-3.0.html
| Property | Required? | Description |
|---|
auditor.private-key | 예 | 표준 base64로 인코딩된 PKCS#8 형식의 Ed25519 개인 키로, 키 투명성 서비스로 다시 보내는 트리 헤드에 서명하는 데 사용됩니다. openssl genpkey -algorithm ed25519로 생성한 후 PEM 헤더와 푸터를 제거하여 얻을 수 있습니다. |
auditor.public-key | 예 | auditor.private-key에 대응하는, 표준 base64로 인코딩된 X509 형식의 Ed25519 공개 키입니다. |
auditor.key-transparency-service-signing-public-key | 예 | 표준 base64로 인코딩된 PKCS#8 형식의 Ed25519 공개 키로, 클라이언트가 키 투명성 서비스의 트리 헤드 서명을 검증하는 데 사용됩니다. |
auditor.key-transparency-service-vrf-public-key | 예 | 표준 base64로 인코딩된 PKCS#8 형식의 Ed25519 공개 키로, 클라이언트가 VRF(Verifiable Random Function)의 입력(요청된 검색 키)이 출력(프리픽스 트리를 탐색하는 데 사용되는 커밋먼트 인덱스)과 일치하는지 검증하는 데 사용됩니다. |
auditor.client-certificate | 예 | 상호 TLS 중 클라이언트의 신원을 증명하는 데 사용되는 PKCS#8 형식의 PEM 인코딩 인증서입니다. |
auditor.client-private-key | 예 | 상호 TLS 중 클라이언트 인증서의 소유권을 검증하는 데 사용되는 PKCS#8 형식의 PEM 인코딩 개인 키입니다. |
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> 중 정확히 하나를 지정해야 함 | 감사자 상태를 저장하는 데 사용되는 파일의 이름입니다. |