This has recently caught my interest, I've seen it before, but brushed
it aside for some reason:
www.ists.dartmouth.edu/library/16.pdf
SPKI even rates a mention in Li Gong's "Inside Java 2's platform
security" 2nd ed. page 144.
There is some BSD licensed software on sourceforge called JSDSI,
although it hasn't been actively developed recently, the code looks
relatively clean.
Anyway, I'm thinking about writing some graphical utilities to manage
pubic private key pair and certificate generation and storing keystores
and truststore's.
The appealing thing about SPKI is it's based on local name spaces, ideal
for internet based secure communications.
Authentication is left up to the local namespace, so for instance
someone can log on using PAM (or any other login provider) their Subject
then runs with their authenticated Principal ( a Certificate), their
company Principal (Certificate) would then delegate permission, if
allowed for that Principal to communicate with another company's network
on behalf of the company. The second company is only concerned with the
first, not with the details of the user from the first company. So it
provides and allows for anonymity, if required.
I'm not completely sure how it integrates with Java 2 Security, or
whether the java security policy needs to provide support for it. It
should be relative simple binding local names to principals using
keystore aliases. This allows interacting, but separate companies, to
have their own principal aliases for each other, their users, user
groups or roles etc.
To quote the referenced paper (pages 7 & 8):
"In 1996, Ron Rivest and Butler Lampson at MIT designed the Simple
Distributed Security Infrastructure (SDSI) [26]
with the main goal of facilitating “the building of secure,
scalable, distributed computing systems” [7]. Around the
same time, Carl Ellison proposed the Simple Public Key
infrastructure (SPKI) [5] to simplify authorization. In 1998,
these two proposals merged to form SPKI/SDSI.
One of the main goals of SPKI/SDSI is to provide flexible and
lightweight authorization—particularly in comparison
to X.509. Moreover, to avoid the ambiguity problems in global names,
SPKI/SDSI is centered on public keys—since
a PKI principal always ends up needed to prove knowledge of the
private key. SPKI/SDSI is egalitarian: no global
hierarchy or hierarchical infrastructure necessary. Every principal
is free to issue certificates to other individuals. This
also leads to scalability. As noted above, SPKI/SDSI is centered on
keys, and dispenses with the notion of globally
unique names. A principal is free to use names, but these names are
explicitly part of that principal’s local namespace.
SPKI/SDSI works by combining a public key with a set of attributes
to form an authorization certificate (in contrast
to its counterpart, the X.509 attribute certificate that binds a
distinguished name to a public key). Figure 4 shows this
authorization triangle [12]. SPKI/SDSI authorization certificates
list the issuer and subject (both identified via public
keys), a tag field that carries the conveyed authorization, and
validity dates.
One of the other main advantages of SPKI/SDSI is its ability to
delegate authorization easily. This is done using a
propagate bit in the authorization certificate. If this bit is set,
then the subject of this certificate can re-delegate the
permission or attributes he is given. Delegation is transitive; if
Alice delegates to Bob (with permission to delegate
further) and Bob delegates to Carol, then in effect Alice has
delegated to Carol.
SPKI/SDSI can also create name certificates binding names to public
key but they are not required for authorization
decisions. The name is valid only for the local namespace and is
used by the principal only for personal identification
SPKI/SDSI name certificates list issuer and subject (both identified
via public keys), identifier (the local name), and
validity dates. In SPKI/SDSI, a principal can also create groups by
issuing multiple name certificates—one for each
group member—with the same name and different subject keys. The
concept of groups can also be used to create roles
for role-based authorization."
"In SPKI/SDSI, an authorization flow is a chain of valid
certificates—authorization only, or authorization and name—
that specifies an authorization [7]. The trust root of an
authorization flow is the first principal in the chain who started
the delegation process. Unlike X.509, this principal does not need
to be a distinguished CA.
SPKI/SDSI certificates use S-expressions: “human-readable ASCII
representations” [25]. LISP-like S-expressions
make it easy for humans to read a certificate and deduce its
meaning, in contrast to X.509 and ASN.1. Parsing
canonical S-expressions can take much less code size that parsing
ASN.1 data; in one study [11], S-expression parsing
code takes 8 KB, while ASN.1 parsers take 50KB to 500KB,.
As noted earlier, SPKI/SDSI uses a tag-language to express
authorization information through large sets of strings or
S-expressions. Standard libraries may be written to intersect
certificate tags and deduce what an authorization chain
authorizes. On the other hand, because of X.509’s generality, each
developer is free to define an X.509v3 extension
format and then define how those attributes may be intersected.
Thus, each application using X.509 has to write a
separate X.509 chain-processing routine.
In contrast to X.509, SPKI/SDSI emphasizes short-lived certificates,
rather than Certificate Revocation Lists (CRLs)."
Cheers,
Peter.