Floating the question here, with some context.
From the last dev diary post:
The ECMH for a permissioned repo is authenticated using a randomly generated and transient HMAC key, which is in turn signed by the user’s atproto signing key.
The commit is composed of the ECMH hash, the computed HMAC, the HMAC key, and the signature.
Each commit is authenticated for only one party and is not intended to be rebroadcast. HMACs are used to provide deniability in the event a signature is exposed. Every reader who reads a permissioned repo from a PDS will receive a different HMAC key.
This effectively means that the ECMH can be adjusted incrementally and then with each request for the space commit is built like this:
let ecmh = set_hash.to_bytes();
let hmac_key: [u8; 32] = rand::random();
let hmac = hmac_sha256(&hmac_key, &ecmh);
let sig = sign(signing_key, &hmac_key)
And then only the hmac, hmac_key, and signature should be returned. The client would build their own ecmh input, then validate that the hmac_key comes from the identity using its verification method, and then uses it to create an hmac of the ecmh and the validated hmac_key.
This specifically is the source of contention.
The commit is composed of the ECMH hash, the computed HMAC, the HMAC key, and the signature.
The attack here is that someone in the past had a list of the values in the ECMH hash plus a commit and could demonstrated that at some point in time, a list of values along with a commit and it’s transmitted signed hmac key could demonstrate membership.