Market stalls should have both a regular tagging system to improve discoverability (easy enough, not in scope here), and a "sensitive content" tagging system that is both plausibly deniably, publicly postable right in microformat metadata, and that can only be decrypted by market stalls it has an explicit relationship with.
This issue is for discussing the specific cryptographic format of this tag, how it is encoded/decoded, what properties it must have, and how key negotiation happens.
Important Properties
The format for the sensitive content metadata must have the following properties:
- It MUST be an encrypted set representing the tags. It could be a bit array or an array of strings.
- It MUST be encrypted per-bazaar that the market stall wants to make it available for, and can contain different data per-bazaar (read: it's encrypted with a particular bazaar's public key, possibly keyed by that key's ID)
- It MUST NOT expose the actual length of the array in any useful way. For example, its apparent length should not vary depending on the number of tags being applied.
- It MUST be salted with some information based on the work+stall+bazaar combo. For example, the work's name/id, and the stall's name/id, to prevent cross-comparisons.
- There SHOULD be a migration path as "sensitive content" tags are added/removed.
- ALL works in a stall (preferably all stalls) will need to have the tag metadata, even if there's no tags applied.
Market stalls should have both a regular tagging system to improve discoverability (easy enough, not in scope here), and a "sensitive content" tagging system that is both plausibly deniably, publicly postable right in microformat metadata, and that can only be decrypted by market stalls it has an explicit relationship with.
This issue is for discussing the specific cryptographic format of this tag, how it is encoded/decoded, what properties it must have, and how key negotiation happens.
## Important Properties
The format for the sensitive content metadata must have the following properties:
1. It MUST be an encrypted set representing the tags. It could be a bit array or an array of strings.
2. It MUST be encrypted per-bazaar that the market stall wants to make it available for, and can contain different data per-bazaar (read: it's encrypted with a particular bazaar's public key, possibly keyed by that key's ID)
3. It MUST NOT expose the actual length of the array in any useful way. For example, its apparent length should not vary depending on the number of tags being applied.
4. It MUST be salted with some information based on the work+stall+bazaar combo. For example, the work's name/id, and the stall's name/id, to prevent cross-comparisons.
5. There SHOULD be a migration path as "sensitive content" tags are added/removed.
6. ALL works in a stall (preferably all stalls) will need to have the tag metadata, even if there's no tags applied.