When looking at your transactions in your Bitcoin wallet, it’s good to know who you are interacting with using easy to understand names. I propose that names be local and be selected by the user to refer to his peers. So far this is straightforward. For example, Fred
Is my name for my friend Fred.
I also propose the creation of compound names that refer to the names others are using locally on their machine and having those compound names correspond to the public keys of the named persons. A peer can choose to send me their name for someone and my machine would use a compound name to refer to it. These compound names always refer to public keys that are globally unique. So, for example, Fred.Bob
Is the key of a person that Fred calls (locally on his machine) Bob. It can be read as my
Fred’s Bob. These compound names can be multi level. Fred.Bob.Carol
Again assuming Fred sent me Bob.Carol, I can use this to send Bitcoin to Carol and I can decide to give a local name to my
Fred’s Bob's Carol on my machine because I happen to know her. Carol_Ward
You can pass these names bundled with the associated public keys to other users allowing them to create or check transactions that refer to those users. Since names are only your local name for each peer, this can happen without breaking the anonymity properties of Bitcoin.
I wrote a lot more but decided to put it in a PDF here: http://goo.gl/AJ1Mg