Skip to content

docs: revise ADR 56, documenting short term decision around amnesia evidence #5440

Merged
cmwaters merged 3 commits intomasterfrom
callum/adr56
Oct 2, 2020
Merged

docs: revise ADR 56, documenting short term decision around amnesia evidence #5440
cmwaters merged 3 commits intomasterfrom
callum/adr56

Conversation

@cmwaters
Copy link
Contributor

@cmwaters cmwaters commented Oct 1, 2020

Description

This is to reflect the notion that a more well-thought protocol for amnesia accountability will need to be created in the long term future but for now 0.34 will only include the light detector algorithm and thus will be able to detect but not punish amnesia attacks.

I have also included in the appendix a more detailed description of how an amnesia attack would work.

@cmwaters cmwaters added the C:docs Component: Documentation label Oct 1, 2020
@cmwaters cmwaters marked this pull request as ready for review October 1, 2020 15:01
Copy link
Contributor

@melekes melekes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

well written ADR 🥇


Also critical to this type of attack is that the light client that is connected to our nodes must request a light block at that specific height with which we forged this signed header but this shouldn’t be hard to do. To bring this back to a real context, say our faulty cabal, f, bought some groceries using atoms and then wanted to prove that they did, the grocery owner whips out their phone, runs the light client and f tells them the height they committed the transaction.

An important note here is that because the validator sets are the same between the canonical and the forged block, this attack also works on light clients that verify sequentially. In fact, they are especially vulnerable because they currently don’t run the detector function afterwards.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this mean we should run detector for sequential verification too?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah I think so, but it's different. I'm not sure if you can perform the attack on intermediate blocks because the validator set is the same but now the last block ID is different so I'm not sure how you can get the same innocent validators to vote for the next forged block in order to sustain the fork. The only way around it is if you can change the validator set completely in this forged block so that you have 2/3+ control of the next validator set.

If this is not possible then you don't need to worry about the traces you can just compare the last header and if it's incorrect form evidence from that.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

don't you need 2/3+ malicious nodes to pull this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This, as in an attack on a sequentially validating light client. No theoretically it's possible with 1/3+ although extremely difficult. With 2/3+ it becomes easy

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@cmwaters cmwaters merged commit bf9e36d into master Oct 2, 2020
@cmwaters cmwaters deleted the callum/adr56 branch October 2, 2020 17:21
lovincyrus added a commit that referenced this pull request Oct 5, 2020
* docs: specify TM version in go tutorials (#5427)

Closes #5425

* privval: allow passing options to NewSignerDialerEndpoint (#5434)

Required for #5291 to set timeouts for remote signers.

* config: set statesync.rpc_servers when generating config file (#5433)

Required for #5291, to generate configuration files with state sync RPC servers.

* consensus: check block parts don't exceed maximum block bytes (#5431)

* ci: docker remvoe circleci and add github action (#5420)

* privval: fix ping message encoding (#5441)

Fixes #5371.

* docs: revise ADR 56, documenting short term decision around amnesia evidence  (#5440)

* light: expand on errors and docs (#5443)

* test: add end-to-end testing framework (#5435)

Partial fix for #5291. For details, see [README.md](https://github.com/tendermint/tendermint/blob/erik/e2e-tests/test/e2e/README.md) and [RFC-001](https://github.com/tendermint/tendermint/blob/master/docs/rfc/rfc-001-end-to-end-testing.md).

This only includes a single test case under `test/e2e/tests/`, as a proof of concept - additional test cases will be submitted separately. A randomized testnet generator will also be submitted separately, there a currently just a handful of static testnets under `test/e2e/networks/`. This will eventually replace the current P2P tests and run in CI.

* changelog: add missing date to v0.33.5 release, fix indentation (#5454)

I forgot to add the date when we cut 0.33.5. This fixes that. It also fixes a header indentation issue for 0.33.8.

* test: add basic end-to-end test cases (#5450)

Partial fix for #5291.

This adds a basic set of test cases for core network invariants. Although small, it is sufficient to replace and extend the current set of P2P tests. Further test cases can be added later.

* test: add GitHub action for end-to-end tests (#5452)

Partial fix for #5291.

* fix RPC blockresults reutrn (#5459)

## Description

In blocks_results we use the proto definition of abciResponses: https://github.com/tendermint/tendermint/blob/2672b91ab099b8b02f3afabae4a0a745acd93c3f/rpc/core/blocks.go#L152-L155, this leads to the use of the proto definition of the pubkey which is an interface in go (oneof). The interface must be registered with the JSON encoder to have it work correctly.

A clearer divide between proto types and native types is needed.

Closes: #XXX

* circleci: remove Gitian reproducible_builds job (#5462)

* docs: fix links to adr 56 (#5464)

## Description

fix broken link from a previous change

* test: remove P2P tests (#5453)

Co-authored-by: Anton Kaliaev <anton.kalyaev@gmail.com>
Co-authored-by: Erik Grinaker <erik@interchain.berlin>
Co-authored-by: Callum Waters <cmwaters19@gmail.com>
Co-authored-by: Marko <marbar3778@yahoo.com>
Co-authored-by: Tess Rinearson <tess.rinearson@gmail.com>
lovincyrus added a commit that referenced this pull request Oct 5, 2020
* docs: specify TM version in go tutorials (#5427)

Closes #5425

* privval: allow passing options to NewSignerDialerEndpoint (#5434)

Required for #5291 to set timeouts for remote signers.

* config: set statesync.rpc_servers when generating config file (#5433)

Required for #5291, to generate configuration files with state sync RPC servers.

* consensus: check block parts don't exceed maximum block bytes (#5431)

* ci: docker remvoe circleci and add github action (#5420)

* privval: fix ping message encoding (#5441)

Fixes #5371.

* docs: revise ADR 56, documenting short term decision around amnesia evidence  (#5440)

* light: expand on errors and docs (#5443)

* makefile: config build-docs for branch and path prefix

* update versions with new 0.33 branch

Co-authored-by: Anton Kaliaev <anton.kalyaev@gmail.com>
Co-authored-by: Erik Grinaker <erik@interchain.berlin>
Co-authored-by: Callum Waters <cmwaters19@gmail.com>
Co-authored-by: Marko <marbar3778@yahoo.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

C:docs Component: Documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants