> I think the most critical thing we could do is to make a small app that handles direct P2P communication.
Agreed. In order to actually solve the problems we face though, this p2p app needs to always encrypt messages -- even for indirect messaging. It needs to solve the authentication problem. And it needs to be opensource for perpetuity.
Forward secrecy ("I threw away the key") and repudiability ("You can't prove I sent that") would also be nice. OTR has these and I highly recommend reading the OTR papers [1] [2].
All in all this is a tall order. Heck, authentication alone is a tall order. The OTR Pidgin plugin has you enter a shared secret in order to authenticate a new buddy. I'm not sure this is ideal. Normal users will agree on that shared secret through an insecure channel like phone or text, or just use a guessable one, opening the door to a MITM attack at the most critical stage.
I'd rather see a web of trust [3] solution to the authentication problem. Bootstrapping the trust network is of necessity harder because it requires more careful interactions, usually f2f, but it does enjoy a viral property: the more users in the trust network, the easier it is to fill out your authenticated contacts list, since you'll be getting many of their identities through WoT introduction.
Maybe the existing GPG web of trust could be used as the base -- ie, offer import of GPG keys and trust database, or just reuse the GPG code straight up.
[1] http://www.cypherpunks.ca/otr/otr-wpes.pdf
[2] http://www.cypherpunks.ca/~iang/pubs/impauth.pdf
[3] http://en.wikipedia.org/wiki/Web_of_Trust