Hi,

I hope it's ok for me to post this here, I need some feedback on a public
key infrastructure. In return, you might enjoy reading it.

My goal here is *only* to link public keys to guids, and like spki/sdsi, I
assume you already know that the guid as such is bonafide, and I am not
trying to link the guid to "Walton's Mountain assumptions" about a
real-world person or entity.

The only reason I don't use the public key itself directly as the guid, is
that I want the guid to be human-memorable (Zooko's triangle); let's say
they are email addresses.

The problem with using web-of-trust for this is that many times you will
want to give someone your email address and start communicating from
scratch, without an introducer. Even if a connection exists, it would
require search to find it, and search is difficult without centralization.
Also my list of "friend-of-a-friend"s (FOAFs), through which i have a
chain-of-trust with you, may contain private information about who i hang
out with. So the whole web-of-trust approach is a hassle, and also
privacy-sensitive. The CA-approach is out of the question from the start,
because it's too centralized.

So what I came up with was to define a "fabric"-approach. We define a
multi-dimensional space in which all guids represent a fixed position. Your
coordinates in the fabric are determined not by you, nor by who you interact
with, but simply by the ASCII bits in your guid string. And then it's
simple: everybody sign the keys of their neighbours and vice versa to form
the fabric. Now to know your public key, I just walk from my position in the
fabric to yours, following the chain of neighbours that are all 'holding
hands', and so everyone's connected with everyone.

The idea is that the fabric sums up all the security of everybody, and links
it together to make it strong. If you would want to compromise one guid, the
neighbourhood watch would notice and refuse to interact with the conflicting
public key. If you compromise a whole area, the neighbours of that area
would notice. Etcetera.

I tried different ways to define the "neighbour" relationship, and in the
end I ended up defining a combination of additive and Hamming distance, on
bitstrings obtained from the original guid string with non-reversible
hashing. I think I sort of got it working, and it seems pretty efficient.
But the details of that are not what I wanted to bother you with right now.

The non-reversible hashing is there so it's not trivial to 'embush' someone
by registering a ring of email addresses around him. It makes it hard to
guess a given email address's neighbours, and thus hard to stage an
embush. You could still attack the system by flooding it with guids until
you are the owner of 99% of the guids. So all guid-providers should put up a
captcha to avoid that sort of attack.

Also, you would need to define what needs to be done if a tear in the fabric
is detected. if there are 2 conflicting public keys being announced, how do
you decide what is the right one? you need to make it hard to 'topple the
system' into an auto-immune defense against itself. also DDoS and vandalism
attacks need some attention. But i think in general, the pki could sort of
work.

My question is: does my fabric-based approach make any sense? or am i maybe
trying to solve a non-existing problem? There must be a flaw somewhere that
prevents other people from doing this already, I just don't see it.

Many thanks for your time!


Kind regards,
Michiel de Jong
www.unhosted.org/unhosted.html
_______________________________________________
p2p-hackers mailing list
p2p-hackers@lists.zooko.com
http://lists.zooko.com/mailman/listinfo/p2p-hackers

Reply via email to