Fixing the broken GPG and HTTPS (X509) trust models with Simple Public Key Infrastructure (SPKI)

Seth list at sysfu.com
Mon Jun 29 08:48:26 PDT 2015


Reposted from  
http://vinay.howtolivewiki.com/blog/other/secure-private-reliable-social-networks-sprsn-3654


** secure private reliable social networks: sprsn **
by Vinay Gupta • December 29, 2014

sprsn is an idea for a small piece of software which I think would do the  
world some good by existing, and which currently does not exist.

It’s a deeply technical project that I probably don’t have time to build  
(unless somebody wants to pay my rent for a few months while I take a shot  
at it with a helper or two! – I am not serious about this) but I can  
describe what’s needed and maybe it will inspire somebody, in whole or in  
part.

Synopsis: combine the new (telehash) with the old (SPKI) and get a  
Facebook-killer in the form of a command line utility that provides a  
decentralized social network. However, will Ethereum do this, and a ton  
more?

The dream
sprsn bob "hey when are you coming over?"

sprsn bob list friends
> leslie
> carol
> jake

sprsn bob add carol
> added bob's friend carol with key [a23fd61b7]
> you have no other routes to carol

sprsn jake
> use bob's key for jake?

Now imagine that sprsn also has a web interface mode: sprsn -d 9999

http://localhost:9999 mounts a web interface to your local sprsn instance.  
The sprsn instance connects to your (online) friends running sprsn using  
telehash (a persistant DHT tool) for web chat and for key management:  
click on your friend’s friends to acquire their keys, and multipath to  
people (“you have 9 friends in common”) to get more certainty about the  
keys.

Obviously this would be great: the best of SSH and Facebook in a single  
utility. It is now relatively easy to build.

Let me show you why it hasn’t happened already, and why we need it!

The Problem
GPG and HTTPS (X509) are broken in usability terms because the conceptual  
model of trust embedded in each network does not correspond to how people  
actually experience the world. As a result, there is a constant grind  
between people and these systems, mainly showing up as a series of user  
interface disasters. The GPG web of trust results in absurd social  
constructs like signing parties because it does not work and creating  
social constructs that weird to support it is a sign of that: stand in a  
line and show 50 strangers your government ID to prove you exist? Really?  
Likewise, anybody who’s tried to buy an X509 certificate (HTTPS cert)  
knows the process is absurd: anybody who’s really determined can probably  
figure out how to fake your details if they happen to be doing this before  
you do it for yourself, and of the 1500 or so Certificate Authorities  
issuing trust credentials at least one is weak or compromised by a State,  
and all your browser will tell you is “yes, I trust this credential  
absolutely.” You just don’t get any say in the matter at all.

The entirely manual, Byzantine process is broken, and so is the entirely  
invisible, automated one. It just doesn’t work. The process of mapping  
keys to people is just broken and nearly all the rest of the trouble  
emanates from this fact. A GPG key maps a person to an email address to a  
key, and leaves you to pick who you trust enough to prove the map is  
right. An HTTPS cert maps an organization to an IP address to a key, and  
asks you to trust one of 1500 organizations your browser vendor chose to  
trust. It’s not just the trust model that’s broken, it’s the binding of  
these various pieces of data together using cryptography. Gluing the wrong  
stuff to the wrong stuff produces constant security and reliability  
problems.

What’s the wrong stuff? Legacy delivery mechanisms like email and DNS.  
Mapping a person to an email address, and an email address to a key is two  
mappings. Same for HTTPS where we map an organization to an IP address to  
a key. Two mappings, one of which is essentially arbitrary: I care about  
identity and key. I should not have to worry about IP address or email  
address – that’s a minor technical detail. But these outmoded trust  
systems foreground it, much to our discomfort.

Telehash
Enter Telehash, an encrypted network stack in which you route messages  
directly to a public key. The code is pretty simple

expect(mesh).to.be.an('object');
mesh.receive(new Buffer("208cb2d0532f74acae82","hex"), pipe);

The cryptographic key is the routing address. So now we only have to  
accomplish one level of indirection: person to key.

Something old, something new, something borrowed, something blue. Enter  
SPKI and our old friend, the Granovetter diagram.

SPKI and trust in networks, not webs
Simple Public Key Infrastructure is what we should have deployed instead  
of X509/HTTPS and the GPG web of trust. There are two critical differences  
between SPKI and X509/GPG. They are:

1) SPKI gives users the ability to certify facts about other users, for  
example “bob is allowed to use my computer” can be expressed in a  
machine-readable fashion (s-expressions.) This lets users build their own  
trust architectures on an ad-hoc basis.

2) SPKI allows anybody to chain certificates of this type (“fred says that  
bob says that vinay says that bob is allowed to use his computer.”) This  
ability removes the centrality of the CA: anybody that I trust can give me  
a certificate stating “this is the key for amazon.com” and because of  
certificate chaining, I can see the line of authority down which that key  
passed.

These might sound like minor features, but they are not: these two  
features express the difference between trust-hierarchy (X509) and  
trust-soup (GPG), neither of which are productive, and the  
consumer-producer based trust-anarchy which SPKI permits and, indeed,  
requires.

The best explanation of this in more detail is the Ode to the Granovetter  
Diagram which shows how this different trust model maps cleanly to the  
networks of human communication found by Mark Granovetter in his  
sociological research. We’re talking about building trust systems which  
correspond to actual trust systems as they are found in the real world,  
not the broken military abstractions of X509 or the flawed cryptoanarchy  
of GPG.

