Pages:
Author

Topic: Silent payments (Read 1340 times)

legendary
Activity: 2310
Merit: 4313
🔐BitcoinMessage.Tools🔑
June 05, 2023, 11:23:09 AM
#65
A pull request has been opened for adding Silent Payments to Bitcoin Core: https://github.com/bitcoin/bitcoin/pull/27827

Quote
This PR implements the basic silent payments scheme. In particular:

    Adds support for existing wallets to send to silent payment addresses
    Adds support to the Bitcoin Core wallet for receiving silent payments

The following items are not covered in this PR and are intended for follow-up PRs:

    Adding labels for the receiver wallet
    Creating multiple outputs for the same silent payment address when sending
    Full RPC coverage (only send is covered in this PR)
    Light client support (vending the tweak data per block, either in an index or to serve to an indexer, such as electrum server)
    Add benchmarks to validate that there are no DoS concerns for doing silent payment verification for transactions in the mempool
    More unit / functional test coverage
legendary
Activity: 1568
Merit: 6660
bitcoincleanup.com / bitmixlist.org
September 28, 2022, 08:26:45 AM
#64
Where can I find more information about the latest implementation or proposal? I'm interested to see what the creators think / how they handle SPV wallets and the complexity / burden of scanning for transactions.

https://gist.github.com/w0xlt/a7b498ac1ff14b8c292a22be789bd93f



That's the same implementation as in the original spec. Hardly anything has changed since then.

It would be interesting to see a silent payment implementation outside of Bitcoin Core.
legendary
Activity: 2310
Merit: 4313
🔐BitcoinMessage.Tools🔑
September 28, 2022, 07:09:52 AM
#63
Where can I find more information about the latest implementation or proposal? I'm interested to see what the creators think / how they handle SPV wallets and the complexity / burden of scanning for transactions.

https://gist.github.com/w0xlt/a7b498ac1ff14b8c292a22be789bd93f

hero member
Activity: 882
Merit: 5814
not your keys, not your coins!
September 28, 2022, 06:55:47 AM
#62
In the case of silent payments, however, you don't share your xpub at all, replacing it with a deterministically derived silent payment address, which is basically a hash of a public key (not a master public key) encoded in a special format. In the latest implementation, it was proposed that silent payment addresses should start with the "sp1" prefix.
I know; just wanted to point out that xpub sharing (as alternative to silent payments) is not only less private but also potentially insecure.
Where can I find more information about the latest implementation or proposal? I'm interested to see what the creators think / how they handle SPV wallets and the complexity / burden of scanning for transactions.

Your schema remember me what in Monero is called Stealth Addresses:

Maybe this can be useful to compare the ideas:
https://www.getmonero.org/library/MoneroAddressesCheatsheet20201206.pdf
Yes, this is exactly what sprung to mind when I read this proposal. In my opinion, the biggest disadvantage - just as in Monero - is the need for transaction scanning.
legendary
Activity: 2310
Merit: 4313
🔐BitcoinMessage.Tools🔑
September 28, 2022, 01:38:35 AM
#61
Sharing an xpub is also a security risk, due to being able to derive all private keys from an xpub and a single private key.

If, and only if, the recipient also obtains a single private key from your wallet, the recipient can obtain all your private keys and steal your funds, just as if they had your xprv key.
As far as I know, this only applies to non-hardened derivation schemes, where it is possible to calculate parent keys by combining chain code with the child's private keys. In the case where the derivation process is hardened, an attacker would need your master private keys to calculate child keys, or parent private key to calculate a child key. All backward derivation won't be possible when derivation is hardened. In the case of silent payments, however, you don't share your xpub at all, replacing it with a deterministically derived silent payment address, which is basically a hash of a public key (not a master public key) encoded in a special format. In the latest implementation, it was proposed that silent payment addresses should start with the "sp1" prefix.
hero member
Activity: 882
Merit: 5814
not your keys, not your coins!
September 27, 2022, 06:36:38 PM
#60
Could you briefly tell us about the advantages of silent payments over the common xpub sharing technique?
But the summary is: you should share your xpub only with those you are confident sharing your privacy with, as they would be able to track all your received payments scanning the addresses generated from such xpub.
Silent payments instead break this allowing you the total privacy (with the “scanning costs”).
Sharing an xpub is also a security risk, due to being able to derive all private keys from an xpub and a single private key.

