Simple Public Key Certificate Carl M. Ellison INTERNET-DRAFT CyberCash, Inc. Expires: 29 January 98 Bill Frantz Electric Communities Butler Lampson Microsoft Ron Rivest MIT Laboratory for Computer Science Brian M. Thomas Southwestern Bell Tatu Ylonen SSH 29 July 1997 Simple Public Key Certificate ------ ------ --- ----------- Status of This Document This document supersedes the draft filed under the name draft-ietf- spki-cert-structure-01.txt and reflects changes in the structure to simplify it. The draft ends with a list of open questions for group discussion. Distribution of this document is unlimited. Comments should be sent to the SPKI (Simple Public Key Infrastructure) Working Group mailing list or to the authors. This document is an Internet-Draft. Internet-Drafts are working documents of the Internet Engineering Task Force (IETF), its areas, and its working groups. Note that other groups may also distribute working documents as Internet-Drafts. Ellison, et al. [Page 1] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 Internet-Drafts are draft documents valid for a maximum of six months. Internet-Drafts may be updated, replaced, or obsoleted by other documents at any time. It is not appropriate to use Internet- Drafts as reference material or to cite them other than as a ``working draft'' or ``work in progress.'' To learn the current status of any Internet-Draft, please check the 1id-abstracts.txt listing contained in the Internet-Drafts Shadow Directories on ds.internic.net (East USA), ftp.isi.edu (West USA), nic.nordu.net (North Europe), ftp.nis.garr.it (South Europe), munnari.oz.au (Pacific Rim), or ftp.is.co.za (Africa). Ellison, et al. [Page 2] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 Abstract With the proliferation of public key cryptography on the Internet, there arises a need for certification of keys. In the literature, the word 'certificate' has generally been taken to mean 'identity certificate': a signed statement which binds a key to the name of an individual and has the intended meaning of delegating authority from that named individual to the public key. (See, for example, RFC 1422.) This process is designed to copy a relationship between two entities from the physical world into the digital world. The Internet itself changed the world from the one in which identity certificates made sense. We now deal with people we have never met and never will, which makes their names meaningless to us, but we still need to verify whether they are authorized to perform some action, achieve some access, sign some document, etc. SPKI certificates were designed to perform that function by directly specifying the (permission,key) binding which is of interest in the digital world. As merged with SDSI, the current certificate format also allows someone to bind a key to a name in their own private name space. The certificate structure presented here allows permissions to be delegated to SDSI-named individuals or to raw keys. Acknowledgments Several independent contributions, published elsewhere on the net or in print, worked in synergy with our effort. Especially important to our work were: [BFL] and [RFC2065]. The inspiration we received from the notion of CAPABILITY in its various forms (SDS-940, Kerberos, DEC DSSA, [SRC-070], KeyKOS [HARDY]) can not be over-rated. Significant contributions to this effort by the members of the SPKI mailing list and especially the following persons (listed in alphabetic order) are gratefully acknowledged: Steve Bellovin, Mark Feldman, John Gilmore, Phill Hallam-Baker, Bob Jueneman, David Kemp, Angelos D. Keromytis, Paul Lambert, Jon Lasser, Jeff Parrett, Bill Sommerfeld, Simon Spero. Ellison, et al. [Page 3] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 Table of Contents Status of This Document....................................1 Abstract...................................................3 Acknowledgments............................................3 Table of Contents..........................................4 1. Overview of Contents....................................7 2. Scope Of This Effort....................................8 2.1 Charter of the SPKI group..............................8 2.2 Areas Covered And Not Covered..........................8 2.2.1 Key and certificate storage..........................8 2.2.2 Protocols to use public key authentication...........9 2.3 Other Certificate Formats.............................10 2.4 Goals of this effort..................................10 2.5 SPKI Certificates vs. Capabilities....................11 2.6 Chosen standard format................................11 3. Assumptions, Definitions and Design Issues.............12 3.1 Background............................................12 3.2 Definition of PRINCIPAL and KEYHOLDER.................13 3.2.1 Protection of Private Keys..........................14 3.3 Certificate Structure.................................15 3.3.1 5-tuple Reduction (introduction)....................16 3.3.2 Authority Loops.....................................17 3.3.3 Certificate Result Certificates.....................18 3.4 Relation to Policymaker...............................19 3.5 Name spaces and Identity Certificates.................20 3.5.1 X.500 and X.509.....................................20 3.5.2 Death of global identity certification..............21 3.5.3 SDSI 1.0 Name spaces................................21 3.5.4 Mappings within cyberspace..........................22 3.5.5 Mappings to (keyholder K1)..........................22 3.5.5.1 Donation Certificates.............................22 3.5.5.2 Process Server Certificates.......................23 3.6 Certificate validity periods..........................23 3.7 Unwanted Attributions.................................24 3.8 Blind Signatures......................................25 3.9 Determinism...........................................25 4. SPKI Object Definitions................................27 4.1 Canonical S-expression................................27 4.1.1 .......................................27 4.1.2 S-expression........................................28 4.1.3 Encoding examples...................................28 4.1.4 Use of canonical S-expressions......................29 4.1.5 Non-canonical (advanced) S-expressions..............29 Ellison, et al. [Page 4] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 4.1.6 Unique IDs..........................................30 4.2 SPKI/SDSI 2.0 Objects.................................30 4.2.1 ...........................................31 4.2.2 ...........................................33 4.2.2.1 HMAC-MD5..........................................33 4.2.2.2 DES-CBC-MAC.......................................33 4.2.3 ..............................................34 4.2.4 .........................................34 4.2.5 ...............................................36 4.2.6 ..........................................37 4.3 object.........................................37 4.3.1 Bare-bones SPKI.....................................38 4.3.1.1 .........................................39 4.3.1.2 ....................................39 4.3.1.3 ..........................................39 4.3.1.4 ......................................40 4.3.1.5 .........................................40 4.3.1.6 .....................................40 4.3.1.7 ...........................................40 4.3.1.8 .............................................41 4.3.1.9 ...........................................41 4.3.1.9.1 ..........................................41 4.3.1.9.2 ...................................42 4.3.1.10 ........................................43 4.3.2 SPKI/SDSI...........................................43 4.3.2.1 ..........................................43 4.3.2.2 .........................................44 4.3.2.2.1 ..........................................44 4.3.2.2.2 ......................................45 4.3.2.2.3 .......................................45 4.3.2.2.4 .....................................46 4.3.2.3 .....................................46 4.3.3 Tag algebra.........................................46 4.3.3.1 *-forms...........................................47 4.3.3.1.1 Sets of S-expressions...........................47 4.3.3.1.2 S-expressions with *-form parts.................48 4.3.3.1.3 *-form reduction................................50 4.3.3.2 *-form BNF..................................51 4.3.4 Threshold subjects..................................52 4.3.4.1 Examples..........................................53 4.3.4.2 Definition........................................53 5. Examples...............................................54 5.1 ftp tag...............................................54 5.2 http tag..............................................54 5.3 telnet tag............................................54 5.4 Public Key Protected File System tags.................54 5.5 Authority to spend money..............................55 Ellison, et al. [Page 5] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 5.6 Process Server cert...................................55 5.7 PICS-like ratings cert................................55 5.8 Virus checking cert...................................56 5.9 Full sequence, with donation cert.....................56 6. On-line test reply formats.............................58 6.1 CRL and delta-CRL.....................................58 6.2 Revalidation..........................................58 6.3 One-time revalidation.................................59 7. 5-Tuple Reduction (full)...............................60 7.1 <5-tuple> BNF.........................................60 7.2 Bare-bones case.......................................61 7.3 Intersection of *-form tag sets.......................62 7.3.1 Reduction to (* null) by data type mismatch.........63 7.3.2 Specific intersections..............................63 7.3.3 Deferred intersections..............................64 7.4 Reduction of SDSI names...............................64 7.4.1 Simple SDSI name reduction..........................65 7.4.2 SDSI name composition with subject name growth......66 7.4.3 SDSI Name composition with issuer name growth.......66 7.5 Reduction of (subject (threshold ..)).................67 7.5.1 Left-to-right.......................................67 7.5.2 Right-to-left.......................................68 8. Full BNF...............................................69 Closed Issues.............................................73 Open Issues...............................................78 References................................................79 Authors' Addresses........................................81 Expiration and File Name..................................82 Ellison, et al. [Page 6] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 1. Overview of Contents This document contains the following sections: Section 2 describes the scope of both the SPKI working group and this particular Internet Draft. Section 3 gives necessary background for understanding the SPKI certificate structure. It details assumptions, definitions and design issues behind this structure design and is recommended reading for anyone who did not follow the discussion on the working group mailing list. Section 4 describes SPKI data object formats -- listing the fields in top level objects, especially the certificate, and giving encoding details. Section 5 describes predefined SPKI tag fields. These are the meat of an SPKI certificate, since they carry the authority or other information being bound to a subject public key. Section 6 describes on-line tests and their reply formats. Section 7 describes the full set of rules used by the basic trust engine assumed to be part of every verifier which accepts SPKI certificates. Section 8 gives the full BNF for SPKI objects. The Closed Issues section gives a list of questions which have been resolved by the working group. The Open Issues section gives a list of open questions to be resolved by the SPKI working group. The References section lists all documents referred to in the text as well as readings which might be of interest to anyone reading on this topic. The Authors' Addresses section gives the addresses, telephone numbers and e-mail addresses of the authors. Ellison, et al. [Page 7] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 2. Scope Of This Effort 2.1 Charter of the SPKI group Many Internet protocols and applications which use the Internet employ public key technology for security purposes and require a public key infrastructure to manage public keys. The task of the working group will be to develop Internet standards for an IETF sponsored public key certificate format, associated signature and other formats, and key acquisition protocols. The key certificate format and associated protocols are to be simple to understand, implement, and use. For purposes of the working group, the resulting formats and protocols are to be known as the Simple Public Key Infrastructure, or SPKI. The SPKI is intended to provide mechanisms to support security in a wide range of Internet applications, including IPSEC protocols, encrypted electronic mail and WWW documents, payment protocols, and any other application which will require the use of public key certificates and the ability to access them. It is intended that the Simple Public Key Infrastructure will support a range of trust models. 2.2 Areas Covered And Not Covered This particular draft is concerned only with certificate, hash, key and signature formats, using the certificates defined here both for verification of identity and for proof of authorization. We do not cover the other elements of a full public key infrastructure (PKI): key/certificate storage and acquisition. We also do not cover all the applications or protocols which must be modified to employ public key authentication or privacy. 2.2.1 Key and certificate storage There are several independent efforts at this time to provide a database of keys or certificates for the Internet. The DNS Security Working Group draft [RFC2065], specifies an efficient key storage and distribution mechanism. It may be possible to store an SPKI certificate in a KEY Resource Record (RR) or to Ellison, et al. [Page 8] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 create a new RR type for SPKI certificates, under the DNSSEC design, but that effort has not been undertaken yet. The PGP key server at MIT operating both as a web page and as an e- mail driven service provides another example of efficient certificate storage and retrieval for the net at large. The custom key server run by PGP, Inc., provides another possibility. SDSI 1.0 demonstrated certificate servers for individuals to run on their own net-connected workstations, in response to the fact that more and more individuals remain connected to the network permanently. We may see a similar effort establishing SDSI/SPKI certificate servers. On the other hand, there are those who view certificate servers as a violation of privacy. A standard phenomenon in dealing with classified documents is called "data aggregation". That is, two data A and B may, by themselves, be unclassified, but if both were to be known by one person, the combination would be considered classified. The same might apply to the authorizations granted by certificates to a given keyholder. Along similar lines, many corporations consider their employee telephone lists confidential and are unlikely to host a certificate server which gives the equivalent information to the net. The common practice which has evolved is that of the requester supplying any and all certificates which the verifier needs in order to permit the requested action. In this model, there may be no need for certificate servers or if there are servers, it is likely that they will be accessed by the requester (possibly under access control) rather than the verifier. 2.2.2 Protocols to use public key authentication Proposals for modification of applications to employ public key authentication are proceeding independently, e.g., [PKLOGIN]. We encourage other developers to actively enter this area of design, aided by SPKI certificates as a tool. Others, such as TLS and SSH already use public key authentication and are considering use of SPKI certificates for communicating the permission required to achieve the desired access. Ellison, et al. [Page 9] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 2.3 Other Certificate Formats We are aware of a number of actual and proposed kinds of signed records which, by some definition, qualify as certificates: 1. PGP signed keys 2. X.509 identity certificates, from a number of sources 3. X.509 SET (Secure Electronic Transaction) certificates 4. DNS Security Extension signed keys 5. Signed PICS labels (from the W3C DSig effort) It is not our intention to coerce these other certificate formats into our mold, although they are welcome to switch over. The certificate structure defined below is flexible enough to accommodate all of the above. However, we recognize that a real world system will involve some mixture of SPKI and non-SPKI certificates as well as traditional Access Control Lists (ACLs). Our design accommodates these through the Certificate Result Certificate process, allowing all these to be merged into a single, simple format as far as application software is concerned. 2.4 Goals of this effort In keeping with the design goals enumerated in section 3 of RFC1958, it is our goal to keep the SPKI certificate pruned to the minimum information necessary to accomplish the job at hand, which is secure authentication and authorization of access control for the Internet. We use well tested formats with a long history of success and have chosen those which require the bare minimum of tool software so that applications remain as small and efficient as possible. We desire to offer the bare minimum of options, in order to reduce program size and complexity. We also recognize that some kinds of certification (such as notarized identity certification) can carry risks of invasion of privacy for the individual. We have therefore designed these certificates to reveal the minimum information necessary to get the job done, whatever that job happens to be. In many cases, the user can remain anonymous in the traditional sense while exercising strongly verified Ellison, et al. [Page 10] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 authorization. That is, the user can be identified by his public key alone. 2.5 SPKI Certificates vs. Capabilities An SPKI certificate is closer to a "capability" as defined by [HARDY], [KEYKOS], [LANDAU], [SRC-070], etc., than to an identity certificate. There is the difference that in a capability system, the capability itself is a secret ticket, the possession of which grants some authority. It is anonymous (more like cash than a check). Therefore, if you grant authority to read a capability, you have delegated the ability to use it. An SPKI certificate identifies the specific key to which it grants authority and therefore the mere ability to read (or copy) the certificate grants no authority and the certificate itself does not need to be as tightly controlled. Rather, control over the corresponding private signature key must be tightly controlled. With SPKI certificates, one can delegate authority (all or part of the authority one has been delegated) to a different key, without sharing the quantity which must be kept secret (the private key) -- as opposed to a capability which is kept secret except when it is shared for the purpose of delegation. 2.6 Chosen standard format In this draft, the standard format adopted is that developed by SDSI, modified slightly. Data objects are defined as S-expressions -- lists in which the first element is a token defining the data object. Rather than permit the full generality of S-expressions, we define a canonical format and accept only that form. Software is available to translate between the canonical format and a presentation format. This document presents the canonical format, but uses a presentation format for examples since the canonical format is binary and can not easily be transmitted in a text document. Ellison, et al. [Page 11] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 3. Assumptions, Definitions and Design Issues There were a number of discussion topics involved in the design of SPKI certificates and we summarize them here for the reader who was not part of the SPKI discussion. This section should at least be skimmed by even the reader with a solid grounding in classical (identity) certification. Some of these might be new concepts. Some provide definitions for terms which traditional discussions of certification frequently leave undefined. Throughout this document, we refer to two parties engaged in certificate use: the prover and the verifier. By PROVER, we mean the entity which wishes access or digitally signs a document. We assume that the prover assembles all certificates necessary for use by the verifier, and puts those into order for the verifier. The prover is software but could be interacting with a human user. By VERIFIER, we mean an entity which processes certificates, together with its own ACL entries, to determine if the prover deserves access or if some signed document is valid. The verifier is most likely unattended software. 3.1 Background In the words of [LAMPSON], a public signature key "speaks for" its owner: a person or entity we call the "keyholder". It is primarily through such public key "speech" that one achieves security on the inherently anonymous and spoof-able Internet. There is a long standing effort to bind public keys to the "true names" of their keyholders, in an attempt to identify the keyholder and to permit the transfer of permissions or other attributes from the physical world in which the keyholder lives into the digital world. This effort has produced identity certificates, such as X.509 certificates or PGP signed keys, giving bindings which needed to be combined with certificates or ACL entries giving , to yield the relationship which a computer then uses to verify public-key driven access attempts. { here stands for authorization, permission, etc.} The Internet has changed the world from the one in which identity certificates were originally seen to be necessary. In the new world Ellison, et al. [Page 12] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 of the global Internet the entities which communicate are often not known to each other in the physical world. This trend is likely to increase as time goes on. Therefore a mechanism which transfers attributes from the physical world to the digital world is increasingly less appropriate while a mechanism which transfers attributes within the digital world is vital and one which transfers attributes from the digital world to the physical world is likely to be needed very soon, if not immediately. We have also observed that is a perfectly adequate name for a keyholder, at least as far as a computer is concerned. It and its hash have the advantage of being unique while each portion of it (and especially of its hash) is uniformly distributed and therefore of particular value as an index into a database. It is also tied the most strongly of any identifying string to the keyholder. We have therefore defined a certificate which communicates directly, leaving names out of the process except in the case where the name is the item of interest (e.g., for secure e-mail). 3.2 Definition of PRINCIPAL and KEYHOLDER The most important issue is the notion of a key as a principal and the difference between that key and the person or machine which owns and controls it. By PRINCIPAL, we mean a signature key. That is, a principal is capable of "speaking" in cyberspace by signing messages. We also permit use of the secure hash of a signature key as a principal, in an effort to save space in data structures which use principals. By KEYHOLDER, we mean an entity in the 3-D world which controls a given (private) signature key. The keyholder is identified primarily by the public verification key which corresponds to the private signature key. By definition, the keyholder has sole possession of the private key. That private key could be used as the identifier of the keyholder -- as a name -- except the private key must be kept secret. There is only one private key to match a given public key, so the keyholder can be identified by the public key just as uniquely. Similarly, there is only one public key which hashes to a given secure hash (by definition of "secure hash", assuming we are limited in computation power), so the secure hash of a public key can also be used to Ellison, et al. [Page 13] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 identify the keyholder. If we are using symmetric (secret) signature keys, the hash of that key can still serve as a name for the key and for its keyholder(s). We identify a PRINCIPAL by either a key or a secure hash of a key. There is pressure, in the interest of simplicity, to restrict PRINCIPAL to just a key. However, if one is using a shared secret key (e.g., for HMAC or some symmetric algorithm like DES-MAC), it is essential to keep the key secret and use of a hash permits that. It is also possible to have shared secret public keys -- e.g., RSA public keys of short moduli (for performance reasons) -- which must not be published because the key can be broken, but for which the hash of the key can be published without fear of compromise. We identify a KEYHOLDER by the construct "(keyholder )" -- using the principal as the name of the private key and therefore the keyholder, but explicitly noting that we refer to the keyholder in physical space rather than the key in cyberspace. Without certificates, we might not know anything else about the keyholder (such as name, gender or even if the keyholder is a living being) but we do know enough to link together separate messages from the same keyholder. For some purposes, that is sufficient identification (for example, when a person is first encountered on- line via signed messages and there is no intention of linking that person to any physical being, only to his or her own other messages). However, there are other applications for which the ability to link together separate messages from an anonymous source is not adequate and therefore for which certificates are required. 3.2.1 Protection of Private Keys For any public key cryptosystem to work, it is essential that a keyholder keep its private key to itself. In the case of a human being, this might involve keeping the private key encrypted under a high-entropy passphrase and storing it only on the person's own personal computer or floppy disks. Some humans might even keep the private key in a tamper-resistant PCMCIA card or Smart-Card which will never release it and will in fact destroy it after too many failed attempts to gain access. In the case of a network node, this might involve keeping the private key in a tamper-resistant cryptographic processor which generated it and which will destroy it if tampering is attempted. If the keyholder does not keep the private key protected (that is, if the private key gets out to others to use) then one can not know what Ellison, et al. [Page 14] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 entity is using that key and no certificate will be able to restore the resulting broken security. Therefore, we are forced to assume that all private keys are kept private and bound tightly to the one keyholder to which they belong. We will have to provide for methods of announcing the compromise of such private keys whenever this assumption proves false, but we must assume that unless such notification is delivered, each private key is secure and attached to its owner. Note: We have specifically included a process for one keyholder who has been granted some authority to delegate that authority to another, in order to reduce if not eliminate the motivation for one keyholder to loan a private key to another. So to reiterate, we do not expect every person, process and device in the Internet to employ true tamper resistance. Many people will keep and use private keys on an insecure personal computer or workstation. However, we are forced to assume protection of the private key or give up any notion of cryptographically strong authentication and authorization. Work is progressing on decreasing the cost of true tamper-resistance but until it is ubiquitous, we must accept a certain amount of risk from copied or stolen private keys. Even then, there is risk from coerced use of one's private key. 3.3 Certificate Structure An SPKI certificate body has several fields, five of which are relevant for security purposes: ISSUER: a principal or a single, top-level name in a principal's name space. The principal is identified as a public key or the hash of that key and the corresponding private key signs the certificate. SUBJECT: a principal, an object or a SDSI name reducible to either of those. The subject is that which receives authority from the issuer by way of the certificate. DELEGATION: the optional modifier, "(propagate)", giving the subject permission to delegate the authority presented in the certificate (or part of it) to some other Subject. This is Ellison, et al. [Page 15] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 represented as the delegation boolean, D, in the discussion below. The two boolean states are (F: delegate only through name declarations -- also known as "stop at key") and (T: delegate to the subject). AUTHORITY: the specific authorization(s) being delegated in this certificate. These fields, of the form "(tag ...)", are to be defined by those who have resources to control and describe resource allocations. This document gives some examples for such fields which are expected to be in common use, but more importantly it gives the structure for fields and the description of a standard process for manipulating them which is expected to be implemented in all code conforming to this standard. VALIDITY: date ranges and/or online validity tests for determining certificate validity. A certificate is signed by its issuer. Section 6 gives details about signature blocks. The five security-relevant fields described above are termed a "5-tuple" for lack of a better word, in the discussion below. The assumption is that a certificate's signature will be checked to yield the 5-tuple which, in turn, will be kept in trusted memory and will participate in trust management decisions. Objects other than certificates (such as ACL entries) can also yield 5-tuples which participate in trust management decisions. Informally, the meaning of the certificate is "The issuer says that the subject has the stated authority during the validity period". Another way of saying this is "The issuer says that the subject may speak for the issuer with the stated authority during the validity period." If the issuer issues several such certificates for different subjects, then it is defining a group of subjects, each of which can speak for it. If the subject is an object that is not reducible to a principal, it can't do any speaking; in this case the meaning is "The issuer says that the subject has the properties stated by the 'authority'." 3.3.1 5-tuple Reduction (introduction) A certificate which is received to be part of a verification process has its signature checked. One whose signature checks is considered Ellison, et al. [Page 16] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 valid. Other kinds of authorization statement (most specifically ACL entries) can be considered valid without a signature check. A valid authorization statement can be represented by five quantities: (I,S,D,A,V) A pair of 5-tuples can be reduced as follows: (I1,S1,D1,A1,V1) + (I2,S2,D2,A2,V2) becoming (I1,S2,D2,A,V) if S1=I2 (meaning that they are the same public key) and (D1 = TRUE) or (S1 is a SDSI name) and A = intersection(A1,A2) and V = intersection(V1,V2) The actual process is slightly more complicated when I2 is of the form (issuer (name K3 nnn)) or when S1 is of the form (subject (threshold K N (s1) (s2) ... (sN))) Rules for those cases are given below in section 10, presenting the full tuple reduction logic, but for the discussion to follow the logic given above will suffice. 3.3.2 Authority Loops By 5-tuple reduction, some chains of authorization statements will be reduced to the form: (Self,X,D,A,V) where "Self" represents the entity doing the verification, granting access, etc. Such a 5-tuple says "Self says (I say) that X has authority (D,A) for validity period (or conditions) V". In other words, it tells Self what it can trust about X. Ellison, et al. [Page 17] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 Any authorization chain not reducing to a 5-tuple with Self as issuer isn't relevant to decisions by Self. Therefore, any authorization chain which is to be used by Self to do trust management must have Self as a root. Since Self is doing this chain reduction and is therefore at the receiving end of the chain as well, that makes all useful authorization chains loops. 3.3.3 Certificate Result Certificates In cases where the verifier, Self, has access to a private key, once it has reduced a chain of certificate bodies down to the form: (Self,X,D,A,V) it can sign that generated body, using its private key, producing an SPKI certificate. That certificate will have a validity period no larger that of any certificate in the loop which formed it, but during that validity period it can be used by the prover instead of the full chain, when speaking to that particular verifier. It is good only at that verifier (or at another which trusts that verifier, Self, to delegate the authorization A). Therefore, one option by the verifier is to sign and return the result 5-tuple to the caller for this later use. If it isn't important for any other verifier to accept this "result certificate", it can even be signed by a symmetric key (an HMAC with secret key private to the verifier). The certificates which made up the loop forming this result 5-tuple could have been of any variety, including X.509v1, X.509v3, SET or DNSSEC. They could also be PGP signed keys processed by an enriched trust engine (one capable of dealing with the PGP web of trust rules). If the verifier, Self, were to be trusted to delegate the resulting authorization, its certificate result certificate then becomes a mapping of these other forms. This may prove especially useful if a given certificate chain includes multiple forms or if the result certificate is to be used by a computationally limited device (such as a Smart-Card) which can not afford the code space to process some of the more complex certificate formats. Ellison, et al. [Page 18] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 3.4 Relation to Policymaker The section above introduced the possibility of a machine which reduces a set of certificates, possibly a very complex one, and yields a single certificate as a result. That single certificate would be simpler and faster to verify. It might even stand alone in granting access. That machine reducing the set of certificates to a single result might even execute a policy program which could be too complex to be expressed in terms of SPKI 5-tuple reduction. The policy machine would still have to have its own ACL entries, declaring the keys it trusts as "roots" for various purposes and, in this hypothetical case, a signature key, P. It would execute its policy program on the credentials provided by the caller, come up with either a failure or a certificate result, signed by P, and deliver that result to the caller. In the manner of [BFL] we note that one can take the same code executed by that policy processing machine and digitally sign the code -- then digitally sign the ACL entries for its "roots" (turning them into certificates, issued by P) -- and ship the code plus certificates to the caller, presumably a verifying computer. That verifying computer could then run the policy code on P's behalf, getting either a failure or a 5-tuple. It can't sign the 5-tuple turning it into a certificate issued by P, because it would not have P's private key -- but it doesn't need a certificate. It needs only the trusted 5-tuple. [BFL] introduces a language called Policymaker in which one can express security policy statements. It is possible for Policymaker to be used along with SPKI certificates in two ways: 1) It is believed possible to use Policymaker's language to implement the standard SPKI 5-tuple reduction. The code has not been written as of the time of this draft, but at this point it looks possible. 2) For any trust policy which the full SPKI 5-tuple reduction can not express, one must write a policy interpretation program and Policymaker provides a language and body of examples for that purpose. The result of the Policymaker execution can be a 5-tuple to be used within an SPKI reduction. Ellison, et al. [Page 19] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 3.5 Name spaces and Identity Certificates Since the word "certificate" was first used by Kohnfelder in 1978 to refer to a digitally signed binding between a name and a public key, people have assumed that a certificate binds a name to a key. For most of human history, people lived in relatively small, closed communities. It was common in such a community for each member to have his or her own unique name. Everyone in the community would know everyone else in the community by that name. It was also extremely unlikely for someone in such a small community to change his or her name (except through marriage). The habit naturally developed of thinking of a person's name as a unique and permanent identifier, in a way synonymous with his or her identity. Although such small communities have become unusual for the majority of people today, the association between name and identity persists in human thinking. Even today, a certificate which binds a name to a key is often called an "identity certificate". 3.5.1 X.500 and X.509 At one time, it was assumed that there would be a worldwide directory of names of people (and computers and other things), called X.500, and there was a data structure defined, called X.509, to bind public keys to portions of the X.500 hierarchy. The original purpose of such certificates was to record who (which keyholder, ie., which key) had permission to modify that portion of the distributed X.500 database. At some point, it became apparent that X.500 was never going to occur as a global directory. Among other things, corporations which were to own and manage substantial sub-trees of the directory consider their employee directories company confidential. The same applies to some government agencies. The fact that an X.500 node's address was a person's unique name (so- called "distinguished name"), led people to view X.509 apart from its purpose of controlling access to X.500 databases and instead treat it as an identity certificate. Ellison, et al. [Page 20] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 3.5.2 Death of global identity certification Even if a global X.500 directory had occurred, global identity certification would have died. The problem is one of the unanticipated consequences of the Internet. The purpose of an identity certificate is to map from the 3D space of people to cyberspace, particularly to the space of public signature keys. This mapping takes two steps: from 3D space to a name space; from the name space to key space. The latter step is accomplished by a certificate (e.g., X.509). The former step is assumed, in the X.500/X.509 case, to be common knowledge. The larger that name space, the less likely that anyone would know the name of a specific individual. Alice might suspect that her old friend Bob Smith has a name in the global X.500 directory, but there are so many people named Bob Smith in the world that it is unlikely Alice would know which of the thousands of Bob Smiths was in fact her old friend. The problem is that, like the telephone directory which inspired this model of certification, the directory never claimed to record information of interest to each user (e.g., Alice's old friend). In fact, a directory which did so would almost certainly be viewed as a violation of privacy on a massive scale and would be shut down. 3.5.3 SDSI 1.0 Name spaces SDSI 1.0 [SDSI] solved this problem inherent in global name spaces by ignoring the fantasy of a global name space and replacing it with local name spaces, one for each principal (= signing key). Principals may share name spaces as will be seen later, but in theory each principal has its own name space. The certificate mapping from name to key (SDSI, in this case) is just as secure as the X.509 certificate mapping from the global name space to a key, but the link from 3D space to name is considerably more secure -- because it is a link defined by the user. Alice's old friend Bob Smith might be named "Red" in her name space, for example. Her name for him is not intended to be of any use to anyone else -- only to her. Such a local name space is already familiar to some users of mail agents, under the label "nickname" or "alias". Ellison, et al. [Page 21] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 3.5.4 Mappings within cyberspace Identity certificates with their presumed ability to map from 3D space to key space were assumed to be necessary "so that you know with whom you are dealing in cyberspace". The assumption behind such a thought is that a relationship is formed in 3D space between people and that relationship needs to be mapped into cyberspace. Unanticipated by the original designers of identity certificates was the fact that the Internet brought with it the formation of relationships in cyberspace. In such cases, there is no relationship in 3D space to be mapped and therefore no need for identity certificates. There is, however, a need for certificates within cyberspace -- to grant privileges, access rights, etc. -- from one cyberspace principal to another (from one key to another). It was for this situation that the original SPKI was designed. 3.5.5 Mappings to (keyholder K1) Also not anticipated by the pre-Internet developers of identity certificates was that relationships which formed online might need to be mapped occasionally back to the 3D world. Those early designers of certificates might have assumed that the binding between name ("identity") and key was bi-directional, but it was not. It mapped name to key. The mapping from key to name is not satisfied by a single approach. In particular, there can be no single issuer for such a certificate, suitable for all purposes. Two such certificates are described below but there are probably several varieties. 3.5.5.1 Donation Certificates Situation: you meet someone (who uses key K1) online, are impressed with his work and decide to hire him. You make an offer. He accepts. He starts working for you and you like his work (all signed by K1). You now need to send him a paycheck. So, you need a name to put on the paycheck and you need a postal address to mail it to (and maybe a phone number, if you are using Fed Ex). This sounds like a traditional identity certificate, but it isn't. There is no CA in this case. The one key you can trust the most to sign this certificate is K1. It belongs to the individual with the most to gain by providing correct information. In X.509-style Ellison, et al. [Page 22] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 certification, one would never use a self-signed certificate. 3.5.5.2 Process Server Certificates Situation: you meet someone (who uses key K1) online, are impressed with his work and decide to hire him to do some protracted project. You make an offer. He accepts. You need the work done and done right. Failure to have the work done would be very harmful to you. For that you write a contract which he signs with K1 and the contract includes penalty clauses. In the event of his failure to perform, you need to know that you can get redress through the legal system. One way is to have his name and home address so that you could serve legal papers on him should he default on the contract. The certificate which lets you serve papers on Keyholder(K1) sounds even more like a traditional identity certificate, but it isn't. Neither is it a donation certificate, since this one should not be signed by K1. Instead, it should be signed by Kp -- the key of a company which does process serving. That company, Acme Process Servers, however, would rather not have a name and address in the certificate. Instead, Acme would prefer to have a simple sequence number in the certificate, indexing Acme's own files on the person. This forces you to use Acme to do the process serving, doubtless for an additional fee, in the event that you do sue. Meanwhile, you would prefer to have this certificate over an identity certificate issued by the Post Office, listing the person's name and address. The name and address certificate reflects facts at the time of the start of the contract, not facts at the time legal papers need to be served. It may take substantial investigative work to get from the former to the latter. That is the work Acme would do for a living and it would be for that work that Acme would charge both for the initial certificate and for the act of serving papers on the keyholder of K1. Acme might perform this work at time of default or keep tabs on Keyholder(K1) during the life of the contract. That would be Acme's choice. 3.6 Certificate validity periods Our experience with credit cards has influenced the way we consider validity periods of certificates. A credit card is issued with an expiration date 1 to 3 years later than the date of issue, yet one can revoke a credit card and have Ellison, et al. [Page 23] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 that revocation be effective within a day of the request. That credit card has a validity period of one day (or less) in spite of its expiration date. At one time, credit card validity was verified at a checkout counter by looking the card number up in a book of revoked cards. The validity period of a card not listed in such a book was the time until that book was updated and the card had to be looked up again. This practice has migrated into the digital world through the CRL (Certificate Revocation List) construct. Modern systems accepting credit cards perform an on-line validity check, in which case the validity period can be very short and is determined by the time it takes to make a database update from a report of a lost or stolen card. SPKI certificates may use one or both of two kinds of validity period: a date range (akin to expiration dates) or an on-line check. The on-line check will return information about the certificate's validity and that information itself will have an expiration date and time. The certificate together with its latest on-line test result would then yield a valid assignment of authorization, with validity period which is the intersection of the dates of the two data items (usually just the date range of the on-line test result). There are three forms of on-line test result defined: CRL a list of certificates known to be revoked since a certain time. Periodic revalidation a new assured validity date for the certificate being tested. One-time revalidation a statement that for this one transaction, the indicated certificate is valid. [This is as close as we can come to a 0-length validity period revalidation.] The one-time revalidation can also have side effects -- e.g., refer to a bank balance. 3.7 Unwanted Attributions There is a potential problem that a certificate might be issued which the keyholder does not want. Ellison, et al. [Page 24] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 For example, someone with the power to issue access certificates wishes to make trouble for you. That person generates a cert for you, giving you access to their company's file system. Someone breaks into that file system and does damage, also wiping out the audit logs of who broke in. So, the police ask the age-old Perry Mason question: who had keys to that door? Your cert (even though you never saw it) is a key to that door. It might even be the only cert with the capability to do what was done, at least according to the company records. That makes you a suspect. If for other reasons you might be even the most logical suspect, then you might make it to the top of the police list and get severely hassled. For another example, a keyholder, Alice, has a signature key, K, being used to sign digital lab notebooks for later use in patent applications. That key is certified as hers by her company through an SPKI identity certificate with an EMPLOYEE field. Bob learns Alice's public key and builds a certificate using his own name and her key, getting it signed by some reputable commercial CA. Now when it comes time to dispute prior art on Alice's patent(s), Bob produces his certificate and claims that Alice had not only copied his work but stolen his private signature key. Although we do not mandate such practice at this time, some certificates could be signed by the as well as by the in order to make sure that the really does have access to the indicated private key. Alternatively, it is possible to establish a practice of getting a digitally signed receipt for a certificate from each subject in certain cases before the certificate is delivered. That separate receipt would serve the same function. 3.8 Blind Signatures The issue of blind signatures [CHAUM] was raised in the working group. As can be seen from the format of the Signature object, normal blinding (e.g., of RSA by pre- and post- multiplication of a signature value) can be applied. 3.9 Determinism As defined above in section 3.6, CRLs are just one type of response to an on-line request. Each CRL carries its own validity period and signature. Ellison, et al. [Page 25] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 This is different from an old concept of CRL which might be called "wandering anti-matter". In that concept, CRLs would be signed, might have validity dates (or at least sequence numbers) but would not be required to be fetched. If someone happened to receive the latest CRL and the given cert was on it, then the cert was invalid. The CRLs wandered through cyberspace, like anti-matter, annihilating any matching certs they happened to encounter. This concept of CRL introduces non-deterministic behavior. It has been one design goal of SPKI to make trust computations deterministic. As a result, the only way defined here to get a CRL is if a given cert demands that one be fetched as part of its validity conditions. For another example of enforced determinism, it is by definition not possible to have two SPKI certificates which conflict, so that one might override the other. If two different certs were issued defining a given SDSI name as two different keys, for example, then that name becomes a group with at least two members. Ellison, et al. [Page 26] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 4. SPKI Object Definitions We have chosen a simplified form of S-expression (the canonical form) as the format for SPKI objects. An S-expression is a list enclosed in matching "(" and ")". We assume the S-expression technology of [SEXP] with the restrictions that no empty lists are allowed and that each list must have a byte-string as its first element. That first element is the "type" or "name" of the object represented by the list. SPKI objects are defined below in a familiar extension of BNF -- with "*" meaning closure (0 or more occurrences) and "?" meaning optional (0 or 1 occurrence). First we define the canonical S-expression form in that BNF. 4.1 Canonical S-expression We define a canonical S-expression as containing binary byte strings each with a given length and punctuation "()[]" for forming lists. The length of a byte string is a positive ASCII decimal number, not starting with "0", terminated by ":". We further require that there be no empty lists and that the first list element be a byte string (as defined below). This form is a unique representation of an S- expression and is used as the input to all hash and signature functions. If canonical S-expressions need to be transmitted over a 7-bit channel, there is a form defined for base64 encoding them. 4.1.1 A byte string is a binary sequence of bytes (octets), optionally modified by a display type. If the byte-string is used as a binary number, these bytes are twos- complement, in network standard order (most significant byte first). This means that the sign of the first byte is the sign of the number, so that if you have a positive number whose first byte exceeds 128, then you need to prefix that number with a 0 byte to force it to be positive. A canonical form positive number will not have unnecessary leading 0x00 bytes while a canonical form negative number will not have unnecessary leading 0xFF bytes. Such a byte is unnecessary if by removing it, the remaining string has the same value as a twos- complement integer. All byte strings carry explicit lengths and are therefore not Ellison, et al. [Page 27] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 0-terminated as in the C language. They are treated as binary even when they are ASCII, and can use any character set encoding desired. Typically, such a choice of character set would be indicated by a display type. A display type is assumed to be a MIME type giving optional instructions to any program wishing to display or use the byte string. For example, it might indicate that the string is in UNICODE, is a GIF or JPEG image, is an audio segment, etc. Although the display type of a byte string is optional, it is considered part of the string for any equality comparisons or hashing. A byte-string is defined by: :: | ; :: ":" {binary byte string of that length} ; :: * ; :: "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; :: "0" | ; :: "[" "]" ; 4.1.2 S-expression An S-expression is of the form: :: "(" * ")" ; :: | ; where the first byte string in the S-expression is referred to here as its "type". 4.1.3 Encoding examples (4:test26:abcdefghijklmnopqrstuvwxyz5:123455::: ::) is a canonical S-expression consisting of four byte strings: "test", "abcdefghijklmnopqrstuvwxyz", "12345" and ":: ::". The advanced text form is: (test abcdefghijklmnopqrstuvwxyz "12345" ":: ::") showing that the advanced form follows familiar token recognition Ellison, et al. [Page 28] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 rules, not permitting tokens to start with digits, terminating them with white space or punctuation marks. For transmission of true 8-bit forms, we permit base64 encodings according to [RFC2045], with the base64 characters enclosed in braces. The example above encodes to: {KDQ6dGVzdDI2OmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6NToxMjM0NTU 6OjogOjop} 4.1.4 Use of canonical S-expressions Canonical S-expressions were designed to be as simple to pack and parse as possible. Some concessions were made to those developers who might want to examine a canonical S-expression in an ASCII editor like emacs (specifically the readable decimal length fields and readable "()[]" characters) but in general the form is as close to minimum size as possible. Parsing of a canonical form S-expression requires minimal look-ahead and no re-scanning of incoming bytes. As a result, the parsing code remains very small. Assuming each byte string is stored with a length field, generation of a canonical form from a data structure requires an extremely small amount of code. The canonical S-expression is the form which is hashed for both generating and verifying signatures. These two processes can be thought of as the start and end of an SPKI object's useful life and both require canonical form. Therefore, it is recommended that the canonical form be the form transmitted and stored in normal use, to be converted temporarily to and from a more readable form by display or editing applications written for the purpose. [Violating that suggestion, this document includes some advanced non- canonical forms, for readability. Since this document is required to be straight ASCII, no pure 8-bit canonical forms will be presented except under base64 encoding.] 4.1.5 Non-canonical (advanced) S-expressions [SEXP] includes a general purpose utility program for converting between canonical and advanced S-expression form. In the advanced form, individual byte strings may be expressed without length fields (if they are what most languages consider text tokens), may be written as quoted strings (under normal C string rules), or may be individually hex or base64 encoded. Also in the advanced form, extra Ellison, et al. [Page 29] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 white space between list elements is allowed for readability and ignored on conversion to canonical form. For examples this document will normally use the advanced form, because of its readability, but for at least one concrete example the canonical form and its hash are presented (base64 encoded where necessary). In these examples, we will use keywords without preceding length fields, quoted strings, hex values (delimited by "#") and base64 values (delimited by "|"). Those are features of the advanced transport form of an S-expression, and are not part of the canonical form. We will always present the canonical form (base-64 encoded, when it contains non-ASCII characters) which the reader can decode to get the actual canonical form. 4.1.6 Unique IDs Top level object names are defined in this document along with certain algorithm names. objects are user-defined, using a language for describing sets of permissions given here, and in the process, the defining user can choose any object names he or she wishes. For the definition of new algorithm names, it is our preference that this be taken on by IANA for single-word standard names. In the interest of maximum flexibility we also permit users to define their own algorithm names via a normal URI's (which presumably point to descriptions of the algorithms or even code). 4.2 SPKI/SDSI 2.0 Objects The objects defined in SPKI/SDSI 2.0 are S-expressions. That is they are lists of either byte strings or other lists. In our case, all S- expressions start with a , called the object name. The remaining elements of the list are called "parts" of the object. In a communication from prover to verifier, one might encounter only a small number of different objects: usually a of , , , and . The verifier will also need to refer to its own . These are considered top level objects and are defined in the sections immediately following It is standard SPKI/SDSI practice to use names starting with a lower Ellison, et al. [Page 30] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 case letter, followed by lower case letters, digits and hyphens for object types. SPKI/SDSI is case-sensitive, so the byte-string "RSA" is not the same as "rsa". Non-standard object types (i.e. those defined by an application developer) are completely unconstrained, may have display types and may even be URI's pointing to documentation of the object type. The structure and interpretation of the parts is up to the designer of the top-level object type. Normally, the object structure is one of two varieties: "positional" -- the parts are listed in some fixed order with possible omission of some of the later parts and meaning of the part depending on its position Example: (hash sha1 20:...) "sub-type based" -- the parts are identified by object type of a sublist or spelling of a byte-string and can be in any order. These elements are expected all to have distinct types, and the types of the parts determine their meaning with respect to the top-level object. The set of allowable sub-object types is a function of the object type, as is whether sub-objects of some types are optional. Example: (rsa (n 128:...) (e 1:.)) The following are the definitions of the top level objects which a verifying program may encounter. Note that the main object, cert, is sub-type based so the parameter fields may be in any order, but the BNF suggests a fixed order. We use the BNF definition to indicate that there may not be more than one of each of the listed fields, and also to suggest (for readability) that the cert parts be presented in the order given. This document will use that order. 4.2.1 :: "(" "public-key" * ? ")" ; A public key definition gives everything the user needs to employ the key for checking signatures. The only pub-sig-alg-id's we have defined at this point are for signature verification. That is because we need only signature keys for certificate formation and access control. Other key types are Ellison, et al. [Page 31] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 open to being defined by users. The following is an RSA signature key, shown in advanced transport format: (public-key rsa-pkcs1-md5 (e #03#) (n |ANHCG85jXFGmicr3MGPj53FYYSY1aWAue6PKnpFErHhKMJa4HrK4WSKTO YTTlapRznnELD2D7lWd3Q8PD0lyi1NJpNzMkxQVHrrAnIQoczeOZuiz/yY VDzJ1DdiImixyb/Jyme3D0UiUXhd6VGAz0x0cgrKefKnmjy410Kro3uW1| )) For actual use, the key is held and presented in canonical form the base64 encoding of which is: {KDEwOnB1YmxpYy1rZXkxMzpyc2EtcGtjczEtbWQ1KDE6ZTE6AykoMTpuMTI 5OgDRwhvOY1xRponK9zBj4+dxWGEmNWlgLnujyp6RRKx4SjCWuB6yuFkikzm E05WqUc55xCw9g+5Vnd0PDw9JcotTSaTczJMUFR66wJyEKHM3jmbos/8mFQ8 ydQ3YiJoscm/ycpntw9FIlF4XelRgM9MdHIKynnyp5o8uNdCq6N7ltSkp} Although not strictly needed by this draft, the private key for the public key above is: (private-key rsa-pkcs1-md5 (e #03#) (n |ANHCG85jXFGmicr3MGPj53FYYSY1aWAue6PKnpFErHhKMJa4HrK4WSKTO YTTlapRznnELD2D7lWd3Q8PD0lyi1NJpNzMkxQVHrrAnIQoczeOZuiz/yY VDzJ1DdiImixyb/Jyme3D0UiUXhd6VGAz0x0cgrKefKnmjy410Kro3uW1| ) (d |AIvWvTRCPYvEW9ykyu1CmkuQQMQjm5V0Um0xvwuDHaWGyw8lacx65hcM0 QM3uRw2iaaCyCkCnuO+k19fX4ZMXOD7cLN/Qrql8Efx5mczcoGN+Eo6FF+ cvgXfupe1VM6PmJdFIauJerTHUOlPrI12N+NnAL7CvU6X1nhOnf/Z77iz| ) (p |APesjZ8gK4RGV5Qs1eCRAVp7mVblgf13R5fwApw6bTVWzunIwk/2sShyy tpc90edr+0DPwldnvEXTUY1df0DwPc=|) (q |ANjPQe6O0Jfv90GWE3q2c9724AX7FKx64g2F8lxgiWW0QKEeqiWiiEDx7 qh0lLrhmBT+VXEDFRG2LHmuNSTzj7M=|) (a |AKUds79qx62EOmLIjpW2AOb9EOSZAVOk2mVKrGgm83jkifEwgYqkdhr3M ebopNppH/NXf1uTv0tk3i7OTqitK08=|) (b |AJCKK/RfNbqf+iu5YlHO9+n56q6nYx2nQV5ZTD2VsO54KxYUcW5sWtX2n xr4YydBEA3+46CsuLZ5cvvJeMNNCnc=|) (c |CIPwAAO8Vmj0/BfCtsg+35+r94jwxGYHZ63RsqyNxbvkAO6xPqSht8/vz dR93eX5B9ZKBQg1HHWCsHbqQtmNLQ==|)) where a, b and c are CRT parameters. Ellison, et al. [Page 32] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 4.2.2 :: "(" "secret-key" * ? ")" ; 4.2.2.1 HMAC-MD5 Example: (secret-key hmac-md5 (k |ksTt2Lu9NSq3mGHJ7HmuksSYwFQ=|) ) which has a base64 encoded canonical form: {KDEwOnNlY3JldC1rZXk4OmhtYWMtbWQ1KDE6azIwOpLE7di7vTUqt5hhyex 5rpLEmMBUKSk=} The hmac-md5 and hmac-sha1 algorithms are defined in [RFC2104]. 4.2.2.2 DES-CBC-MAC Example: (secret-key des-cbc-mac (k |52Lyr9BPTSM=|) (nonce |v1jBW9SlFxAweNyYSzaMfHOzwds=|)) with base64 encoded canonical form {KDEwOnNlY3JldC1rZXkxMTpkZXMtY2JjLW1hYygxOms4Oudi8q/QT00jKSg 1Om5vbmNlMjA6v1jBW9SlFxAweNyYSzaMfHOzwdspKQ==} provides the DES key for a DES-CBC MAC. It also includes a nonce parameter which plays no part in the algorithm, but serves to insulate this key from brute force attacks using the published hash of the (secret-key...) canonical S-expression: (hash md5 |ilTuqvT5/AdeX/sfxA9lgQ==| examples/des.bin) with base64 encoded canonical form {KDQ6aGFzaDM6bWQ1MTY6ilTuqvT5/AdeX/sfxA9lgTE2OmV4YW1wbGVzL2R lcy5iaW4p} Ellison, et al. [Page 33] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 4.2.3 :: "(" "hash" ? ")" ; A object gives the hash of some other object. For example, the public key given above has the following hash: (hash md5 #92e5f2ab1f23616759fe3ed57dfafeca#) or (hash md5 |kuXyqx8jYWdZ/j7Vffr+yg==|) which, in base64 encoded canonical form, is {KDQ6aGFzaDM6bWQ1MTY6kuXyqx8jYWdZ/j7Vffr+yik=} A hash of the hmac-md5 secret key defined above is: (hash md5 #33b7035665f7af8c6669bdabc58ab236#) or (hash md5 |M7cDVmX3r4xmab2rxYqyNg==|) which, in base64 encoded canonical form, is {KDQ6aGFzaDM6bWQ1MTY6M7cDVmX3r4xmab2rxYqyNik=} This is perhaps of more interest than the hash of the public key because a certificate generally released to the public can not contain a secret key, for obvious reasons, but it might contain the hash of the secret key without fear of loss of the secret. 4.2.4 :: "(" "signature" ")" ; A signature object is typically used for a certificate body and typically follows that object in a . We chose not to define an object containing the cert body and signature, since there may be cases when the same cert body needs to be signed by multiple keys. One can also sign objects other than cert bodies, of course. For example, the following is the signature of a file. (signature Ellison, et al. [Page 34] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 (hash md5 |8dIIGz8bZZpXpX2M/g/aVQ==|) (public-key rsa-pkcs1-md5 (e #03#) (n |ANHCG85jXFGmicr3MGPj53FYYSY1aWAue6PKnpFErHhKMJa4HrK4WSKTOYTT lapRznnELD2D7lWd3Q8PD0lyi1NJpNzMkxQVHrrAnIQoczeOZuiz/yYVDzJ1 DdiImixyb/Jyme3D0UiUXhd6VGAz0x0cgrKefKnmjy410Kro3uW1|)) |0Q5bkgsDoPlD9zkQo+YEnpmuXwC9REZHDcCoiT9FlzgTw1QPzM0yS0vg7+rG 4HmsHOgZWvgjFY2IWXt1Po2gD9Hjxw6sGl/vTpmjo2NldnONPbzNTJKqEEqh 8SFyuLibu04IdcuicqNGyaBJhuN1leXt29Wn+gHVPtufGCSK670=|) which is equivalent to (signature (hash md5 |8dIIGz8bZZpXpX2M/g/aVQ==|) (hash md5 |kuXyqx8jYWdZ/j7Vffr+yg==| key2-pub) |0Q5bkgsDoPlD9zkQo+YEnpmuXwC9REZHDcCoiT9FlzgTw1QPzM0yS0vg7+ rG4HmsHOgZWvgjFY2IWXt1Po2gD9Hjxw6sGl/vTpmjo2NldnONPbzNTJKqE Eqh8SFyuLibu04IdcuicqNGyaBJhuN1leXt29Wn+gHVPtufGCSK670=|) or, in base64 encoded canonical form, {KDk6c2lnbmF0dXJlKDQ6aGFzaDM6bWQ1MTY68dIIGz8bZZpXpX2M/g/aVSk oNDpoYXNoMzptZDUxNjqS5fKrHyNhZ1n+PtV9+v7KODprZXkyLXB1YikxMjg 60Q5bkgsDoPlD9zkQo+YEnpmuXwC9REZHDcCoiT9FlzgTw1QPzM0yS0vg7+r G4HmsHOgZWvgjFY2IWXt1Po2gD9Hjxw6sGl/vTpmjo2NldnONPbzNTJKqEEq h8SFyuLibu04IdcuicqNGyaBJhuN1leXt29Wn+gHVPtufGCSK670p} As one more example, the signature on the hmac-md5 secret key defined above, by the public key above, is: (signature (hash md5 |M7cDVmX3r4xmab2rxYqyNg==|) (public-key rsa-pkcs1-md5 (e #03#) (n |ANHCG85jXFGmicr3MGPj53FYYSY1aWAue6PKnpFErHhKMJa4HrK4WSKT OYTTlapRznnELD2D7lWd3Q8PD0lyi1NJpNzMkxQVHrrAnIQoczeOZuiz/ yYVDzJ1DdiImixyb/Jyme3D0UiUXhd6VGAz0x0cgrKefKnmjy410Kro3u W1|)) |fA9Jhf/YXYgtxHowCDPUBFWDeOgAKNAlfDGq73obef6E1xCYCrpeh/kPr4 V8yoE+eXY+CUQivbQsmKxfcEoxJbCAseDSzvuprZ2jeETDK0ESVhYfGPMyN vx1pfkL1SQZwFqbf1g3G7obRU6SpPn/A12+IuHRBXKdLtUyFnBMxvE=|) or, in base64 encoded canonical form: Ellison, et al. [Page 35] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 {KDk6c2lnbmF0dXJlKDQ6aGFzaDM6bWQ1MTY6M7cDVmX3r4xmab2rxYqyNik oMTA6cHVibGljLWtleTEzOnJzYS1wa2NzMS1tZDUoMTplMToDKSgxOm4xMjk 6ANHCG85jXFGmicr3MGPj53FYYSY1aWAue6PKnpFErHhKMJa4HrK4WSKTOYT TlapRznnELD2D7lWd3Q8PD0lyi1NJpNzMkxQVHrrAnIQoczeOZuiz/yYVDzJ 1DdiImixyb/Jyme3D0UiUXhd6VGAz0x0cgrKefKnmjy410Kro3uW1KSkxMjg 6fA9Jhf/YXYgtxHowCDPUBFWDeOgAKNAlfDGq73obef6E1xCYCrpeh/kPr4V 8yoE+eXY+CUQivbQsmKxfcEoxJbCAseDSzvuprZ2jeETDK0ESVhYfGPMyNvx 1pfkL1SQZwFqbf1g3G7obRU6SpPn/A12+IuHRBXKdLtUyFnBMxvEp} 4.2.5 :: "(" "acl" ? * ")" ; :: * ? ? ? ; An ACL is a list of assertions: certificate bodies which don't need issuer fields or signatures because they are being held in secure memory. Since the fields of the ACL are fields of a , we will not repeat those common field definitions here. If all the optional fields are left out, the (possible multiple) subjects are given the permission specified in , without permission to delegate it, but forever (until the ACL is edited to remove the permission). For example: (acl (name (hash md5 |p1isZirSN3CBscfNQSbiDA==|) sysadmin/operators) (hash md5 |M7cDVmX3r4xmab2rxYqyNg==|) (tag (ftp db.acme.com root)) (hash md5 |kuXyqx8jYWdZ/j7Vffr+yg==|) (propagate) (tag (http http://www.internal.acme.com/accounting/)) ) or {KDM6YWNsKDQ6bmFtZSg0Omhhc2gzOm1kNTE2OqdYrGYq0jdwgbHHzUEm4gw pMTg6c3lzYWRtaW4vb3BlcmF0b3JzKSg0Omhhc2gzOm1kNTE2OjO3A1Zl96+ MZmm9q8WKsjYpKDM6dGFnKDM6ZnRwMTE6ZGIuYWNtZS5jb200OnJvb3QpKSg 0Omhhc2gzOm1kNTE2OpLl8qsfI2FnWf4+1X36/sopKDk6cHJvcGFnYXRlKSg zOnRhZyg0Omh0dHA0MDpodHRwOi8vd3d3LmludGVybmFsLmFjbWUuY29tL2F jY291bnRpbmcvKSkp} Ellison, et al. [Page 36] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 4.2.6 :: "(" "sequence" * ")" ; :: | | | ; :: | ; :: "(" "do" "hash" ")" ; :: "(" "do" * ")" ; A is a bundled sequence of objects which the verifier is to consider when deciding to grant access. We anticipate requiring the prover (who constructs and submits the ) to provide elements in order, so that the verifier need only process the in order to prove to itself that the prover has the claimed access right. The sequence can also contain instructions to the verifier, in the form of opcodes. At present the only opcode defined is "hash" -- meaning, that the previous item in the sequence (the last one read in) is to be hashed by the given algorithm and saved, indexed by that hash value. Presumably, that item (certificate body or public key, for example) is referred to by hash in some subsequent object. At this time, we assume that a (signature ) block following a cert body in a sequence will call for that cert body to be hashed by the algorithm indicated in the signature. If an object will be referenced by different hashes, it can be followed by multiple (do hash ..) opcodes. 4.3 object :: "(" "cert" ? ? ? ? ? ? ? ")" ; The full SPKI/SDSI 2.0 specification as it has evolved over the past year has departed somewhat from the original purpose of providing the simplest possible, bare-bones certificate which is still useful to Internet developers. It has acquired some features which we now believe are of extreme value and therefore worth the complexity they introduce. However, there are still expected to be some developers who do not need all these additional features. Ellison, et al. [Page 37] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 A SPKI/SDSI compliant with this proposed standard fits within the full BNF given at the end of this draft. A fully "compliant" verifier would accept all of that possible BNF. However, there may be developers in closed environments which will never generate SPKI/SDSI using all the features presented in the BNF and using verifier code which can not accept the full set. As an aid in selecting subsets of the SPKI/SDSI definition, we offer the following four sections -- a basic and three extensions from the basic which are independent of one another and therefore might be included or left out as the developer wishes. However, we urge everyone to consider use of the full definition and to cut back only if it is obvious that some set of features will never be needed or that the code required to process some feature can not fit within the application's design constraints. For that latter possibility, the developer can consider reducing full SPKI/SDSI certs to Certificate Result Certs [CRCs] which can easily be expressed in bare-bones format. It should be kept in mind that a decision to accept less than the full SPKI cert limits the certificate chains a verifier can accept without use of an intermediary CRC engine. 1. Bare-bones SPKI 2. Simple SPKI/SDSI (addition of SDSI names) 3. Tag algebra (addition of the *-form construct) 4. Threshold subjects (addition of multiple-subject forms) 4.3.1 Bare-bones SPKI A bare-bones SPKI cert is one which uses only principals (not names) for both issuer and subject, and uses a non-intersectable S- expression for the tag, to be interpreted by code at the verifier. It does not permit threshold subjects. This might show up in actual use as either a special, simple cert for a specific purpose or as a Certificate Result Cert (CRC). We expect verifiers which accept only bare-bones SPKI certs to be specialized applications in closed environments, if any such verifiers are fielded. Ellison, et al. [Page 38] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 4.3.1.1 :: "(" "version" ")" ; Version numbers are non-negative and start with #00#. If the field is missing from an object, it is assumed to be (version #00#), which is the version of all objects in this draft. It is assumed that a verifier, when encountering a structure it doesn't know how to parse (because it has a version number too high), will ignore that object. 4.3.1.2 :: "(" "display" ")" ; This optional field gives a display hint for the entire certificate. This display parameter does not affect certificate chain reduction, but is provided to aid user-interface software in certificate display. At this time, we have no such hints defined, but we anticipate allowing the differentiation between a SDSI individual name definition, SDSI group membership definition, a straight permission delegation, etc. Possible parameters for this field are left as an open issue. 4.3.1.3 In the bare-bones SPKI cert, we have: :: "(" "issuer" ")" ; :: | ; and some implementations may prefer to simplify code and allow only for . This rules out issuers, although not a field which is the hash of a . An explicit as an issuer offers no security to the cert. Ellison, et al. [Page 39] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 4.3.1.4 :: "(" "issuer-info" * ")" ; The (issuer-info ) object provides the location of the cert(s) by which the issuer derives the authority to pass along the authorization in the present . We expect the prover (the calling client) to track down such other certs and provide them to the verifier (the called server), but we allow this information in the cert to simplify that process for the prover. 4.3.1.5 In the bare-bones SPKI cert, we have: :: "(" "subject" ")" ; :: | ; and some implementations may prefer to simplify code and allow only for . 4.3.1.6 :: "(" "subject-info" * ")" ; This optional field provides the location of information about the subject. For example, if the subject is a hash of a key, this might provide the location of the key being hashed. 4.3.1.7 :: "(" "propagate" ")" ; This optional field, if present, notes that the has not only the permission given in the 's field but also the permission to delegate that (or some portion of it) to others. Ellison, et al. [Page 40] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 4.3.1.8 In the bare-bones SPKI cert (and simple SPKI/SDSI cert), the tag field has no special structure beyond the following: :: "(" "tag" "(*)" ")" | "(" "tag" ")" ; :: ; :: "(" * ")" ; :: ; The form (tag (*)) means "all permissions". The form gives an application-dependent S-expression. The reduction rule for this simple form is that the S-expression must match exactly [or must match with a (tag (*))]. 4.3.1.9 The field gives validity dates and/or on-line test information for the cert. :: ? ? ? ; :: "(" "not-after" ")" ; :: "(" "not-before" ")" ; The not-after and not-before options are self-explanatory. If either is missing, then the cert is assumed valid for all time in that direction. For example, one might omit the field, if that date would be before or at the time of creation of the cert, unless one wanted to note the creation time for documentary purposes. 4.3.1.9.1 :: ; A date field is an ASCII byte string of the form: YYYY-MM-DD_HH:MM:SS Ellison, et al. [Page 41] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 always UTC. For internal use, it is treated as a normal byte string. For example, "1997-07-26_23:15:10" is a valid date. So is "2001-01-01_00:00:00". fields are compared as normal ASCII byte strings since one never needs to compute the size of a time interval to test validity -- only determine greater-than, less-than or equal. 4.3.1.9.2 :: "(" "online" * ")" ; :: "crl" | "reval" | "one-time" ; The online test option allows a cert to be backed up by finer grain validity testing. The reply from an online test is a digitally signed object, validated by the given in the test specification. That object includes validity dates, so that once one has the online test response, its validity dates can be intersected with the parent cert's validity dates to yield the current working validity dates for the cert. The crl form tells the verifier (or prover, who fetches this information for the verifier, in our standard model), the current list of invalid certs. If the present cert is not on that list, then the cert is presumed valid. The revalidate form is the logical opposite of the crl. It tells the verifier a list of valid certs -- or, just that the current cert is valid. The one-time form is a revalidate form without validity dates. It must be fetched by the verifier, rather than the prover, since it is valid only for the current verification step. [In effect, it has a validity period of just "now".] The process of getting this one-time revalidation involves sending a unique (and partly random) challenge which is returned as part of the signed response. See section 6 for a full description of on-line test request and reply formats. Ellison, et al. [Page 42] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 4.3.1.10 :: "(" "comment" ")" ; This optional field allows the issuer to attach comments meant to be ignored by any processing code but presumably to be read by a human. 4.3.2 SPKI/SDSI This level of fully implements the merged SPKI and SDSI proposals, except for the algebra improvement which was developed after the decision to merge (and which is described below). The full SPKI/SDSI involves enhancement of the and fields, over what was included in the bare-bones SPKI cert. 4.3.2.1 The full form of issuer is: :: "(" "issuer" ")" ; :: | ; :: "(" "name" ")" ; The additional construct allowed here gives the definition of a SDSI name in the name space of the issuer. For example, (cert (issuer (name (hash md5 |Txoz1GxK/uBvJbx3prIhEw==|) fred)) (subject (hash md5 |Z5pxCD64YwgS1IY4Rh61oA==|)) (tag (*)) ) or {KDQ6Y2VydCg2Omlzc3Vlcig0Om5hbWUoNDpoYXNoMzptZDUxNjpPGjPUbEr +4G8lvHemsiETKTQ6ZnJlZCkpKDc6c3ViamVjdCg0Omhhc2gzOm1kNTE2Ome acQg+uGMIEtSGOEYetaApKSgzOnRhZygxOiopKSk=} defines the name "fred" in the name space of the key which hashes to |Txoz1GxK/uBvJbx3prIhEw==|. It is defined to be the key which hashes to |Z5pxCD64YwgS1IY4Rh61oA==|. That key acquires all the permissions which might be delegated to "fred" by name. Ellison, et al. [Page 43] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 The cert must be signed by the key referenced in the (issuer ), in this case, the key hashing to |Txoz1GxK/uBvJbx3prIhEw==|. 4.3.2.2 The full form of subject (except for k-of-n, described below) is: :: "(" "subject" ")" ; :: | | | | ; 4.3.2.2.1 The primary addition to the possibilities for is a SDSI name. This can be either a relative name or a fully-qualified name. :: | ; :: "(" "name" ")" ; :: "(" "name" ")" ; :: | ; For evaluation purposes, the relative name is translated into a fully-qualified name by using the key of the issuer. Unlike the SDSI name, which is forced to be a name in the issuer's name space, the subject name can be in any name space. (subject (name (hash md5 |Txoz1GxK/uBvJbx3prIhEw==|) fred sam george mary)) refers through "fred" defined in the name space of |Txoz1GxK/uBvJbx3prIhEw==|, to reduce to: (subject (name (hash md5 |Z5pxCD64YwgS1IY4Rh61oA==|) sam george mary)) recursing until the subject reduces to a key. This construct allows deferred binding of keys to names, while the bare-bones SPKI format forces binding of keys to names at the time the certificate is issued. In particular, the owner of any name space involved in such Ellison, et al. [Page 44] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 a SDSI name chain can replace an existing name definition after the cert above is issued, without affecting the validity of that cert or forcing it to be reissued. For that matter, the cert above can be issued before there is any definition of the referenced name. 4.3.2.2.2 :: "(" "object-hash" ")" ; This option for a (subject ) refers to an object other than a (or SDSI name reducing to a principal). One might use this form to assign attributes to an object (a file, a web page, an executable program, ...). 4.3.2.2.3 :: "(" "secret-key" * ? ")" ; A secret key can also be a Principal, in the formal sense, but we do not permit it to appear explicitly in an for obvious reasons. Most likely, a using a secret key will use the hash of the key, so that the cert could be published. In that case, the builder of may be well advised to include a (nonce ...) field, unused by the secret-key algorithm but hiding any key value from brute force searches via the published hash value. It is also possible to have split secret keys, as is popular in some banking applications: e.g., (secret-key des3-split-4 (a #ba1c9bd4#) (b #e747105c#) (c #7f62536b#) (d #0fa235f9#) ) could define a 2-key triple-DES key, in four parts. This key could be split among 4 different parties, via the S-expressions: (secret-key des3-split-4 (a #ba1c9bd4#) (nonce #5b30e629#) ) (secret-key des3-split-4 (b #e747105c#) (nonce #a5e71fe3#) ) (secret-key des3-split-4 (c #7f62536b#) (nonce #3c317d99#) ) (secret-key des3-split-4 (d #0fa235f9#) (nonce #7597d39e#) ) and each of those 4 partial keys could be given to a different party to hold, together with a certificate referring to the part by its hash, verifying its authenticity and its intended mode of use. That Ellison, et al. [Page 45] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 certificate might also include a key serial number as part of its tag field. 4.3.2.2.4 :: "(" "keyholder" ")" ; This form of subject refers to the flesh and blood (or iron and silicon) holder of the referenced key. A with such a subject is saying something about that person or machine -- such as its location, its address, its age, its weight, its height, its picture, .... 4.3.2.3 :: "(" "subject-info" * ")" ; This optional field might give the location of SDSI name cert servers to help the prover (the client code), which is building a list of certs to present to the verifier, to find those certs. 4.3.3 Tag algebra This extension to bare-bones SPKI/SDSI provides a means for expressing sets of permissions (or ranges of parameters) so that a standard, simple algorithm in the verifier can intersect tag fields of two adjacent to yield the permission of the combination. When a verifier is equipped to do tag algebra using "*-forms", as we expect standard verifiers to be, cert chains can be expressed which delegate only a sub-portion of one's permissions. When composing certificate chains, the tag fields are automatically intersected by a standard intersection algorithm. The user does not have to specify an intersection algorithm for his tags, but he does have to write his tags in such a way that the standard intersection algorithm gives the desired behavior. Ellison, et al. [Page 46] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 4.3.3.1 *-forms An S-expression of the form ( * ... ) is called a "*-form". An S-expression that does not contain any *-forms (at any level) is called a "*-free" S-expression. (Byte strings are *-free.) *-free S-expressions are significant because we assume that elementary authorizations (permissions, or rights) are expressed as *-free S- expressions. The simplest form of a certificate has a tag that is *-free. [Bare-bones SPKI/SDSI certs have *-free tags.] The intersection of two *-free S-expressions s1 and s2 is either s1 (if s1 and s2 are identical), or null otherwise. Other S-expressions are called "variable" S-expressions. Every S-expression (T) (*-free or not) is understood to represent a set m(T) of *-free S-expressions. Each of those *-free tags has a meaning and that meaning is defined by the verifier code. A variable S-expression may represent a large set of *-free S- expressions. The use of *-forms allows one to denote such a set efficiently. Issuing a certificate with tag T (i.e. with field (tag T)) has the same effect as issuing a separate certificate with tag T' for every element T' of m(T). That is, the elements of m(T) are assumed to have meanings which are permissions or capabilities and the meaning of m(T) is the union of the permissions of the elements of m(T). A certificate chain with tags T1, ..., Tk reduces to a result certificate with a meaning that is the intersection of m(T1),...,m(Tk). 4.3.3.1.1 Sets of S-expressions Here are some simple *-forms, operating on whole S-expressions: (*) whose meaning is the set of all S-expressions (* null) whose meaning is the empty set (* set s1 ... sk) whose meaning is just the union of the meanings m(s1), ..., m(sk) (* intersect s1 ... sk) whose meaning is just the intersection of the meanings m(s1),...,m(sk) The (* null) expression is unlikely to occur in a certificate tag, Ellison, et al. [Page 47] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 but is useful to have as part of the algebra of *-forms. The (* intersect) form is also not expected to occur in a certificate. It is defined for completeness. [In some cases, it can ease the programming of the *-form intersection software by permitting it to postpone an intersection. This is because it is always easy to intersect a *-free form with a *-form and the final result of a verification step is almost certainly a *-free form.] One can also build sets of S-expressions by reordering, adding or deleting parts: ( * append s ) -- represents all S-expressions that can be obtained by appending additional elements to the end of list s. Example: T1 = ( tag ( * append ( ftp "abc.com" ))) allows there to be additional elements at the end of the ftp list after "abc.com". ( * reorder s ) ( * reorder-insert s ) ( * reorder-delete s ) These represent the set of S-expressions you can get from s by re- ordering the elements of s (other than the first) and possibly inserting new elements, or deleting some elements (other than the first). For example, (* reorder (rsa (n #44#)(e #03#))) allows the n and e fields to be given in either order. Or, the meaning of (* reorder-insert (a (b "4")(c "5"))) includes (a d (c "5") e f (g "23") (b "4")) The (* reorder) family of constructs is good when the elements of the list are indexed by keywords or list type, rather than by position, while the (* append) construct is good for positional tag forms. 4.3.3.1.2 S-expressions with *-form parts An s-expression can be written that is not a *-form, but which contains *-forms: Let s denote the list (s1 s2 ... sk) (where s1 is not *) Then m(s) is the set Ellison, et al. [Page 48] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 { ( t1 ... tk ) : each ti is an element of m(si) } That is, the meaning of a list is the cross product of the meanings of its elements. For example: if s = ( W (* set a b) (* set c d e) ) then m(s) = { (W a c) (W a d) (W a e) (W b c) (W b d) (W b e) } If s is the list (s1 ... sk) and s' is the list (s1' ... sk') (where s1 and s1' are not *), then (* intersect s s') has the same meaning as ((* intersect s1 s1') ... (* intersect sk sk')) The meaning of an intersection of lists is the list of intersections of their meaning. [example] Consider the tag T1 = (tag (spend-from "45123")) Here 45123 is an account number at the bank. Since this is *-free, the intersection of T1 with the tags from other certificates in a certificate chain can only yield either T1 or (* null). Consider now the variable S-expression of the form T2 = (tag (spend-from (* set "45123" "11112"))) This is intended to denote an authorization to spend from either account 45123 or account 11112. Alice can delegate to Bob the authority to spend from either account using tag T2, and Bob can delegate to Charles the ability to spend from account 45123 only using tag T1. This works properly automatically, since (* intersect T1 T2) = T1 because (* intersect tag tag) = tag (* intersect spend-from spend-from) = spend-from (* intersect "45123" (* set "45123" "11112")) = "45123" Here are two simple *-forms representing sets of byte strings: (* prefix "abc") -- represents the set of byte strings having "abc" as a prefix. Example of use: T1 = (tag (http (* prefix "http://abc.com/"))) This can be automatically intersected with T2 = (tag (http (* prefix "http://abc.com/accounting"))) to yield Ellison, et al. [Page 49] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 T2 = (tag (http (* prefix "http://abc.com/accounting"))) (* range ? ? ) where is one of "alpha", "numeric", "time" or "binary" and ::= ( ) ::= "g" | "ge" ; ::= ( ) ::= "l" | "le" "alpha" restricts the set to byte strings, with left-justified comparisons "numeric" restricts the set to ASCII strings representing positive or negative numbers (possibly with a decimal point and following digits) "time" restricts the set to ASCII strings representing times (apart from their dates) "binary" restricts the set to binary strings representing numbers, that is byte strings with right-justified comparisons and sign taken from the most significant bit. Examples of use: T1 = (tag (spend-amount (* range numeric (l "5000")) USD )) authorizes someone to spend up to 5000 US dollars. T2 = (tag (login cybercash.com cme (time (* range time (ge "04:00:00") (le "12:00:00"))))) authorizes the keyholder to login on cybercash.com as user cme during the hours 4 am to noon UTC. 4.3.3.1.3 *-form reduction It is possible to recursively work out the intersections for tags using *-forms in an automatic manner. For example, the intersection of (tag (spend (amount (* range numeric (l "5000"))) (account (* set "12345" "67890")) (* reorder-insert (for socks shirt pants)))) and (tag (spend (amount (* range numeric (l "1000"))) (account (* set "87654" "12345")) (for tie pants socks belt shirt))) is (tag (spend (amount (* range numeric (l "1000"))) (account "12345") (for tie pants socks belt shirt))) Ellison, et al. [Page 50] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 Note that *-forms can be used to get the effect of multiple tags per certificate; a certificate with tag ( tag ( * set T1 T2 ... Tk ) ) is entirely equivalent to a set of separate certificates with tag fields T1, T2, etc. However, we should point out that if too many permissions are accumulated in a single certificate, then the certificate itself forms a kind of dossier on the keyholder which might be considered a privacy violation. 4.3.3.2 *-form BNF The *-form algebra above is expressed in BNF as: :: "(" "tag" ")" ; :: | ; :: | | | ; :: "(" "*" ")" ; :: "append" | "reorder" | "reorder-insert" | "reorder- delete" ; :: "(" "*" "set" * ")" ; :: "(" "*" "intersect" * ")" ; :: | ; :: "(" "*" ")" ; :: "(" "*" "null" ")" ; :: "(" * ")" ; :: | ; :: | | | | ; :: "(" "*" "prefix" ")" ; Ellison, et al. [Page 51] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 :: "(" "*" "range" ? ? ")" ; :: "alpha" | "numeric" | "time" | "binary" ; :: ; :: "g" | "ge" ; :: ; :: "l" | "le" ; :: "(" "*" "set" * ")" ; :: "(" "*" "intersect" * ")" ; 4.3.4 Threshold subjects A threshold subject, introduced by Tatu Ylonen for SPKI and by Rivest and Lampson in SDSI 1.0, specifies N subjects for a certificate or ACL entry, of which K must agree before the permission is passed along. The actual intent is to insure that there are K distinct paths passing permission between the verifier's ACL and the prover's request. These multiple paths branch and re-join, so the k-of-n construct could theoretically be part of either the Subject or the Issuer. Since an ACL might want to specify these multiple paths (and an ACL has no Issuer) and since a cert is signed by a single Issuer, we have chosen to specify the branching at the Subject. A certificate or ACL with a k-of-n Subject does not delegate permission to any of those subjects, alone. Only if at least K of the N subjects show certificate paths which converge on a single target Subject during reduction, is that permission transmitted to the target. If fewer than K such paths can be shown, then the permission is blocked. The first reaction is that this is far from simple. However, it is extremely useful. It has been demanded by a number of initial customers of SPKI certificates. It also solves a number of sticky political problems. This section lays out the specification of K-of- N subjects. The rules for reducing 5-tuples containing such entries are given below in Section 7. Ellison, et al. [Page 52] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 4.3.4.1 Examples Examples of the use of K-of-N permission propagation include: 1. co-signing of electronic corporate checks or purchase orders above a certain amount 2. establishing the root DNSSEC key, bypassing the political battles which would inevitably ensue if one country were to hold *the* root key for the entire world. The same goes for any root key. 3. establishing a root key for a trusted service, via multiple algorithms. That is, one could have three root keys, using RSA, DSA and Elliptic Curve signature algorithms (for example), and require that two of them yield a valid chain. This way, if someone were to break an entire algorithm (find a way to invert the algorithm), much less if someone were to break one key in the set of three, the root remains securely established. At the same time, there is fault tolerance. In case one of the keys is revoked, the following certificates remain empowered. 4. using online and off-line issuers. One could have a permission established by an off-line key issuing a long-lived certificate and echoed by an online automated server, issuing short-lived certificates. The delegation of this permission could require both before the eventual subject gets the permission. This can be achieved through the use of (online ) tests in a long-lived certificate, but the K-of-N subject mechanism may be cleaner. 5. ultra-secure applications. There are many applications which follow the nuclear weapons launch scenario. That is, multiple agreement is required before the permission is granted. 4.3.4.2 Definition :: "(" "k-of-n" * ")" ; where the first int is K and the second is N, K < N, and there are N subjects listed. The processing of certs and ACLs (therefore 5-tuples) using k-of-n subjects is presented below in section 7.5. Ellison, et al. [Page 53] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 5. Examples The fields listed here are not meant to be an exhaustive list of all possible s. Such is not possible. The final arbiter of what needs to be an and what parameters a particular needs is the designer of the code which verifies a certificate, e.g., to grant access. Listed here are fields we suspect might be useful and we present these here as a guide to the developer's imagination. 5.1 ftp tag (tag (ftp cybercash.com cme )) This indicates that the Subject has permission to do FTP into host cybercash.com as user cme. 5.2 http tag (tag (http http://acme.com/company-private/personnel/ )) This gives the Subject permission to access web pages which start with the given URI. 5.3 telnet tag (tag (telnet clark.net cme )) This gives the Subject permission to telnet into host clark.net as user cme. 5.4 Public Key Protected File System tags (tag (pkpfs /// )) (tag (pkpfs (* prefix ////) )) refers to a hypothetical distributed file system whose access is controlled by public key challenge/response. The first form gives access to a single file or a small set of files (by use of "*" in the file name) while the second form gives access to an entire sub- Ellison, et al. [Page 54] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 directory. is a (* set ...) whose elements are chosen from: (read) (write) (append) (delete) (execute) 5.5 Authority to spend money (tag (spend (* range le ))) indicates that the subject has authority to authorize spending up to per electronic check from at . 5.6 Process Server cert A process server certificate, mentioned in Section 3.5.5.2, might have the form: (cert (issuer (hash md5 |u2kl73MiObh5o1zkGmHdbA==|)) (subject (keyholder (hash md5 |kuXyqx8jYWdZ/j7Vffr+yg==| key2-pub))) (tag (tracking-fee "150" USD)) (not-after "2003-01-01_00:00:00") ) {KDQ6Y2VydCg2Omlzc3Vlcig0Omhhc2gzOm1kNTE2OrtpJe9zIjm4eaNc5Bp h3WwpKSg3OnN1YmplY3QoOTprZXlob2xkZXIoNDpoYXNoMzptZDUxNjqS5fK rHyNhZ1n+PtV9+v7KODprZXkyLXB1YikpKSgzOnRhZygxMjp0cmFja2luZy1 mZWUzOjE1MDM6VVNEKSkoOTpub3QtYWZ0ZXIxOToyMDAzLTAxLTAxXzAwOjA wOjAwKSk=} noting in its tag field that it will serve papers on the indicated Keyholder for a tracking fee of $150 until the beginning of 2003. 5.7 PICS-like ratings cert (cert (issuer (hash md5 |Ut9m14byPzdbCNZWdDjNQg==|)) (subject (object-hash (hash md5 |vN6ySKWE9K6T6cP9U5wntA==| http://www.clark.net/pub/cme/home.html))) (tag (ratings (sex "0") (violence "0") (crypto "6")))) Ellison, et al. [Page 55] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 {KDQ6Y2VydCg2Omlzc3Vlcig0Omhhc2gzOm1kNTE2OlLfZteG8j83WwjWVnQ 4zUIpKSg3OnN1YmplY3QoMTE6b2JqZWN0LWhhc2goNDpoYXNoMzptZDUxNjq 83rJIpYT0rpPpw/1TnCe0Mzg6aHR0cDovL3d3dy5jbGFyay5uZXQvcHViL2N tZS9ob21lLmh0bWwpKSkoMzp0YWcoNzpyYXRpbmdzKDM6c2V4MTowKSg4OnZ pb2xlbmNlMTowKSg2OmNyeXB0bzE6NikpKSk=} 5.8 Virus checking cert (cert (issuer (hash md5 |Ut9m14byPzdbCNZWdDjNQg==|)) (subject (object-hash (hash md5 |szKSlSK+SNzIsHH3wjAsTQ==| runemacs.exe))) (tag virus-free)) {KDQ6Y2VydCg2Omlzc3Vlcig0Omhhc2gzOm1kNTE2OlLfZteG8j83WwjWVnQ 4zUIpKSg3OnN1YmplY3QoMTE6b2JqZWN0LWhhc2goNDpoYXNoMzptZDUxNjq zMpKVIr5I3MiwcffCMCxNMTI6cnVuZW1hY3MuZXhlKSkpKDM6dGFnMTA6dml ydXMtZnJlZSkp} 5.9 Full sequence, with donation cert For one full example of a real certificate, the following sequence presents the public key used, calls for the verifier to hash it (and store it away, to be referred to later by its hash), gives a certificate body and then a signature (which by side-effect calls for the previous object to be stored and hashed by the signature algorithm's hash function). The example used is a temporary donation cert. (sequence (public-key rsa-pkcs1-md5 (e #03#) (n |AKMbo+VBqLu+90l2UuuGquzxLIXpqIypkSkrfEVprA0K2Vfm5ufmNZG3 0yWqdnXlxdGuyyBglj+FloXTrqHWSQQJfvTv5EMBz+icJ2GMbjtP1zCY8 krmchh5v/O3BntEwaq1hkMtmP+ZeFjI5yQ/YC2vVc5K1PTy+GOSP+xvYK C1|)) (do hash md5) (cert (issuer (hash md5 |Z4a6hysK/0qN0L5SFkcJFQ==|)) (subject (keyholder (hash md5 |Z4a6hysK/0qN0L5SFkcJFQ==|))) Ellison, et al. [Page 56] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 (tag (* set (name "Carl M. Ellison") (street "207 Grindall St.") (city "Baltimore MD 21230-4103"))) (not-after "1997-08-15_00:00:00")) (signature (hash md5 |PC4M1LNpkMHtgacc73ch5A==|) (hash md5 |Z4a6hysK/0qN0L5SFkcJFQ==| cme.key) |PQkhssqNW191aVwNR9DflDQemWf/E2maSdIk/5GulzRB7cjagEn9FqI9J vGOTkqT5miJmsFx9pY5nXQxp+tJZdwLYeSEA3iAzjcwBY1qG+DQqpWu2AC JqSnnKmo6kh8KbbySNtCbpguNJs2WM/eRBdkph/AUjTkqe0Xnv/mKEXA=| )) with canonical form encoded in base 64: {KDg6c2VxdWVuY2UoMTA6cHVibGljLWtleTEzOnJzYS1wa2NzMS1tZDUoMTp lMToDKSgxOm4xMjk6AKMbo+VBqLu+90l2UuuGquzxLIXpqIypkSkrfEVprA0 K2Vfm5ufmNZG30yWqdnXlxdGuyyBglj+FloXTrqHWSQQJfvTv5EMBz+icJ2G MbjtP1zCY8krmchh5v/O3BntEwaq1hkMtmP+ZeFjI5yQ/YC2vVc5K1PTy+GO SP+xvYKC1KSkoMjpkbzQ6aGFzaDM6bWQ1KSg0OmNlcnQoNjppc3N1ZXIoNDp oYXNoMzptZDUxNjpnhrqHKwr/So3QvlIWRwkVKSkoNzpzdWJqZWN0KDk6a2V 5aG9sZGVyKDQ6aGFzaDM6bWQ1MTY6Z4a6hysK/0qN0L5SFkcJFSkpKSgzOnR hZygxOiozOnNldCg0Om5hbWUxNTpDYXJsIE0uIEVsbGlzb24pKDY6c3RyZWV 0MTY6MjA3IEdyaW5kYWxsIFN0LikoNDpjaXR5MjM6QmFsdGltb3JlIE1EIDI xMjMwLTQxMDMpKSkoOTpub3QtYWZ0ZXIxOToxOTk3LTA4LTE1XzAwOjAwOjA wKSkoOTpzaWduYXR1cmUoNDpoYXNoMzptZDUxNjo8LgzUs2mQwe2BpxzvdyH kKSg0Omhhc2gzOm1kNTE2OmeGuocrCv9KjdC+UhZHCRU3OmNtZS5rZXkpMTI 4Oj0JIbLKjVtfdWlcDUfQ35Q0Hpln/xNpmknSJP+Rrpc0Qe3I2oBJ/RaiPSb xjk5Kk+ZoiZrBcfaWOZ10MafrSWXcC2HkhAN4gM43MAWNahvg0KqVrtgAiak p5ypqOpIfCm28kjbQm6YLjSbNljP3kQXZKYfwFI05KntF57/5ihFwKSk=} Ellison, et al. [Page 57] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 6. On-line test reply formats Given here is the BNF for on-line test replies. This section does not give details of protocols for connecting to online servers or transmitting messages between them. It is assumed that, for example, the requester can provide a URI and use HTTP, while the URI includes any parameters the requester needs to pass along. The reply from the on-line source will be in canonical form, according to the BNF given below. If a protocol is used other than HTTP, the (online ...) object includes optional fields which can be used to hold parameters for those tests (e.g., indicating which certificate is of interest, how to authenticate to the server, etc.). 6.1 CRL and delta-CRL The full or delta CRL is: :: "(" "crl" ")" ; :: "(" "canceled" * ")" ; :: "(" "delta-crl" ")" ; :: ; and should be signed by the principal indicated in the (online...) field which directed the CRL to be fetched. The CRL request can be a straight HTTP transaction, using the URI provided in the cert, but we do not specify online protocols in this draft. If the verifier has a complete CRL, then it can provide the hash of that CRL in whatever protocol is chosen and get back just the additions to the previous CRL, in the form of a 6.2 Revalidation :: "(" "reval" ")" ; :: "(" "cert" ")" ; This construct specifies the hash of the current cert as Ellison, et al. [Page 58] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 and gives a new validity period for that cert. It should be signed by the indicated in the (online...) field which directed it to be fetched. The reval request can be a straight HTTP transaction, using the URI provided in the (online...) field, but we do not specify online protocols in this draft. 6.3 One-time revalidation For one-time revalidation, the verifier itself must fetch the (reval ) record, which will have the form: :: "(" "reval" ")" ; :: "(" "one-time" ")" ; with the byte string inside being one provided by the caller, expected to be unique over time and unguessable -- e.g., a large random number or random number plus sequence number. This reply should be signed by the indicated in the (online..) field which directed it to be fetched. This result, if successful, yields a Validity value for the 5-tuple of "now". Ellison, et al. [Page 59] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 7. 5-Tuple Reduction (full) This section describes the operation of the trust evaluation machinery assumed to be part of every verifier which accepts SPKI certificates. The inputs to that trust engine are 5-tuples and any kind of certificate, not just SPKI, as well as Access Control List (ACL) entries can be translated to 5-tuples so that they can all participate in the trust engine decision process. A 5-tuple is an internal construct and therefore best described by a programming language data structure. A separate document will give the 5-tuple reduction code and those data structures. For this purpose, we describe the content in BNF, but want to make sure that a 5-tuple will never be expressed in canonical BNF form, transmitted in that form, etc. The <5-tuple> differs from a by leaving out some fields and by augmenting the possibilities for . This latter is because there are intermediate states in which the issuer holds a full SDSI name -- a state not allowed in normal . 7.1 <5-tuple> BNF A 5-tuple is a positional construct of the form: <5-tuple>:: ; :: | | "self" ; :: | | | | ; :: "t" | "f" ; :: | ; :: "(" "name" ")" ; :: | "null" ; :: | "null" ; Standard implementations are expected to store keys (and other bulky things) only once and refer to them by pointer. This permits us to use keys directly rather than hashes of keys while doing 5-tuple reduction. This also permits us to reduce certs which used the same Ellison, et al. [Page 60] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 key but referred to it by different hash algorithms. The extra option for issuer, "self", is provided for ACL entries. The self referred to is the verifier, holding that ACL and doing the verification of offered proofs. The only 5-tuples which mean anything to the verifier, after reduction is done, are those with "self" as issuer. 7.2 Bare-bones case A bare-bones SPKI cert is reduced as described above in section 3.3.1. The only issuer and subject fields allowed are principals which are keys. The tag fields a_i are *-free S-expressions or the form (tag *). + yields if: s1 = i2 d1 = "t" a = (* intersect a1 a2) v = the intersection of v1 and v2 Validity intersection involves normal intersection of date ranges, if there are not-before or not-after fields in v1 or v2, and union of on-line tests, if those are present in v1 or v2. Each on-line test includes a validity period, so there is a resulting validity interval in terms of dates. This can include the string "now", as the product of a one-time on-line test result. "now" intersects with any date range including the present to yield "now". If v is an empty time interval, then the certificates don't reduce. a = (* intersect a1 a2) in the bare-bones case is given by the following rules: If a1 is (tag (*)), a = a2. If a2 is (tag (*)), a = a1. If a1 == a2, a = a2. Otherwise, a = (* null) and the 5-tuple doesn't reduce. Ellison, et al. [Page 61] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 7.3 Intersection of *-form tag sets The intersection of *-forms was presented above in section 4.3.3.1 by way of examples. The full rules are presented below. Via these rules any (tag)s can be intersected, but in actual practice it will probably be the case that intersection will start with a *-free form which will yield a *-free form for all intermediate results. However, for theoretical completeness, the following rules are provided: S, T: *-free S-expressions, assumed unequal A, B, C, D, E, F: byte-strings, assumed unequal in display type, string value or both U, V, X, Y, Z: any S-expression (*-free or *-form) X . Y = Y . X A . A = A A . B = (* null) A . U = (* null) U . U = U S . T = (* null) Y . (* set X_1 ... X_n) = (* set Y.X_1 ... Y.X_n) Y . (* intersect X_1 ... X_n) = (* intersect X_1 ... X_n Y) = (* intersect Y.X_1 ... Y.X_n) /* depending on which looks more productive */ /* do the second form if one of those becomes */ /* (* null) or if Y is *-free */ (* set (* null) X_1 ... X_n) = (* set X_1 ... X_n) (* set (*) X_1 ... X_n ) = (*) (* intersect (* null) X_1 ... X_n) = (* null) (* intersect (*) X_1 ... X_n) = (* intersect X_1 ... X_n) (* set X) = X (* intersect X) = X (* intersect X X Y_1 ... Y_n) = (* intersect X Y_1 ... Y_n) (* set X X Y_1 ... Y_n) = (* set X Y_1 ... Y_n) Both (* set) and (* intersect) are fully commutative, therefore any (* null) in a (* intersect) turns the whole result (* null) and any (* null) in a (* set) can be deleted, for example. X . (*) = X X . (* null) = (* null) Ellison, et al. [Page 62] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 7.3.1 Reduction to (* null) by data type mismatch If a byte-string is intersected with a list, the result is (* null). Some *-forms are of one data type or the other, so this can lead to reductions to (* null) at a high level. Specifically, (* prefix ...) (* range ...) are always byte strings, while (* append) (* reorder) (* reorder-insert) (* reorder-delete) are always lists. 7.3.2 Specific intersections U . (* append X) = U if X is a prefix of U U . (* reorder X) = U if X is a reordering of U U . (* reorder-insert X) = U if X is a reordering of a subset of U U . (* reorder-delete X) = U if X is a reordering of a superset of U A . (* prefix B) = A if B is an initial substring of A and has the same display hint as A A . (* range ...) = A if A is contained within the specified range and the range limits have the same display hints as A (* append X) . (* append Y) = (* append Y) if X a prefix of Y or (* append X) if Y is a prefix of X or (* null) (* reorder X) . (* reorder Y) = (* reorder X) if Y is a reordering of X (* reorder X) . (* reorder-insert Y) = (* reorder X) if Y is a reordering of a subset of X (* reorder X) . (* reorder-delete Y) = (* reorder X) if Y is a reordering of a superset of X Ellison, et al. [Page 63] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 (* reorder-insert X) . (* reorder-insert Y) = (* reorder-insert X) if Y is a reordering of a subset of X (* reorder-delete X) . (* reorder-delete Y) = (* reorder-delete X) if Y is a reordering of a superset of X (* prefix A) . (* prefix B) = (* prefix A) if B is a prefix of A (* range A B) . (* range C D) = (* range E F) by intersection of the two linear ranges 7.3.3 Deferred intersections Note that in every case it is legal to express X . Y as (* intersect X Y) if another rule for intersection would involve a great deal of work or if no rule is given. For example, intersection of sets could produce a huge set, with no real benefit, assuming that an eventual *-free form will yield a single element from each set. 7.4 Reduction of SDSI names By the rules for bare-bones SPKI 5-tuple reduction, + yields if: s1 = i2 d1 = "t" For the purpose of this section, we consider only the first two elements of the 5-tuple: the issuer and subject. We also modify the interpretation of d1 (to incorporate the so-called "stop at key" condition). + yields if: s1 = i2 (d1 = "t") OR (s1 is a name rather than a key) With the introduction of SDSI names, both Issuer and Subject names are mapped to fully qualified SDSI names: (name N_1 .. N_k) where k can be 0, in which case we have (name ). Ellison, et al. [Page 64] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 An Issuer inside a cert always maps to a single name or single while a Subject may have a SDSI name chain longer than 1. The introduction of SDSI names causes this reduction rule to be modified to become: + yields Consider the general case: <(name k1 r_1 .. r_s),(name k2 n_1 .. n_m)> + <(name k2 n_1 .. n_p),(name k3 t_1 .. t_u)> where n_i is assumed to be the same on both sides of the + operator. If m = p, then the reduction is: <(name k1 r_1 .. r_s),(name k3 t_1 .. t_u)> If m > p, the reduction is: <(name k1 r_1 .. r_s),(name k3 t_1 .. t_u n_{p+1} .. n_m)> If m < p, the reduction is: <(name k1 r_1 .. r_s n_{m+1} .. n_p), (name k3 t_1 .. t_u)> The following sections give some examples to illustrate this procedure. 7.4.1 Simple SDSI name reduction The most basic SDSI case is the definition of a single name as a key: <(name k1 fred),(name k2)> One can then do the reduction: + <(name k1 fred),(name k2)> = Ellison, et al. [Page 65] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 7.4.2 SDSI name composition with subject name growth One is not limited to define local names as keys. They can be defined as other names. For example, <(name k1 fred), (name k2 joe brother)> which would lead to the "reduction": + <(name k1 fred), (name k2 joe brother)> = With this form of SDSI name definition allowed, any flood-style 5-tuple reduction software must be careful to detect and not allow infinite loops of names. Current plans for 5-tuple reduction call for the prover to drive the verifier with a fixed sequence, in which case this is not an issue. 7.4.3 SDSI Name composition with issuer name growth It is possible to imagine a pairing of 5-tuples in which the issuer name grows beyond 1 name. Start with the three 2-tuples: <(name k4),(name k1 alice joe)> + <(name k1 alice), (name k2)> + <(name k2 joe), (name k3)> If we group the reduction from the left, we get <(name k4), (name k2 joe)> + <(name k2 joe), (name k3)> = <(name k4),(name k3)> However, if we group from the right, we get <(name k1 alice), (name k2)> + <(name k2 joe), (name k3)> = <(name k1 alice joe), (name k3)> and <(name k4),(name k1 alice joe)> + <(name k1 alice joe), (name k3)> = <(name k4),(name k3)> The result is the same, but there is an intermediate result in which the issuer name grows. As in the previous example, we will need to be careful to make sure to detect and prohibit infinite loops of name Ellison, et al. [Page 66] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 growth in this case. 7.5 Reduction of (subject (threshold ..)) There are at least two ways to reduce a set of certificates including a (subject (threshold ...)): from left to right and from right to left. 7.5.1 Left-to-right One plan for processing of k-of-n subjects introduces new opcodes for the (do ...) construct. Let us assume K=7 and N=12. We assume a primary "stack" for 5-tuples which never exceeds a depth of 2 for other reductions, but needs to be a real stack for this one. (cert ... (k-of-n ...)) arrives and is held on a separate stack. (do subject #01#) pulls a copy of the k-of-n cert from the separate stack and activates subject #1. So, the k-of-n 5-tuple acts like a normal, single- subject 5-tuple. It acquires a record noting which subject is active, so that at eventual reduction time, the code can verify that K different subjects were used. Normal 5-tuple reduction proceeds until the reduced subject field is the merge point of these K separate threads of certificates. Then the opcode (do subject #02#) brings one copy of the k-of-n 5-tuple from the top of the auxiliary stack and selects another subject. At this point, another thread can be reduced to the common (merge-point) subject. Whenever two threads have been reduced to 5-tuples on the primary stack, the opcode (do k-of-n) merges the top 2 items of the primary 5-tuple stack, verifying that their reduced subjects are equal and intersecting their tag and Ellison, et al. [Page 67] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 validity fields. At the end of the K thread reductions, the final (do k-of-n) yields the final result 5-tuple from the K different threads. At this point, (do pop-aux) pops the k-of-n 5-tuple from the auxiliary stack. 7.5.2 Right-to-left If we choose to process k-of-n certs right-to-left, then all K cert threads to the right of the k-of-n cert are processed first. This requires the opcode: (do push) to move the current (R-to-L) 5-tuple result to the top of the auxiliary stack. (do copy) copies the current 5-tuple from the top of the auxiliary stack to the top of the normal stack and normal cert processing proceeds, up to the point where the k-of-n cert would be required. At this point, another (do copy) fetches another copy of the right end of this thread (the merge point) and another cert thread is processed. When all K threads are processed, the k-of-n cert is presented, the auxiliary stack is popped, and the k-of-n cert combines with the K 5-tuples on the stack below it, to yield a single 5-tuple or a "null" result. At this point, each of the K 5-tuples on the stack below the k-of-n cert will have to have the same subject field and an issuer field to match one of the k-of-n cert's subject fields. Ellison, et al. [Page 68] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 8. Full BNF In the BNF to follow, top level constructs are: , , , . :: * ? ? ? ; :: "(" "acl" ? * ")" ; :: "(" "*" ")" ; :: | ; :: ":" {binary byte string of that length} ; :: "(" "display" ")" ; :: "(" "cert" ? ? ? ? ? ? ? ")" ; :: "(" "comment" ")" ; :: ; :: "0" | ; :: * ; :: "(" "propagate" ")" ; :: "[" "]" ; :: "(" "name" ")" ; :: "(" "do" * ")" ; :: "g" | "ge" ; :: "md5" | "sha1" | ; :: ; :: "(" "do" "hash" ")" ; :: ; :: "(" "hash" ? ")" ; Ellison, et al. [Page 69] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 :: "(" "*" ")" ; :: "(" "issuer-info" * ")" ; :: | ; :: "(" "issuer" ")" ; :: ; a binary integer :: "(" "keyholder" ")" ; :: "(" "*" "intersect" * ")" ; :: "append" | "reorder" | "reorder-insert" | "reorder- delete" ; :: | | | ; :: "(" "*" "set" * ")" ; :: ; :: "l" | "le" ; :: | ; :: ; /* the number of to follow */ :: | ; :: | ; :: "(" "not-after" ")" ; :: "(" "not-before" ")" ; :: "(" "*" "null" ")" ; :: "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ; :: "(" "object-hash" ")" ; :: "(" "online" * ")" ; :: "crl" | "reval" | "one-time" ; Ellison, et al. [Page 70] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 :: | ; :: "(" "*" "prefix" ")" ; :: | ; :: "(" "private-key" * ? ")" ; :: "(" "public-key" * ? ")" ; :: "rsa-pkcs1-md5" | "rsa-pkcs1-sha1" | "dsa-sha1" | ; :: "alpha" | "numeric" | "time" | "binary" ; :: "(" "*" "range" ? ? ")" ; :: "(" "name" ")" ; :: "(" * ")" ; :: | ; :: "(" "secret-key" * ? ")" ; :: "hmac-md5" | "hmac-sha1" | "des-cbc-mac" | ; :: | | | ; :: "(" "sequence" * ")" ; :: ; :: "(" "signature" ")" ; :: "(" "name" ")" ; :: "(" * ")" ; :: "(" "*" "intersect" * ")" ; :: | | | | ; :: "(" "*" "set" * ")" ; Ellison, et al. [Page 71] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 :: | | | | | ; :: "(" "subject-info" * ")" ; :: "(" "subject" ")" ; :: | ; :: | ; :: "(" "tag" "*" ")" | "(" "tag" ")" ; :: "(" "k-of-n" * ")" ; :: ; :: ; :: ? ? ? ; :: "(" "version" ")" ; Ellison, et al. [Page 72] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 Closed Issues 1) Should we require that all certificates be signed by both Issuer and Subject, when the Subject reduces to a key? [When the Subject is a non-key object, it can't sign.] [Answer: no. Signing by the Subject can not be prevented so it can be used if a need arises, but at present no security enhancement is seen to come from Subject signing. This seems to address the concerns of lawyers only.] 2) Can the Signature object support blind signatures with algorithms other than RSA? [Answer: yes -- any algorithm which supports blind signatures can be used here.] 3) Should we eliminate the final ":" in field names? These are always the first names in a list and the ":" seems to be a carry-over from RFC822 without a real purpose. [Answer: yes.] 4) Should we continue to lump public key algorithm, hash algorithm and padding algorithm together in one pub-key-name? This could lead to an explosion of names. Of course, on the other hand this might reduce the number of competing algorithm/hash/pad mixes and simplify code. [Answer: no. There are a number of proposals for expressing the components of a signature verification algorithm and one should settle out by the week after the April IETF meeting.] [Revised answer: yes, for now. Each of those proposals had a complication or flaw and we need to get this draft solidified.] 5) Should the delegation parameter be integer or boolean? [Answer: boolean is all people want, except for the third value "stop-at-key" proposed by Ron Rivest. It turns out that if delegate is false in a certificate with a SDSI name subject, then "stop-at-key" must be intended.] 6) Are object names (e.g., "Issuer") case sensitive? Ellison, et al. [Page 73] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 [Answer: yes. All other strings are, so these byte strings should be also. However, we decided to use all lower-case for object names that we define.] 7) Should we allow multiple s in one cert? It saves space and time, maybe, but could constitute a privacy threat and may complicate the cert reading code. [Answer: yes. The (* set ..) mechanism makes it easy to specify without constituting a serious complication to the 5-tuple reduction process.] 8) How much can we specify the ? Are there only a handful possible/desirable tests, that we can fully spell out, or do we need to leave that open for invention? [Answer: this draft includes full specification of online tests.] 9) How many pre-defined s should we bother defining? [Answer: none should be cast in stone here -- only examples provided to spur the imagination of developers.] 10) If the Subject is a hash of a Bundle of hashes of keys, does this mean that the cert applies to all keys in the bundle? [Answer: no -- although this is a discussion left to be addressed by the folks who sign web pages.] 11) If the Subject is a hash of a file and the file contains hashes of other things, does the cert apply to the other things? [Answer: no, according to general opinion. This is a more general issue which the community needs to consider. Perhaps W3C DSig will be the first to encounter examples of this in practice.] 12) Do we want to include validity fields for private key dates, as was done with X.509v3? [Answer: not at this time and not in these certificates. An SPKI/SDSI certificate doesn't define a public key. The public key is a primitive. There remains open the question of whether we want keys to expire and, if so, what kind of a data structure we want to support key validity dates. The subject-info field can point to or yield such a structure, should we define one.] Ellison, et al. [Page 74] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 13) How do we want to name algorithms? One possibility is to define a few common ones (ones we want to encourage everyone to use for interoperability reasons) and allow others to be defined as URIs pointing to the definition of the algorithm. [Answer: we will choose short names and turn the process over to IANA, but allow URIs for user-defined algorithm names. Presumably the URI will give a description of the algorithm and maybe even code to implement it.] 14) Should we restore the explanation of [ECR] and define a field option for it? This was removed from this draft in the interest of simplification. [Answer: there has been no request for its restoration.] 15) Should we allow Object as an optional element of the Signature expression, or force that block to give the Object's hash? [Answer: this draft assumes that (signature ) contains only the object hash, not the object, in order to avoid the complexity of ASN.1's "SIGNED" macro and to permit multiple signatures on the same body without habit getting in the way.] 16) Should we define an RSA signature algorithm with no hash and no padding, to hold verbatim objects being signed (assuming they are small enough)? [Answer: no.] 17) What is the difference between the Member and Name ? Can they be combined into one? [Answer: these tags have disappeared with the use of names in the issuer field.] 18) Should we restrict the definition to preclude the possibility of the same cert body being signed by multiple keys as Issuer (which can happen when the is a general SDSI name resolving to a key)? If so, should we permit an to be a group name, thus allowing the (Moi) to define SDSI group membership? [Answer: this is an irrelevant question under the current specification.] Ellison, et al. [Page 75] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 19) [RLR] Should we replace the display info syntax [xxx] "yyy" with ( display-type xxx "yyy" ) ? [Answer: no.] 20) [RLR] Should we have only one spelling of each object type? If so, should it be the long or the short form? Can we make such spellings short enough that they don't force line continuations while keeping them descriptive? [Answer: one spelling, preferably one English word (so that a user can look it up in a dictionary).] 21) [CME] Are object types reserved words over the entire certificate body or are they to be non-conflicting only within their enclosing object? [In the latter case, the ( Tag XXX ... ) object is to be considered to be of type "Tag XXX".] That is, when we go into an object, do we acquire a new dictionary of object types relevant to the interior of that object or do we use a single global such dictionary? [I believe we have to use local dictionaries, in order to allow distributed definition.] [Answer: object names have scope only within an object which defines them.] 22) [RLR] Should we allow the Subject to optionally be the hash of some non-key object? This could be seen as encroaching on the territory of signed PICS labels. [Answer: yes. It's desirable enough and we don't want to force all tags into the form of a PICS rating. On the + side, this permits the single trust management program to decide if a document or program is permitted to run. On the - side, this doesn't help much with on-line access control protocols.] 23) [RLR] Should we define another, non-cert object, ( assert .. ), to cover signed statements about non-keys? [Answer: no.] 24) [RLR] Should we make a clear statement that the keys used in these certs are signature keys? [[CME] I think that's understood from the fact that the only crypto we use is for signatures.] [Answer: yes -- this should be clear in the document.] Ellison, et al. [Page 76] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 25) [RLR] Should we continue to use different object types for fq- name, rel-name and grp-name, or use "Ref" as the type and let the parameters determine which is intended? [Answer: no -- use "ref", although that is not an English word. Re-answered: use "name" instead of "ref", because it's English.] 26) [RLR] Should we define (keyholder ) to mean the human or computer etc. who/which holds a private key, to be used in Subject lines? [Answer: yes.] 27) [RLR] There are different cert-like entities, in that they all reduce to 5-tuples, but they may have different object names and slightly different BNF definitions: a) certificate -- subject is a b) assertion -- subject is a cyberspace object c) request -- (a kind of assertion) d) ACL entry -- issuer is missing e) auto-cert -- subject is (keyholder [of] ) [Answer: call them all certificates, except ACL. Request is a wide open term, so that is probably different from certificate also. This draft includes a field in for a cert display type, so that the issuer can label the kind of cert.] 28) [RLR, CME] As written now, it is inconsistent to have a name as a Subject in a cert with (delegate false). RLR proposes that (delegate to-key) mean that propagation occurs through certificate sub-chains which have non-key subjects and stop when the subject is a key. [Answer: use to-key as an argument to delegate, but rename delegate to propagate. Revised: (propagate) means delegate; lack of that field means "stop at key".] 29) Should we extend to permit a group name or key as a parameter, that being the group of principals allowed to delegate? [Answer: no -- too complicated.] Ellison, et al. [Page 77] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 Open Issues 1) [RLR] Let's add a section to the I-D showing how each of the original SDSI constructs is handled in SPKI. [[CME] We could also add a section for PICS labels, X.509 certs, PGP signed keys, ...] 2) Should we start another draft to cover operation of a certificate server (as in SDSI 1.0) including protocols for communicating with it or should that discussion be in this draft? 3) Should we start another draft to cover fully worked out examples of tags for real operations (e.g., FTP, HTTP) or let those be part of this draft? 4) What kind of parameters might we want to allow? Do we want in the first place? 5) [BL] Why not replace (* reorder-insert X) with (* reorder (* append X)) ? 6) [CME] We need to specify (online..) protocols -- perhaps a variety of them (HTTP, socket connection, e-mail, ...). Ellison, et al. [Page 78] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 References [Ab97] Abadi, Martin, "On SDSI's Linked Local Name Spaces", to appear in the Proceedings of the 10th IEEE Computer Security Foundations Workshop (June 1997). [BFL] Matt Blaze, Joan Feigenbaum and Jack Lacy, "Distributed Trust Management", Proceedings 1996 IEEE Symposium on Security and Privacy. [CHAUM] D. Chaum, "Blind Signatures for Untraceable Payments", Advances in Cryptology -- CRYPTO '82, 1983. [DvH] J. B. Dennis and E. C. Van Horn, "Programming Semantics for Multiprogrammed Computations", Communications of the ACM 9(3), March 1966 [ECR] Silvio Micali, "Efficient Certificate Revocation", manuscript, MIT LCS. [HARDY] Hardy, Norman, "THE KeyKOS Architecture", Operating Systems Review, v.19 n.4, October 1985. pp 8-25. [IDENT] Carl Ellison, "Establishing Identity Without Certification Authorities", USENIX Security Symposium, July 1996. [IWG] McConnell and Appel, ``Enabling Privacy, Commerce, Security and Public Safety in the Global Information Infrastructure'', report of the Interagency Working Group on Cryptography Policy, May 12, 1996; (quote from paragraph 5 of the Introduction) [KEYKOS] Bomberger, Alan, et al., "The KeyKOS(r) Nanokernel Architecture", Proceedings of the USENIX Workshop on Micro-Kernels and Other Kernel Architectures, USENIX Association, April 1992. pp 95-112 (In addition, there are KeyKOS papers on the net available through http://www.cis.upenn.edu/~KeyKOS/#bibliography) [LAMPSON] B. Lampson, M. Abadi, M. Burrows, and E. Wobber, "Authentication in distributed systems: Theory and practice", ACM Trans. Computer Systems 10, 4 (Nov. 1992), pp 265-310. [LANDAU] Landau, Charles, "Security in a Secure Capability-Based System", Operating Systems Review, Oct 1989 pp 2-4 [LEVY] Henry M. Levy, "Capability-Based Computer Systems", Digital Press, 12 Crosby Dr., Bedford MA 01730, 1984 [LINDEN] T. A. Linden, "Operating System Structures to Support Security and Reliable Software", Computing Surveys 8(4), December Ellison, et al. [Page 79] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 1976. [PKCS1] PKCS #1: RSA Encryption Standard, RSA Data Security, Inc., 3 June 1991, Version 1.4. [PKLOGIN] David Kemp, "The Public Key Login Protocol", working draft, 06/12/1996. [RFC1321] R. Rivest, "The MD5 Message-Digest Algorithm", April 16 1992. [RFC2045] N. Freed and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", Dec 2 1996. [RFC2046] N. Freed and N. Borenstein, "Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types", Dec 2 1996. [RFC2047] K. Moore, "MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text", Dec 2 1996. [RFC2065] D. Eastlake and C. Kaufman, "Proposed Standard for DNS Security", Jan 1997. [RFC2104] H. Krawczyk, M. Bellare and R. Canetti, "HMAC: Keyed- Hashing for Message Authentication", Feb 1997. [SDSI] Ron Rivest and Butler Lampson, "SDSI - A Simple Distributed Security Infrastructure [SDSI]", http://theory.lcs.mit.edu/~cis/sdsi.html [SEXP] Ron Rivest, code and description of S-expressions, http://theory.lcs.mit.edu/~rivest/sexp.html . [SRC-070] Abadi, Burrows, Lampson and Plotkin, "A Calculus for Access Control in Distributed Systems", DEC SRC-070, revised August 28, 1991. Ellison, et al. [Page 80] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 Authors' Addresses Carl M. Ellison CyberCash, Inc. 207 Grindall Street Baltimore MD 21230-4103 USA Telephone: +1 410-727-4288 +1 410-727-4293(FAX) +1 703-620-4200(main office, Reston, Virginia, USA) EMail: cme@cybercash.com cme@acm.org Web: http://www.clark.net/pub/cme Bill Frantz Electric Communities 10101 De Anza Blvd. Cupertino CA 95014 Telephone: +1 408-342-9576 Email: frantz@netcom.com Butler Lampson Microsoft 180 Lake View Ave Cambridge MA 02138 Telephone: +1 617-547-9580 (voice + FAX) EMail: blampson@microsoft.com Ron Rivest Room 324, MIT Laboratory for Computer Science 545 Technology Square Cambridge MA 02139 Telephone: +1-617-253-5880 +1-617-258-9738(FAX) Email: rivest@theory.lcs.mit.edu Web: http://theory.lcs.mit.edu/~rivest Brian Thomas Southwestern Bell One Bell Center, Room 23Q1 St. Louis MO 63101 USA Ellison, et al. [Page 81] INTERNET-DRAFT Simple Public Key Certificate 29 July 1997 Telephone: +1 314-235-3141 +1 314-331-2755(FAX) EMail: bt0008@entropy.sbc.com Tatu Ylonen SSH Communications Security Ltd. Tekniikantie 12 FIN-02150 ESPOO Finland E-mail: ylo@ssh.fi Expiration and File Name This draft expires 29 January 1998. Its file name is draft-ietf-spki-cert-structure-02.txt Ellison, et al. [Page 82]