Implement proposal 321: "Better performance and usability for the MyFamily option (v2)"

Proposal 321 explains how to migrate from the status quo, in which an n-member family consumes O(n^2) bytes in advertising itself, to an improved situation in which an n-member family requires only O(n) bytes to advertise itself. This is a prerequisite for Walking Onions.

To implement the proposal, we should follow approximately these steps:

  • Double-check with the relay operator community about usability issues.
  • Ask the network-health community about possible issues I haven't thought of.
  • Implement code to generate, read, and maintain family keys and family certificates.
  • Relays should publish family certificates in router descriptors
  • Authorities should derive family-keys entries in microdescriptors from family certificates. This will require a new consensus method.
  • Relays should, based on a derive-family-line consensus parameter, infer entries for a family line based on other observed router descriptors with the same family keys.
  • Clients should use family-keys entries when deciding if two relays are in the same family.
Edited by Nick Mathewson