Reconcile: adopt initialization's consolidated HQ as canonical, re-home this session's new work #24
@@ -143,6 +143,39 @@ mesh's copy is a public key, so a copy of the mesh's database grants nothing. *C
|
|||||||
is compromise of that node* becomes true rather than aspirational, because the only secret on a
|
is compromise of that node* becomes true rather than aspirational, because the only secret on a
|
||||||
machine is the one that identifies it.
|
machine is the one that identifies it.
|
||||||
|
|
||||||
|
### What "connecting to the mesh" is, concretely
|
||||||
|
|
||||||
|
*Written 2026-08-29, because it was asked and this record had never said it.*
|
||||||
|
|
||||||
|
**One outbound AMQP connection from the node to the broker, held open.** That is all of it. There
|
||||||
|
is no second connection and nothing is ever dialled *at* a node. Being in the mesh, operationally,
|
||||||
|
means that connection is up; being disconnected means it is not
|
||||||
|
([`09-the-node-lifecycle.md`](../03-DESIGN/01-to-be/09-the-node-lifecycle.md)).
|
||||||
|
|
||||||
|
**Two different things ride on it, and conflating them is what made this confusing:**
|
||||||
|
|
||||||
|
| | what it answers | who issues it |
|
||||||
|
|---|---|---|
|
||||||
|
| **an AMQP account** | may this connection be accepted at all | **the mesh, at enrolment** |
|
||||||
|
| **the node's keypair** | which node is speaking, on every message | **the node**, above |
|
||||||
|
|
||||||
|
**The account is the mesh's to issue**, and per node. The broker has to authenticate somebody
|
||||||
|
before a connection exists, and a shared account would let any node consume another's queue —
|
||||||
|
which is the shared-credential fault this record exists to remove, reappearing at the transport.
|
||||||
|
So enrolment creates that node's account and hands it over, and it is rotatable without touching
|
||||||
|
the node's identity.
|
||||||
|
|
||||||
|
**The keypair is not made redundant by it.** With only an account, the control plane would know
|
||||||
|
which node is speaking *because the broker says so* — and that is the same transitive authority
|
||||||
|
this record refuses in the other direction. A compromised broker could then attribute reports to
|
||||||
|
whichever node it liked, and the control plane would act on them. Signing is what removes the
|
||||||
|
broker from the question in both directions.
|
||||||
|
|
||||||
|
**So a node holds two things after enrolment**: a credential the mesh issued for reaching the
|
||||||
|
broker, and a key it generated itself that the mesh only ever sees the public half of. Both are
|
||||||
|
its own, neither reaches anything else, and *compromise of a node is compromise of that node*
|
||||||
|
still holds.
|
||||||
|
|
||||||
### Its own key, not the machine's SSH host key
|
### Its own key, not the machine's SSH host key
|
||||||
|
|
||||||
Reusing the host key is the obvious economy and it is refused, for reasons that are operational
|
Reusing the host key is the obvious economy and it is refused, for reasons that are operational
|
||||||
|
|||||||
Reference in New Issue
Block a user