sipa changed the topic of #bitcoin-wizards to: This channel is for discussing theoretical ideas with regard to cryptocurrencies, not about short-term Bitcoin development | http://bitcoin.ninja/ | This channel is logged. | For logs and more information, visit http://bitcoin.ninja
chipc has quit []
nick_freeman has quit [Remote host closed the connection]
justanotheruser has joined #bitcoin-wizards
brrr has joined #bitcoin-wizards
mauz555 has joined #bitcoin-wizards
DeanWeen has joined #bitcoin-wizards
mauz555 has quit [Ping timeout: 246 seconds]
rusty has joined #bitcoin-wizards
Chris_Stewart_5 has quit [Ping timeout: 240 seconds]
jonatack has quit [Ping timeout: 256 seconds]
jonatack has joined #bitcoin-wizards
DeanWeen has quit [Remote host closed the connection]
Belkaar has quit [Ping timeout: 265 seconds]
Belkaar_ has joined #bitcoin-wizards
zmnscpxj has joined #bitcoin-wizards
zmnscpxj has quit [Remote host closed the connection]
zmnscpxj has joined #bitcoin-wizards
davec has quit [Read error: No route to host]
CryptoDavid has quit [Quit: Connection closed for inactivity]
shush has quit [Remote host closed the connection]
shush has joined #bitcoin-wizards
rusty has quit [Quit: Leaving.]
TheoStorm has quit [Remote host closed the connection]
shush has quit [Ping timeout: 260 seconds]
DeanWeen has joined #bitcoin-wizards
hkjn0 has joined #bitcoin-wizards
yanmaani has quit [Ping timeout: 240 seconds]
yanmaani has joined #bitcoin-wizards
shush has joined #bitcoin-wizards
brrr has quit []
lossyrob has joined #bitcoin-wizards
captjakk has quit [Remote host closed the connection]
captjakk has joined #bitcoin-wizards
captjakk has quit [Remote host closed the connection]
captjakk has joined #bitcoin-wizards
jimpo_ has joined #bitcoin-wizards
x-warrior_ has joined #bitcoin-wizards
drolmer_ has joined #bitcoin-wizards
exhoplex1 has joined #bitcoin-wizards
sanket1729_ has joined #bitcoin-wizards
jonasschnelli_ has joined #bitcoin-wizards
dEBRUYNE_ has joined #bitcoin-wizards
warren_ has joined #bitcoin-wizards
drolmer has quit [*.net *.split]
sanket1729 has quit [*.net *.split]
jonasschnelli has quit [*.net *.split]
exhoplex_ has quit [*.net *.split]
x-warrior has quit [*.net *.split]
warren has quit [*.net *.split]
jimpo has quit [*.net *.split]
dEBRUYNE has quit [*.net *.split]
chjj has quit [*.net *.split]
gambpang has quit [Ping timeout: 264 seconds]
gambpang has joined #bitcoin-wizards
chjj has joined #bitcoin-wizards
rusty has joined #bitcoin-wizards
captjakk has quit [Remote host closed the connection]
captjakk has joined #bitcoin-wizards
captjakk has quit [Ping timeout: 265 seconds]
Kiminuo has quit [Ping timeout: 256 seconds]
cbeams has joined #bitcoin-wizards
lossyrob has quit []
seefischer has joined #bitcoin-wizards
zmnscpxj has quit [Ping timeout: 240 seconds]
seefischer has quit [Ping timeout: 256 seconds]
achow101 has quit [Ping timeout: 260 seconds]
achow101 has joined #bitcoin-wizards
jungly has joined #bitcoin-wizards
dEBRUYNE_ is now known as dEBRUYNE
dEBRUYNE has quit [Changing host]
dEBRUYNE has joined #bitcoin-wizards
mauz555 has joined #bitcoin-wizards
jungly has quit [Remote host closed the connection]
Kiminuo has joined #bitcoin-wizards
mauz555 has quit [Ping timeout: 265 seconds]
Guyver2 has joined #bitcoin-wizards
cbeams has quit [Remote host closed the connection]
cbeams has joined #bitcoin-wizards
kierank1 has joined #bitcoin-wizards
jonasschnelli_ has joined #bitcoin-wizards
jonasschnelli_ has quit [Changing host]
jonatack has quit [Ping timeout: 250 seconds]
jonasschnelli_ is now known as jonasschnelli
jonatack has joined #bitcoin-wizards
jungly has joined #bitcoin-wizards
marcoagner has joined #bitcoin-wizards
Emcy has quit [Remote host closed the connection]
Emcy has joined #bitcoin-wizards
tromp has quit [Remote host closed the connection]
nick_freeman has joined #bitcoin-wizards
charuto has quit [Quit: killed]
Jeremy_Rand_M_Ta has quit [Quit: killed]
TheFuzzStone[m] has quit [Quit: killed]
zkao has quit [Quit: killed]
lederstrumpf has quit [Quit: killed]
nick_freeman has quit [Read error: Connection reset by peer]
TheFuzzStone[m] has joined #bitcoin-wizards
nick_freeman has joined #bitcoin-wizards
nick_freeman has quit [Remote host closed the connection]
nick_freeman has joined #bitcoin-wizards
tromp has joined #bitcoin-wizards
jungly has quit [Remote host closed the connection]
jungly has joined #bitcoin-wizards
kierank1 has quit []
nick_freeman has quit [Remote host closed the connection]
nick_freeman has joined #bitcoin-wizards
nick_freeman has quit [Remote host closed the connection]
nick_freeman has joined #bitcoin-wizards
espadrine has joined #bitcoin-wizards
charuto has joined #bitcoin-wizards
Jeremy_Rand_M_Ta has joined #bitcoin-wizards
zkao has joined #bitcoin-wizards
lederstrumpf has joined #bitcoin-wizards
mauz555 has joined #bitcoin-wizards
davec has joined #bitcoin-wizards
jonatack has quit [Read error: Connection reset by peer]
jonatack_ has joined #bitcoin-wizards
TheoStorm has joined #bitcoin-wizards
espadrine has quit [Ping timeout: 256 seconds]
jb55 has quit [Ping timeout: 240 seconds]
jb55 has joined #bitcoin-wizards
Philantrop1 has joined #bitcoin-wizards
Chris_Stewart_5 has joined #bitcoin-wizards
Philantrop1 has quit []
jonatack_ has quit [Quit: jonatack_]
jonatack has joined #bitcoin-wizards
cbeams has quit [Remote host closed the connection]
cbeams has joined #bitcoin-wizards
cbeams has quit [Ping timeout: 250 seconds]
madflavor is now known as madflavor[prime]
Nipo1 has joined #bitcoin-wizards
michaelfolkson has joined #bitcoin-wizards
michaelfolkson has quit [Client Quit]
TheoStorm has quit [Quit: Leaving]
TheoStorm has joined #bitcoin-wizards
spinza has quit [Ping timeout: 256 seconds]
spinza has joined #bitcoin-wizards
jungly has quit [Remote host closed the connection]
jungly has joined #bitcoin-wizards
cannedprimates_ has quit [Ping timeout: 240 seconds]
CodeShark__ has quit [Read error: Connection reset by peer]
hugohn has quit [Read error: Connection reset by peer]
hugohn has joined #bitcoin-wizards
CodeShark__ has joined #bitcoin-wizards
cannedprimates_ has joined #bitcoin-wizards
captjakk has joined #bitcoin-wizards
Kiminuo has quit [Ping timeout: 260 seconds]
captjakk has quit [Ping timeout: 260 seconds]
ddustin has joined #bitcoin-wizards
captjakk has joined #bitcoin-wizards
alferz has joined #bitcoin-wizards
son0p has joined #bitcoin-wizards
cbeams has joined #bitcoin-wizards
Nipo1 has quit []
alferz has quit [Ping timeout: 240 seconds]
queip has joined #bitcoin-wizards
cbeams has quit [Remote host closed the connection]
cbeams has joined #bitcoin-wizards
cbeams_ has joined #bitcoin-wizards
ddustin has quit [Remote host closed the connection]
justanotheruser has quit [Ping timeout: 246 seconds]
cbeams has quit [Ping timeout: 256 seconds]
cbeams_ has quit [Ping timeout: 264 seconds]
porvak has joined #bitcoin-wizards
queip has quit [Quit: bye, freenode]
TheoStorm has quit [Quit: Leaving]
justanotheruser has joined #bitcoin-wizards
queip has joined #bitcoin-wizards
captjakk has quit [Read error: Connection reset by peer]
captjakk has joined #bitcoin-wizards
captjakk has quit [Remote host closed the connection]
TheoStorm has joined #bitcoin-wizards
captjakk has joined #bitcoin-wizards
warren_ is now known as warren
captjakk has quit [Ping timeout: 265 seconds]
cbeams has joined #bitcoin-wizards
shush has quit [Remote host closed the connection]
shush has joined #bitcoin-wizards
captjakk has joined #bitcoin-wizards
AaronvanW has quit []
TheoStorm has quit [Quit: Leaving]
cbeams has quit [Ping timeout: 265 seconds]
jb55 has quit [Remote host closed the connection]
jb55 has joined #bitcoin-wizards
<yanmaani>
Has the idea of using DHT to bootstrap Bitcoin without DNS seeds been evaluated?
son0p has quit [Quit: leaving]
<gleb>
yanmaani: DHT is a lookup service. Which keys are you suggesting to look up?
<yanmaani>
A static key, such as sha256("bitcoin-bootstrap")
<yanmaani>
So, you send outgoing UDP packets to whatever is the default BitTorrent DHT port with the initial handshake to random IPs.
<yanmaani>
Then, you complete the handshake with whoever responds. And from there, you look up sha256("bitcoin-bootstrap"), and get Bitcoin seed nodes, who in turn feed you IPs of Bitcoin nodes
<yanmaani>
This means you don't have any seed nodes, just IPv4. You just need to send a few thousand packets to have a pretty good probability of success.
<gleb>
So, you are suggesting to probe thousands of random IPv4 ports?
<yanmaani>
yep
<gleb>
First of all, it's questionable how ethical is this. Second of all, it's trivially Sybil-able. There are 10 thousands reachable nodes right now. An attacker would have to deploy like extra 20k to be successful. Maybe less, if an attacker can manipulate BGP or whatnot.
<yanmaani>
p = (1-(n/2^32))^N; for n = 10M and p = 0.5 that gives 0.5 = .9977^N => ln(0.5) = Nln(.9977) => ln(0.5)/ln(.9977) = N = 297
<yanmaani>
gleb: No, BitTorrent has ~10 million nodes.
<yanmaani>
So they'd have to take over the BitTorrent network's DHT
<gleb>
I don't really know how BitTorrent DHT works. Who runs the nodes?
<sipa>
who would have the authority to update the DHT entry?
<yanmaani>
sipa: You announce to the DHT, the only data you _can_ insert (by protocol) is your own IP
<yanmaani>
gleb: Anyone who runs a mainstream BitTorrent client, basically
<sipa>
ah
<yanmaani>
so, Random People On The Internetâ„¢
<yanmaani>
always a sure bet for your business critical service needs
<yanmaani>
If you send 297 outgoing packets you have a 50% chance of success. If you would optimize it to only send to active ranges, you would probably do much better
<gleb>
"and get Bitcoin seed nodes, who in turn feed you IPs [...]". What are these seed nodes in your idea? Are them just *any* random reachable Bitcoin nodes?
<yanmaani>
eyeballing it we are talking maybe 50-100 packets?
<yanmaani>
gleb: Well, they have to speak both DHT and Bitcoin. So it's a node that announces to the DHT and says "hi, I have a list of Bitcoin nodes for you"
<yanmaani>
But yes, it could be possible to make Bitcoin Core speak DHT - the protocol is extremely simple
<yanmaani>
And Bitcoin Core wouldn't have to brute-force it as a first attempt, they could first try to get introduced by a DNS peer and only have brute-force as a fallback.
<gleb>
We want to have a more or less random graph, so every reachable nodes gets roughly the same number of connections, if simplified.
<yanmaani>
Yeah that would be doable if all nodes were to announce to the DHT
<gleb>
Furthermore, it's important to not make it influencable. What if a bad node is *more active* with announcing to DHT. Like, spams it every second or something.
<yanmaani>
They're still constrained by number of IPs.
<gleb>
Sure, same as with DNS seeds. But at seeds, we don't care about how often someone announces to us.
<yanmaani>
If there's 10k legit nodes and the attacker rents 100k botnet nodes, then you'll have 110k nodes, of which the attacker controls 91%. So you'll need to speak to ~7 nodes to have a 50% prob of finding at least one honest.
<gleb>
I'm just saying maybe their DHT have some other prioritization logic.
<yanmaani>
Well, there's very little logic involved. Basically it works like this:
<yanmaani>
each node has an ID
<yanmaani>
the first 10 bits or whatever of the ID is derived based on hash of first 24 bits of IP
<yanmaani>
the rest they can choose
<yanmaani>
(somewhat simplified)
<yanmaani>
Based on the ID, they are responsible for a certain portion of the keyspace
<gleb>
You are not hearing me, I'm talking about the other problem. What if an attacker can be strategic about sybil'ing, which would give him an advantage? For example, choose a better IDs or announce more often.
<yanmaani>
And when I want to insert somewhere, I find the N closest nodes, and tell all of them.
<yanmaani>
Well, there's basically two attacks you're describing
<gleb>
So, not a lot of sybils, but just smarter than single bitcoin nodes. This may be possible due to the BitTorrent DHT logic, which I don't know, so I'm asking.
<yanmaani>
one is, attacker doesn't run any nodes
yanmaani has quit [Ping timeout: 240 seconds]
michaelfolkson has joined #bitcoin-wizards
yanmaani has joined #bitcoin-wizards
<yanmaani>
...one is, attacker doesn't run any nodes
<yanmaani>
he just constantly announces to the DHT
<yanmaani>
The other one is, attacker runs nodes
<yanmaani>
and tries to control that portion of the keyspace
<yanmaani>
To do this, he has to rent servers with specific IPs, basically
<yanmaani>
gleb: The second attack would require a lot of VPSes, basically
<yanmaani>
I think it falls under "if it were so easy, someone'd have done it by now" - lots of people who don't like people downloading movies and who are willing to pay smart people money to send legal threats/do DoS attacks
<gleb>
"To do this, he has to rent servers with specific IPs, basically". So this would be weaker than what we have today, right? There's no much gain from doing this today.
<gleb>
this = this system you're suggesting
<yanmaani>
This in my view should be put in as a fallback
<yanmaani>
He has to find IPs in specific ranges, and make sure that he controls precisely 100% of them
<yanmaani>
so, rent VPSes with good IPs, pay bribes to providers, pay bribes to shady ISPs to announce bogons and stuff, and DoS the rest
<yanmaani>
But the flip side is, there is *NO* central seed node needed to enter the network. None whatsoever.
<gleb>
But you said it's a fallback. What's the primary mechanism then?
<yanmaani>
DNS seeds, as right now
<yanmaani>
Under good conditions, they work better
<yanmaani>
but they're a single point of failure
<gleb>
So there are central seed nodes, right?
<yanmaani>
it's like in BitTorrent
<yanmaani>
trackers are always better, if you have them
<yanmaani>
but if not, DHT's your only choice
<yanmaani>
Well, Bitcoin has central seed nodes.
<yanmaani>
The DHT has too. But in the presence of working Bitcoin DNS seeds, there's no need to join the DHT.
<yanmaani>
Except of course to make sure the fallback is running.
<gleb>
Maybe when DNS seeds are down, your idea may work better than our hardcoded list for a fallback. However, it puts some extra burden about self-announcements. And also, as we concluded above, it can be vulnerable to IP grinding (probably not that difficult since we have only 10k reachable nodes).
<yanmaani>
no, the IP grinding is against 10m nodes
<yanmaani>
and you have to have many different /24s
<gleb>
Doesn't it have to just satisfy hash("bitcoin-seed") thing?
<yanmaani>
Yes, to 20 bits or whatever
<gleb>
Grind those which fall into this query more efficient than others.
<yanmaani>
but that's the hash of the first bits
<yanmaani>
"The expression to calculate a valid ID prefix (from an IPv4 address) is:"
<yanmaani>
crc32c((ip & 0x030f3fff) | (r << 29))
<yanmaani>
This means, you need a good ISP diversity
<gleb>
Anyway, if you want to suggest it for Bitcoin Core, I suggest writing up something summarizing the applicable trade-offs and engineering efforts :)
<yanmaani>
Right. Where do I post it, as a BIP on GitHub?
davispuh has joined #bitcoin-wizards
<gleb>
I think an email to the mailing list would be good for starters. It's not very rich for diagrams, so maybe you want host your write-up elsewhere. But BIPs are more about implementation details, it's too early for that I'd say.