elements/src
Wladimir J. van der Laan 14ceddd290
Merge #18991: Cache responses to GETADDR to prevent topology leaks
3bd67ba5a4 Test addr response caching (Gleb Naumenko)
cf1569e074 Add addr permission flag enabling non-cached addr sharing (Gleb Naumenko)
acd6135b43 Cache responses to addr requests (Gleb Naumenko)
7cc0e8101f Remove useless 2500 limit on AddrMan queries (Gleb Naumenko)
ded742bc5b Move filtering banned addrs inside GetAddresses() (Gleb Naumenko)

Pull request description:

  This is a very simple code change with a big p2p privacy benefit.

  It’s currently trivial to scrape any reachable node’s AddrMan (a database of all nodes known to them along with the timestamps).
  We do have a limit of one GETADDR per connection, but a spy can disconnect and reconnect even from the same IP, and send GETADDR again and again.

  Since we respond with 1,000 random records at most, depending on the AddrMan size it takes probably up to 100 requests for an spy to make sure they scraped (almost) everything.
  I even have a script for that. It is totally doable within couple minutes.

  Then, with some extra protocol knowledge a spy can infer the direct peers of the victim, and other topological stuff.

  I suggest to cache responses to GETADDR on a daily basis, so that an attacker gets at most 1,000 records per day, and can’t track the changes in real time. I will be following up with more improvements to addr relay privacy, but this one alone is a very effective. And simple!

  I doubt any of the real software does *reconnect to get new addrs from a given peer*, so we shouldn’t be cutting anyone.
  I also believe it doesn’t have any negative implications on the overall topology quality. And the records being “outdated” for at most a day doesn’t break any honest assumptions either.

ACKs for top commit:
  jnewbery:
    reACK 3bd67ba5a4
  promag:
    Code review ACK 3bd67ba5a4.
  ariard:
    Code Review ACK 3bd67ba

