m/n/c/{cluster,roleserve}: implement Join Flow

This implements Join Flow for:
- Registered nodes attempting to re-join the cluster.
- Nodes bootstrapping the cluster.

See: Cluster Lifecycle and Integrity design document

Change-Id: I74ab98fdec650c4f6aa59e34a16c0f95745dc0e9
Reviewed-on: https://review.monogon.dev/c/monogon/+/556
Reviewed-by: Sergiusz Bazanski <serge@monogon.tech>
diff --git a/metropolis/proto/private/private.proto b/metropolis/proto/private/private.proto
index a09b0d3..c682311 100644
--- a/metropolis/proto/private/private.proto
+++ b/metropolis/proto/private/private.proto
@@ -67,4 +67,10 @@
     // the data partition. The NUK and CUK are generated on bootstrap and
     // registration.
     bytes node_unlock_key = 1;
+    // join_key is an ED25519 private key generated during registration. The
+    // public part is shared with Curator to authenticate the join procedure.
+    bytes join_key = 2;
+    // cluster_ca is the X509 CA certificate of the cluster set during
+    // registration and used by nodes joining the cluster.
+    bytes cluster_ca = 3;
 }