The users wouldn't search for hashes. Pretty much you and I do an ECDH key exchange and derive a shared secret, which is then hashed out three times: 54157144abd1905dc3112d50822bd6329f004f7c0dbe773b98b0dbe1febe5fcb fe3f89e29d144fe1ab5865a1d1d3eb16834949970e8cacd72286523b7a322720 74cc5fec94a2b633da2c628aa0d23d850a3ad5ddaa31469c6219897de3cfd8e5 The first hash is our shared private contact string, the second hash is my first public contact string and the third hash is your first public contact string. When I send the first message to you, I tag it with: fe3f89e29d144fe1ab5865a1d1d3eb16834949970e8cacd72286523b7a322720 as the keyword. When I send future messages to you they are tagged with the hash of our private contact string and the previously used public contact string, so the second message I send to you is tagged with sha256sum(54157144abd1905dc3112d50822bd6329f004f7c0dbe773b98b0dbe1febe5fcbfe3f89e29d144fe1ab5865a1d1d3eb16834949970e8cacd72286523b7a322720) = cb5a1f9e6af49dab36718c85259730bfaf54cb0bf524401682db840a3c0820de since we both have our private and public contact strings, we can always search for messages from each other. But it isn't like you need to actually type the hash in yourself, or even know about it. All of that happens transparently to the user, every now and then their client connects to an EKS server over Tor Client <-> Tor <-> EKS and sends a list of keywords to search for, the list being all of the future public contact strings they can expect from any of their contacts. The EKS server then returns any messages tagged to the user to the user, and because of the properties of EKS it is incapable of determing the keywords the users client searched for and incapable of determining which messages the user obtained. To send messages to the EKS server clients send them through a variable latency network of hidden service mixes (this part is done already) Client <-> Tor <-> Mix 1 <-> Tor <-> Mix 2 <-> Tor <-> EKS so forward anonymity comes from the mix network + Tor, and receive anonymity comes from EKS. Additionally, all the message encryption and authentication etc (this part is done already) takes place transparently to the client, as far as they can see it is just like using regular PM system or posting on regular forum or loading a blog page with a long random looking address. All of the technically advanced stuff happens behind the scenes. The EKS servers themselves mirror each others content: EKS 1 <-> EKS 2 <-> EKS 3 <-> EKS 4 and users can connect to any of them. Might need to think of a way to make it use space more optimally than total mirroring, but that will open up anonymity problems probably. At first at least it will be total mirroring. So there are three things left to do: 1. Implement EKS 2. Implement trustless bitcoin mixing 3. Make a GUI and take care of organization related things. Pretty much this part is "make a forum" , the crypto / anonymity / networking / database parts are what were worked on first, and making a forum is going to be extremely easy compared to them (especially since it is largely based on the database code already done, and especially since a cross platform GUI tool kit has already been wrapped up pretty nicely for easy GUI construction for the project).