<p>What you are saying is correct.</p>

<p>I'll quickly elaborate on why these hardcoded dns seeds are required. The attack you mention is called "peer list poisoning", a strategy that can be used to segregate someone from the network. There are two main types of peer list poisoning:</p>

<ol>
<li>Dishonest nodes: the attacker poisons your peer list with real nodes, but malicious ones. All of your transactions would always be forced through these nodes.</li>
<li>Void nodes: the attacker poisons your peer list with non-working nodes, a strategy often used to dismantle <a href="https://www.crowdstrike.com/blog/peer-peer-poisoning-attack-against-kelihosc-botnet/" rel="nofollow noreferrer">malicous P2P botnets</a>.</li>
</ol>

<p>You may think the DNS seed require an element of trust but it doesn't. There are ways to verify that a DNS seed is honest: if you run your own 24/7 Bitcoin Node with the right setup then your address should be available in a list returned by a DNS seed. They crawl the whole network and <a href="https://github.com/sipa/bitcoin-seeder" rel="nofollow noreferrer">regularly revisits known nodes to check their availability.</a> DNS seeds do not return a full list, so it's not very practical.</p>

<p>There are alternatives to using DNS seeds, such as crawling the network yourself, or even bruteforcing IP addresses and attempting a connection.</p>

CC BY-SA 3.0
2017-07-06T16:47:31.047Z
Your node would only be given out if you are accepting incoming connections. The DNS seeders also don't give out their full list of nodes, just some of them (10 or 20 I think).
Ava Chow
CC BY-SA 3.0
2017-07-10T01:45:22.753Z
@Penquin Thanks for the excellent answer. But who runs the checking, new comers' node or DNS seeds? If new comers run the checking, what kind of algorithm can be used to check the honesty? If the DNS seeds run the checking, how can new comers believe in the DNS seeds is actually running the checking?
Bo Ye
CC BY-SA 3.0
2017-07-10T01:52:35.753Z
Regarding the IP brute-forcing of the who internet, it sounds a plausible method to connect to a honest node, but is it efficient enough? On average, how long does it take to connect to a node which actually can respond the bitcoin protocols?
Bo Ye
CC BY-SA 3.0
2017-07-10T12:32:54.143Z
Nobody runs the checking, but you can if you want to but I haven't seen any source code available for it yet. Bruteforcing is a really terrible inefficient method to be honest. [See the introduction of this paper, given a large size it takes a few thousand attempts](http://www.cs.du.edu/~chrisg/publications/chrisg-dasp2p08.pdf)
Penquin
CC BY-SA 3.0
2017-07-16T10:29:11.690Z
@Penqin thanks for clarifying, that's very helpful!
Bo Ye
CC BY-SA 3.0
2017-07-06T12:02:03.977Z
2017-07-06T18:24:15.713Z
2017-07-06T18:24:15.713Z
Penquin
<p>If I understand correctly, when new bitcoin node wants to join the network, it must be introduced by guiding nodes -- DNS seeds. DNS seeds can thereafter help new node discover more existing nodes.</p>

<p>So during the bootstrap phase, DNS seeds are the entry points for the new nodes. By looking at the source code of BitcoinJ:</p>

<pre><code>   dnsSeeds = new String[] {
            "seed.bitcoin.sipa.be",         // Pieter Wuille
            "dnsseed.bluematt.me",          // Matt Corallo
            "dnsseed.bitcoin.dashjr.org",   // Luke Dashjr
            "seed.bitcoinstats.com",        // Chris Decker
            "seed.bitnodes.io",             // Addy Yeow
            "bitseed.xf2.org",              // Jeff Garzik
            "seed.bitcoin.jonasschnelli.ch" // Jonas Schnelli
    };
</code></pre>

<p>They are pretty much hard coded in the software. <strong>What if all of those DNS seeds are dishonest nodes?</strong> In this case, new nodes would be surrounded by dishonest nodes and it doesn't have chances to connect even one honest node and retrieve the genuine blockchain. Therefore, new nodes would be fooled in this case.</p>

