On Aug 10, 2007, at 12:46 PM, Stephen Farrell wrote:




Santosh Chokhani wrote:
What is X.509 specific?
The term certificate or certification path or both.

Yes. For me anyway, particularly the latter term.

> Will PGP and others
not have a chain of keys/certificates?

Who knows? (Can't recall off the top of my head what the
PGP things are called - not keyrings was it?)


They're called "certificates." The process where by one certificate certifies another one is something we call "certification."

I know that sounds flippant, but it isn't. More below. I wasn't going to send this note at all until we got into discussions of what format certificates TAM ought to address.


Are not these concepts generic and is this not time to separate concepts
from X.509 format?

That would be a worthwhile activity. But not one that it'd be wise
to build in as a precondition on this proposed activity. So I'd rather
see a definition use more neutral terms.


An historical note first. The term "key" for "certificate" in the way that it is colloquially used in OpenPGP was coined by Whit Diffie. People like it. It's short, friendly, and has a nice provenance.

However, it isn't accurate. A certificate contains a key, but a certificate is not a key.

Worse, an OpenPGP certificate typically contains at least two public keys, along with a number of certifications. (It is possible to have a one-key OpenPGP certificate, but that can only be used for signing. If you want to encrypt something, you need a signing key and an encryption key in your certificate. Right now, we're moving to a use model that has at least three keys -- where the top level signing key is merely a certification key, and there's an encryption and signing subkey. This is particularly popular in Europe.)

What this means is that if you say "OpenPGP Key" and want to talk about its components, you're using the word "key" far too many times. I have tried to apply rigor to the terminology, but people like using the word "key" for "certificate" and refused to play along. So I merely get precise when I need to.

X.509 has a much more atomic model of certificates, but you can create the same structures of an OpenPGP certificate with a handful of X.509 certificates. Likewise, you can take a "certificate set" or "certificate family" of X.509 certificates and create an OpenPGP certificate out of them.

(Note that I'm simplifying here. I don't have time to write, nor you to read the constraints and further explanations I want to write.)

There is a *syntactic* isomorphism between OpenPGP and X.509. The differences are in the semantics, but you can express those semantics with either syntax. I sometimes think of this in a graph-theoretic way, and in that mode of thought, the primary X.509 object is a node +edge pair, from which you then make up graphs, and the OpenPGP object is a small graph, which contains nodes and edges. Another metaphor is that X.509 starts with quarks and builds up atoms, while OpenPGP starts with atoms that contain quarks. I like this one because in physics, atoms are not atomic, and they are not atomic for historical reasons.

Now where the OpenPGP and X.509 (particularly PKIX) models diverge is an attitude about issuers and roots. In OpenPGP, every user is a potential CA. Every certificate is a potential root. This makes for some semantic differences, as well as attitude differences.

Every so often, a PKIX/X.509 discussion comes up about using the same public key in more than one certificate. One thing that always comes out of that discussion is noting that if you did it, you'd need a way to revoke a public key as well as a certificate, and no such thing exists. Well, OpenPGP effectively does this by having both a signature revocation and a "key" revocation mechanism. Note that in *this* case, the OpenPGP colloquialism of "key" actually means a key!

(If Alice and Bob each certify my "key," that corresponds to my having three X.509 certificates, each with the same public key. My "key" is three certs, one issued by Alice, one issued by Bob, and one that is self-signed. If I revoke my self-signed certificate, that implies revoking the other two. Yes, I know all the things you're thinking now.)

So let me get to keyrings, and then back to TAM. There's no such thing as a keyring. More precisely, it is not well-defined. That file you have for PGP or GnuPG is a sequential file of OpenPGP certificates, nothing more. However, a "keyring" could also be an SQL database containing same. So if you permit me to contradict myself, a "keyring" is nothing more than a certificate database with a warm, fuzzy, Diffie-coined word for it, and is often implemented as a flat file.

OpenPGP makes a show of explicitly not defining how to express trust. This is because when the OpenPGP working group was formed, we were told we couldn't be a PKI, and that meant we couldn't standardize trust. So while there is a "trust packet" in OpenPGP, it's officially implementation-dependent. As it turns out by some happy coincidence, we all base our trust structures on what went before, and we can (usually) directly import these from one implementation to another.

And this is why TAM would be useful to OpenPGP, and why you'll find slightly tepid comments from some people. Historically, we've solved these problems among ourselves, and typically it all works just fine. In other words, TAM gives X.509 ways to do things that OpenPGP has done for a long time.

However, I know there are rough edges, and TAM would be a fine way to iron them out. For my company, PGP Corporation, we work in PKIs that are imaged into X.509 syntax and OpenPGP syntax. We need to maintain parallel structures, and TAM is a fine way to do it.

If TAM becomes PKIX-only, then I'm going to have to make a TAM extension to handle certs in different formats. I can think now of a way to do it:

I go look at whatever TAM decides, and go directly to where the ASN.1 says "certificate goes here." And then I just put there instead of the certificate a type-constant (an OID?) and then the certificate. Then poof, Alice is your auntie, and we're all done.

Is it *that* hard to make this part of TAM, and have type constants for PKIX, X.509, SPKI, DNSsec, SAML, XML-whatever, DKIM, etc.?

        Jon

--
Jon Callas
CTO, CSO
PGP Corporation         Tel: +1 (650) 319-9016
3460 West Bayshore      Fax: +1 (650) 319-9001
Palo Alto, CA 94303     PGP: ed15 5bdf cd41 adfc 00f3
USA                          28b6 52bf 5a46 bc98 e63d



Reply via email to