Restrict self-advertisements with privacy networks to avoid fingerprinting
#316
Open
opened 10 months ago by duke
·
7 comments
No Branch/Tag Specified
arm
asyncnotedecryption
danger
dev
dev-aarch64
dev-mac
dev-old-randomx
divzaddrs
dragonx
duke
freebsd
getfilterednotes
hip39
hushutils
insync
jahway603
master
mvstuff
onryo
p2p_privacy
ramhash
relaytx
rx-largepages
setbestchain
warmup
witness_cache
wolfssl
wolfssl_win
z_createrawtransaction
z_importwallet
z_signmessage
v0.11.2.z0
v0.11.2.z1
v0.11.2.z2
v0.11.2.z3
v0.11.2.z4
v0.11.2.z5
v0.11.2.z6
v0.11.2.z7
v0.11.2.z8
v0.11.2.z9
v1.0.0
v1.0.0-beta1
v1.0.0-beta2
v1.0.0-rc1
v1.0.0-rc2
v1.0.0-rc3
v1.0.0-rc4
v1.0.1
v1.0.10
v1.0.10-1
v1.0.11
v1.0.11-rc1
v1.0.12
v1.0.12-rc1
v1.0.13
v1.0.13-rc1
v1.0.13-rc2
v1.0.14
v1.0.14-rc1
v1.0.15
v1.0.15-rc1
v1.0.2
v1.0.3
v1.0.4
v1.0.5
v1.0.6
v1.0.7-1
v1.0.8
v1.0.8-1
v1.0.9
v1.1.0
v1.1.0-rc1
v1.1.1
v1.1.1-rc1
v1.1.1-rc2
v1.1.2
v1.1.2-rc1
v2.0.0
v2.0.0-rc1
v2.0.1
v3.0.0
v3.1.0
v3.1.1
v3.10.0
v3.10.1
v3.10.2
v3.2.0
v3.2.1
v3.2.1-alpha
v3.2.1-beta
v3.2.2
v3.2.3
v3.3.0
v3.3.1
v3.3.2
v3.4.0
v3.4.1
v3.5.0
v3.5.1
v3.5.2
v3.6.0
v3.6.1
v3.6.2
v3.6.3
v3.7.0
v3.7.1
v3.8.0
v3.9.0
v3.9.1
v3.9.2
v3.9.3
v3.9.4
Labels
bounty up to 500 HUSH 2001-5000 bounty
bounty between 2001 and 5000 HUSH 501-2000 bounty
bounty between 501 and 2000 HUSH arm
something doesn't work on arm beginners
for new developers bug
may or may not be a bug build
problems building documentation
not enough information feature
new feature high priority
high priority i2p
related to i2p low priority
low priority medium priority
medium priority question
something is not clear release
release label or issue related to it testing
related to testing tor
related to tor wontfix
this won't be fixed
Apply labels
Clear labels
0-500 bounty
bounty up to 500 HUSH 2001-5000 bounty
bounty between 2001 and 5000 HUSH 501-2000 bounty
bounty between 501 and 2000 HUSH arm
something doesn't work on arm beginners
for new developers bug
may or may not be a bug build
problems building documentation
not enough information feature
new feature high priority
high priority i2p
related to i2p low priority
low priority medium priority
medium priority question
something is not clear release
release label or issue related to it testing
related to testing tor
related to tor wontfix
this won't be fixed
No Label
0-500 bounty
2001-5000 bounty
501-2000 bounty
arm
beginners
bug
build
documentation
feature
high priority
i2p
low priority
medium priority
question
release
testing
tor
wontfix
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
This issue currently doesn't have any dependencies.
Reference in new issue
There is no content yet.
Delete Branch '%!s(MISSING)'
Deleting a branch is permanent. It CANNOT be undone. Continue?
No
Yes
https://github.com/bitcoin/bitcoin/pull/27411
This would improve privacy for nodes that run on both clearnet (ip v4 or v6) and a privacy network (tor or i2p). BTC and HUSH will tell a clearnet peer it's privacy network address (and vice versa) which leaks metadata, i.e. node X has address Y in IPv4 and address Z on Tor v3, for example. Nodes would protect their privacy better to not do this. This code has recently been merged into BTC (it isn't in a release yet) but their internals have changed a lot so it may be some fun to make this change in our codebase.
Created the
p2p_privacy
branch to work on thisFunctions that need to change to complete this :
BTC upstream code has not diverged as much as I thought so it should be relatively straight forward to port these changes to our codebase
I have made most of the necessary changes but currently dealing with an issue where BTC's version of
GetLocalAddress
was already returning aCService
before this change, but our version returns aCAddress
which means changing code which callsGetLocalAddress
to deal with that.OK, I pushed code to the branch. It has not been tested yet. To test this branch :
I don't think it's very important to test full syncs, we mostly want to test that a node can stay in sync with peers. So we just need to test partial syncs.
If this code does not work, then nodes may get stuck with no peers or be unable to sync. We want to make sure that doesn't happen.
Looks like I missed some code to port and we don't have a function it wants to call, so I am still working on this.
Current status is that I ported more code but we are starting to run into issues where our internals are out of sync with the BTC code coming in, so lots of updates are required. We didn't have
ConnectedThroughNetwork()
function which I added, but that relies on the concept of "inbound onions" and a list of "onion binds" which we don't have. Implementing those requires changes to init.cpp and also changing the constructor of theCNode
class.