<p>Does that mean bitcoin network still needs some extent of trust? And would it be a concern in reality? </p>

<bitcoinj><trust><seed><dns>
Do we have to trust at least one DNS seed?
Bo Ye
# Do we have to trust at least one DNS seed?

(Asked by: username_0 on 2017-07-06)

If I understand correctly, when new bitcoin node wants to join the network, it must be introduced by guiding nodes -- DNS seeds. DNS seeds can thereafter help new node discover more existing nodes.
So during the bootstrap phase, DNS seeds are the entry points for the new nodes. By looking at the source code of BitcoinJ:
   dnsSeeds = new String[] {
            "seed.bitcoin.sipa.be",         // Pieter Wuille
            "dnsseed.bluematt.me",          // Matt Corallo
            "dnsseed.bitcoin.dashjr.org",   // Luke Dashjr
            "seed.bitcoinstats.com",        // Chris Decker
            "seed.bitnodes.io",             // Addy Yeow
            "bitseed.xf2.org",              // Jeff Garzik
            "seed.bitcoin.jonasschnelli.ch" // Jonas Schnelli
    };

They are pretty much hard coded in the software. What if all of those DNS seeds are dishonest nodes? In this case, new nodes would be surrounded by dishonest nodes and it doesn't have chances to connect even one honest node and retrieve the genuine blockchain. Therefore, new nodes would be fooled in this case.
Does that mean bitcoin network still needs some extent of trust? And would it be a concern in reality?

**Tags:** bitcoinj, trust, seed, dns


---

## 1 answers

### Answer by username_1 on 2017-07-06. Score: 2

What you are saying is correct.

I'll quickly elaborate on why these hardcoded dns seeds are required. The attack you mention is called "peer list poisoning", a strategy that can be used to segregate someone from the network. There are two main types of peer list poisoning:

1. Dishonest nodes: the attacker poisons your peer list with real nodes, but malicious ones. All of your transactions would always be forced through these nodes.
2. Void nodes: the attacker poisons your peer list with non-working nodes, a strategy often used to dismantle [malicous P2P botnets](https://www.crowdstrike.com/blog/peer-peer-poisoning-attack-against-kelihosc-botnet/).

You may think the DNS seed require an element of trust but it doesn't. There are ways to verify that a DNS seed is honest: if you run your own 24/7 Bitcoin Node with the right setup then your address should be available in a list returned by a DNS seed. They crawl the whole network and [regularly revisits known nodes to check their availability.](https://github.com/sipa/bitcoin-seeder) DNS seeds do not return a full list, so it's not very practical.

There are alternatives to using DNS seeds, such as crawling the network yourself, or even bruteforcing IP addresses and attempting a connection.

> **Comments:**
> **username_2**: Your node would only be given out if you are accepting incoming connections. The DNS seeders also don't give out their full list of nodes, just some of them (10 or 20 I think).  
> **username_0**: @username_1 Thanks for the excellent answer. But who runs the checking, new comers' node or DNS seeds? If new comers run the checking, what kind of algorithm can be used to check the honesty? If the DNS seeds run the checking, how can new comers believe in the DNS seeds is actually running the checking?  
> **username_0**: Regarding the IP brute-forcing of the who internet, it sounds a plausible method to connect to a honest node, but is it efficient enough? On average, how long does it take to connect to a node which actually can respond the bitcoin protocols?  
> **username_1**: Nobody runs the checking, but you can if you want to but I haven't seen any source code available for it yet. Bruteforcing is a really terrible inefficient method to be honest. [See the introduction of this paper, given a large size it takes a few thousand attempts](http://www.cs.du.edu/~chrisg/publications/chrisg-dasp2p08.pdf)  
> **username_0**: @Penqin thanks for clarifying, that's very helpful!  

---

