Accountable authentication with privacy protection: The Larch system for universal login
Emma Dauterman, Danny Lin, Henry Corrigan-Gibbs, David Mazières
TL;DR
Credential compromise is hard to detect and mitigates poorly, and centralized SSO exposes users to privacy risks. Larch introduces an auditable, privacy-preserving authentication log that operates with existing RPs supporting FIDO2, TOTP, or passwords by splitting the authentication secret between the client and a log service. It employs split-secret authentication protocols, zero-knowledge proofs, and a two-party ECDSA with preprocessing (plus garbled circuits for TOTP) to ensure that every successful authentication is logged without revealing RP identity, and that the log cannot authenticate on behalf of the user. The implementation demonstrates practical latency, modest storage, and favorable throughput, and the approach enables broad adoption of FIDO2-like security without requiring changes to relying parties or centralized identity providers.
Abstract
Credential compromise is hard to detect and hard to mitigate. To address this problem, we present larch, an accountable authentication framework with strong security and privacy properties. Larch protects user privacy while ensuring that the larch log server correctly records every authentication. Specifically, an attacker who compromises a user's device cannot authenticate without creating evidence in the log, and the log cannot learn which web service (relying party) the user is authenticating to. To enable fast adoption, larch is backwards-compatible with relying parties that support FIDO2, TOTP, and password-based login. Furthermore, larch does not degrade the security and privacy a user already expects: the log server cannot authenticate on behalf of a user, and larch does not allow relying parties to link a user across accounts. We implement larch for FIDO2, TOTP, and password-based login. Given a client with four cores and a log server with eight cores, an authentication with larch takes 150ms for FIDO2, 91ms for TOTP, and 74ms for passwords (excluding preprocessing, which takes 1.23s for TOTP).
