Jeremy Spilman [ARCHIVE] on Nostr: š
Original date posted:2014-01-15 š Original message:On Wed, 15 Jan 2014 ...
š
Original date posted:2014-01-15
š Original message:On Wed, 15 Jan 2014 15:09:01 -0800, Adam Back <adam at cypherspace.org> wrote:
> I was meaning to comment on the SPV privacy properties.
>
> For full-node use these unlinkable static addresses have quite nice
> properties. It also nicely solves the problem of having to educate users
> and wallet authors to not reuse addresses. But for SPV nodes they have
> no direct-way to find the payments. So then in Peter Todd's variant
> (maybe it was suggested by Greg Maxwell?) there is a second address so
> that the SPV
> client can delegate detection to a full node without giving it the
> private key allowing it to spend! (This is something analogous to bloom
> filtering).
The second pubKey is useful for delegating scanning, or even just being
able to scan for transactions yourself without keeping bitcoin-encumbered
private keys decrypted in memory. So even while running your own full node
there are good reasons to use a second pubKey to derive the shared secret.
> But I think its moderately expensive for the full node because it has to
> do a DH calculation per transaction and its not precomputable so there
> is IO
> per query. (In the P version in fact only payments which are thereby
> reconizable as unlinkable static need to be processed).
And of course, if you have multiple reuseable addresses, then you're doing
this calculation separately to check each one.
So the load on a popular centralized service would be quite high, which
you may consider a feature.
>
> Then an artificial prefix is proposed to constrain the query to a subset,
> however that leaks to everyone so in some ways its a worse privacy leak
> than bloom filtering. It can be used to rule out recipients and could be
> quite a powerful extra lever for statistical analysis.
Choosing how many bits to put in the prefix may be difficult, particularly
if transaction load changes dramatically over time. 0 or 1 bits may be
just fine for a single user running their own node, whereas a central
service might want 4 or 5 bits to keep their computation costs scalable.
But I think it's great people can choose how to trade privacy for
computation/bandwidth however they want, and services can compete to offer
monitoring for 0+ bit prefixes.
> (And also there is proposed a version of the prefix computed via
> brute-force to make it somewhat stealthy still).
I think in this case the hash grinding of the prefix would only being used
if thats how transactions are being indexed. I don't think it adds any
privacy, it's just added work we're forced to do in order for the prefix
to work as designed. Peter, please correct me if I'm wrong.
>
> Maybe in the payment address case the service should choose the
> derivation factor and communicate it and the client with the static
> address, as suggested by Alan Reiner because then it can also serve
> the function of allowing the service to tie the payment to the users
> account.
I think any change which requires more than a single published public
message (e.g. a posting in a forum, or in a README.me in Github) should be
seen as solving an entirely different problem.
If you have directed communication from payee->payer, I think there's
simply no reason to do it this way. (By "this way" I mean ECDH with
OP_RETURN P).
We could try to define a different reusable address type, for when you can
make a single directed message from payer->payee, and in that case there's
probably no need for ECDH or the prefix, like Alan's proposal.
But once you admit having that directed communication, then you are
swimming very close to the payment protocol.
Published at
2023-06-07 15:11:58Event JSON
{
"id": "99fcf91e16a2dca8770a14964460c8bba517909fca658ddd39bb645beb774a92",
"pubkey": "7e57666cff7c86f9410d33d4d34ef3e5105395b3c74af472541dbeeb743f9de3",
"created_at": 1686150718,
"kind": 1,
"tags": [
[
"e",
"eca224fd79062c438f672eeb721d19eecb21242447f685d7841ab4222dcc04f4",
"",
"root"
],
[
"e",
"cc2c7dae768ce74b0d1a9643624290fd16e6d0252810f43c658fefea7869c733",
"",
"reply"
],
[
"p",
"ee0fa66772f633411e4432e251cfb15b1c0fe8cd8befd8b0d86eb302402a8b4a"
]
],
"content": "š
Original date posted:2014-01-15\nš Original message:On Wed, 15 Jan 2014 15:09:01 -0800, Adam Back \u003cadam at cypherspace.org\u003e wrote:\n\u003e I was meaning to comment on the SPV privacy properties.\n\u003e\n\u003e For full-node use these unlinkable static addresses have quite nice\n\u003e properties. It also nicely solves the problem of having to educate users\n\u003e and wallet authors to not reuse addresses. But for SPV nodes they have \n\u003e no direct-way to find the payments. So then in Peter Todd's variant \n\u003e (maybe it was suggested by Greg Maxwell?) there is a second address so \n\u003e that the SPV\n\u003e client can delegate detection to a full node without giving it the \n\u003e private key allowing it to spend! (This is something analogous to bloom \n\u003e filtering).\n\nThe second pubKey is useful for delegating scanning, or even just being \nable to scan for transactions yourself without keeping bitcoin-encumbered \nprivate keys decrypted in memory. So even while running your own full node \nthere are good reasons to use a second pubKey to derive the shared secret.\n\n\u003e But I think its moderately expensive for the full node because it has to \n\u003e do a DH calculation per transaction and its not precomputable so there \n\u003e is IO\n\u003e per query. (In the P version in fact only payments which are thereby\n\u003e reconizable as unlinkable static need to be processed).\n\nAnd of course, if you have multiple reuseable addresses, then you're doing \nthis calculation separately to check each one.\n\nSo the load on a popular centralized service would be quite high, which \nyou may consider a feature.\n\n\u003e\n\u003e Then an artificial prefix is proposed to constrain the query to a subset,\n\u003e however that leaks to everyone so in some ways its a worse privacy leak\n\u003e than bloom filtering. It can be used to rule out recipients and could be\n\u003e quite a powerful extra lever for statistical analysis.\n\nChoosing how many bits to put in the prefix may be difficult, particularly \nif transaction load changes dramatically over time. 0 or 1 bits may be \njust fine for a single user running their own node, whereas a central \nservice might want 4 or 5 bits to keep their computation costs scalable.\n\nBut I think it's great people can choose how to trade privacy for \ncomputation/bandwidth however they want, and services can compete to offer \nmonitoring for 0+ bit prefixes.\n\n\u003e (And also there is proposed a version of the prefix computed via\n\u003e brute-force to make it somewhat stealthy still).\n\nI think in this case the hash grinding of the prefix would only being used \nif thats how transactions are being indexed. I don't think it adds any \nprivacy, it's just added work we're forced to do in order for the prefix \nto work as designed. Peter, please correct me if I'm wrong.\n\n\n\u003e\n\u003e Maybe in the payment address case the service should choose the \n\u003e derivation factor and communicate it and the client with the static\n\u003e address, as suggested by Alan Reiner because then it can also serve\n\u003e the function of allowing the service to tie the payment to the users\n\u003e account.\n\nI think any change which requires more than a single published public \nmessage (e.g. a posting in a forum, or in a README.me in Github) should be \nseen as solving an entirely different problem.\n\nIf you have directed communication from payee-\u003epayer, I think there's \nsimply no reason to do it this way. (By \"this way\" I mean ECDH with \nOP_RETURN P).\n\nWe could try to define a different reusable address type, for when you can \nmake a single directed message from payer-\u003epayee, and in that case there's \nprobably no need for ECDH or the prefix, like Alan's proposal.\n\nBut once you admit having that directed communication, then you are \nswimming very close to the payment protocol.",
"sig": "73229ab7cafc3652e81bf30333e9ea96e8f790cd8c4008960203e082b3d00bd324e2adaf7ac17d6e4fe918d86e242de8764f5dcd108b3792dcb6cdc8a7030ea5"
}