Usable security is possible
Once you fix the trust model so that it works for humans, and use Telehash  
to reduce the number of mappings from three (person -> delivery mechanism  
-> key) to two (person -> key) it’s possible to imagine a secure system in  
which people actually understand what is happening well enough feel  
comfortable that they understand what is going on.

So let’s break this down into the desirable properties for the system we’d  
build using these primitives.

For ease, let’s consider realtime chat in the first instance – just  
pushing messages down telehash sockets. The only question we have to  
answer is which telehash socket corresponds to which person.

1) person = key
there’s no way to break the binding between a person and a key, because a  
person is a key, or multiple keys.

2) delivery = key
this is what we get from telehash – I don’t need to worry about how I’m  
sending you the message, it’s right there.

So I obtain a key for a friend of mine by, say, email. Once I’ve connected  
to them, I can then ask them to send me keys for our mutual friends.

3) keys carry the chain of referrers
“alice says this is her key”
“bob says that alice says that this is her key”
“fred says that bob says that alice says that this is her key”

What that looks like in practice is a social graph, like the one embedded  
in facebook. I click on you, my friend, and I click on alice, your friend,  
and the connection that forms is an SPKI key being transferred to my  
keyring. The key is its history – the path by which the key came to me is  
the trust chain. If I want to be more sure the key I have is Alice’s key  
(and not your sockpuppet) I need to find an independent route or two to  
Alice.

If Google and Dunn & Bradstreet both agree that this key is the key for  
the IRS, that’s good enough for me.

4) tools and affordances
So how would we actually build this? I would recommend a golang  
implementation for cross platform compatibility and ease of distribution.  
NaCl and Telehash both exist for golang, and the self-contained binaries  
which result are easy to spread around. A command line client would be  
easy to augment with a web interface in which the golang program running  
on localhost provides an HTTP interface for users that want graphics etc.

Basically you get a decentralized social network with secure chat pretty  
much out of the box, where “friending” somebody acquires their key, and  
the referral network through which keys propagate is a key social dynamic.  
This can work.

5) advanced topics
How do we message friends who aren’t online? Store and forwards seems to  
be the obvious approach. Suppose I create a certificate (“sign”) which  
lists a set of telehash keys that are my “store and forward” servers – if  
you try and chat to me and I’m not there, you can ping one of them and  
dump an (encrypted) message for me there and I’ll pick it up when I’m  
online again.

Same holds for large block transfer (i.e. dropbox) – I specify my choice  
of servers by issuing a digital certificate. Do we need a central store of  
those certificates? Maybe, or maybe it’s simply an addressing mechanism:  
every time we chat, I push over my updated delivery info, and you can ask  
your friends for my updated delivery info if you need to reach me.

In all probability, a decision has to be made about whether to keep the  
old SPKI s-expression format for certificates, or move to JSON. Good luck  
with that decision, it’s a hard one.

Conclusion
There’s no way to fix a broken conceptual model with a better user  
interface.

GPG does not work for ordinary users, and GPG cannot work: we’ve been  
trying to fix this for 20 years and it has not happened. The process by  
which humans communicate is not tractable using those trust primitives.

We are stuck with a mess, and X509 is not an answer either – it worked  
when only big orgs wanted to secure their email and web sites, but now  
everybody wants to do it and the certificate issuing mechanisms are  
becoming far too sloppy to trust.

We have to go back 20 years to the brilliant analysis of the people who  
did not ship a sloppy hack to quickly get to market but sat there and  
figured out the right thing to do, if we want to fix this mess in a  
durable way.

High roads and low roads
The high road on these issues is Ethereum.

Telehash takes the DHT and uses it for routing. Bitcoin takes the DHT and  
adds proof of work to generate a history.
Ethereum takes bitcoin and puts executable contracts into the history,  
plus protocols for chat and block transfer.

It’s entirely possible that SPKI-style user-generated certificates will  
make their way into Ethereum, either as part of the core spec or as a  
common class of DAAPs. “I have bought stuff from bob and would do so  
again” can be issues as a certificate, in a standardized format, and these  
certificates can be spidered out of the blockchain to generate trust  
metrics.

Likewise, if all your messaging is happening on the Ethereum protocol, you  
do not necessarily need telehash.

Here’s the question: is Ethereum’s “one ring to rule them all” approach  
feasible, or should we work closer to the Unix Philosophy and build  
smaller pieces, loosely joined. I can imagine a command line Telehash/SPKI  
client which is as commonly used as SSH is today, for slinging around chat  
and small data.

I can also imagine an operating-system like sea of executable contracts  
and helper functions in a densely knit global decentralized computational  
ecosystem providing all the same services and more.

I, personally, am in favor of a mixed strategy. I think the sheer naked  
moonshot ambition of Ethereum is extremely attractive, and part of the  
reason I joined the team (F.I.S.T.) was that I wanted to be part of such  
an ambitious vision.

But it’s an awful lot of bleeding edge tech, and with a project that large  
and complex, you can never be quite sure what will come out the other end.  
In particular, I have no idea whether the nuances of SPKI etc. which will  
enable a revolution in the way that ordinary users experience cryptography  
will show up in Ethereum in a usable way – the core smart contract etc.  
functions can work perfectly well without fixing the nuances that  
user-issued certificates will get.

So I’m writing this post for two reasons: to encourage the Telehash  
community to examine SPKI and look at it as a way of managing keys inside  
of their DHT routing paradigm, and to encourage the Ethereum community to  
look at SPKI and ask whether it might empower users within the larger  
Ethereum landscape. Either way, I would dearly love to see an SPKI revival  
so that, finally, at long last, pull the sword from the stone: Johnny can  
encrypt.




More information about the cypherpunks mailing list