The solution is an out of band protocol to negotiate the transaction, instead of trying to pack everything into a static string (address, URI, ...).
I was thinking, we are able to put Bitcoin addresses in Namecoin and can refer to those addresses using names. So when I want to send money to Dummy, I just enter
dummy to the wallet interface. Maybe even check if it's the right person/entity by inspecting other details of
dummy through the confirmation window.
What can't be done this way is dynamic receiving addresses. But we can get a secure
* URI from Namecoin for an online tool to convert a certain code to an address and additional information (invoice, etc.). So, what I need from the shop is the shop's name and some kind of payment code (customer name, checkout number, etc.). This can also be delivered using the standard Bitcoin URI scheme. After the user enters the details (E.g. I'm sending money to my account on MtGox:
mtgox, memvola), he inspects the response and then confirms the payment.
(*) We can get a certificate from Namecoin for secure http transfers. The URI can also identify a Tor or I2P resource, but the protocol would still be http/https.
EDIT: To support my idea, the advantages if this gets wide acceptance are:
- Almost impossible to make a wrong payment, you can get the sum you need to pay as a response from the shop's URI.
- For the example of MtGox, I don't even need to log in and get an address to send money.
- Perfectly decentralised, does not depend on third party services.
- No fear of man in the middle attacks and dependence on external certificate authorities.
- Easy to implement, though payment systems would need to run Namecoin alongside Bitcoin. This includes home users who want to be extra secure as well...
- You get a Namecoin installation as a bonus, now you can browse the web freely, and other things...