From 019d2a36891b73e933eb0d6bd8732b3d9af393d1 Mon Sep 17 00:00:00 2001 From: Callum Waters Date: Tue, 22 Sep 2020 07:23:37 +0200 Subject: [PATCH] ADR 047 - Light client evidence handling revision (#5273) --- ...047-handling-evidence-from-light-client.md | 284 +++++++++--------- docs/imgs/bifurcation-point.png | Bin 0 -> 41104 bytes docs/imgs/light-client-detector.png | Bin 0 -> 37398 bytes 3 files changed, 143 insertions(+), 141 deletions(-) create mode 100644 docs/imgs/bifurcation-point.png create mode 100644 docs/imgs/light-client-detector.png diff --git a/docs/architecture/adr-047-handling-evidence-from-light-client.md b/docs/architecture/adr-047-handling-evidence-from-light-client.md index 880ad691b..54624dd5c 100644 --- a/docs/architecture/adr-047-handling-evidence-from-light-client.md +++ b/docs/architecture/adr-047-handling-evidence-from-light-client.md @@ -5,51 +5,42 @@ * 24-02-2020: Second version * 13-04-2020: Add PotentialAmnesiaEvidence and a few remarks * 31-07-2020: Remove PhantomValidatorEvidence -* 14-08-2020: Introduce light traces +* 14-08-2020: Introduce light traces (listed now as an alternative approach) +* 20-08-2020: Light client produces evidence when detected instead of passing to full node +* 16-09-2020: Post-implementation revision + +### Glossary of Terms + +- a `LightBlock` is the unit of data that a light client receives, verifies and stores. +It is composed of a validator set, commit and header all at the same height. +- a **Trace** is seen as an array of light blocks across a range of heights that were +created as a result of skipping verification. +- a **Provider** is a full node that a light client is connected to and serves the light +client signed headers and validator sets. +- `VerifySkipping` (sometimes known as bisection or verify non-adjacent) is a method the +light client uses to verify a target header from a trusted header. The process involves verifying +intermediate headers in between the two by making sure that 1/3 of the validators that signed +the trusted header also signed the untrusted one. +- **Light Bifurcation Point**: If the light client was to run `VerifySkipping` with two providers +(i.e. a primary and a witness), the bifurcation point is the height that the headers +from each of these providers are different yet valid. This signals that one of the providers +may be trying to fool the light client. ## Context The bisection method of header verification used by the light client exposes itself to a potential attack if any block within the light clients trusted period has -a malicious group of validators with power that exceeds the light clients trust level +a malicious group of validators with power that exceeds the light clients trust level (default is 1/3). To improve light client (and overall network) security, the light client has a detector component that compares the verified header provided by the -primary against witness headers. This ADR outlines the decision that ensues when -the light client detector receives two conflicting headers +primary against witness headers. This ADR outlines the process of mitigating attacks +on the light client by using witness nodes to cross reference with. ## Alternative Approaches -One of the key arguments surrounding the decision is whether the processing required -to extract verifiable evidence should be on the light client side or the full node side. -As light client, indicated in it's name, is supposed to stay light, the natural -inclination is to avoid any load and pass it directly to the full node who also has -the advantage of having a full state. It remains possible in future discussions to have the -light client form the evidence types itself. The other minor downsides apart from the -load will be that around half the evidence produced by the light client will be invalid and -that, in the event of modified logic, it's easier and expected that the full node be up -to date than the light clients. - -## Decision - -When two headers have different hashes, the light client must first verify via -bisection that the signed header provided by the witness is also valid. - -It then collects all the headers that were fetched as part of bisection into two traces. -One containing the primary's headers and the other containing the witness's headers. -The light client sends the trace to the opposite provider (i.e. the primary's trace -to the witness and the witness's trace to the primary) as the light client is -incapable of deciding which one is malicious. - -Assuming one of the two providers is honest, that full node will then take the trace -and extract out the relevant evidence and propogate it until it ends up on chain. - -*NOTE: We do not send evidence to other connected peers* - -*NOTE: The light client halts then and does not verify with any other witness* - -## Detailed Design - -The traces will have the following data structure: +A previously discussed approach to handling evidence was to pass all the data that the +light client had witnessed when it had observed diverging headers for the full node to +process.This was known as a light trace and had the following structure: ```go type ConflictingHeadersTrace struct { @@ -57,158 +48,169 @@ type ConflictingHeadersTrace struct { } ``` -When a full node receives a `ConflictingHeadersTrace`, it should -a) validate it b) figure out if malicious behaviour is obvious (immediately -slashable) or run the amnesia protocol. +This approach has the advantage of not requiring as much processing on the light +client side in the event that an attack happens. Although, this is not a significant +difference as the light client would in any case have to validate all the headers +from both witness and primary. Using traces would consume a large amount of bandwidth +and adds a DDOS vector to the full node. -### Validating headers -Check headers are valid (`ValidateBasic`), are in order of ascending height, and do not exceed the `MaxTraceSize`. - -### Finding Block Bifurcation +## Decision -The node pulls the block ID's for the respective heights of the trace headers from its own block store. +The light client will be divided into two components: a `Verifier` (either sequential or +skipping) and a `Detector` (see [Informal's Detector](https://github.com/informalsystems/tendermint-rs/blob/master/docs/spec/lightclient/detection/detection.md)) +. The detector will take the trace of headers from the primary and check it against all +witnesses. For a witness with a diverging header, the detector will first verify the header +by bisecting through all the heights defined by the trace that the primary provided. If valid, +the light client will trawl through both traces and find the point of bifurcation where it +can proceed to extract any evidence (as is discussed in detail later). -First it checks to see that the first header hash matches its first `BlockID` else it can discard it. +Upon successfully detecting the evidence, the light client will send it to both primary and +witness before halting. It will not send evidence to other peers nor continue to verify the +primary's header against any other header. -If the last header hash matches the nodes last `BlockID` then it can also discard it on the assumption that a fork can not remerge and hence this is just a trace of valid headers. -The node then continues to loop in descending order checking that the headers hash doesn't match it's own blockID for that height. Once it reaches the height that the block ID matches the hash it then sends the common header, the trusted header and the diverged header (common header is needed for lunatic evidence) to determine if the divergence is a real offense to the tendermint protocol or if it is just fabricated. +## Detailed Design -### Figuring out if malicious behaviour +The verification process of the light client will start from a trusted header and use a bisectional +algorithm to verify up to a header at a given height. This becomes the verified header (does not +mean that it is trusted yet). All headers that were verified in between are cached and known as +intermediary headers and the entire array is sometimes referred to as a trace. -The node first examines the case of a lunatic attack: +The light client's detector then takes all the headers and runs the detect function. -* The validator set of the common header must have at least 1/3 validator power that signed in the divergedHeaders commit +```golang +func (c *Client) detectDivergence(primaryTrace []*types.LightBlock, now time.Time) error +``` -* One of the deterministically derived hashes (`ValidatorsHash`, `NextValidatorsHash`, `ConsensusHash`, -`AppHash`, or `LastResultsHash`) of the header must not match: +The function takes the last header it received, the target header and compares it against all the witnesses +it has through the following function: -* We then take every validator that voted for the invalid header and was a validator in the common headers validator set and create `LunaticValidatorEvidence` +```golang +func (c *Client) compareNewHeaderWithWitness(errc chan error, h *types.SignedHeader, + witness provider.Provider, witnessIndex int) +``` -If this fails then we examine the case of Equivocation (either duplicate vote or amnesia): +The err channel is used to send back all the outcomes so that they can be processed in parallel. +Invalid headers result in dropping the witness, lack of response or not having the headers is ignored +just as headers that have the same hash. Headers, however, +of a different hash then trigger the detection process between the primary and that particular witness. -*This only requires the trustedHeader and the divergedHeader* +This begins with verification of the witness's header via skipping verification which is run in tande +with locating the Light Bifurcation Point -* if `trustedHeader.Round == divergedHeader.Round`, and a validator signed for the block in both headers then DuplicateVoteEvidence can be immediately formed +![](../imgs/light-client-detector.png) -* if `trustedHeader.Round != divergedHeader.Round` then we form PotentialAmnesiaEvidence as some validators in this set have behaved maliciously and protocol in ADR 56 needs to be run. +This is done with: -*The node does not check that there is a 1/3 overlap between headers as this may not be point of the fork and validator sets may have since changed* +```golang +func (c *Client) examineConflictingHeaderAgainstTrace( + trace []*types.LightBlock, + divergentHeader *types.SignedHeader, + source provider.Provider, now time.Time) ([]*types.LightBlock, *types.LightBlock, error) +``` -If no evidence can be formed from a light trace, it is not a legitimate trace and thus the -connection with the peer should be stopped +which performs the following -### F1. Equivocation +1. Checking that the trusted header is the same. Currently, they should not theoretically be different +because witnesses cannot be added and removed after the client is initialized. But we do this any way +as a sanity check. If this fails we have to drop the witness. -Existing `DuplicateVoteEvidence` needs to be created and gossiped. +2. Querying and verifying the witness's headers using bisection at the same heights of all the +intermediary headers of the primary (In the above example this is A, B, C, D, F, H). If bisection fails or the witness stops responding then +we can call the witness faulty and drop it. +3. We eventually reach a verified header by the witness which is not the same as the intermediary header (In the above example this is E). +This is the point of bifurcation (This could also be the last header). -### F5. Lunatic validator +This function then returns the trace of blocks from the witness node between the common header and the +divergent header of the primary as it +is likely as seen in the example to the right below that multiple headers where required in order to +verify the divergent one. This trace will +be used later (as is also described later in this document). -```go -type LunaticValidatorEvidence struct { - Header types.Header - Vote types.Vote - InvalidHeaderField string -} -``` +![](../imgs/bifurcation-point.png) -To punish this attack, we need support for a new Evidence type - -`LunaticValidatorEvidence`. This type includes a vote and a header. The header -must contain fields that are invalid with respect to the previous block, and a -vote for that header by a validator that was in a validator set within the -unbonding period. While the attack is only possible if +1/3 of some validator -set colludes, the evidence should be verifiable independently for each -individual validator. This means the total evidence can be split into one piece -of evidence per attacking validator and gossipped to nodes to be verified one -piece at a time, reducing the DoS attack surface at the peer layer. - -Note it is not sufficient to simply compare this header with that committed for -the corresponding height, as an honest node may vote for a header that is not -ultimately committed. Certain fields may also be variable, for instance the -`LastCommitHash` and the `Time` may depend on which votes the proposer includes. -Thus, the header must be explicitly checked for invalid data. - -For the attack to succeed, VC must sign a header that changes the validator set -to consist of something they control. Without doing this, they can not -otherwise attack the light client, since the client verifies commits according -to validator sets. Thus, it should be sufficient to check only that -`ValidatorsHash` and `NextValidatorsHash` are correct with respect to the -header that was committed at the corresponding height. - -That said, if the attack is conducted by +2/3 of the validator set, they don't -need to make an invalid change to the validator set, since they already control -it. Instead they would make invalid changes to the `AppHash`, or possibly other -fields. In order to punish them, then, we would have to check all header -fields. - -Note some header fields require the block itself to verify, which the light -client, by definition, does not possess, so it may not be possible to check -these fields. For now, then, `LunaticValidatorEvidence` must be checked against -all header fields which are a function of the application at previous blocks. -This includes `ValidatorsHash`, `NextValidatorsHash`, `ConsensusHash`, -`AppHash`, and `LastResultsHash`. These should all match what's in the header -for the block that was actually committed at the corresponding height, and -should thus be easy to check. - -`InvalidHeaderField` contains the invalid field name. Note it's very likely -that multiple fields diverge, but it's faster to check just one. This field -MUST NOT be used to determine equality of `LunaticValidatorEvidence`. - -### F2. Amnesia +Now, that an attack has been detected, the light client must form evidence to prove it. There are +three types of attacks that either the primary or witness could have done to try fool the light client +into verifying the wrong header: Lunatic, Equivocation and Amnesia. As the consequence is the same and +the data required to prove it is also very similar, we bundle these attack styles together in a single +evidence: -```go -type PotentialAmnesiaEvidence struct { - VoteA types.Vote - VoteB types.Vote +```golang +type LightClientAttackEvidence struct { + ConflictingBlock *LightBlock + CommonHeight int64 } ``` -To punish this attack, votes under question needs to be sent. Fork -accountability process should then use this evidence to request additional -information from offended validators and construct a new type of evidence to -punish those who conducted an amnesia attack. - -See ADR-056 for the architecture of the handling amnesia attacks. - -NOTE: Conflicting headers trace used to also create PhantomValidatorEvidence -but this has since been removed. Refer to Appendix B. +The light client takes the stance of first suspecting the primary. Given the bifurcation point found +above, it takes the two divergent headers and compares whether the one from the primary is valid with +respect to the one from the witness. This is done by calling `isInvalidHeader()` which looks to see if +any one of the deterministically derived header fields differ from one another. This could be one of +`ValidatorsHash`, `NextValidatorsHash`, `ConsensusHash`, `AppHash`, and `LastResultsHash`. +In this case we know it's a Lunatic attack and to help the witness verify it we send the height +of the common header which is 1 in the example above or C in the example above that. If all these +hashes are the same then we can infer that it is either Equivocation or Amnesia. In this case we send +the height of the diverged headers because we know that the validator sets are the same, hence the +malicious nodes are still bonded at that height. In the example above, this is height 10 and the +example above that it is the height at E. + +The light client now has the evidence and broadcasts it to the witness. + +However, it could have been that the header the light client used from the witness against the primary +was forged, so before halting the light client swaps the process and thus suspects the witness and +uses the primary to create evidence. It calls `examineConflictingHeaderAgainstTrace` this time using +the witness trace found earlier. +If the primary was malicious it is likely that it will not respond but if it is innocent then the +light client will produce the same evidence but this time the conflicting +block will come from the witness node instead of the primary. The evidence is then formed and sent to +the primary node. + +This then ends the process and the verify function that was called at the start returns the error to +the user. + +For a detailed overview of how each of these three attacks can be conducted please refer to the +[fork accountability spec]((https://github.com/tendermint/spec/blob/master/spec/consensus/light-client/accountability.md)). + +## Full Node Verification + +When a full node receives evidence from the light client it will need to verify +it for itself before gossiping it to peers and trying to commit it on chain. This process is outlined + in [ADR-059](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-059-evidence-composition-and-lifecycle.md). ## Status -Proposed. +Implemented. ## Consequences ### Positive -* Light client has increased secuirty against Lunatic attacks. -* Tendermint will be able to detect & punish new types of misbehavior -* light clients connected to multiple full nodes can help full nodes notice a - fork faster +* Light client has increased security against Lunatic, Equivocation and Amnesia attacks. +* Do not need intermediate data structures to encapsulate the malicious behavior +* Generalized evidence makes the code simpler ### Negative -* Accepting `ConflictingHeadersEvidence` from light clients opens up a large DDOS -attack vector(same is fair for any RPC endpoint open to public; remember that -RPC is not open by default). +* Breaking change on the light client from versions 0.33.8 and below. Previous +versions will still send `ConflictingHeadersEvidence` but it won't be recognized +by the full node. Light clients will however still refuse the header and shut down. +* Amnesia attacks although detected, will not be able to be punished as it is not +clear from the current information which nodes behaved maliciously. +* Evidence module must handle both individual and grouped evidence. ### Neutral ## References * [Fork accountability spec](https://github.com/tendermint/spec/blob/master/spec/consensus/light-client/accountability.md) -* [ADR 056: Proving amnesia attakcs](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-056-proving-amnesia-attacks.md) +* [ADR 056: Proving amnesia attacks](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-056-proving-amnesia-attacks.md) +* [ADR-059: Evidence Composition and Lifecycle](https://github.com/tendermint/tendermint/blob/master/docs/architecture/adr-059-evidence-composition-and-lifecycle.md) +* [Informal's Light Client Detector](https://github.com/informalsystems/tendermint-rs/blob/master/docs/spec/lightclient/detection/detection.md) -## Appendix A - -If there is an actual fork (full fork), a full node may follow either one or -another branch. So both H1 or H2 can be considered committed depending on which -branch the full node is following. It's supposed to halt if it notices an -actual fork, but there's a small chance it doesn't. -## Appendix B +## Appendix A PhantomValidatorEvidence was used to capture when a validator that was still staked (i.e. within the bonded period) but was not in the current validator set had voted for a block. diff --git a/docs/imgs/bifurcation-point.png b/docs/imgs/bifurcation-point.png new file mode 100644 index 0000000000000000000000000000000000000000..dce8938d888cee6c0fe7b9121ada1f1fb5f8d179 GIT binary patch literal 41104 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 literal 0 HcmV?d00001 diff --git a/docs/imgs/light-client-detector.png b/docs/imgs/light-client-detector.png new file mode 100644 index 0000000000000000000000000000000000000000..b098aa6e22314d87a8a8760ec44dd55a93a091ad GIT binary patch literal 37398 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 VJXzkg3J3n9Agd}