If, and only if, the recipient also obtains a single private key from your wallet, the recipient can obtain all your private keys and steal your funds, just as if they had your xprv key.
legendary
Activity: 2310
Merit: 4313
🔐BitcoinMessage.Tools🔑
hero member
Activity: 667
Merit: 1529
June 20, 2022, 01:26:36 PM
#58
I think we've got it:
1) "b" is private, but can be non-unique if an address is reused
2) "SHA-256("txid:vout")" is public, but also unique
3) "b*SHA-256("txid:vout")" is private and unique at the same time
And when in the third case we will reach the same value, that would mean double spending of any kind, for example RBF (and it is a nice feature to preserve the same output addresses in case of any transaction replacements).
hero member
Activity: 789
Merit: 1909
June 20, 2022, 01:16:43 PM
#57
Quote
We could use z-value instead.
Nice idea. To make it computationally simple, all that is needed, is using "txid:vout" from the sender's input. That will be always unique, because each coin can be spent only once, so for the same recipient's public key, it will be tweaked in a different way each time.
hero member
Activity: 667
Merit: 1529
June 20, 2022, 01:07:11 PM
#56
Quote
This can be solved by using R-value of the signature, instead of B-value public key.
It can be better than that. We could use z-value instead. Processing transactions is needed anyway, so by using z-value as an offset, it is guaranteed to be unique. And for Taproot addresses, we no longer have SIGHASH_SINGLE bug, so it will always be a hash of some transaction.

Edit: Also, to avoid circular dependencies, the output of the recipient should be cleared during calculating this z-value, so it will be some altered z-value anyway. Or we could put the real recipient key here, then reach this z-value, and then use that to do the tweak in the real transaction.
hero member
Activity: 789
Merit: 1909
June 20, 2022, 11:01:20 AM
#55
Quote
Sender's potential for address reuse.
This can be solved by using R-value of the signature, instead of B-value public key. Then, address reuse would be automatically avoided, because it would mean that two inputs share the same k-value, so if d-values are also identical, this would leak the private key. Each safe wallet will use random k-value, that will be different each time.
member
Activity: 70
Merit: 320
Take profit in BTC. Account PnL in BTC. BTC=money.
June 20, 2022, 05:18:26 AM
#54
Quote
These all incur the problems of address reuse.  The problem must be solved.
We already have things that cannot be reused: transactions.

The problem is not to have something that cannot be reused.  The problem is to have a means for people to publish information that can be reused to send money to them money, without any other communication between sender and recipient—without the horrific privacy wreckage of Bitcoin address reuse as it now stands.
hero member
Activity: 667
Merit: 1529
June 20, 2022, 03:05:45 AM
#53
Quote
These all incur the problems of address reuse.  The problem must be solved.
We already have things that cannot be reused: transactions. It is technically possible to create a signed transaction, where some output is bigger than some input, sign it with SIGHASH_SINGLE|SIGHASH_ANYONECANPAY, and then, people can donate just by adding more coins, without invalidating signatures. Actually, this sounds like invoice, and is great when it comes to accumulating dust. The only missing part with such donations is that the creator have to specify the amount upfront, unless it is a donation to some miner, then it can be handled as a transaction fee.
member
Activity: 70
Merit: 320
Take profit in BTC. Account PnL in BTC. BTC=money.
June 20, 2022, 02:25:21 AM
#52
7) Silent payments greatly improve the fungibility of bitcoin transactions.
...
You were probably referring to privacy.

Privacy and fungibility are directly related because bitcoins can be discriminated by address and addresses can be associated with people, but I agree that "privacy" is more appropriate.

For cryptocurrencies, privacy and fungibility are practically synonymous:  You can’t have either one without the other, and providing either one provides the other.

In practice, a lack of privacy literally means that 1 BTC ≠ 1 BTC.

Anyway, I don't think that this payment method greatly improves privacy because it only removes the need for the receiver to communicate with the sender. If communication is already private, then nothing is gained.

The most important use case for Silent Payments is tip addresses, donation addresses, etc.  It is a very common and important use case.  This use case has never been solved in Bitcoin; I think that the lack of a solution is a flaw in Bitcoin.  Look around this forum at all the tip addresses in people’s signatures—observe all the donation addresses you see in static webpages.  These all incur the problems of address reuse.  The problem must be solved.


