Given we have a name system in the blockchain that allows you to know the public key of user A. We can use DH ECC to generate a unique receiving address for user A as so.
Create TempPrivateKey TEMP.PRIVATE_KEY
TEMP.PRIVATE_KEY * USER.PUBLIC_KEY => SECRET => ONE_TIME_PRIVATE_KEY => ONE_TIME_ADDRESS
Send a transaction that pays to ONE_TIME_ADDRESS and attaches TEMP.PUBLIC_KEY
Every client on the network will be able to perform the following operation:
USER.PRIVATE_KEY * TEMP.PUBLIC_KEY => SECRET => ONE_TIME_PRIVATE_KEY
If ONE_TIME_PRIVATE_KEY is the one that controls ONE_TIME_ADDRESS then user will immediately spend the funds from ONE_TIME_ADDRESS to NEW_ADDRESS because the sender retains the ability to cancel the transaction.
The plus side of this is:
a) no need to exchange addresses
b) ability to encode a message and 'from' data into the transaction
c) the receiver is anonymous to everyone but the sender
d) potential to cancel/retract a transfer if it is not accepted in a timely manner.
e) simplifies accounting in the wallet
f) generates higher fees and dividends
The downside to this:
a) Uses more space in the blockchain
b) Requires two transactions
c) Results in higher fees
Discuss...Single Transaction Variation
Given an extended public key + index you can generate a child public key. If I have the extended private key + index then I can generate the corresponding child private key.
So we can use the same process as above.
TEMP_PRIVATE_KEY * EXTENDED_PUBLIC_KEY => SECRET
EXTENDED_PUBLIC_KEY.child( SECRET ) => RECEIVER_PUBLIC_KEY => RECEIVER_ADDRESS
You then broadcast a transaction that includes TEMP_PUBLIC_KEY + RECEIVER_ADDRESS
The receiver then does the following:
TEMP_PUBLIC_KEY * EXTENDED_PRIVATE_KEY => SECRET
EXTENDED_PRIVATE_KEY.child( SECRET ) => RECEIVER_PRIVATE_KEY => RECEIVER_PUBLIC_KEY => RECIEVER_ADDRESS
Only the receiver has the private key and only the sender & receiver know SECRET and thus the transactions are entirely unlink able.
This process would only expand the transaction size by 33 bytes and allow people to transact entirely by name with automatic unique addresses for every transaction.
This is a variation on: http://www.coindesk.com/stealth-addresses-secret-bitcoin-privacy
that leverages the name system to solve the first part of the problem.