or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
 | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | ![]() |
Emoji list | |
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Do you want to remove this version name and description?
Syncing
xxxxxxxxxx
Eth 2.0 DoS Workshop
29/10/2018 - Ethereum 2.0 workshop in Prague.
Attendees:
Objectives
DoS Overview
Denial of Service attacks prevent a service from performing it's duty. Typically they involve the consumation of all available resources so that a service can no longer function.
In the context of Ethereum 2.0, some things to consider may involve:
Attack Vectors
01: Storing Early Blocks
An attacker could create many blocks that from "the future" which a client would need to store, potentially filling up RAM/disk.
Mitigations
04: Czech Roulette (more formally known as the Non-Deterministic Shuffling Problem (NDSP))
taking the randomness seed from the head block of the chain, means that any short range fork that also triggers that state transition might have a different randomness seed. This would cause multiple valid shufflings for the next cycle which would make it not possible to reject blocks from validators that don’t fit your world view of the shuffling. This is bad because it opens up a serious dos vector.
The further back you put the seed into the chain (say you get the seed from N cycles ago, rather than from the current cycle), then the higher likelihood that the seed is coming from a block you see as finalized and thus at least a deterministic seed.
This doesn’t actually solve the problem though because of the variability of whether a validator set change happened at the state transition. Say block A comes in and triggers a state transition but does not include enough attestations/crosslinks to trigger a validator set change. Block B (a shortrange fork) comes in, also triggers the state transition, but includes enough attestations/crosslinks to trigger a validator set change. Even if A and B agree on what seed they should use if there is a reshuffling, A would cause the reshuffling while B would so you’d have mismatched expected proposers
that’s a quick dump of the range of the problem.
(Taken from Danny's answer in Gitter. Will need to clean up and make clearer later)
02: Invalid
AttestationRecord
Signatures in BlocksAn attacker could create blocks which contain a majority valid
AttestationRecord
signatures, however have a single invalid signature which makes the entire block invalid.This would cause the client to waste CPU cycles in validation BLS signatures.
Mitigations
AttestationRecord
(the 0'th) is validated before all otherAttestationRecords
. This reduces the space of attackers to only the designated block producer.AttestationRecords
are verified, with the exception of the 0'th record. This would mitigate for the scenario where an attacker always knows that the last record in the array will be the last to be verified. Processing records concurrently would also assist making it difficult to predict the last record to be processed.03: Invalid "free"
AttestationRecords
An attacker could produce "free"
AttestationRecords
(ones that are not included in blocks) that have an invalid signature and waste client CPU cycles.Mitigations
See 02.
More to come..
Notes
Specification Vectors
(can someone do the notes here?)
Implementation Vectors
Network Vectors
Questions
2. In particular, how does it define a "bad" peer?
3. How does it deal with "bad" peers?