aboutsummaryrefslogtreecommitdiff
path: root/src/net.h
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2018-07-16 10:28:42 -0700
committerPieter Wuille <pieter.wuille@gmail.com>2018-07-16 10:37:02 -0700
commitf8d470e24606297dab95e30b1d39ff664fbda31d (patch)
treee9dae171054bb1692c7ae097794e30245e4a3b4f /src/net.h
parent17943f77bda22d515e29662d31c8ac936b85f470 (diff)
parentd45b344ffd46b0226449cbd46cdaff9577402cf0 (diff)
downloadbitcoin-f8d470e24606297dab95e30b1d39ff664fbda31d.tar.xz
Merge #13298: Net: Bucketing INV delays (1 bucket) for incoming connections to hide tx time
d45b344ffd Bucket for inbound when scheduling invs to hide tx time (Gleb) Pull request description: It has been brought up to my attention that current random delays mechanism (originally intended to obfuscate transaction metadata) allows to easily estimate the time a transaction was received by a node. It may be done by connecting multiple observer nodes to the same node. Each of those nodes will generate its own schedule of delays. Combined metadata regarding those events from different sources allows an observer to estimate transaction time. After this patch a spy won't gain additional information by just creating multiple connections to a target. Tree-SHA512: c71dae5ff350b614cb40a8e201fd0562d3e03e3e72a5099718cd451f0d84c66d5e52bbaf0d5b4b75137514c8efdedcc6ef4df90142b360153f04ad0721545ab1
Diffstat (limited to 'src/net.h')
-rw-r--r--src/net.h11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/net.h b/src/net.h
index 697aa37a58..d152fbfbdd 100644
--- a/src/net.h
+++ b/src/net.h
@@ -310,6 +310,13 @@ public:
unsigned int GetReceiveFloodSize() const;
void WakeMessageHandler();
+
+ /** Attempts to obfuscate tx time through exponentially distributed emitting.
+ Works assuming that a single interval is used.
+ Variable intervals will result in privacy decrease.
+ */
+ int64_t PoissonNextSendInbound(int64_t now, int average_interval_seconds);
+
private:
struct ListenSocket {
SOCKET socket;
@@ -434,6 +441,8 @@ private:
* This takes the place of a feeler connection */
std::atomic_bool m_try_another_outbound_peer;
+ std::atomic<int64_t> m_next_send_inv_to_incoming;
+
friend struct CConnmanTest;
};
extern std::unique_ptr<CConnman> g_connman;
@@ -863,6 +872,6 @@ public:
/** Return a timestamp in the future (in microseconds) for exponentially distributed events. */
-int64_t PoissonNextSend(int64_t nNow, int average_interval_seconds);
+int64_t PoissonNextSend(int64_t now, int average_interval_seconds);
#endif // BITCOIN_NET_H