It looks like btc will go closer to what Monero was am I right? The problem I see with that is Monero was limited in growth because of the mass bans probably because of KYC. If Bitcoin implements silent payments to increase privacy (Woo!) would this put us at risk of meeting the same fate as Monero? or are we too big?

Zcash has strictly superior privacy technology, compared to Monero.  In the context of discussing strong privacy for Bitcoin (much stronger than Silent Payments), I addressed similar concerns accordingly:

Feel like BTC has walked that tightrope pretty well......

Not to discuss altcoins in WO, but as raw data for contemplating the hypothetical of a Bitcoin with strong privacy:  Gemini supports Zcash shielded withdrawals.  That is a NY Bitlicensed, notoriously ultra-KYC exchange, under one of the most onerous regulatory regimes in the world.  They started support for shielded withdrawals, after Zcash was hit with some high-profile exchange delistings during a FUDstorm; Tyler Winklevoss made Gemini’s position quite clear.  The Rock Trading in Europe is another regulated KYC exchange that supports Zcash shielded.

The exchanges have users’ KYC dox.  Police, tax enforcers, et al. can tell targeted persons, “Give us your view keys, or else”; view keys permit viewing, but not spending of shielded money that is otherwise entirely invisible on the blockchain.  Gemini or The Rock Trading users who withdraw shielded Zcash are concealing their private finances from the world; they will not end up on any “rich lists”, their finances are protected from snooping by cyberstalkers, and they can sleep quietly at night without worrying about armed robbers.  But they are not in any position to hide from their governments.  This issue is not as simple as it seems at a glance.

I think that Zcash has walked that tightrope pretty well.  Bitcoin could have done similarly—and it could do similarly, in the future.

See Tyler Winklevoss’ above-linked Tweet.  Do you suppose that he would renounce Bitcoin, if Bitcoin were to attain better privacy?


Try it, use a mixer for your bitcoins and sell them on some exchange. Lots of exchanges blacklist bitcoins from mixers.

My exchange never did that.  (I use DEX.)
legendary
Activity: 2310
Merit: 4313
🔐BitcoinMessage.Tools🔑
June 12, 2022, 03:00:16 AM
#51
For those interested in learning more about silent payments and other similar proposals aimed at improving privacy of on-chain users, you should listen to this podcast:

https://bitcoinmagazine.com/technical/silent-payments-improve-privacy-without-bitcoin-data

"In this episode of “Bitcoin, Explained,” hosts Aaron van Wirdum and Sjors Provoost welcome Ruben Somsen back on the show to talk about his recent proposal for “silent payments.”

Silent payments resemble earlier ideas like “stealth addresses” and “reusable payment codes,” in that they allow users to publish a static address. While this is not the actual bitcoin address where they will be paid, senders of a transaction can use this static address to generate new bitcoin addresses for the recipient, for which the recipient — and only the recipient — can, in turn, generate the corresponding private keys.

Like stealth addresses and reusable payment codes, the benefit of silent payments is that addresses can be posted publicly without harming users’ privacy; snoops cannot link the publicly posted address to the actual bitcoin addresses where the recipient is paid. Meanwhile, unlike stealth addresses and reusable payment codes, silent payments do not require any additional blockchain data — though this does come at a computational cost for the recipient.

The podcast episode details this in roughly two parts. In the first half of the episode, Somsen, van Wirdum and Provoost break down how silent payments work, and in the second half of the episode, they discuss how silent payments compare to stealth addresses and reusable payment codes, as well as some potential implementation issues.

Provoost made a successful silent payment on the Signet Bitcoin testnet, but silent payments are not ready for mainnet use at this time."

legendary
Activity: 2310
Merit: 4313
🔐BitcoinMessage.Tools🔑
June 06, 2022, 07:39:57 AM
#50
I realized another drawback: the receiver needs their private key to know they've received a payment. That makes a watch-only wallet impossible,

I think you are right. Generally to track all incoming payments, you need a master public key from which all other public addresses are deterministically derived. To (re)calculate a particular address, you need two pieces of information, namely your xpub (ypub, zpub) and derivation path to the address. Anyone who has both can reconstruct the address and see all associated transactions. In some cases, one even doesn't need to know a derivation path. In silent payments, you also need only two pieces of information to calculate the address, one of which is a public key of the sender and the other is a private key of either sender or receiver. This requirement (having to have a private key) makes watch-only wallets impossible, let alone the fact that each particular sender creates unique private-public keypair for the receiver, which has no connection with other keypairs.

