1.5 KiB
1.5 KiB
Guardian Key Usage
Objective
- Describe how guardian keys are used and how message confusion is avoided.
Background
Message confusion could occur when a Guardian signs a message and an attacker replays that message elsewhere where it is interpreted as a different message type, which could lead to unintended behavior.
Overview
The Guardian Key is used to:
- Sign gossip messages
- heartbeat
- governor config and governor status
- observation request
- Sign Observations
- Version 1 VAAs
- Version 2 VAAs, i.e. Batch VAAs.
Detailed Design
Signing of gossip messages:
- Prepend the message type prefix to the payload
- Compute Keccak256Hash of the payload.
- Compute ethcrypto.Sign()
Signing of Observations:
- v1 VAA:
double-Keccak256(observation)
. - v2 (batchVAA):
double-Keccak256(version | Keccak256(hash1 | hash2 | ... | hash_n))
, where|
stands for concatenation.
Rationale
- Gossip messages cannot be confused with other gossip messages because the message type prefix is prepended.
- Gossip messages cannot be confused with observations because observations utilize a double-Keccak256 and the payload is enforced to be
>=34
bytes. - v2 VAAs cannot be confused as v1 VAAs because their payload when parsed as a v1 VAA is only 33 bytes, which does not constitute a valid observation.
- v1 VAAs cannot be confused as v2 VAAs because observations are longer than 33 bytes and hence do not constitute a valid v2 VAA body.