//components/encrypted_messages
Do not add new uses of this component without consulting the security team.
This component implements an extremely simple cryptographic scheme, which allows encrypting anonymous messages to a remote end with a known, static public key. The scheme is as follows, with a server public key spub:
- Generate a random X25519 keypair (cpub, cpriv)
- Compute a shared secret using spub and cpriv - note that the server will be able to compute the same shared secret using cpub and spriv later
- Compute a subkey from that shared secret and a client-supplied fixed label string (to provide domain separation) using HKDF
- Use that subkey with an AEAD (currently always AES-128-CTR with HMAC-SHA256) to encrypt and authenticate the payload
- Pack the result into a protobuf containing the message itself, a server public key identifier, the random cpub from step 1, and an algorithm identifier for the inner AEAD
This is used in situations where Chromium is forced to communicate maybe-sensitive data over plain HTTP - namely metrics and variation requests, which are scenarios in which HTTPS might be unavailable.
Do not add new uses of this component without consulting the security team.