eleven / messenger Public

docs: secrets.md — home identity-anchor peppers + SES sender key (#1138)

The prod home.env gained the sign-in env this morning (SiwA + email doors);
the vault rule says docs/secrets.md records every new secret in the same
change.
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Paul Campbell 00ab768aa083c02d9542dabcc9467b5b2bf9b261 parent b1b3e01
1 file changed, +20 −4
  • docs/secrets.md +20 −4
diff --git a/docs/secrets.md b/docs/secrets.md
index b4c4774..bfbcfbb 100644
--- a/docs/secrets.md
+++ b/docs/secrets.md
@@ -46,10 +46,26 @@ private — is `docs/secrets-vault.md`.
- **Session key** (`LCHAT_HOME_SESSION_KEY`) — HMAC ceremony proofs + sealed
WebAuthn session params (both keys derived from it with distinct labels).
Cannot open any vault. *Blast radius*: forge a 5-minute ceremony proof —
- i.e. the destructive-op gate (device revocation, blob delete) for a user
- whose uid you already know; vault *content* stays ciphertext. *Rotate*:
- swap the env and restart; in-flight ceremonies fail once, harmless. Unset,
- home mints an ephemeral key per boot (self-hoster default).
+ i.e. the destructive-op gate (device revocation, blob delete, sign-in-method
+ add/remove) for a user whose uid you already know; vault *content* stays
+ ciphertext. *Rotate*: swap the env and restart; in-flight ceremonies fail
+ once, harmless. Unset, home mints an ephemeral key per boot (self-hoster
+ default).
+- **Identity-anchor peppers** (`LCHAT_HOME_SIWA_PEPPER`,
+ `LCHAT_HOME_EMAIL_PEPPER`, per-provider `LCHAT_HOME_<PROVIDER>_PEPPER`) —
+ HMAC the provider's stable subject (or lowercased email) into the blind
+ index that maps a sign-in anchor to an account; identity anchors can never
+ decrypt. *Blast radius*: pepper plus a DB copy lets an attacker test
+ whether a *known* email/Apple ID has an account (membership probing) —
+ content stays sealed. *Rotate*: last-resort only — a new pepper orphans
+ every existing anchor of that kind; users re-link via a remaining sign-in
+ method.
+- **SES sender key** (`AWS_*` on home when the email door is on; IAM user
+ `ses-sender-production`, dev twin `ses-sender-dev`) — scoped to
+ `ses:SendEmail` from `sign-in@elevenmessenger.com` only. *Blast radius*:
+ send mail as the sign-in address (phishing paper). *Rotate*: standard IAM
+ two-key rotation. Note it shares the `AWS_*` env with the S3 store below —
+ an instance running both needs one IAM user carrying both scopes.
- **S3 backend credentials** (`AWS_*` when `LCHAT_HOME_STORE=s3`) — object
access to the home bucket. *Blast radius*: read/overwrite vault ciphertext
and WebAuthn public credentials; versioning keeps the last 5, so vandalism