Stealth addresses are mentioned in the context of privacy of bitcoin transactions. What are they and how would they work?
Can they provide 100% anonymity?
Bitcoin Stack Exchange is a question and answer site for Bitcoin crypto-currency enthusiasts. It only takes a minute to sign up.
Sign up to join this communityAs I understand it, the "stealth address" is intended to address a very specific problem. If you wish to solicit payments from the public, say by posting a donation address on your website, then everyone can see on the block chain that all those payments went to you, and perhaps try to track how you spend them.
With a stealth address, you ask payers to generate a unique address in such a way that you (using some additional data which is attached to the transaction) can deduce the corresponding private key. So although you publish a single "stealth address" on your website, the block chain sees all your incoming payments as going to separate addresses and has no way to correlate them. (Of course, any individual payer knows their payment went to you, and can trace how you spend it, but they don't learn anything about other people's payments to you.)
But you can get the same effect another way: just give each payer a unique address. Rather than posting a single public donation address on your website, have a button that generates a new unique address and saves the private key, or selects the next address from a long list of pre-generated addresses (whose private keys you hold somewhere safe). Just as before, the payments all go to separate addresses and there is no way to correlate them, nor for one payer to see that other payments went to you.
So the only difference with stealth addresses is essentially to move the chore of producing a unique address from the server to the client. Indeed, in some ways stealth addresses may be worse, since very few people use them, and if you are known to be one of them, it will be easier to connect stealth transactions with you.
It doesn't provide "100% anonymity". The fundamental anonymity weakness of Bitcoin remains - that everyone can follow the chain of payments, and if you know something about one transaction or the parties to it, you can deduce something about where those coins came from or where they went.
This page on the bitcoin wiki explains the exact procedure for generating and using a stealth address. It's not very user friendly at this point in time and is considered experimental.
Simply:
Receiver generates a an address and a private secret and then sends this address to someone who he wants payment from.
Sender uses the address and a "nonce" to generate the address he/she can send funds to.
Sender communicates the nonce to the receiver and by using this nonce and the secret key generated earlier he/she can unlock the address with the funds.
The stealth addresses are based on the Elliptic curve Diffie-Hellman protocol and in theory this method is anonymous. As this code is relatively new however there may possibly be bugs.
The original article in which the concept of stealth addresses is introduced is written by Peter Todd and can be found in this Bitcoin-development list message. The abstract of the article states:
A Stealth Address is a new type of Bitcoin address and related scriptPubKey/transaction generation scheme that allowers payees to publish a single, fixed, address that payors can send funds efficiently, privately, reliably and non-interactively. Payors do not learn what other payments have been made to the stealth address, and third-parties learn nothing at all. (both subject to an adjustable anonymity set)