Peter Surda
8f5d305242
There was a report that by quickly asking a large number of nodes if they have an ACK object (which the attacker knows but it is injected into the network by the recipient of the message), it can estimate how an object propagates through the network, and eventually pinpoint an originating IP address of the injection, i.e. the IP address of the message recipient. This patch mitigates against it by stalling when asked for a nonexisting object (so that the attacker can't spam requests), and also upon connection before sending its own inventory list (so that reconnecting won't help the attacker). It estimates how long a short message takes to propagate through the network based on how many nodes are in a stream and bases the stalling time on that. Currently that is about 15 seconds. Initial connection delay takes into account the time that already passed since the connection was established. This basically gives the attacker one shot per a combination of his own nodes and the nodes he can connect to, and thus makes the attack much more difficult to succeed. |
||
---|---|---|
.. | ||
bitmessagecurses | ||
bitmessageqt | ||
bitmsghash | ||
images | ||
pyelliptic | ||
socks | ||
sslkeys | ||
translations | ||
addresses.py | ||
api_client.py | ||
api.py | ||
bitmessagecli.py | ||
bitmessagemain.py | ||
build_osx.py | ||
class_addressGenerator.py | ||
class_objectHashHolder.py | ||
class_objectProcessor.py | ||
class_objectProcessorQueue.py | ||
class_outgoingSynSender.py | ||
class_receiveDataThread.py | ||
class_sendDataThread.py | ||
class_singleCleaner.py | ||
class_singleListener.py | ||
class_singleWorker.py | ||
class_sqlThread.py | ||
debug.py | ||
defaultKnownNodes.py | ||
depends.py | ||
helper_bitcoin.py | ||
helper_bootstrap.py | ||
helper_generic.py | ||
helper_inbox.py | ||
helper_sent.py | ||
helper_sql.py | ||
helper_startup.py | ||
helper_threading.py | ||
highlevelcrypto.py | ||
l10n.py | ||
message_data_reader.py | ||
namecoin.py | ||
openclpow.py | ||
proofofwork.py | ||
protocol.py | ||
qidenticon.py | ||
shared.py | ||
singleton.py | ||
tr.py | ||
upnp.py |