Tree-SHA512: dfa5d03205c2424e40a3f8a41af9306227e1ca18beead3b3dda44aa2a082175bb1c6d929dbc7ea8e48e01aed0d50f0d54491caa1147471a2b72a46c3ca06b66f
2020-08-03 14:48:52 +02:00
..
bench Merge #18011: Replace current benchmarking framework with nanobench 2020-07-30 15:34:17 +02:00
compat net: Use C++11 member initialization in protocol 2020-05-20 08:27:07 -04:00
config
consensus Merge #18044: Use wtxid for transaction relay 2020-07-22 20:58:55 +02:00
crc32c Import crc32c using subtree merge as as 'src/crc32c' 2020-01-28 17:00:01 +01:00
crypto build: improve builtin_clz* detection 2020-06-29 11:31:17 +08:00
index scripted-diff: Move ui_interface to the node lib 2020-06-27 11:49:28 -04:00
interfaces Merge #15935: Add <datadir>/settings.json persistent settings storage 2020-07-23 18:39:42 +02:00
leveldb Update to leveldb upstream using subtree merge 2020-01-28 16:59:07 +01:00
logging Remove use of non-standard zero variadic macros 2020-04-30 18:02:04 +08:00
node Add support for tx-relay via wtxid 2020-07-19 02:05:29 -04:00
policy doc: Add non-thread-safe note to FeeFilterRounder::round() 2020-07-05 13:46:38 +03:00
primitives refactor: add GenTxid (=txid or wtxid) type and use it for tx request logic 2020-07-30 13:44:54 -07:00
qt Merge #19604: Pass mempool pointer to UnloadBlockIndex/GetCoinsCacheSizeState 2020-07-30 17:30:52 +02:00
rpc Merge #19585: rpc: RPCResult Type of MempoolEntryDescription should be OBJ. 2020-07-31 07:52:40 +02:00
script span: Add Span::empty() and use it in script/descriptor 2020-07-19 20:51:06 +02:00
secp256k1 Update src/secp256k1 subtree 2020-06-09 13:39:09 -07:00
support Limit scope of all global std::once_flag 2020-05-29 17:22:07 -04:00
test Merge #18991: Cache responses to GETADDR to prevent topology leaks 2020-08-03 14:48:52 +02:00
univalue Update univalue subtree 2020-02-09 07:44:29 -08:00
util Merge #15935: Add <datadir>/settings.json persistent settings storage 2020-07-23 18:39:42 +02:00
wallet Merge #19561: refactor: Pass ArgsManager into functions that register args 2020-07-30 17:08:46 +02:00
zmq scripted-diff: Bump copyright headers 2020-04-16 13:33:09 -04:00
.clang-format tools: clang-format 6 compatibility 2020-07-06 03:52:37 +02:00
addrdb.cpp refactor: Use uint16_t instead of unsigned short 2020-06-22 12:12:22 +02:00
addrdb.h Clean up separated ban/discourage interface 2020-07-03 20:43:55 -07:00
addrman.cpp Merge #18512: Improve asmap checks and add sanity check 2020-05-06 14:59:28 +02:00
addrman.h Remove useless 2500 limit on AddrMan queries 2020-07-24 18:02:20 +03:00
amount.h Update copyright headers to 2018 2018-12-29 10:15:01 +01:00
arith_uint256.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
arith_uint256.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
attributes.h
banman.cpp banlist: log post-swept banlist size at startup 2020-07-08 21:44:45 +08:00
banman.h Clean up separated ban/discourage interface 2020-07-03 20:43:55 -07:00
base58.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
base58.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
bech32.cpp Add some general std::vector utility functions 2019-10-16 08:56:57 -07:00
bech32.h Assert that the HRP is lowercase in Bech32::Encode 2019-09-05 13:25:11 +12:00
bitcoin-cli-res.rc
bitcoin-cli.cpp scripted-diff: Replace gArgs with local argsman 2020-07-29 16:39:00 +07:00
bitcoin-tx-res.rc
bitcoin-tx.cpp scripted-diff: Replace gArgs with local argsman 2020-07-29 16:39:00 +07:00
bitcoin-wallet-res.rc [tools] Add wallet inspection and modification tool 2019-01-30 16:26:52 -05:00
bitcoin-wallet.cpp scripted-diff: Replace gArgs with local argsman 2020-07-29 16:39:00 +07:00
bitcoind-res.rc
bitcoind.cpp Add <datadir>/settings.json persistent settings storage. 2020-07-11 05:41:12 -04:00
blockencodings.cpp Get rid of -Wthread-safety-precise warnings 2020-05-28 09:55:39 +03:00
blockencodings.h Get rid of -Wthread-safety-precise warnings 2020-05-28 09:55:39 +03:00
blockfilter.cpp tests: Add fuzzing harness for Golomb-Rice coding (GolombRiceEncode/GolombRiceDecode) 2020-04-20 14:57:48 +00:00
blockfilter.h [indexes] Fix default [de]serialization of BlockFilter. 2020-05-26 17:27:15 -04:00
bloom.cpp scripted-diff: TxoutType C++11 scoped enum class 2020-06-21 06:41:55 -04:00
bloom.h Merge #18317: Serialization improvements step 6 (all except wallet/gui) 2020-05-20 07:30:29 -04:00
chain.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
chain.h scripted-diff: Bump copyright headers 2020-04-16 13:33:09 -04:00
chainparams.cpp refactor: use local argsmanager in CRegTestParams 2020-07-29 16:39:03 +07:00
chainparams.h scripted-diff: Bump copyright headers 2020-04-16 13:33:09 -04:00
chainparamsbase.cpp scripted-diff: Replace gArgs with local argsman 2020-07-29 16:39:00 +07:00
chainparamsbase.h refactor: add unused ArgsManager to replace gArgs 2020-07-29 16:36:44 +07:00
chainparamsseeds.h net: Hardcoded seeds update for 0.20 2020-04-03 16:29:26 +02:00
checkqueue.h scripted-diff: Bump copyright headers 2020-04-16 13:33:09 -04:00
clientversion.cpp Drop unused GIT_COMMIT_DATE macro 2020-05-04 19:53:58 +03:00
clientversion.h
coins.cpp Add CChainState::ResizeCoinsCaches 2020-07-01 14:44:28 -04:00
coins.h Add CChainState::ResizeCoinsCaches 2020-07-01 14:44:28 -04:00
compat.h windows: Set _WIN32_WINNT to 0x0601 (Windows 7) 2019-01-23 16:28:27 +08:00
compressor.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
compressor.h scripted-diff: Bump copyright headers 2020-04-16 13:33:09 -04:00
core_io.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
core_memusage.h
core_read.cpp refactor: Replace const char* to std::string 2020-05-22 01:40:31 +09:00
core_write.cpp Merge #16525: Dump transaction version as an unsigned integer in RPC/TxToUniv 2020-07-16 21:38:09 +02:00
cuckoocache.h tests: Add fuzzing harness for classes/functions in cuckoocache.h 2020-04-08 14:45:27 +00:00
dbwrapper.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
dbwrapper.h Drop unused CDBWrapper methods 2020-07-08 14:26:14 +03:00
dummywallet.cpp scripted-diff: Replace gArgs with local argsman 2020-07-29 16:39:00 +07:00
flatfile.cpp Style cleanup. 2019-02-22 17:38:45 -08:00
flatfile.h Merge #18317: Serialization improvements step 6 (all except wallet/gui) 2020-05-20 07:30:29 -04:00
fs.cpp Add missing includes to fix compile errors 2020-06-16 15:15:46 -04:00
fs.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
hash.cpp
hash.h Squashed 'src/secp256k1/' changes from 0b70241850..b19c000063 2019-03-31 11:41:05 -07:00
httprpc.cpp Merge #18740: Remove g_rpc_node global 2020-05-21 06:53:39 -04:00
httprpc.h refactor: Pass NodeContext to RPC and REST methods through util::Ref 2020-05-13 16:20:13 -04:00
httpserver.cpp scripted-diff: Move ui_interface to the node lib 2020-06-27 11:49:28 -04:00
httpserver.h scripted-diff: Bump copyright headers 2020-04-16 13:33:09 -04:00
indirectmap.h scripted-diff: Bump copyright headers 2020-04-16 13:33:09 -04:00
init.cpp Merge #19604: Pass mempool pointer to UnloadBlockIndex/GetCoinsCacheSizeState 2020-07-30 17:30:52 +02:00
init.h refactor: Pass NodeContext to RPC and REST methods through util::Ref 2020-05-13 16:20:13 -04:00
key.cpp scripted-diff: rename privkey with seckey in secp256k1 interface 2020-06-10 18:29:33 -07:00
key.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
key_io.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
key_io.h
limitedmap.h
logging.cpp log: remove deprecated db log category 2020-06-07 17:03:49 +02:00
logging.h refactor: Rename LockGuard to StdLockGuard for consistency with StdMutex 2020-05-28 09:54:24 +03:00
Makefile.am build: Sort Makefile.am after renaming file 2020-06-27 11:49:35 -04:00
Makefile.bench.include Replace current benchmarking framework with nanobench 2020-06-13 12:24:18 +02:00
Makefile.crc32c.include build: CRC32C build system integration 2020-01-28 17:01:48 +01:00
Makefile.leveldb.include build: Enable -Wsuggest-override 2020-05-12 18:03:39 +03:00
Makefile.qt.include scripted-diff: rename movie folder to animation 2020-06-29 18:49:13 +01:00
Makefile.qt_locale.include qt: Translations update pre-branch 2020-04-01 12:49:15 +02:00
Makefile.qttest.include build: Create test utility library from src/test/util/ 2019-11-21 21:13:08 +01:00
Makefile.test.include Merge #18011: Replace current benchmarking framework with nanobench 2020-07-30 15:34:17 +02:00
Makefile.test_fuzz.include build: create test_fuzz library from src/test/fuzz/fuzz.cpp 2020-04-05 01:01:13 +02:00
Makefile.test_util.include fuzz: Add process_messages harness 2020-04-05 10:46:24 +08:00
memusage.h scripted-diff: Bump copyright headers 2020-04-16 13:33:09 -04:00
merkleblock.cpp Convert merkleblock to new serialization 2020-03-30 16:09:51 -07:00
merkleblock.h Convert merkleblock to new serialization 2020-03-30 16:09:51 -07:00
miner.cpp refactor: Remove unused BlockAssembler::pblock member var 2020-06-15 08:08:19 -04:00
miner.h refactor: Remove unused BlockAssembler::pblock member var 2020-06-15 08:08:19 -04:00
net.cpp Cache responses to addr requests 2020-07-30 14:38:48 +03:00
net.h Add addr permission flag enabling non-cached addr sharing 2020-07-30 14:38:50 +03:00
net_permissions.cpp Add addr permission flag enabling non-cached addr sharing 2020-07-30 14:38:50 +03:00
net_permissions.h Add addr permission flag enabling non-cached addr sharing 2020-07-30 14:38:50 +03:00
net_processing.cpp Merge #18991: Cache responses to GETADDR to prevent topology leaks 2020-08-03 14:48:52 +02:00
net_processing.h Merge #19472: [net processing] Reduce cs_main scope in MaybeDiscourageAndDisconnect() 2020-07-24 17:20:58 +02:00
net_types.h refactor: Remove addrdb.h dependency from node.h 2019-10-29 11:30:12 +02:00
netaddress.cpp net: save the network type explicitly in CNetAddr 2020-07-27 15:13:24 +02:00
netaddress.h net: save the network type explicitly in CNetAddr 2020-07-27 15:13:24 +02:00
netbase.cpp refactor: Use uint16_t instead of unsigned short 2020-06-22 12:12:22 +02:00
netbase.h net: Avoid using C-style NUL-terminated strings as arguments in the netbase interface 2020-01-08 12:35:59 +00:00
netmessagemaker.h refactor: s/command/msg_type/ in CNetMsgMaker and CSerializedNetMsg 2020-05-11 00:20:57 +02:00
noui.cpp scripted-diff: Move ui_interface to the node lib 2020-06-27 11:49:28 -04:00
noui.h Make ThreadSafe{MessageBox|Question} bilingual 2020-05-05 04:45:59 +03:00
optional.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
outputtype.cpp Enable Wswitch for OutputType 2020-07-01 18:03:12 -04:00
outputtype.h Remove confusing OutputType::CHANGE_AUTO 2020-07-01 18:02:38 -04:00
pow.cpp
pow.h
prevector.h prevector: Avoid unnamed struct, which is a GNU extension 2020-04-30 18:02:03 +08:00
protocol.cpp refactor: add GenTxid (=txid or wtxid) type and use it for tx request logic 2020-07-30 13:44:54 -07:00
protocol.h scripted-diff: Remove Reference Links 2020-08-01 23:42:07 -04:00
psbt.cpp psbt: always put a non_witness_utxo and don't remove it 2020-06-24 16:32:19 -04:00
psbt.h psbt: always put a non_witness_utxo and don't remove it 2020-06-24 16:32:19 -04:00
pubkey.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
pubkey.h Check size after Unserializing CPubKey 2020-06-10 17:35:43 +03:00
random.cpp Merge #18781: Add templated GetRandDuration<> 2020-05-15 08:58:49 -04:00
random.h Add templated GetRandomDuration<> 2020-04-30 09:19:14 -04:00
randomenv.cpp scripted-diff: Bump copyright headers 2020-04-16 13:33:09 -04:00
randomenv.h [MOVEONLY] Move perfmon data gathering to new randomenv module 2019-11-12 14:50:44 -08:00
rest.cpp rpc: Avoid useless mempool query in gettxoutproof 2020-07-26 16:44:07 +02:00
reverse_iterator.h
scheduler.cpp clang-format scheduler 2020-06-21 06:02:59 -04:00
scheduler.h clang-format scheduler 2020-06-21 06:02:59 -04:00
serialize.h refactor: Use uint16_t instead of unsigned short 2020-06-22 12:12:22 +02:00
shutdown.cpp
shutdown.h
span.h span: Add Span::empty() and use it in script/descriptor 2020-07-19 20:51:06 +02:00
streams.h refactor: Drop unused CBufferedFile::Seek() 2020-07-26 22:46:28 +03:00
sync.cpp Improve "detected inconsistent lock order" error message 2020-06-25 21:27:34 +03:00
sync.h Add means to handle negative capabilities in thread safety annotations 2020-06-11 15:49:39 +03:00
threadinterrupt.cpp
threadinterrupt.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
threadsafety.h Add means to handle negative capabilities in thread safety annotations 2020-06-11 15:49:39 +03:00
timedata.cpp scripted-diff: Move ui_interface to the node lib 2020-06-27 11:49:28 -04:00
timedata.h
tinyformat.h util: Update tinyformat to upstream 2019-12-06 10:02:08 +01:00
torcontrol.cpp net: Avoid using C-style NUL-terminated strings as arguments in the netbase interface 2020-01-08 12:35:59 +00:00
torcontrol.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
txdb.cpp Merge #18637: coins: allow cache resize after init 2020-07-29 07:53:19 +02:00
txdb.h txdb: add CCoinsViewDB::ChangeCacheSize 2020-07-01 14:44:24 -04:00
txmempool.cpp refactor: make txmempool interface use GenTxid 2020-07-30 13:45:03 -07:00
txmempool.h refactor: make txmempool interface use GenTxid 2020-07-30 13:45:03 -07:00
uint256.cpp refactor: define a UINT256_ONE global constant 2020-01-23 16:35:08 -05:00
uint256.h refactor: define a UINT256_ONE global constant 2020-01-23 16:35:08 -05:00
undo.h scripted-diff: Bump copyright headers 2020-04-16 13:33:09 -04:00
validation.cpp Pass mempool pointer to GetCoinsCacheSizeState 2020-07-29 12:30:11 +02:00
validation.h Pass mempool pointer to GetCoinsCacheSizeState 2020-07-29 12:30:11 +02:00
validationinterface.cpp trivial: Suggested cleanups to surrounding code 2020-05-22 16:30:07 -04:00
validationinterface.h trivial: Suggested cleanups to surrounding code 2020-05-22 16:30:07 -04:00
version.h Add p2p message "wtxidrelay" 2020-07-19 02:10:41 -04:00
versionbits.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
versionbits.h scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
versionbitsinfo.cpp scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
versionbitsinfo.h
walletinitinterface.h refactor: add unused ArgsManager to replace gArgs 2020-07-29 16:36:44 +07:00
warnings.cpp Make SetMiscWarning() accept bilingual_str argument 2020-06-10 15:01:20 +03:00
warnings.h Make SetMiscWarning() accept bilingual_str argument 2020-06-10 15:01:20 +03:00