Skip to content

Commit b7cacc7

Browse files
committed
add skad notes
1 parent abc12ce commit b7cacc7

File tree

2 files changed

+52
-1
lines changed

2 files changed

+52
-1
lines changed

dht/skademlia.md

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,53 @@
11
# S/Kademlia: A practicable approach towards secure key-based routing
2-
> *[paper](https://www.researchgate.net/publication/4319659_SKademlia_A_practicable_approach_towards_secure_key-based_routing)*
2+
> *[paper](https://www.researchgate.net/publication/4319659_SKademlia_A_practicable_approach_towards_secure_key-based_routing)*
3+
4+
Common service is the *key-based routing layer* (KBR). This layer provides efficient routing to identifiers called *keys* from a large *identifier space*. Every participating node in the overlay chooses a unique *nodeId* from the same id space and maintains a routing table with `nodeId`s and IP addresses of neighbors in the overlay topology.
5+
6+
Depending on the overlay protocol, the topology resembles a ring, hypercube, or de Bruijn graph. Every node is responsible for a particular range of the identifier space, usually for all keys close to its *nodeId* in the id space.
7+
8+
> KBR is used to efficiently route a message to an arbitrary key by successively forwarding the message to overlay neighbors which have a *nodeId* closer to the destination key.
9+
10+
## motivation
11+
12+
prevents sybil attacks on the address space by creating a minimum work threshold for node generation (storage NodeId generation requires *trailing* bits of 0s `=>` slows down process of adding new nodes)
13+
14+
## objects and behavior
15+
16+
### Secure `nodeId` assignment (section 4.1)
17+
18+
#### generate `nodeId`
19+
20+
hash over a public key
21+
22+
#### message signatures
23+
24+
To sign messages exchanged by nodes, differentiate between two signature types:
25+
1. `weak_signature`: does not sign the whole message (limited to IP address, port, and a timestamp) `=>` use timestamp to determine how long the signature is valued (to prevent replay attacks); used for `FIND_NODE` and `PING` messages where the integrity of the whole message is dispensable
26+
2. `strong_signature`: signs the full content of a message (to ensure integrity and resilience againt Man-in-Middle attacks); replay attacks prevented with nonces inside RPC messages.
27+
28+
Use `crypto_puzzle_sig` to impede Eclipse and Sybil attacks
29+
* `static_puzzle` impedes how the *nodeId* can be chosen freely
30+
* `dynamic_puzzle` ensures that it is complex to generate a huge amount of *nodeId*s
31+
32+
### reliable sibling broadcast
33+
34+
Common security problem is the reliability of sibling information which arises when replicated information needs to be stored in the DHT which uses a majority decision to compensate for adversarial nodes.
35+
> see [10](http://www.cs.kent.edu/~javed/class-IAD06S/papers-2004/gai.pdf) for definition of a *sibling* list to manage certain lists of `(key, value)` pairs
36+
37+
The **routing table** consists of a list of `N` k-buckets holding nodes with a distance `d` with `2^{i - 1} \leq d \less 2^i, 0 \leq i \leq n` and a sorted list of siblings of size `n_sigma * s`
38+
39+
#### routing table maintenance
40+
41+
Categorize signalling messages to the following classes:
42+
* incoming signed RPC requests
43+
* responses
44+
* unsigned messages
45+
46+
Each message contains the **sender address**. The sender address is *valid* if the message is signed and *actively valid*...
47+
48+
Actively valid sender addresses are immediately added to their corresponding bucket, when it is not full. Valid sender addresses are only added to a bucket if the *nodeId* prefix differs in an appropriate amount of bits `\psi` (`\psi > 32`).
49+
> sender addresses that come from unsigned messages will be ignored
50+
51+
### lookup over disjoint paths
52+
53+
use `d` disjoint paths to increase the lookup success ratio in a network with adversarial nodes; by using the sibling list, the lookup doesn't converge at a single node but terminates on *d* close-by neighbors, which all know the complete *s* siblings for the destination keys `=>` lookup is still successful even if `k-1` of the neighbors are adversarial
File renamed without changes.

0 commit comments

Comments
 (0)