Let's say I'm designing a communications protocol that will be used by many pairs of devices to communicate amongst each other (between the pairs only).
Assuming the devices in the pair can communicate with each other in a cryptographically secure way using, for example, digital signatures, and at least one is occasionally connected to the internet, how would you:
- issue new keys (either between the devices, or from a centralized source)?
- reliably fall back and maintain communication if something happens during the key issue process?
The main requirements are:
- In a pair of devices
A, B, only
Bcan communicate with each other; an adversary must not be able to know how to talk to
Aby observing the communications between them.
- Such a protocol should be able to be open sourced with no loss in security.
- At least one of the systems must be able to be operated by a human, even if the underlying code that runs these systems is opaque to the operator.
Here's the problems I see:
- Having centralized control of key management adds a single point of failure; access this service and the whole thing collapses
- These systems must be operated by people, so access to the keys could be feasible
- If for some reason a cryptographic problem is detected, the systems are unusable, and must (somehow?) be securely updated with new keys, but lack a basis of trust.
- Physical security of the system operated by the human is paramount.
How would you manage the keys in this situation?