Quote
and even if you use Bitcoin Core, private keys are stored encrypted until you enter your password. Keeping the wallet unlocked adds a security risk.
Hmm. You're not obligated to do a continual real-time scanning to make use of silent payments. Just scan the blockchain once a month, unlocking your wallet for a short time.

Alternatively, we can separate the silent public key into the "scanning key" and "spending key" to mitigate the security risk.

We can extend the silent payment address with a scanning key, which allows for separation of detecting and spending payments. We redefine the silent payment address as the concatenation of X_scan, X_spend, and derivation becomes X' = hash(i*X_scan)*G + X_spend. This allows your internet-connected node to hold the private key of X_scan to detect incoming payments, while your hardware wallet controls X_spend to make payments. If X_scan is compromised, privacy is lost, but your funds are not.
legendary
Activity: 2114
Merit: 15144
Fully fledged Merit Cycler - Golden Feather 22-23
June 06, 2022, 06:31:39 AM
#49
Could you briefly tell us about the advantages of silent payments over the common xpub sharing technique?


Xpub sharing is a way less efficient way of sharing a series of addresses than silent payments.
In the video, starting at around 33:23 those differences are analysed.

But the summary is: you should share your xpub only with those you are confident sharing your privacy with, as they would be able to track all your received payments scanning the addresses generated from such xpub.
Silent payments instead break this allowing you the total privacy (with the “scanning costs”).
legendary
Activity: 3290
Merit: 16489
Thick-Skinned Gang Leader and Golden Feather 2021
June 06, 2022, 05:14:27 AM
#48
I would call silent payments a steganographic method of hiding information because it allows you to get lost in the crowd merely by making completely normal payments with no specific fingerprint. With silent payments you are hiding in plain sight.
I realized another drawback: the receiver needs their private key to check if they've received a payment. That makes a watch-only wallet impossible, and even if you use Bitcoin Core, private keys are stored encrypted until you enter your password. Keeping the wallet unlocked adds a security risk.
legendary
Activity: 2310
Merit: 4313
🔐BitcoinMessage.Tools🔑
June 06, 2022, 02:54:43 AM
#47
Another "not too technical" resource is the following one:

https://rumble.com/v12kuz7-bitcoin-silent-payments.html

Where I got a very clear overview of this technique. And solved my first thought about this (why it is superior to "xpub-sharing")
Thanks for the link to a video presentation. When I was writing about silent payments, I couldn't find any visual aids that would help me to understand this technology better. Could you briefly tell us about the advantages of silent payments over the common xpub sharing technique?

The irony is strong with this one:

I would call silent payments a steganographic method of hiding information because it allows you to get lost in the crowd merely by making completely normal payments with no specific fingerprint. With silent payments you are hiding in plain sight.


The second reflection revolves also around the BIP119 drama. Silent Payments are techniques which don't require any new functions in the bitcoin protocol. It's a very elegant and effective technique to gain privacy from transactions and solve a real problem. What I mean, so much remains to be "discovered" using the current bitcoin protocol, we cannot risk anything implementing a new feature which is secure and scrutinised beyond any reasonable doubt.
It is true, unlike very controversial proposals like covenants, which I personally deem extremely undesirable for bitcoin because they make it less fungible and censorship-resistant, the silent payments technique doesn't require making any changes on a protocol level.

legendary
Activity: 1568
Merit: 6660
bitcoincleanup.com / bitmixlist.org
June 05, 2022, 12:19:51 AM
#46


Quote
The payment will not be traceable.
Let's say TPB accept Silent payments. Someone sends them a donation, which confirms on-chain. Nobody else can know TPB is the receiver, because they can't know which on-chain address belongs to their Silent payment.



But what if I send a very specific amount. Then I could just look at the next block, find that amount and see to which address it is send in reality. So at least the sender can very easily verify the real address.

That is possible, but the whole point is that the address is mangled and used just once. That means it wouldn't matter that a specific amount is sent to an addresses - that's the only receive it makes anyway.

I see this as a feature mainly for wallets, not really for websites accepting BTC donations as you can't really make the address update on each load without some PHP or JS running in the backend, and most people won't see a reason to make their addresses that cumbersome.
Pages:
Jump to: