Idea 1: Certificate Transparency Browser Extension
Problem
Certificate transparency (CT) was designed to allow users to directly verify TLS certificates and ensure secure connections. However, the current system relies heavily on the honesty of log operators, introducing vulnerabilities and a lack of trust in end-to-end encryption.
The hackathon track addresses this gap by building a browser extension that restores user trust in TLS verification and enhances online security.
This twitter thread highlights the current problems with certificate transparency that your project will aim to solve.
We have already built this internally as a prototype, so please reach out with any questions that come up. This document intends to only be a rough outline of the architecture and flow of the project.
Solution
The browser extension consists of two parts:
- A prism service that monitors the CT logs for new roots and stores them in prism accounts corresponding to each log
- A browser extension that retrieves the logs' accounts depending on the certificates of the websites visited by the user
Prism Service
sequenceDiagram
participant CTS as ct-service
participant Prism
participant X2024 as Xenon2024
CTS->>Prism: RegisterService(xenon2024, pubkey)
loop
CTS->>X2024: Poll for new root
X2024-->>CTS: New root
CTS->>Prism: SetData(xenon2024, SignedTreeHead)
end
Browser Extension
sequenceDiagram
actor Bob
participant Google as google.com
participant WLN as Wasm Light Node
participant CTS as Prism Full Node
participant X2024 as Xenon2024
Bob->>Google: HTTPS Request
activate Bob
Google-->>Bob: TLS Certificate
deactivate Bob
Note left of Bob: contains SignedCertificateTimestamp<br/>from multiple logs
Bob->>CTS: Request latest account of Xenon2024
activate Bob
CTS-->>Bob: AccountResponse for Xenon2024
deactivate Bob
Note left of Bob: Contains latest Xenon2024 root as SignedData,<br/>and merkle proof of Account under Prism root
Bob->>WLN: Request latest verified Prism root
activate Bob
WLN-->>Bob: Prism root
Bob->>Bob: Verify merkle proof against <br/> AccountResponse and Prism root
deactivate Bob
Bob->>X2024: Request merkle proof of TLS certificate under root
activate Bob
X2024-->>Bob: Merkle proof of TLS certificate under root
Bob->>Bob: Verify Log merkle proof against <br/>Xenon2024 root from AccountResponse
deactivate Bob