home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1997 December / Internet_Info_CD-ROM_Walnut_Creek_December_1997.iso / drafts / draft_ietf_q_t / draft-ietf-spki-cert-structure-02.txt < prev    next >
Text File  |  1997-07-31  |  158KB  |  4,672 lines

  1.  
  2.  
  3.  
  4.  
  5. Simple Public Key Certificate                            Carl M. Ellison
  6. INTERNET-DRAFT                                           CyberCash, Inc.
  7. Expires: 29 January 98
  8.                                                              Bill Frantz
  9.                                                     Electric Communities
  10.  
  11.                                                           Butler Lampson
  12.                                                                Microsoft
  13.  
  14.                                                               Ron Rivest
  15.                                      MIT Laboratory for Computer Science
  16.  
  17.                                                          Brian M. Thomas
  18.                                                        Southwestern Bell
  19.  
  20.                                                              Tatu Ylonen
  21.                                                                      SSH
  22.  
  23.                                                             29 July 1997
  24.  
  25.  
  26.  
  27.                      Simple Public Key Certificate
  28.                      ------ ------ --- -----------
  29.  
  30.  
  31.  
  32.  
  33. Status of This Document
  34.  
  35.    This document supersedes the draft filed under the name draft-ietf-
  36.    spki-cert-structure-01.txt and reflects changes in the structure to
  37.    simplify it.  The draft ends with a list of open questions for group
  38.    discussion.
  39.  
  40.    Distribution of this document is unlimited.  Comments should be sent
  41.    to the SPKI (Simple Public Key Infrastructure) Working Group mailing
  42.    list <spki@c2.org> or to the authors.
  43.  
  44.  
  45.  
  46.    This document is an Internet-Draft.  Internet-Drafts are working
  47.    documents of the Internet Engineering Task Force (IETF), its areas,
  48.    and its working groups.  Note that other groups may also distribute
  49.    working documents as Internet-Drafts.
  50.  
  51.  
  52.  
  53.  
  54. Ellison, et al.                                                 [Page 1]
  55.  
  56. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  57.  
  58.  
  59.    Internet-Drafts are draft documents valid for a maximum of six
  60.    months.  Internet-Drafts may be updated, replaced, or obsoleted by
  61.    other documents at any time.  It is not appropriate to use Internet-
  62.    Drafts as reference material or to cite them other than as a
  63.    ``working draft'' or ``work in progress.''
  64.  
  65.    To learn the current status of any Internet-Draft, please check the
  66.    1id-abstracts.txt listing contained in the Internet-Drafts Shadow
  67.    Directories on ds.internic.net (East USA), ftp.isi.edu (West USA),
  68.    nic.nordu.net (North Europe), ftp.nis.garr.it (South Europe),
  69.    munnari.oz.au (Pacific Rim), or ftp.is.co.za (Africa).
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111. Ellison, et al.                                                 [Page 2]
  112.  
  113. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  114.  
  115.  
  116. Abstract
  117.  
  118.    With the proliferation of public key cryptography on the Internet,
  119.    there arises a need for certification of keys.  In the literature,
  120.    the word 'certificate' has generally been taken to mean 'identity
  121.    certificate': a signed statement which binds a key to the name of an
  122.    individual and has the intended meaning of delegating authority from
  123.    that named individual to the public key. (See, for example, RFC
  124.    1422.)  This process is designed to copy a relationship between two
  125.    entities from the physical world into the digital world.
  126.  
  127.    The Internet itself changed the world from the one in which identity
  128.    certificates made sense.  We now deal with people we have never met
  129.    and never will, which makes their names meaningless to us, but we
  130.    still need to verify whether they are authorized to perform some
  131.    action, achieve some access, sign some document, etc.
  132.  
  133.    SPKI certificates were designed to perform that function by directly
  134.    specifying the (permission,key) binding which is of interest in the
  135.    digital world.  As merged with SDSI, the current certificate format
  136.    also allows someone to bind a key to a name in their own private name
  137.    space.  The certificate structure presented here allows permissions
  138.    to be delegated to SDSI-named individuals or to raw keys.
  139.  
  140.  
  141.  
  142. Acknowledgments
  143.  
  144.    Several independent contributions, published elsewhere on the net or
  145.    in print, worked in synergy with our effort.  Especially important to
  146.    our work were: [BFL] and [RFC2065].  The inspiration we received from
  147.    the notion of CAPABILITY in its various forms (SDS-940, Kerberos, DEC
  148.    DSSA, [SRC-070], KeyKOS [HARDY]) can not be over-rated.
  149.  
  150.    Significant contributions to this effort by the members of the SPKI
  151.    mailing list and especially the following persons (listed in
  152.    alphabetic order) are gratefully acknowledged: Steve Bellovin, Mark
  153.    Feldman, John Gilmore, Phill Hallam-Baker, Bob Jueneman, David Kemp,
  154.    Angelos D. Keromytis, Paul Lambert, Jon Lasser, Jeff Parrett, Bill
  155.    Sommerfeld, Simon Spero.
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168. Ellison, et al.                                                 [Page 3]
  169.  
  170. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  171.  
  172.  
  173. Table of Contents
  174.  
  175.       Status of This Document....................................1
  176.  
  177.       Abstract...................................................3
  178.       Acknowledgments............................................3
  179.  
  180.       Table of Contents..........................................4
  181.  
  182.       1. Overview of Contents....................................7
  183.  
  184.       2. Scope Of This Effort....................................8
  185.       2.1 Charter of the SPKI group..............................8
  186.       2.2 Areas Covered And Not Covered..........................8
  187.       2.2.1 Key and certificate storage..........................8
  188.       2.2.2 Protocols to use public key authentication...........9
  189.       2.3 Other Certificate Formats.............................10
  190.       2.4 Goals of this effort..................................10
  191.       2.5 SPKI Certificates vs. Capabilities....................11
  192.       2.6 Chosen standard format................................11
  193.  
  194.       3. Assumptions, Definitions and Design Issues.............12
  195.       3.1 Background............................................12
  196.       3.2 Definition of PRINCIPAL and KEYHOLDER.................13
  197.       3.2.1 Protection of Private Keys..........................14
  198.       3.3 Certificate Structure.................................15
  199.       3.3.1 5-tuple Reduction (introduction)....................16
  200.       3.3.2 Authority Loops.....................................17
  201.       3.3.3 Certificate Result Certificates.....................18
  202.       3.4 Relation to Policymaker...............................19
  203.       3.5 Name spaces and Identity Certificates.................20
  204.       3.5.1 X.500 and X.509.....................................20
  205.       3.5.2 Death of global identity certification..............21
  206.       3.5.3 SDSI 1.0 Name spaces................................21
  207.       3.5.4 Mappings within cyberspace..........................22
  208.       3.5.5 Mappings to (keyholder K1)..........................22
  209.       3.5.5.1 Donation Certificates.............................22
  210.       3.5.5.2 Process Server Certificates.......................23
  211.       3.6 Certificate validity periods..........................23
  212.       3.7 Unwanted Attributions.................................24
  213.       3.8 Blind Signatures......................................25
  214.       3.9 Determinism...........................................25
  215.  
  216.       4. SPKI Object Definitions................................27
  217.       4.1 Canonical S-expression................................27
  218.       4.1.1 <byte-string>.......................................27
  219.       4.1.2 S-expression........................................28
  220.       4.1.3 Encoding examples...................................28
  221.       4.1.4 Use of canonical S-expressions......................29
  222.       4.1.5 Non-canonical (advanced) S-expressions..............29
  223.  
  224.  
  225. Ellison, et al.                                                 [Page 4]
  226.  
  227. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  228.  
  229.  
  230.       4.1.6 Unique IDs..........................................30
  231.       4.2 SPKI/SDSI 2.0 Objects.................................30
  232.       4.2.1 <pub-key>...........................................31
  233.       4.2.2 <sec-key>...........................................33
  234.       4.2.2.1 HMAC-MD5..........................................33
  235.       4.2.2.2 DES-CBC-MAC.......................................33
  236.       4.2.3 <hash>..............................................34
  237.       4.2.4 <signature>.........................................34
  238.       4.2.5 <acl>...............................................36
  239.       4.2.6 <sequence>..........................................37
  240.       4.3 <cert> object.........................................37
  241.       4.3.1 Bare-bones SPKI.....................................38
  242.       4.3.1.1 <version>.........................................39
  243.       4.3.1.2 <cert-display>....................................39
  244.       4.3.1.3 <issuer>..........................................39
  245.       4.3.1.4 <issuer-loc>......................................40
  246.       4.3.1.5 <subject>.........................................40
  247.       4.3.1.6 <subject-loc>.....................................40
  248.       4.3.1.7 <deleg>...........................................40
  249.       4.3.1.8 <tag>.............................................41
  250.       4.3.1.9 <valid>...........................................41
  251.       4.3.1.9.1 <date>..........................................41
  252.       4.3.1.9.2 <online-test>...................................42
  253.       4.3.1.10 <comment>........................................43
  254.       4.3.2 SPKI/SDSI...........................................43
  255.       4.3.2.1 <issuer>..........................................43
  256.       4.3.2.2 <subject>.........................................44
  257.       4.3.2.2.1 <name>..........................................44
  258.       4.3.2.2.2 <obj-hash>......................................45
  259.       4.3.2.2.3 <sec-key>.......................................45
  260.       4.3.2.2.4 <keyholder>.....................................46
  261.       4.3.2.3 <subject-loc>.....................................46
  262.       4.3.3 Tag algebra.........................................46
  263.       4.3.3.1 *-forms...........................................47
  264.       4.3.3.1.1 Sets of S-expressions...........................47
  265.       4.3.3.1.2 S-expressions with *-form parts.................48
  266.       4.3.3.1.3 *-form reduction................................50
  267.       4.3.3.2 <tag> *-form BNF..................................51
  268.       4.3.4 Threshold subjects..................................52
  269.       4.3.4.1 Examples..........................................53
  270.       4.3.4.2 Definition........................................53
  271.  
  272.       5. Examples...............................................54
  273.       5.1 ftp tag...............................................54
  274.       5.2 http tag..............................................54
  275.       5.3 telnet tag............................................54
  276.       5.4 Public Key Protected File System tags.................54
  277.       5.5 Authority to spend money..............................55
  278.  
  279.  
  280.  
  281.  
  282. Ellison, et al.                                                 [Page 5]
  283.  
  284. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  285.  
  286.  
  287.       5.6 Process Server cert...................................55
  288.       5.7 PICS-like ratings cert................................55
  289.       5.8 Virus checking cert...................................56
  290.       5.9 Full sequence, with donation cert.....................56
  291.  
  292.       6. On-line test reply formats.............................58
  293.       6.1 CRL and delta-CRL.....................................58
  294.       6.2 Revalidation..........................................58
  295.       6.3 One-time revalidation.................................59
  296.  
  297.       7. 5-Tuple Reduction (full)...............................60
  298.       7.1 <5-tuple> BNF.........................................60
  299.       7.2 Bare-bones case.......................................61
  300.       7.3 Intersection of *-form tag sets.......................62
  301.       7.3.1 Reduction to (* null) by data type mismatch.........63
  302.       7.3.2 Specific intersections..............................63
  303.       7.3.3 Deferred intersections..............................64
  304.       7.4 Reduction of SDSI names...............................64
  305.       7.4.1 Simple SDSI name reduction..........................65
  306.       7.4.2 SDSI name composition with subject name growth......66
  307.       7.4.3 SDSI Name composition with issuer name growth.......66
  308.       7.5 Reduction of (subject (threshold ..)).................67
  309.       7.5.1 Left-to-right.......................................67
  310.       7.5.2 Right-to-left.......................................68
  311.  
  312.       8. Full BNF...............................................69
  313.  
  314.       Closed Issues.............................................73
  315.  
  316.       Open Issues...............................................78
  317.  
  318.       References................................................79
  319.  
  320.       Authors' Addresses........................................81
  321.       Expiration and File Name..................................82
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.  
  339. Ellison, et al.                                                 [Page 6]
  340.  
  341. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  342.  
  343.  
  344. 1. Overview of Contents
  345.  
  346.    This document contains the following sections:
  347.  
  348.    Section 2 describes the scope of both the SPKI working group and this
  349.    particular Internet Draft.
  350.  
  351.    Section 3 gives necessary background for understanding the SPKI
  352.    certificate structure.  It details assumptions, definitions and
  353.    design issues behind this structure design and is recommended reading
  354.    for anyone who did not follow the discussion on the working group
  355.    mailing list.
  356.  
  357.    Section 4 describes SPKI data object formats -- listing the fields in
  358.    top level objects, especially the certificate, and giving encoding
  359.    details.
  360.  
  361.    Section 5 describes predefined SPKI tag fields.  These are the meat
  362.    of an SPKI certificate, since they carry the authority or other
  363.    information being bound to a subject public key.
  364.  
  365.    Section 6 describes on-line tests and their reply formats.
  366.  
  367.    Section 7 describes the full set of rules used by the basic trust
  368.    engine assumed to be part of every verifier which accepts SPKI
  369.    certificates.
  370.  
  371.    Section 8 gives the full BNF for SPKI objects.
  372.  
  373.    The Closed Issues section gives a list of questions which have been
  374.    resolved by the working group.
  375.  
  376.    The Open Issues section gives a list of open questions to be resolved
  377.    by the SPKI working group.
  378.  
  379.    The References section lists all documents referred to in the text as
  380.    well as readings which might be of interest to anyone reading on this
  381.    topic.
  382.  
  383.    The Authors' Addresses section gives the addresses, telephone numbers
  384.    and e-mail addresses of the authors.
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396. Ellison, et al.                                                 [Page 7]
  397.  
  398. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  399.  
  400.  
  401. 2. Scope Of This Effort
  402.  
  403.  
  404.  
  405. 2.1 Charter of the SPKI group
  406.  
  407.    Many Internet protocols and applications which use the Internet
  408.    employ public key technology for security purposes and require a
  409.    public key infrastructure to manage public keys.
  410.  
  411.    The task of the working group will be to develop Internet standards
  412.    for an IETF sponsored public key certificate format, associated
  413.    signature and other formats, and key acquisition protocols.  The key
  414.    certificate format and associated protocols are to be simple to
  415.    understand, implement, and use. For purposes of the working group,
  416.    the resulting formats and protocols are to be known as the Simple
  417.    Public Key Infrastructure, or SPKI.
  418.  
  419.    The SPKI is intended to provide mechanisms to support security in a
  420.    wide range of Internet applications, including IPSEC protocols,
  421.    encrypted electronic mail and WWW documents, payment protocols, and
  422.    any other application which will require the use of public key
  423.    certificates and the ability to access them.  It is intended that the
  424.    Simple Public Key Infrastructure will support a range of trust
  425.    models.
  426.  
  427.  
  428.  
  429. 2.2 Areas Covered And Not Covered
  430.  
  431.    This particular draft is concerned only with certificate, hash, key
  432.    and signature formats, using the certificates defined here both for
  433.    verification of identity and for proof of authorization.  We do not
  434.    cover the other elements of a full public key infrastructure (PKI):
  435.    key/certificate storage and acquisition.  We also do not cover all
  436.    the applications or protocols which must be modified to employ public
  437.    key authentication or privacy.
  438.  
  439.  
  440.  
  441. 2.2.1 Key and certificate storage
  442.  
  443.    There are several independent efforts at this time to provide a
  444.    database of keys or certificates for the Internet.
  445.  
  446.    The DNS Security Working Group draft [RFC2065], specifies an
  447.    efficient key storage and distribution mechanism.  It may be possible
  448.    to store an SPKI certificate in a KEY Resource Record (RR) or to
  449.  
  450.  
  451.  
  452.  
  453. Ellison, et al.                                                 [Page 8]
  454.  
  455. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  456.  
  457.  
  458.    create a new RR type for SPKI certificates, under the DNSSEC design,
  459.    but that effort has not been undertaken yet.
  460.  
  461.    The PGP key server at MIT operating both as a web page and as an e-
  462.    mail driven service provides another example of efficient certificate
  463.    storage and retrieval for the net at large.  The custom key server
  464.    run by PGP, Inc., provides another possibility.
  465.  
  466.    SDSI 1.0 demonstrated certificate servers for individuals to run on
  467.    their own net-connected workstations, in response to the fact that
  468.    more and more individuals remain connected to the network
  469.    permanently.  We may see a similar effort establishing SDSI/SPKI
  470.    certificate servers.
  471.  
  472.    On the other hand, there are those who view certificate servers as a
  473.    violation of privacy.  A standard phenomenon in dealing with
  474.    classified documents is called "data aggregation".  That is, two data
  475.    A and B may, by themselves, be unclassified, but if both were to be
  476.    known by one person, the combination would be considered classified.
  477.    The same might apply to the authorizations granted by certificates to
  478.    a given keyholder.  Along similar lines, many corporations consider
  479.    their employee telephone lists confidential and are unlikely to host
  480.    a certificate server which gives the equivalent information to the
  481.    net.
  482.  
  483.    The common practice which has evolved is that of the requester
  484.    supplying any and all certificates which the verifier needs in order
  485.    to permit the requested action.  In this model, there may be no need
  486.    for certificate servers or if there are servers, it is likely that
  487.    they will be accessed by the requester (possibly under access
  488.    control) rather than the verifier.
  489.  
  490.  
  491.  
  492. 2.2.2 Protocols to use public key authentication
  493.  
  494.    Proposals for modification of applications to employ public key
  495.    authentication are proceeding independently, e.g., [PKLOGIN].  We
  496.    encourage other developers to actively enter this area of design,
  497.    aided by SPKI certificates as a tool.  Others, such as TLS and SSH
  498.    already use public key authentication and are considering use of SPKI
  499.    certificates for communicating the permission required to achieve the
  500.    desired access.
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510. Ellison, et al.                                                 [Page 9]
  511.  
  512. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  513.  
  514.  
  515. 2.3 Other Certificate Formats
  516.  
  517.    We are aware of a number of actual and proposed kinds of signed
  518.    records which, by some definition, qualify as certificates:
  519.  
  520.    1. PGP signed keys
  521.  
  522.    2. X.509 identity certificates, from a number of sources
  523.  
  524.    3. X.509 SET (Secure Electronic Transaction) certificates
  525.  
  526.    4. DNS Security Extension signed keys
  527.  
  528.    5. Signed PICS labels (from the W3C DSig effort)
  529.  
  530.  
  531.    It is not our intention to coerce these other certificate formats
  532.    into our mold, although they are welcome to switch over.  The
  533.    certificate structure defined below is flexible enough to accommodate
  534.    all of the above.
  535.  
  536.    However, we recognize that a real world system will involve some
  537.    mixture of SPKI and non-SPKI certificates as well as traditional
  538.    Access Control Lists (ACLs).  Our design accommodates these through
  539.    the Certificate Result Certificate process, allowing all these to be
  540.    merged into a single, simple format as far as application software is
  541.    concerned.
  542.  
  543.  
  544.  
  545. 2.4 Goals of this effort
  546.  
  547.    In keeping with the design goals enumerated in section 3 of RFC1958,
  548.    it is our goal to keep the SPKI certificate pruned to the minimum
  549.    information necessary to accomplish the job at hand, which is secure
  550.    authentication and authorization of access control for the Internet.
  551.    We use well tested formats with a long history of success and have
  552.    chosen those which require the bare minimum of tool software so that
  553.    applications remain as small and efficient as possible.  We desire to
  554.    offer the bare minimum of options, in order to reduce program size
  555.    and complexity.
  556.  
  557.    We also recognize that some kinds of certification (such as notarized
  558.    identity certification) can carry risks of invasion of privacy for
  559.    the individual.  We have therefore designed these certificates to
  560.    reveal the minimum information necessary to get the job done,
  561.    whatever that job happens to be.  In many cases, the user can remain
  562.    anonymous in the traditional sense while exercising strongly verified
  563.  
  564.  
  565.  
  566.  
  567. Ellison, et al.                                                [Page 10]
  568.  
  569. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  570.  
  571.  
  572.    authorization.  That is, the user can be identified by his public key
  573.    alone.
  574.  
  575.  
  576.  
  577. 2.5 SPKI Certificates vs. Capabilities
  578.  
  579.    An SPKI certificate is closer to a "capability" as defined by
  580.    [HARDY], [KEYKOS], [LANDAU], [SRC-070], etc., than to an identity
  581.    certificate.  There is the difference that in a capability system,
  582.    the capability itself is a secret ticket, the possession of which
  583.    grants some authority.  It is anonymous (more like cash than a
  584.    check).  Therefore, if you grant authority to read a capability, you
  585.    have delegated the ability to use it.  An SPKI certificate identifies
  586.    the specific key to which it grants authority and therefore the mere
  587.    ability to read (or copy) the certificate grants no authority and the
  588.    certificate itself does not need to be as tightly controlled.
  589.    Rather, control over the corresponding private signature key must be
  590.    tightly controlled.
  591.  
  592.    With SPKI certificates, one can delegate authority (all or part of
  593.    the authority one has been delegated) to a different key, without
  594.    sharing the quantity which must be kept secret (the private key) --
  595.    as opposed to a capability which is kept secret except when it is
  596.    shared for the purpose of delegation.
  597.  
  598.  
  599.  
  600. 2.6 Chosen standard format
  601.  
  602.    In this draft, the standard format adopted is that developed by SDSI,
  603.    modified slightly.  Data objects are defined as S-expressions --
  604.    lists in which the first element is a token defining the data object.
  605.    Rather than permit the full generality of S-expressions, we define a
  606.    canonical format and accept only that form.  Software is available to
  607.    translate between the canonical format and a presentation format.
  608.  
  609.    This document presents the canonical format, but uses a presentation
  610.    format for examples since the canonical format is binary and can not
  611.    easily be transmitted in a text document.
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624. Ellison, et al.                                                [Page 11]
  625.  
  626. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  627.  
  628.  
  629. 3. Assumptions, Definitions and Design Issues
  630.  
  631.    There were a number of discussion topics involved in the design of
  632.    SPKI certificates and we summarize them here for the reader who was
  633.    not part of the SPKI discussion.  This section should at least be
  634.    skimmed by even the reader with a solid grounding in classical
  635.    (identity) certification.  Some of these might be new concepts.  Some
  636.    provide definitions for terms which traditional discussions of
  637.    certification frequently leave undefined.
  638.  
  639.    Throughout this document, we refer to two parties engaged in
  640.    certificate use: the prover and the verifier.
  641.  
  642.  
  643.         By PROVER, we mean the entity which wishes access or digitally
  644.         signs a document.  We assume that the prover assembles all
  645.         certificates necessary for use by the verifier, and puts those
  646.         into order for the verifier.  The prover is software but could
  647.         be interacting with a human user.
  648.  
  649.         By VERIFIER, we mean an entity which processes certificates,
  650.         together with its own ACL entries, to determine if the prover
  651.         deserves access or if some signed document is valid.  The
  652.         verifier is most likely unattended software.
  653.  
  654.  
  655.  
  656.  
  657. 3.1 Background
  658.  
  659.    In the words of [LAMPSON], a public signature key "speaks for" its
  660.    owner: a person or entity we call the "keyholder".  It is primarily
  661.    through such public key "speech" that one achieves security on the
  662.    inherently anonymous and spoof-able Internet.
  663.  
  664.    There is a long standing effort to bind public keys to the "true
  665.    names" of their keyholders, in an attempt to identify the keyholder
  666.    and to permit the transfer of permissions or other attributes from
  667.    the physical world in which the keyholder lives into the digital
  668.    world.  This effort has produced identity certificates, such as X.509
  669.    certificates or PGP signed keys, giving <name,key> bindings which
  670.    needed to be combined with certificates or ACL entries giving
  671.    <tag,name>, to yield the relationship <tag,key> which a computer then
  672.    uses to verify public-key driven access attempts.  {<tag> here stands
  673.    for authorization, permission, etc.}
  674.  
  675.    The Internet has changed the world from the one in which identity
  676.    certificates were originally seen to be necessary.  In the new world
  677.  
  678.  
  679.  
  680.  
  681. Ellison, et al.                                                [Page 12]
  682.  
  683. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  684.  
  685.  
  686.    of the global Internet the entities which communicate are often not
  687.    known to each other in the physical world.  This trend is likely to
  688.    increase as time goes on.  Therefore a mechanism which transfers
  689.    attributes from the physical world to the digital world is
  690.    increasingly less appropriate while a mechanism which transfers
  691.    attributes within the digital world is vital and one which transfers
  692.    attributes from the digital world to the physical world is likely to
  693.    be needed very soon, if not immediately.
  694.  
  695.    We have also observed that <key> is a perfectly adequate name for a
  696.    keyholder, at least as far as a computer is concerned.  It and its
  697.    hash have the advantage of being unique while each portion of it (and
  698.    especially of its hash) is uniformly distributed and therefore of
  699.    particular value as an index into a database.  It is also tied the
  700.    most strongly of any identifying string to the keyholder.  We have
  701.    therefore defined a certificate which communicates <tag,key>
  702.    directly, leaving names out of the process except in the case where
  703.    the name is the item of interest (e.g., for secure e-mail).
  704.  
  705.  
  706.  
  707. 3.2 Definition of PRINCIPAL and KEYHOLDER
  708.  
  709.    The most important issue is the notion of a key as a principal and
  710.    the difference between that key and the person or machine which owns
  711.    and controls it.
  712.  
  713.  
  714.         By PRINCIPAL, we mean a signature key.  That is, a principal is
  715.         capable of "speaking" in cyberspace by signing messages.  We
  716.         also permit use of the secure hash of a signature key as a
  717.         principal, in an effort to save space in data structures which
  718.         use principals.
  719.  
  720.         By KEYHOLDER, we mean an entity in the 3-D world which controls
  721.         a given (private) signature key.  The keyholder is identified
  722.         primarily by the public verification key which corresponds to
  723.         the private signature key.
  724.  
  725.  
  726.    By definition, the keyholder has sole possession of the private key.
  727.    That private key could be used as the identifier of the keyholder --
  728.    as a name -- except the private key must be kept secret.  There is
  729.    only one private key to match a given public key, so the keyholder
  730.    can be identified by the public key just as uniquely.  Similarly,
  731.    there is only one public key which hashes to a given secure hash (by
  732.    definition of "secure hash", assuming we are limited in computation
  733.    power), so the secure hash of a public key can also be used to
  734.  
  735.  
  736.  
  737.  
  738. Ellison, et al.                                                [Page 13]
  739.  
  740. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  741.  
  742.  
  743.    identify the keyholder.  If we are using symmetric (secret) signature
  744.    keys, the hash of that key can still serve as a name for the key and
  745.    for its keyholder(s).
  746.  
  747.    We identify a PRINCIPAL by either a key or a secure hash of a key.
  748.    There is pressure, in the interest of simplicity, to restrict
  749.    PRINCIPAL to just a key.  However, if one is using a shared secret
  750.    key (e.g., for HMAC or some symmetric algorithm like DES-MAC), it is
  751.    essential to keep the key secret and use of a hash permits that.  It
  752.    is also possible to have shared secret public keys -- e.g., RSA
  753.    public keys of short moduli (for performance reasons) -- which must
  754.    not be published because the key can be broken, but for which the
  755.    hash of the key can be published without fear of compromise.
  756.  
  757.    We identify a KEYHOLDER by the construct "(keyholder <principal>)" --
  758.    using the principal as the name of the private key and therefore the
  759.    keyholder, but explicitly noting that we refer to the keyholder in
  760.    physical space rather than the key in cyberspace.
  761.  
  762.    Without certificates, we might not know anything else about the
  763.    keyholder (such as name, gender or even if the keyholder is a living
  764.    being) but we do know enough to link together separate messages from
  765.    the same keyholder.  For some purposes, that is sufficient
  766.    identification (for example, when a person is first encountered on-
  767.    line via signed messages and there is no intention of linking that
  768.    person to any physical being, only to his or her own other messages).
  769.    However, there are other applications for which the ability to link
  770.    together separate messages from an anonymous source is not adequate
  771.    and therefore for which certificates are required.
  772.  
  773.  
  774.  
  775. 3.2.1 Protection of Private Keys
  776.  
  777.    For any public key cryptosystem to work, it is essential that a
  778.    keyholder keep its private key to itself.  In the case of a human
  779.    being, this might involve keeping the private key encrypted under a
  780.    high-entropy passphrase and storing it only on the person's own
  781.    personal computer or floppy disks.  Some humans might even keep the
  782.    private key in a tamper-resistant PCMCIA card or Smart-Card which
  783.    will never release it and will in fact destroy it after too many
  784.    failed attempts to gain access.  In the case of a network node, this
  785.    might involve keeping the private key in a tamper-resistant
  786.    cryptographic processor which generated it and which will destroy it
  787.    if tampering is attempted.
  788.  
  789.    If the keyholder does not keep the private key protected (that is, if
  790.    the private key gets out to others to use) then one can not know what
  791.  
  792.  
  793.  
  794.  
  795. Ellison, et al.                                                [Page 14]
  796.  
  797. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  798.  
  799.  
  800.    entity is using that key and no certificate will be able to restore
  801.    the resulting broken security.
  802.  
  803.    Therefore, we are forced to assume that all private keys are kept
  804.    private and bound tightly to the one keyholder to which they belong.
  805.    We will have to provide for methods of announcing the compromise of
  806.    such private keys whenever this assumption proves false, but we must
  807.    assume that unless such notification is delivered, each private key
  808.    is secure and attached to its owner.
  809.  
  810.  
  811.         Note: We have specifically included a process for one keyholder
  812.         who has been granted some authority to delegate that authority
  813.         to another, in order to reduce if not eliminate the motivation
  814.         for one keyholder to loan a private key to another.
  815.  
  816.  
  817.    So to reiterate, we do not expect every person, process and device in
  818.    the Internet to employ true tamper resistance.  Many people will keep
  819.    and use private keys on an insecure personal computer or workstation.
  820.    However, we are forced to assume protection of the private key or
  821.    give up any notion of cryptographically strong authentication and
  822.    authorization.  Work is progressing on decreasing the cost of true
  823.    tamper-resistance but until it is ubiquitous, we must accept a
  824.    certain amount of risk from copied or stolen private keys.  Even
  825.    then, there is risk from coerced use of one's private key.
  826.  
  827.  
  828.  
  829. 3.3 Certificate Structure
  830.  
  831.  
  832.    An SPKI certificate body has several fields, five of which are
  833.    relevant for security purposes:
  834.  
  835.  
  836.    ISSUER: a principal or a single, top-level name in a principal's name
  837.         space.  The principal is identified as a public key or the hash
  838.         of that key and the corresponding private key signs the
  839.         certificate.
  840.  
  841.    SUBJECT: a principal, an object or a SDSI name reducible to either of
  842.         those.  The subject is that which receives authority from the
  843.         issuer by way of the certificate.
  844.  
  845.    DELEGATION: the optional modifier, "(propagate)", giving the subject
  846.         permission to delegate the authority presented in the
  847.         certificate (or part of it) to some other Subject.  This is
  848.  
  849.  
  850.  
  851.  
  852. Ellison, et al.                                                [Page 15]
  853.  
  854. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  855.  
  856.  
  857.         represented as the delegation boolean, D, in the discussion
  858.         below.  The two boolean states are (F: delegate only through
  859.         name declarations -- also known as "stop at key") and (T:
  860.         delegate to the subject).
  861.  
  862.    AUTHORITY: the specific authorization(s) being delegated in this
  863.         certificate.  These fields, of the form "(tag ...)", are to be
  864.         defined by those who have resources to control and describe
  865.         resource allocations.  This document gives some examples for
  866.         such fields which are expected to be in common use, but more
  867.         importantly it gives the structure for <tag> fields and the
  868.         description of a standard process for manipulating them which is
  869.         expected to be implemented in all code conforming to this
  870.         standard.
  871.  
  872.    VALIDITY: date ranges and/or online validity tests for determining
  873.         certificate validity.
  874.  
  875.  
  876.    A certificate is signed by its issuer.  Section 6 gives details about
  877.    signature blocks.
  878.  
  879.    The five security-relevant fields described above are termed a
  880.    "5-tuple" for lack of a better word, in the discussion below.  The
  881.    assumption is that a certificate's signature will be checked to yield
  882.    the 5-tuple which, in turn, will be kept in trusted memory and will
  883.    participate in trust management decisions.  Objects other than
  884.    certificates (such as ACL entries) can also yield 5-tuples which
  885.    participate in trust management decisions.
  886.  
  887.    Informally, the meaning of the certificate is "The issuer says that
  888.    the subject has the stated authority during the validity period".
  889.    Another way of saying this is "The issuer says that the subject may
  890.    speak for the issuer with the stated authority during the validity
  891.    period."  If the issuer issues several such certificates for
  892.    different subjects, then it is defining a group of subjects, each of
  893.    which can speak for it.
  894.  
  895.    If the subject is an object that is not reducible to a principal, it
  896.    can't do any speaking; in this case the meaning is "The issuer says
  897.    that the subject has the properties stated by the 'authority'."
  898.  
  899.  
  900.  
  901. 3.3.1 5-tuple Reduction (introduction)
  902.  
  903.    A certificate which is received to be part of a verification process
  904.    has its signature checked.  One whose signature checks is considered
  905.  
  906.  
  907.  
  908.  
  909. Ellison, et al.                                                [Page 16]
  910.  
  911. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  912.  
  913.  
  914.    valid.  Other kinds of authorization statement (most specifically ACL
  915.    entries) can be considered valid without a signature check.
  916.  
  917.    A valid authorization statement can be represented by five
  918.    quantities:
  919.  
  920.    (I,S,D,A,V)
  921.  
  922.    A pair of 5-tuples can be reduced as follows:
  923.  
  924.    (I1,S1,D1,A1,V1) + (I2,S2,D2,A2,V2)
  925.  
  926.    becoming
  927.  
  928.    (I1,S2,D2,A,V)
  929.  
  930.    if S1=I2 (meaning that they are the same public key)
  931.    and (D1 = TRUE) or (S1 is a SDSI name)
  932.    and A = intersection(A1,A2)
  933.    and V = intersection(V1,V2)
  934.  
  935.    The actual process is slightly more complicated when I2 is of the
  936.    form
  937.  
  938.    (issuer (name K3 nnn))
  939.  
  940.    or when S1 is of the form
  941.  
  942.    (subject (threshold K N (s1) (s2) ... (sN)))
  943.  
  944.    Rules for those cases are given below in section 10, presenting the
  945.    full tuple reduction logic, but for the discussion to follow the
  946.    logic given above will suffice.
  947.  
  948.  
  949.  
  950. 3.3.2 Authority Loops
  951.  
  952.    By 5-tuple reduction, some chains of authorization statements will be
  953.    reduced to the form:
  954.  
  955.    (Self,X,D,A,V)
  956.  
  957.    where "Self" represents the entity doing the verification, granting
  958.    access, etc.  Such a 5-tuple says "Self says (I say) that X has
  959.    authority (D,A) for validity period (or conditions) V".  In other
  960.    words, it tells Self what it can trust about X.
  961.  
  962.  
  963.  
  964.  
  965.  
  966. Ellison, et al.                                                [Page 17]
  967.  
  968. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  969.  
  970.  
  971.    Any authorization chain not reducing to a 5-tuple with Self as issuer
  972.    isn't relevant to decisions by Self.
  973.  
  974.    Therefore, any authorization chain which is to be used by Self to do
  975.    trust management must have Self as a root.  Since Self is doing this
  976.    chain reduction and is therefore at the receiving end of the chain as
  977.    well, that makes all useful authorization chains loops.
  978.  
  979.  
  980.  
  981. 3.3.3 Certificate Result Certificates
  982.  
  983.    In cases where the verifier, Self, has access to a private key, once
  984.    it has reduced a chain of certificate bodies down to the form:
  985.  
  986.    (Self,X,D,A,V)
  987.  
  988.    it can sign that generated body, using its private key, producing an
  989.    SPKI certificate.  That certificate will have a validity period no
  990.    larger that of any certificate in the loop which formed it, but
  991.    during that validity period it can be used by the prover instead of
  992.    the full chain, when speaking to that particular verifier.  It is
  993.    good only at that verifier (or at another which trusts that verifier,
  994.    Self, to delegate the authorization A).  Therefore, one option by the
  995.    verifier is to sign and return the result 5-tuple to the caller for
  996.    this later use.
  997.  
  998.    If it isn't important for any other verifier to accept this "result
  999.    certificate", it can even be signed by a symmetric key (an HMAC with
  1000.    secret key private to the verifier).
  1001.  
  1002.    The certificates which made up the loop forming this result 5-tuple
  1003.    could have been of any variety, including X.509v1, X.509v3, SET or
  1004.    DNSSEC.  They could also be PGP signed keys processed by an enriched
  1005.    trust engine (one capable of dealing with the PGP web of trust
  1006.    rules).  If the verifier, Self, were to be trusted to delegate the
  1007.    resulting authorization, its certificate result certificate then
  1008.    becomes a mapping of these other forms.  This may prove especially
  1009.    useful if a given certificate chain includes multiple forms or if the
  1010.    result certificate is to be used by a computationally limited device
  1011.    (such as a Smart-Card) which can not afford the code space to process
  1012.    some of the more complex certificate formats.
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023. Ellison, et al.                                                [Page 18]
  1024.  
  1025. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1026.  
  1027.  
  1028. 3.4 Relation to Policymaker
  1029.  
  1030.    The section above introduced the possibility of a machine which
  1031.    reduces a set of certificates, possibly a very complex one, and
  1032.    yields a single certificate as a result.  That single certificate
  1033.    would be simpler and faster to verify.  It might even stand alone in
  1034.    granting access.
  1035.  
  1036.    That machine reducing the set of certificates to a single result
  1037.    might even execute a policy program which could be too complex to be
  1038.    expressed in terms of SPKI 5-tuple reduction.  The policy machine
  1039.    would still have to have its own ACL entries, declaring the keys it
  1040.    trusts as "roots" for various purposes and, in this hypothetical
  1041.    case, a signature key, P.  It would execute its policy program on the
  1042.    credentials provided by the caller, come up with either a failure or
  1043.    a certificate result, signed by P, and deliver that result to the
  1044.    caller.
  1045.  
  1046.    In the manner of [BFL] we note that one can take the same code
  1047.    executed by that policy processing machine and digitally sign the
  1048.    code -- then digitally sign the ACL entries for its "roots" (turning
  1049.    them into certificates, issued by P) -- and ship the code plus
  1050.    certificates to the caller, presumably a verifying computer.  That
  1051.    verifying computer could then run the policy code on P's behalf,
  1052.    getting either a failure or a 5-tuple.  It can't sign the 5-tuple
  1053.    turning it into a certificate issued by P, because it would not have
  1054.    P's private key -- but it doesn't need a certificate.  It needs only
  1055.    the trusted 5-tuple.
  1056.  
  1057.    [BFL] introduces a language called Policymaker in which one can
  1058.    express security policy statements.  It is possible for Policymaker
  1059.    to be used along with SPKI certificates in two ways:
  1060.  
  1061.    1) It is believed possible to use Policymaker's language to implement
  1062.       the standard SPKI 5-tuple reduction.  The code has not been
  1063.       written as of the time of this draft, but at this point it looks
  1064.       possible.
  1065.  
  1066.    2) For any trust policy which the full SPKI 5-tuple reduction can not
  1067.       express, one must write a policy interpretation program and
  1068.       Policymaker provides a language and body of examples for that
  1069.       purpose.  The result of the Policymaker execution can be a 5-tuple
  1070.       to be used within an SPKI reduction.
  1071.  
  1072.  
  1073.  
  1074.  
  1075.  
  1076.  
  1077.  
  1078.  
  1079.  
  1080. Ellison, et al.                                                [Page 19]
  1081.  
  1082. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1083.  
  1084.  
  1085. 3.5 Name spaces and Identity Certificates
  1086.  
  1087.    Since the word "certificate" was first used by Kohnfelder in 1978 to
  1088.    refer to a digitally signed binding between a name and a public key,
  1089.    people have assumed that a certificate binds a name to a key.
  1090.  
  1091.    For most of human history, people lived in relatively small, closed
  1092.    communities.  It was common in such a community for each member to
  1093.    have his or her own unique name.  Everyone in the community would
  1094.    know everyone else in the community by that name.  It was also
  1095.    extremely unlikely for someone in such a small community to change
  1096.    his or her name (except through marriage).  The habit naturally
  1097.    developed of thinking of a person's name as a unique and permanent
  1098.    identifier, in a way synonymous with his or her identity.
  1099.  
  1100.    Although such small communities have become unusual for the majority
  1101.    of people today, the association between name and identity persists
  1102.    in human thinking.  Even today, a certificate which binds a name to a
  1103.    key is often called an "identity certificate".
  1104.  
  1105.  
  1106.  
  1107. 3.5.1 X.500 and X.509
  1108.  
  1109.    At one time, it was assumed that there would be a worldwide directory
  1110.    of names of people (and computers and other things), called X.500,
  1111.    and there was a data structure defined, called X.509, to bind public
  1112.    keys to portions of the X.500 hierarchy.  The original purpose of
  1113.    such certificates was to record who (which keyholder, ie., which key)
  1114.    had permission to modify that portion of the distributed X.500
  1115.    database.
  1116.  
  1117.    At some point, it became apparent that X.500 was never going to occur
  1118.    as a global directory.  Among other things, corporations which were
  1119.    to own and manage substantial sub-trees of the directory consider
  1120.    their employee directories company confidential.  The same applies to
  1121.    some government agencies.
  1122.  
  1123.    The fact that an X.500 node's address was a person's unique name (so-
  1124.    called "distinguished name"), led people to view X.509 apart from its
  1125.    purpose of controlling access to X.500 databases and instead treat it
  1126.    as an identity certificate.
  1127.  
  1128.  
  1129.  
  1130.  
  1131.  
  1132.  
  1133.  
  1134.  
  1135.  
  1136.  
  1137. Ellison, et al.                                                [Page 20]
  1138.  
  1139. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1140.  
  1141.  
  1142. 3.5.2 Death of global identity certification
  1143.  
  1144.    Even if a global X.500 directory had occurred, global identity
  1145.    certification would have died.  The problem is one of the
  1146.    unanticipated consequences of the Internet.
  1147.  
  1148.    The purpose of an identity certificate is to map from the 3D space of
  1149.    people to cyberspace, particularly to the space of public signature
  1150.    keys.
  1151.  
  1152.    This mapping takes two steps: from 3D space to a name space; from the
  1153.    name space to key space.  The latter step is accomplished by a
  1154.    certificate (e.g., X.509).  The former step is assumed, in the
  1155.    X.500/X.509 case, to be common knowledge.  The larger that name
  1156.    space, the less likely that anyone would know the name of a specific
  1157.    individual.  Alice might suspect that her old friend Bob Smith has a
  1158.    name in the global X.500 directory, but there are so many people
  1159.    named Bob Smith in the world that it is unlikely Alice would know
  1160.    which of the thousands of Bob Smiths was in fact her old friend.
  1161.  
  1162.    The problem is that, like the telephone directory which inspired this
  1163.    model of certification, the directory never claimed to record
  1164.    information of interest to each user (e.g., Alice's old friend).  In
  1165.    fact, a directory which did so would almost certainly be viewed as a
  1166.    violation of privacy on a massive scale and would be shut down.
  1167.  
  1168.  
  1169.  
  1170. 3.5.3 SDSI 1.0 Name spaces
  1171.  
  1172.    SDSI 1.0 [SDSI] solved this problem inherent in global name spaces by
  1173.    ignoring the fantasy of a global name space and replacing it with
  1174.    local name spaces, one for each principal (= signing key).
  1175.    Principals may share name spaces as will be seen later, but in theory
  1176.    each principal has its own name space.
  1177.  
  1178.    The certificate mapping from name to key (SDSI, in this case) is just
  1179.    as secure as the X.509 certificate mapping from the global name space
  1180.    to a key, but the link from 3D space to name is considerably more
  1181.    secure -- because it is a link defined by the user.  Alice's old
  1182.    friend Bob Smith might be named "Red" in her name space, for example.
  1183.    Her name for him is not intended to be of any use to anyone else --
  1184.    only to her.  Such a local name space is already familiar to some
  1185.    users of mail agents, under the label "nickname" or "alias".
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194. Ellison, et al.                                                [Page 21]
  1195.  
  1196. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1197.  
  1198.  
  1199. 3.5.4 Mappings within cyberspace
  1200.  
  1201.    Identity certificates with their presumed ability to map from 3D
  1202.    space to key space were assumed to be necessary "so that you know
  1203.    with whom you are dealing in cyberspace".  The assumption behind such
  1204.    a thought is that a relationship is formed in 3D space between people
  1205.    and that relationship needs to be mapped into cyberspace.
  1206.  
  1207.    Unanticipated by the original designers of identity certificates was
  1208.    the fact that the Internet brought with it the formation of
  1209.    relationships in cyberspace.  In such cases, there is no relationship
  1210.    in 3D space to be mapped and therefore no need for identity
  1211.    certificates.
  1212.  
  1213.    There is, however, a need for certificates within cyberspace -- to
  1214.    grant privileges, access rights, etc. -- from one cyberspace
  1215.    principal to another (from one key to another).  It was for this
  1216.    situation that the original SPKI was designed.
  1217.  
  1218.  
  1219.  
  1220. 3.5.5 Mappings to (keyholder K1)
  1221.  
  1222.    Also not anticipated by the pre-Internet developers of identity
  1223.    certificates was that relationships which formed online might need to
  1224.    be mapped occasionally back to the 3D world.  Those early designers
  1225.    of certificates might have assumed that the binding between name
  1226.    ("identity") and key was bi-directional, but it was not.  It mapped
  1227.    name to key.  The mapping from key to name is not satisfied by a
  1228.    single approach.  In particular, there can be no single issuer for
  1229.    such a certificate, suitable for all purposes.  Two such certificates
  1230.    are described below but there are probably several varieties.
  1231.  
  1232.  
  1233.  
  1234. 3.5.5.1 Donation Certificates
  1235.  
  1236.    Situation: you meet someone (who uses key K1) online, are impressed
  1237.    with his work and decide to hire him.  You make an offer.  He
  1238.    accepts.  He starts working for you and you like his work (all signed
  1239.    by K1).  You now need to send him a paycheck.  So, you need a name to
  1240.    put on the paycheck and you need a postal address to mail it to (and
  1241.    maybe a phone number, if you are using Fed Ex).
  1242.  
  1243.    This sounds like a traditional identity certificate, but it isn't.
  1244.    There is no CA in this case.  The one key you can trust the most to
  1245.    sign this certificate is K1.  It belongs to the individual with the
  1246.    most to gain by providing correct information.  In X.509-style
  1247.  
  1248.  
  1249.  
  1250.  
  1251. Ellison, et al.                                                [Page 22]
  1252.  
  1253. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1254.  
  1255.  
  1256.    certification, one would never use a self-signed certificate.
  1257.  
  1258.  
  1259.  
  1260. 3.5.5.2 Process Server Certificates
  1261.  
  1262.    Situation: you meet someone (who uses key K1) online, are impressed
  1263.    with his work and decide to hire him to do some protracted project.
  1264.    You make an offer.  He accepts.  You need the work done and done
  1265.    right.  Failure to have the work done would be very harmful to you.
  1266.    For that you write a contract which he signs with K1 and the contract
  1267.    includes penalty clauses.  In the event of his failure to perform,
  1268.    you need to know that you can get redress through the legal system.
  1269.    One way is to have his name and home address so that you could serve
  1270.    legal papers on him should he default on the contract.
  1271.  
  1272.    The certificate which lets you serve papers on Keyholder(K1) sounds
  1273.    even more like a traditional identity certificate, but it isn't.
  1274.    Neither is it a donation certificate, since this one should not be
  1275.    signed by K1.  Instead, it should be signed by Kp -- the key of a
  1276.    company which does process serving.  That company, Acme Process
  1277.    Servers, however, would rather not have a name and address in the
  1278.    certificate.  Instead, Acme would prefer to have a simple sequence
  1279.    number in the certificate, indexing Acme's own files on the person.
  1280.    This forces you to use Acme to do the process serving, doubtless for
  1281.    an additional fee, in the event that you do sue.
  1282.  
  1283.    Meanwhile, you would prefer to have this certificate over an identity
  1284.    certificate issued by the Post Office, listing the person's name and
  1285.    address.  The name and address certificate reflects facts at the time
  1286.    of the start of the contract, not facts at the time legal papers need
  1287.    to be served.  It may take substantial investigative work to get from
  1288.    the former to the latter.  That is the work Acme would do for a
  1289.    living and it would be for that work that Acme would charge both for
  1290.    the initial certificate and for the act of serving papers on the
  1291.    keyholder of K1.  Acme might perform this work at time of default or
  1292.    keep tabs on Keyholder(K1) during the life of the contract.  That
  1293.    would be Acme's choice.
  1294.  
  1295.  
  1296.  
  1297. 3.6 Certificate validity periods
  1298.  
  1299.    Our experience with credit cards has influenced the way we consider
  1300.    validity periods of certificates.
  1301.  
  1302.    A credit card is issued with an expiration date 1 to 3 years later
  1303.    than the date of issue, yet one can revoke a credit card and have
  1304.  
  1305.  
  1306.  
  1307.  
  1308. Ellison, et al.                                                [Page 23]
  1309.  
  1310. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1311.  
  1312.  
  1313.    that revocation be effective within a day of the request.  That
  1314.    credit card has a validity period of one day (or less) in spite of
  1315.    its expiration date.
  1316.  
  1317.    At one time, credit card validity was verified at a checkout counter
  1318.    by looking the card number up in a book of revoked cards.  The
  1319.    validity period of a card not listed in such a book was the time
  1320.    until that book was updated and the card had to be looked up again.
  1321.    This practice has migrated into the digital world through the CRL
  1322.    (Certificate Revocation List) construct.
  1323.  
  1324.    Modern systems accepting credit cards perform an on-line validity
  1325.    check, in which case the validity period can be very short and is
  1326.    determined by the time it takes to make a database update from a
  1327.    report of a lost or stolen card.
  1328.  
  1329.    SPKI certificates may use one or both of two kinds of validity
  1330.    period: a date range (akin to expiration dates) or an on-line check.
  1331.    The on-line check will return information about the certificate's
  1332.    validity and that information itself will have an expiration date and
  1333.    time.  The certificate together with its latest on-line test result
  1334.    would then yield a valid assignment of authorization, with validity
  1335.    period which is the intersection of the dates of the two data items
  1336.    (usually just the date range of the on-line test result).
  1337.  
  1338.    There are three forms of on-line test result defined:
  1339.  
  1340.    CRL
  1341.         a list of certificates known to be revoked since a certain time.
  1342.  
  1343.    Periodic revalidation
  1344.         a new assured validity date for the certificate being tested.
  1345.  
  1346.    One-time revalidation
  1347.         a statement that for this one transaction, the indicated
  1348.         certificate is valid.  [This is as close as we can come to a
  1349.         0-length validity period revalidation.]  The one-time
  1350.         revalidation can also have side effects -- e.g., refer to a bank
  1351.         balance.
  1352.  
  1353.  
  1354.  
  1355.  
  1356. 3.7 Unwanted Attributions
  1357.  
  1358.    There is a potential problem that a certificate might be issued which
  1359.    the keyholder does not want.
  1360.  
  1361.  
  1362.  
  1363.  
  1364.  
  1365. Ellison, et al.                                                [Page 24]
  1366.  
  1367. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1368.  
  1369.  
  1370.    For example, someone with the power to issue access certificates
  1371.    wishes to make trouble for you.  That person generates a cert for
  1372.    you, giving you access to their company's file system.  Someone
  1373.    breaks into that file system and does damage, also wiping out the
  1374.    audit logs of who broke in.  So, the police ask the age-old Perry
  1375.    Mason question: who had keys to that door?  Your cert (even though
  1376.    you never saw it) is a key to that door.  It might even be the only
  1377.    cert with the capability to do what was done, at least according to
  1378.    the company records.  That makes you a suspect.  If for other reasons
  1379.    you might be even the most logical suspect, then you might make it to
  1380.    the top of the police list and get severely hassled.
  1381.  
  1382.    For another example, a keyholder, Alice, has a signature key, K,
  1383.    being used to sign digital lab notebooks for later use in patent
  1384.    applications.  That key is certified as hers by her company through
  1385.    an SPKI identity certificate with an EMPLOYEE <tag> field.
  1386.  
  1387.    Bob learns Alice's public key and builds a certificate using his own
  1388.    name and her key, getting it signed by some reputable commercial CA.
  1389.  
  1390.    Now when it comes time to dispute prior art on Alice's patent(s), Bob
  1391.    produces his certificate and claims that Alice had not only copied
  1392.    his work but stolen his private signature key.
  1393.  
  1394.    Although we do not mandate such practice at this time, some
  1395.    certificates could be signed by the <subject> as well as by the
  1396.    <issuer> in order to make sure that the <subject> really does have
  1397.    access to the indicated private key.  Alternatively, it is possible
  1398.    to establish a practice of getting a digitally signed receipt for a
  1399.    certificate from each subject in certain cases before the certificate
  1400.    is delivered.  That separate receipt would serve the same function.
  1401.  
  1402.  
  1403.  
  1404. 3.8 Blind Signatures
  1405.  
  1406.    The issue of blind signatures [CHAUM] was raised in the working
  1407.    group.  As can be seen from the format of the Signature object,
  1408.    normal blinding (e.g., of RSA by pre- and post- multiplication of a
  1409.    signature value) can be applied.
  1410.  
  1411.  
  1412.  
  1413. 3.9 Determinism
  1414.  
  1415.    As defined above in section 3.6, CRLs are just one type of response
  1416.    to an on-line request.  Each CRL carries its own validity period and
  1417.    signature.
  1418.  
  1419.  
  1420.  
  1421.  
  1422. Ellison, et al.                                                [Page 25]
  1423.  
  1424. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1425.  
  1426.  
  1427.    This is different from an old concept of CRL which might be called
  1428.    "wandering anti-matter".  In that concept, CRLs would be signed,
  1429.    might have validity dates (or at least sequence numbers) but would
  1430.    not be required to be fetched.  If someone happened to receive the
  1431.    latest CRL and the given cert was on it, then the cert was invalid.
  1432.    The CRLs wandered through cyberspace, like anti-matter, annihilating
  1433.    any matching certs they happened to encounter.
  1434.  
  1435.    This concept of CRL introduces non-deterministic behavior.  It has
  1436.    been one design goal of SPKI to make trust computations
  1437.    deterministic.  As a result, the only way defined here to get a CRL
  1438.    is if a given cert demands that one be fetched as part of its
  1439.    validity conditions.
  1440.  
  1441.    For another example of enforced determinism, it is by definition not
  1442.    possible to have two SPKI certificates which conflict, so that one
  1443.    might override the other.  If two different certs were issued
  1444.    defining a given SDSI name as two different keys, for example, then
  1445.    that name becomes a group with at least two members.
  1446.  
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458.  
  1459.  
  1460.  
  1461.  
  1462.  
  1463.  
  1464.  
  1465.  
  1466.  
  1467.  
  1468.  
  1469.  
  1470.  
  1471.  
  1472.  
  1473.  
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  
  1479. Ellison, et al.                                                [Page 26]
  1480.  
  1481. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1482.  
  1483.  
  1484. 4. SPKI Object Definitions
  1485.  
  1486.    We have chosen a simplified form of S-expression (the canonical form)
  1487.    as the format for SPKI objects.  An S-expression is a list enclosed
  1488.    in matching "(" and ")".  We assume the S-expression technology of
  1489.    [SEXP] with the restrictions that no empty lists are allowed and that
  1490.    each list must have a byte-string as its first element.  That first
  1491.    element is the "type" or "name" of the object represented by the
  1492.    list.
  1493.  
  1494.    SPKI objects are defined below in a familiar extension of BNF -- with
  1495.    "*" meaning closure (0 or more occurrences) and "?" meaning optional
  1496.    (0 or 1 occurrence).  First we define the canonical S-expression form
  1497.    in that BNF.
  1498.  
  1499.  
  1500.  
  1501. 4.1 Canonical S-expression
  1502.  
  1503.    We define a canonical S-expression as containing binary byte strings
  1504.    each with a given length and punctuation "()[]" for forming lists.
  1505.    The length of a byte string is a positive ASCII decimal number, not
  1506.    starting with "0", terminated by ":".  We further require that there
  1507.    be no empty lists and that the first list element be a byte string
  1508.    (as defined below).  This form is a unique representation of an S-
  1509.    expression and is used as the input to all hash and signature
  1510.    functions.  If canonical S-expressions need to be transmitted over a
  1511.    7-bit channel, there is a form defined for base64 encoding them.
  1512.  
  1513.  
  1514.  
  1515. 4.1.1 <byte-string>
  1516.  
  1517.    A byte string is a binary sequence of bytes (octets), optionally
  1518.    modified by a display type.
  1519.  
  1520.    If the byte-string is used as a binary number, these bytes are twos-
  1521.    complement, in network standard order (most significant byte first).
  1522.    This means that the sign of the first byte is the sign of the number,
  1523.    so that if you have a positive number whose first byte exceeds 128,
  1524.    then you need to prefix that number with a 0 byte to force it to be
  1525.    positive.  A canonical form positive number will not have unnecessary
  1526.    leading 0x00 bytes while a canonical form negative number will not
  1527.    have unnecessary leading 0xFF bytes.  Such a byte is unnecessary if
  1528.    by removing it, the remaining string has the same value as a twos-
  1529.    complement integer.
  1530.  
  1531.    All byte strings carry explicit lengths and are therefore not
  1532.  
  1533.  
  1534.  
  1535.  
  1536. Ellison, et al.                                                [Page 27]
  1537.  
  1538. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1539.  
  1540.  
  1541.    0-terminated as in the C language.  They are treated as binary even
  1542.    when they are ASCII, and can use any character set encoding desired.
  1543.    Typically, such a choice of character set would be indicated by a
  1544.    display type.
  1545.  
  1546.    A display type is assumed to be a MIME type giving optional
  1547.    instructions to any program wishing to display or use the byte
  1548.    string.  For example, it might indicate that the string is in
  1549.    UNICODE, is a GIF or JPEG image, is an audio segment, etc.  Although
  1550.    the display type of a byte string is optional, it is considered part
  1551.    of the string for any equality comparisons or hashing.
  1552.  
  1553.    A byte-string is defined by:
  1554.  
  1555.    <byte-string>:: <bytes> | <display-type> <bytes> ;
  1556.    <bytes>:: <decimal> ":" {binary byte string of that length} ;
  1557.    <decimal>:: <nzddigit> <ddigit>* ;
  1558.    <nzddigit>:: "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
  1559.    <ddigit>:: "0" | <nzddigit> ;
  1560.    <display-type>:: "[" <bytes> "]" ;
  1561.  
  1562.  
  1563.  
  1564. 4.1.2 S-expression
  1565.  
  1566.    An S-expression is of the form:
  1567.  
  1568.    <s-expr>:: "(" <byte-string> <s-part>* ")" ;
  1569.  
  1570.    <s-part>:: <byte-string> | <s-expr> ;
  1571.  
  1572.    where the first byte string in the S-expression is referred to here
  1573.    as its "type".
  1574.  
  1575.  
  1576.  
  1577. 4.1.3 Encoding examples
  1578.  
  1579.             (4:test26:abcdefghijklmnopqrstuvwxyz5:123455::: ::)
  1580.  
  1581.    is a canonical S-expression consisting of four byte strings: "test",
  1582.    "abcdefghijklmnopqrstuvwxyz", "12345" and ":: ::".
  1583.  
  1584.    The advanced text form is:
  1585.  
  1586.              (test abcdefghijklmnopqrstuvwxyz "12345" ":: ::")
  1587.  
  1588.    showing that the advanced form follows familiar token recognition
  1589.  
  1590.  
  1591.  
  1592.  
  1593. Ellison, et al.                                                [Page 28]
  1594.  
  1595. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1596.  
  1597.  
  1598.    rules, not permitting tokens to start with digits, terminating them
  1599.    with white space or punctuation marks.
  1600.  
  1601.    For transmission of true 8-bit forms, we permit base64 encodings
  1602.    according to [RFC2045], with the base64 characters enclosed in
  1603.    braces.  The example above encodes to:
  1604.  
  1605.    {KDQ6dGVzdDI2OmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6NToxMjM0NTU
  1606.    6OjogOjop}
  1607.  
  1608.  
  1609.  
  1610. 4.1.4 Use of canonical S-expressions
  1611.  
  1612.    Canonical S-expressions were designed to be as simple to pack and
  1613.    parse as possible.  Some concessions were made to those developers
  1614.    who might want to examine a canonical S-expression in an ASCII editor
  1615.    like emacs (specifically the readable decimal length fields and
  1616.    readable "()[]" characters) but in general the form is as close to
  1617.    minimum size as possible.  Parsing of a canonical form S-expression
  1618.    requires minimal look-ahead and no re-scanning of incoming bytes.  As
  1619.    a result, the parsing code remains very small.  Assuming each byte
  1620.    string is stored with a length field, generation of a canonical form
  1621.    from a data structure requires an extremely small amount of code.
  1622.  
  1623.    The canonical S-expression is the form which is hashed for both
  1624.    generating and verifying signatures.  These two processes can be
  1625.    thought of as the start and end of an SPKI object's useful life and
  1626.    both require canonical form.  Therefore, it is recommended that the
  1627.    canonical form be the form transmitted and stored in normal use, to
  1628.    be converted temporarily to and from a more readable form by display
  1629.    or editing applications written for the purpose.
  1630.  
  1631.    [Violating that suggestion, this document includes some advanced non-
  1632.    canonical forms, for readability.  Since this document is required to
  1633.    be straight ASCII, no pure 8-bit canonical forms will be presented
  1634.    except under base64 encoding.]
  1635.  
  1636.  
  1637.  
  1638. 4.1.5 Non-canonical (advanced) S-expressions
  1639.  
  1640.    [SEXP] includes a general purpose utility program for converting
  1641.    between canonical and advanced S-expression form.  In the advanced
  1642.    form, individual byte strings may be expressed without length fields
  1643.    (if they are what most languages consider text tokens), may be
  1644.    written as quoted strings (under normal C string rules), or may be
  1645.    individually hex or base64 encoded.  Also in the advanced form, extra
  1646.  
  1647.  
  1648.  
  1649.  
  1650. Ellison, et al.                                                [Page 29]
  1651.  
  1652. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1653.  
  1654.  
  1655.    white space between list elements is allowed for readability and
  1656.    ignored on conversion to canonical form.
  1657.  
  1658.    For examples this document will normally use the advanced form,
  1659.    because of its readability, but for at least one concrete example the
  1660.    canonical form and its hash are presented (base64 encoded where
  1661.    necessary).
  1662.  
  1663.    In these examples, we will use keywords without preceding length
  1664.    fields, quoted strings, hex values (delimited by "#") and base64
  1665.    values (delimited by "|").  Those are features of the advanced
  1666.    transport form of an S-expression, and are not part of the canonical
  1667.    form.  We will always present the canonical form (base-64 encoded,
  1668.    when it contains non-ASCII characters) which the reader can decode to
  1669.    get the actual canonical form.
  1670.  
  1671.  
  1672.  
  1673. 4.1.6 Unique IDs
  1674.  
  1675.    Top level object names are defined in this document along with
  1676.    certain algorithm names.  <tag> objects are user-defined, using a
  1677.    language for describing sets of permissions given here, and in the
  1678.    process, the defining user can choose any object names he or she
  1679.    wishes.
  1680.  
  1681.    For the definition of new algorithm names, it is our preference that
  1682.    this be taken on by IANA for single-word standard names.  In the
  1683.    interest of maximum flexibility we also permit users to define their
  1684.    own algorithm names via a normal URI's (which presumably point to
  1685.    descriptions of the algorithms or even code).
  1686.  
  1687.  
  1688.  
  1689. 4.2 SPKI/SDSI 2.0 Objects
  1690.  
  1691.    The objects defined in SPKI/SDSI 2.0 are S-expressions.  That is they
  1692.    are lists of either byte strings or other lists.  In our case, all S-
  1693.    expressions start with a <byte-string>, called the object name.  The
  1694.    remaining elements of the list are called "parts" of the object.
  1695.  
  1696.    In a communication from prover to verifier, one might encounter only
  1697.    a small number of different objects: usually a <sequence> of <cert>,
  1698.    <pub-key>, <sec-key>, <signature> and <op>.  The verifier will also
  1699.    need to refer to its own <acl>.  These are considered top level
  1700.    objects and are defined in the sections immediately following
  1701.  
  1702.    It is standard SPKI/SDSI practice to use names starting with a lower
  1703.  
  1704.  
  1705.  
  1706.  
  1707. Ellison, et al.                                                [Page 30]
  1708.  
  1709. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1710.  
  1711.  
  1712.    case letter, followed by lower case letters, digits and hyphens for
  1713.    object types.  SPKI/SDSI is case-sensitive, so the byte-string "RSA"
  1714.    is not the same as "rsa".  Non-standard object types (i.e. those
  1715.    defined by an application developer) are completely unconstrained,
  1716.    may have display types and may even be URI's pointing to
  1717.    documentation of the object type.
  1718.  
  1719.    The structure and interpretation of the parts is up to the designer
  1720.    of the top-level object type.
  1721.  
  1722.    Normally, the object structure is one of two varieties:
  1723.  
  1724.       "positional" -- the parts are listed in some fixed order with
  1725.       possible omission of some of the later parts and meaning of the
  1726.       part depending on its position
  1727.  
  1728.                          Example: (hash sha1 20:...)
  1729.  
  1730.       "sub-type based" -- the parts are identified by object type of a
  1731.       sublist or spelling of a byte-string and can be in any order.
  1732.       These elements are expected all to have distinct types, and the
  1733.       types of the parts determine their meaning with respect to the
  1734.       top-level object.  The set of allowable sub-object types is a
  1735.       function of the object type, as is whether sub-objects of some
  1736.       types are optional.
  1737.  
  1738.                       Example: (rsa (n 128:...) (e 1:.))
  1739.  
  1740.    The following are the definitions of the top level objects which a
  1741.    verifying program may encounter.  Note that the main object, cert, is
  1742.    sub-type based so the parameter fields may be in any order, but the
  1743.    BNF suggests a fixed order.  We use the BNF definition to indicate
  1744.    that there may not be more than one of each of the listed fields, and
  1745.    also to suggest (for readability) that the cert parts be presented in
  1746.    the order given.  This document will use that order.
  1747.  
  1748.  
  1749.  
  1750. 4.2.1 <pub-key>
  1751.  
  1752.    <pub-key>:: "(" "public-key" <pub-sig-alg-id> <s-expr>* <uri>? ")" ;
  1753.  
  1754.    A public key definition gives everything the user needs to employ the
  1755.    key for checking signatures.
  1756.  
  1757.    The only pub-sig-alg-id's we have defined at this point are for
  1758.    signature verification.  That is because we need only signature keys
  1759.    for certificate formation and access control.  Other key types are
  1760.  
  1761.  
  1762.  
  1763.  
  1764. Ellison, et al.                                                [Page 31]
  1765.  
  1766. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1767.  
  1768.  
  1769.    open to being defined by users.
  1770.  
  1771.    The following is an RSA signature key, shown in advanced transport
  1772.    format:
  1773.  
  1774.    (public-key rsa-pkcs1-md5
  1775.     (e #03#)
  1776.     (n |ANHCG85jXFGmicr3MGPj53FYYSY1aWAue6PKnpFErHhKMJa4HrK4WSKTO
  1777.      YTTlapRznnELD2D7lWd3Q8PD0lyi1NJpNzMkxQVHrrAnIQoczeOZuiz/yY
  1778.      VDzJ1DdiImixyb/Jyme3D0UiUXhd6VGAz0x0cgrKefKnmjy410Kro3uW1| ))
  1779.  
  1780.    For actual use, the key is held and presented in canonical form the
  1781.    base64 encoding of which is:
  1782.  
  1783.    {KDEwOnB1YmxpYy1rZXkxMzpyc2EtcGtjczEtbWQ1KDE6ZTE6AykoMTpuMTI
  1784.    5OgDRwhvOY1xRponK9zBj4+dxWGEmNWlgLnujyp6RRKx4SjCWuB6yuFkikzm
  1785.    E05WqUc55xCw9g+5Vnd0PDw9JcotTSaTczJMUFR66wJyEKHM3jmbos/8mFQ8
  1786.    ydQ3YiJoscm/ycpntw9FIlF4XelRgM9MdHIKynnyp5o8uNdCq6N7ltSkp}
  1787.  
  1788.    Although not strictly needed by this draft, the private key for the
  1789.    public key above is:
  1790.  
  1791.    (private-key rsa-pkcs1-md5
  1792.     (e #03#)
  1793.     (n |ANHCG85jXFGmicr3MGPj53FYYSY1aWAue6PKnpFErHhKMJa4HrK4WSKTO
  1794.      YTTlapRznnELD2D7lWd3Q8PD0lyi1NJpNzMkxQVHrrAnIQoczeOZuiz/yY
  1795.      VDzJ1DdiImixyb/Jyme3D0UiUXhd6VGAz0x0cgrKefKnmjy410Kro3uW1| )
  1796.     (d |AIvWvTRCPYvEW9ykyu1CmkuQQMQjm5V0Um0xvwuDHaWGyw8lacx65hcM0
  1797.      QM3uRw2iaaCyCkCnuO+k19fX4ZMXOD7cLN/Qrql8Efx5mczcoGN+Eo6FF+
  1798.      cvgXfupe1VM6PmJdFIauJerTHUOlPrI12N+NnAL7CvU6X1nhOnf/Z77iz| )
  1799.     (p |APesjZ8gK4RGV5Qs1eCRAVp7mVblgf13R5fwApw6bTVWzunIwk/2sShyy
  1800.      tpc90edr+0DPwldnvEXTUY1df0DwPc=|)
  1801.     (q |ANjPQe6O0Jfv90GWE3q2c9724AX7FKx64g2F8lxgiWW0QKEeqiWiiEDx7
  1802.      qh0lLrhmBT+VXEDFRG2LHmuNSTzj7M=|)
  1803.     (a |AKUds79qx62EOmLIjpW2AOb9EOSZAVOk2mVKrGgm83jkifEwgYqkdhr3M
  1804.      ebopNppH/NXf1uTv0tk3i7OTqitK08=|)
  1805.     (b |AJCKK/RfNbqf+iu5YlHO9+n56q6nYx2nQV5ZTD2VsO54KxYUcW5sWtX2n
  1806.      xr4YydBEA3+46CsuLZ5cvvJeMNNCnc=|)
  1807.     (c |CIPwAAO8Vmj0/BfCtsg+35+r94jwxGYHZ63RsqyNxbvkAO6xPqSht8/vz
  1808.      dR93eX5B9ZKBQg1HHWCsHbqQtmNLQ==|))
  1809.  
  1810.    where a, b and c are CRT parameters.
  1811.  
  1812.  
  1813.  
  1814.  
  1815.  
  1816.  
  1817.  
  1818.  
  1819.  
  1820.  
  1821. Ellison, et al.                                                [Page 32]
  1822.  
  1823. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1824.  
  1825.  
  1826. 4.2.2 <sec-key>
  1827.  
  1828.    <sec-key>:: "(" "secret-key" <sec-sig-alg-id> <s-expr>* <uri>? ")" ;
  1829.  
  1830.  
  1831.  
  1832. 4.2.2.1 HMAC-MD5
  1833.  
  1834.    Example:
  1835.  
  1836.    (secret-key hmac-md5 (k |ksTt2Lu9NSq3mGHJ7HmuksSYwFQ=|) )
  1837.  
  1838.    which has a base64 encoded canonical form:
  1839.  
  1840.    {KDEwOnNlY3JldC1rZXk4OmhtYWMtbWQ1KDE6azIwOpLE7di7vTUqt5hhyex
  1841.    5rpLEmMBUKSk=}
  1842.  
  1843.    The hmac-md5 and hmac-sha1 algorithms are defined in [RFC2104].
  1844.  
  1845.  
  1846.  
  1847. 4.2.2.2 DES-CBC-MAC
  1848.  
  1849.    Example:
  1850.  
  1851.    (secret-key des-cbc-mac (k |52Lyr9BPTSM=|)
  1852.     (nonce |v1jBW9SlFxAweNyYSzaMfHOzwds=|))
  1853.  
  1854.    with base64 encoded canonical form
  1855.  
  1856.    {KDEwOnNlY3JldC1rZXkxMTpkZXMtY2JjLW1hYygxOms4Oudi8q/QT00jKSg
  1857.    1Om5vbmNlMjA6v1jBW9SlFxAweNyYSzaMfHOzwdspKQ==}
  1858.  
  1859.    provides the DES key for a DES-CBC MAC.  It also includes a nonce
  1860.    parameter which plays no part in the algorithm, but serves to
  1861.    insulate this key from brute force attacks using the published hash
  1862.    of the (secret-key...) canonical S-expression:
  1863.  
  1864.    (hash md5 |ilTuqvT5/AdeX/sfxA9lgQ==| examples/des.bin)
  1865.  
  1866.    with base64 encoded canonical form
  1867.  
  1868.    {KDQ6aGFzaDM6bWQ1MTY6ilTuqvT5/AdeX/sfxA9lgTE2OmV4YW1wbGVzL2R
  1869.    lcy5iaW4p}
  1870.  
  1871.  
  1872.  
  1873.  
  1874.  
  1875.  
  1876.  
  1877.  
  1878. Ellison, et al.                                                [Page 33]
  1879.  
  1880. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1881.  
  1882.  
  1883. 4.2.3 <hash>
  1884.  
  1885.    <hash>:: "(" "hash" <hash-alg-name> <hash-value> <uri>? ")" ;
  1886.  
  1887.    A <hash> object gives the hash of some other object.  For example,
  1888.    the public key given above has the following hash:
  1889.  
  1890.    (hash md5 #92e5f2ab1f23616759fe3ed57dfafeca#)
  1891.  
  1892.    or
  1893.  
  1894.    (hash md5 |kuXyqx8jYWdZ/j7Vffr+yg==|)
  1895.  
  1896.    which, in base64 encoded canonical form, is
  1897.  
  1898.    {KDQ6aGFzaDM6bWQ1MTY6kuXyqx8jYWdZ/j7Vffr+yik=}
  1899.  
  1900.    A hash of the hmac-md5 secret key defined above is:
  1901.  
  1902.    (hash md5 #33b7035665f7af8c6669bdabc58ab236#)
  1903.    or
  1904.    (hash md5 |M7cDVmX3r4xmab2rxYqyNg==|)
  1905.  
  1906.    which, in base64 encoded canonical form, is
  1907.  
  1908.    {KDQ6aGFzaDM6bWQ1MTY6M7cDVmX3r4xmab2rxYqyNik=}
  1909.  
  1910.    This is perhaps of more interest than the hash of the public key
  1911.    because a certificate generally released to the public can not
  1912.    contain a secret key, for obvious reasons, but it might contain the
  1913.    hash of the secret key without fear of loss of the secret.
  1914.  
  1915.  
  1916.  
  1917. 4.2.4 <signature>
  1918.  
  1919.    <signature>:: "(" "signature" <hash> <principal> <sig-val> ")" ;
  1920.  
  1921.    A signature object is typically used for a certificate body and
  1922.    typically follows that <cert> object in a <sequence>.  We chose not
  1923.    to define an object <signed-cert> containing the cert body and
  1924.    signature, since there may be cases when the same cert body needs to
  1925.    be signed by multiple keys.
  1926.  
  1927.    One can also sign objects other than cert bodies, of course.  For
  1928.    example, the following is the signature of a file.
  1929.  
  1930.    (signature
  1931.  
  1932.  
  1933.  
  1934.  
  1935. Ellison, et al.                                                [Page 34]
  1936.  
  1937. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1938.  
  1939.  
  1940.     (hash md5 |8dIIGz8bZZpXpX2M/g/aVQ==|)
  1941.     (public-key
  1942.      rsa-pkcs1-md5
  1943.      (e #03#)
  1944.      (n
  1945.       |ANHCG85jXFGmicr3MGPj53FYYSY1aWAue6PKnpFErHhKMJa4HrK4WSKTOYTT
  1946.       lapRznnELD2D7lWd3Q8PD0lyi1NJpNzMkxQVHrrAnIQoczeOZuiz/yYVDzJ1
  1947.       DdiImixyb/Jyme3D0UiUXhd6VGAz0x0cgrKefKnmjy410Kro3uW1|))
  1948.     |0Q5bkgsDoPlD9zkQo+YEnpmuXwC9REZHDcCoiT9FlzgTw1QPzM0yS0vg7+rG
  1949.     4HmsHOgZWvgjFY2IWXt1Po2gD9Hjxw6sGl/vTpmjo2NldnONPbzNTJKqEEqh
  1950.     8SFyuLibu04IdcuicqNGyaBJhuN1leXt29Wn+gHVPtufGCSK670=|)
  1951.  
  1952.    which is equivalent to
  1953.  
  1954.    (signature
  1955.     (hash md5 |8dIIGz8bZZpXpX2M/g/aVQ==|)
  1956.     (hash md5 |kuXyqx8jYWdZ/j7Vffr+yg==| key2-pub)
  1957.     |0Q5bkgsDoPlD9zkQo+YEnpmuXwC9REZHDcCoiT9FlzgTw1QPzM0yS0vg7+
  1958.     rG4HmsHOgZWvgjFY2IWXt1Po2gD9Hjxw6sGl/vTpmjo2NldnONPbzNTJKqE
  1959.     Eqh8SFyuLibu04IdcuicqNGyaBJhuN1leXt29Wn+gHVPtufGCSK670=|)
  1960.  
  1961.    or, in base64 encoded canonical form,
  1962.  
  1963.    {KDk6c2lnbmF0dXJlKDQ6aGFzaDM6bWQ1MTY68dIIGz8bZZpXpX2M/g/aVSk
  1964.    oNDpoYXNoMzptZDUxNjqS5fKrHyNhZ1n+PtV9+v7KODprZXkyLXB1YikxMjg
  1965.    60Q5bkgsDoPlD9zkQo+YEnpmuXwC9REZHDcCoiT9FlzgTw1QPzM0yS0vg7+r
  1966.    G4HmsHOgZWvgjFY2IWXt1Po2gD9Hjxw6sGl/vTpmjo2NldnONPbzNTJKqEEq
  1967.    h8SFyuLibu04IdcuicqNGyaBJhuN1leXt29Wn+gHVPtufGCSK670p}
  1968.  
  1969.    As one more example, the signature on the hmac-md5 secret key defined
  1970.    above, by the public key above, is:
  1971.  
  1972.    (signature
  1973.     (hash md5 |M7cDVmX3r4xmab2rxYqyNg==|)
  1974.     (public-key
  1975.      rsa-pkcs1-md5
  1976.      (e #03#)
  1977.      (n
  1978.       |ANHCG85jXFGmicr3MGPj53FYYSY1aWAue6PKnpFErHhKMJa4HrK4WSKT
  1979.       OYTTlapRznnELD2D7lWd3Q8PD0lyi1NJpNzMkxQVHrrAnIQoczeOZuiz/
  1980.       yYVDzJ1DdiImixyb/Jyme3D0UiUXhd6VGAz0x0cgrKefKnmjy410Kro3u
  1981.       W1|))
  1982.     |fA9Jhf/YXYgtxHowCDPUBFWDeOgAKNAlfDGq73obef6E1xCYCrpeh/kPr4
  1983.     V8yoE+eXY+CUQivbQsmKxfcEoxJbCAseDSzvuprZ2jeETDK0ESVhYfGPMyN
  1984.     vx1pfkL1SQZwFqbf1g3G7obRU6SpPn/A12+IuHRBXKdLtUyFnBMxvE=|)
  1985.  
  1986.    or, in base64 encoded canonical form:
  1987.  
  1988.  
  1989.  
  1990.  
  1991.  
  1992. Ellison, et al.                                                [Page 35]
  1993.  
  1994. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  1995.  
  1996.  
  1997.    {KDk6c2lnbmF0dXJlKDQ6aGFzaDM6bWQ1MTY6M7cDVmX3r4xmab2rxYqyNik
  1998.    oMTA6cHVibGljLWtleTEzOnJzYS1wa2NzMS1tZDUoMTplMToDKSgxOm4xMjk
  1999.    6ANHCG85jXFGmicr3MGPj53FYYSY1aWAue6PKnpFErHhKMJa4HrK4WSKTOYT
  2000.    TlapRznnELD2D7lWd3Q8PD0lyi1NJpNzMkxQVHrrAnIQoczeOZuiz/yYVDzJ
  2001.    1DdiImixyb/Jyme3D0UiUXhd6VGAz0x0cgrKefKnmjy410Kro3uW1KSkxMjg
  2002.    6fA9Jhf/YXYgtxHowCDPUBFWDeOgAKNAlfDGq73obef6E1xCYCrpeh/kPr4V
  2003.    8yoE+eXY+CUQivbQsmKxfcEoxJbCAseDSzvuprZ2jeETDK0ESVhYfGPMyNvx
  2004.    1pfkL1SQZwFqbf1g3G7obRU6SpPn/A12+IuHRBXKdLtUyFnBMxvEp}
  2005.  
  2006.  
  2007.  
  2008. 4.2.5 <acl>
  2009.  
  2010.    <acl>:: "(" "acl" <version>? <acl-entry>* ")" ;
  2011.  
  2012.    <acl-entry>:: <subj-obj>* <deleg>? <tag> <valid>? <comment>? ;
  2013.  
  2014.    An ACL is a list of assertions: certificate bodies which don't need
  2015.    issuer fields or signatures because they are being held in secure
  2016.    memory.  Since the fields of the ACL are fields of a <cert>, we will
  2017.    not repeat those common field definitions here.
  2018.  
  2019.    If all the optional fields are left out, the (possible multiple)
  2020.    subjects are given the permission specified in <tag>, without
  2021.    permission to delegate it, but forever (until the ACL is edited to
  2022.    remove the permission).
  2023.  
  2024.    For example:
  2025.  
  2026.    (acl
  2027.     (name (hash md5 |p1isZirSN3CBscfNQSbiDA==|) sysadmin/operators)
  2028.     (hash md5 |M7cDVmX3r4xmab2rxYqyNg==|)
  2029.            (tag (ftp db.acme.com root))
  2030.     (hash md5 |kuXyqx8jYWdZ/j7Vffr+yg==|)
  2031.        (propagate)
  2032.            (tag (http http://www.internal.acme.com/accounting/))
  2033.    )
  2034.  
  2035.    or
  2036.  
  2037.    {KDM6YWNsKDQ6bmFtZSg0Omhhc2gzOm1kNTE2OqdYrGYq0jdwgbHHzUEm4gw
  2038.    pMTg6c3lzYWRtaW4vb3BlcmF0b3JzKSg0Omhhc2gzOm1kNTE2OjO3A1Zl96+
  2039.    MZmm9q8WKsjYpKDM6dGFnKDM6ZnRwMTE6ZGIuYWNtZS5jb200OnJvb3QpKSg
  2040.    0Omhhc2gzOm1kNTE2OpLl8qsfI2FnWf4+1X36/sopKDk6cHJvcGFnYXRlKSg
  2041.    zOnRhZyg0Omh0dHA0MDpodHRwOi8vd3d3LmludGVybmFsLmFjbWUuY29tL2F
  2042.    jY291bnRpbmcvKSkp}
  2043.  
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049. Ellison, et al.                                                [Page 36]
  2050.  
  2051. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2052.  
  2053.  
  2054. 4.2.6 <sequence>
  2055.  
  2056.    <sequence>:: "(" "sequence" <seq-ent>* ")" ;
  2057.  
  2058.    <seq-ent>:: <cert> | <pub-key> | <signature> | <op> ;
  2059.  
  2060.    <op>:: <hash-op> | <general-op> ;
  2061.  
  2062.    <hash-op>:: "(" "do" "hash" <hash-alg-name> ")" ;
  2063.  
  2064.    <general-op>:: "(" "do" <byte-string> <s-part>* ")" ;
  2065.  
  2066.    A <sequence> is a bundled sequence of objects which the verifier is
  2067.    to consider when deciding to grant access.  We anticipate requiring
  2068.    the prover (who constructs and submits the <sequence>) to provide
  2069.    elements in order, so that the verifier need only process the
  2070.    <sequence> in order to prove to itself that the prover has the
  2071.    claimed access right.
  2072.  
  2073.    The sequence can also contain instructions to the verifier, in the
  2074.    form of opcodes.  At present the only opcode defined is "hash" --
  2075.    meaning, that the previous item in the sequence (the last one read
  2076.    in) is to be hashed by the given algorithm and saved, indexed by that
  2077.    hash value.  Presumably, that item (certificate body or public key,
  2078.    for example) is referred to by hash in some subsequent object.
  2079.  
  2080.    At this time, we assume that a (signature ) block following a cert
  2081.    body in a sequence will call for that cert body to be hashed by the
  2082.    algorithm indicated in the signature.
  2083.  
  2084.    If an object will be referenced by different hashes, it can be
  2085.    followed by multiple (do hash ..) opcodes.
  2086.  
  2087.  
  2088.  
  2089. 4.3 <cert> object
  2090.  
  2091.    <cert>:: "(" "cert" <version>? <cert-display>? <issuer> <issuer-loc>?
  2092.    <subject> <subject-loc>? <deleg>? <tag> <valid>? <comment>? ")" ;
  2093.  
  2094.    The full SPKI/SDSI 2.0 specification as it has evolved over the past
  2095.    year has departed somewhat from the original purpose of providing the
  2096.    simplest possible, bare-bones certificate which is still useful to
  2097.    Internet developers.  It has acquired some features which we now
  2098.    believe are of extreme value and therefore worth the complexity they
  2099.    introduce.  However, there are still expected to be some developers
  2100.    who do not need all these additional features.
  2101.  
  2102.  
  2103.  
  2104.  
  2105.  
  2106. Ellison, et al.                                                [Page 37]
  2107.  
  2108. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2109.  
  2110.  
  2111.    A SPKI/SDSI <cert> compliant with this proposed standard fits within
  2112.    the full BNF given at the end of this draft.  A fully "compliant"
  2113.    verifier would accept all of that possible BNF.  However, there may
  2114.    be developers in closed environments which will never generate
  2115.    SPKI/SDSI <certs> using all the features presented in the BNF and
  2116.    using verifier code which can not accept the full set.  As an aid in
  2117.    selecting subsets of the SPKI/SDSI <cert> definition, we offer the
  2118.    following four sections -- a basic <cert> and three extensions from
  2119.    the basic which are independent of one another and therefore might be
  2120.    included or left out as the developer wishes.
  2121.  
  2122.    However, we urge everyone to consider use of the full definition and
  2123.    to cut back only if it is obvious that some set of features will
  2124.    never be needed or that the code required to process some feature can
  2125.    not fit within the application's design constraints.
  2126.  
  2127.    For that latter possibility, the developer can consider reducing full
  2128.    SPKI/SDSI certs to Certificate Result Certs [CRCs] which can easily
  2129.    be expressed in bare-bones format.  It should be kept in mind that a
  2130.    decision to accept less than the full SPKI cert limits the
  2131.    certificate chains a verifier can accept without use of an
  2132.    intermediary CRC engine.
  2133.  
  2134.     1.  Bare-bones SPKI
  2135.     2.  Simple SPKI/SDSI (addition of SDSI names)
  2136.     3.  Tag algebra (addition of the *-form construct)
  2137.     4.  Threshold subjects (addition of multiple-subject forms)
  2138.  
  2139.  
  2140.  
  2141. 4.3.1 Bare-bones SPKI
  2142.  
  2143.    A bare-bones SPKI cert is one which uses only principals (not names)
  2144.    for both issuer and subject, and uses a non-intersectable S-
  2145.    expression for the tag, to be interpreted by code at the verifier.
  2146.    It does not permit threshold subjects.
  2147.  
  2148.    This might show up in actual use as either a special, simple cert for
  2149.    a specific purpose or as a Certificate Result Cert (CRC).  We expect
  2150.    verifiers which accept only bare-bones SPKI certs to be specialized
  2151.    applications in closed environments, if any such verifiers are
  2152.    fielded.
  2153.  
  2154.  
  2155.  
  2156.  
  2157.  
  2158.  
  2159.  
  2160.  
  2161.  
  2162.  
  2163. Ellison, et al.                                                [Page 38]
  2164.  
  2165. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2166.  
  2167.  
  2168. 4.3.1.1 <version>
  2169.  
  2170.    <version>:: "(" "version" <byte-string> ")" ;
  2171.  
  2172.    Version numbers are non-negative and start with #00#.  If the
  2173.    <version> field is missing from an object, it is assumed to be
  2174.    (version #00#), which is the version of all objects in this draft.
  2175.  
  2176.    It is assumed that a verifier, when encountering a structure it
  2177.    doesn't know how to parse (because it has a version number too high),
  2178.    will ignore that object.
  2179.  
  2180.  
  2181.  
  2182. 4.3.1.2 <cert-display>
  2183.  
  2184.    <cert-display>:: "(" "display" <byte-string> ")" ;
  2185.  
  2186.    This optional field gives a display hint for the entire certificate.
  2187.    This display parameter does not affect certificate chain reduction,
  2188.    but is provided to aid user-interface software in certificate
  2189.    display.
  2190.  
  2191.    At this time, we have no such hints defined, but we anticipate
  2192.    allowing the differentiation between a SDSI individual name
  2193.    definition, SDSI group membership definition, a straight permission
  2194.    delegation, etc.  Possible parameters for this field are left as an
  2195.    open issue.
  2196.  
  2197.  
  2198.  
  2199. 4.3.1.3 <issuer>
  2200.  
  2201.    In the bare-bones SPKI cert, we have:
  2202.  
  2203.    <issuer>:: "(" "issuer" <principal> ")" ;
  2204.  
  2205.    <principal>:: <pub-key> | <hash-of-key> ;
  2206.  
  2207.    and some implementations may prefer to simplify code and allow only
  2208.    <pub-key> for <principal>.  This rules out <sec-key> issuers,
  2209.    although not a <hash-of-key> field which is the hash of a <sec-key>.
  2210.    An explicit <sec-key> as an issuer offers no security to the cert.
  2211.  
  2212.  
  2213.  
  2214.  
  2215.  
  2216.  
  2217.  
  2218.  
  2219.  
  2220. Ellison, et al.                                                [Page 39]
  2221.  
  2222. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2223.  
  2224.  
  2225. 4.3.1.4 <issuer-loc>
  2226.  
  2227.    <issuer-loc>:: "(" "issuer-info" <uri>* ")" ;
  2228.  
  2229.    The (issuer-info ) object provides the location of the cert(s) by
  2230.    which the issuer derives the authority to pass along the
  2231.    authorization in the present <cert>.  We expect the prover (the
  2232.    calling client) to track down such other certs and provide them to
  2233.    the verifier (the called server), but we allow this information in
  2234.    the cert to simplify that process for the prover.
  2235.  
  2236.  
  2237.  
  2238. 4.3.1.5 <subject>
  2239.  
  2240.    In the bare-bones SPKI cert, we have:
  2241.  
  2242.    <subject>:: "(" "subject" <principal> ")" ;
  2243.  
  2244.    <principal>:: <pub-key> | <hash-of-key> ;
  2245.  
  2246.    and some implementations may prefer to simplify code and allow only
  2247.    <pub-key> for <principal>.
  2248.  
  2249.  
  2250.  
  2251. 4.3.1.6 <subject-loc>
  2252.  
  2253.    <subject-loc>:: "(" "subject-info" <uri>* ")" ;
  2254.  
  2255.    This optional field provides the location of information about the
  2256.    subject.  For example, if the subject is a hash of a key, this might
  2257.    provide the location of the key being hashed.
  2258.  
  2259.  
  2260.  
  2261. 4.3.1.7 <deleg>
  2262.  
  2263.    <deleg>:: "(" "propagate" ")" ;
  2264.  
  2265.    This optional field, if present, notes that the <subject> has not
  2266.    only the permission given in the <cert>'s <tag> field but also the
  2267.    permission to delegate that (or some portion of it) to others.
  2268.  
  2269.  
  2270.  
  2271.  
  2272.  
  2273.  
  2274.  
  2275.  
  2276.  
  2277. Ellison, et al.                                                [Page 40]
  2278.  
  2279. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2280.  
  2281.  
  2282. 4.3.1.8 <tag>
  2283.  
  2284.    In the bare-bones SPKI cert (and simple SPKI/SDSI cert), the tag
  2285.    field has no special structure beyond the following:
  2286.  
  2287.    <tag>:: "(" "tag" "(*)" ")" | "(" "tag" <tag-body>  ")" ;
  2288.  
  2289.    <tag-body>:: <simple-tag> ;
  2290.  
  2291.    <simple-tag>:: "(" <byte-string> <tag-param>* ")" ;
  2292.  
  2293.    <tag-param>:: <s-part> ;
  2294.  
  2295.    The form (tag (*)) means "all permissions".
  2296.  
  2297.    The <simple-tag> form gives an application-dependent S-expression.
  2298.    The reduction rule for this simple form is that the S-expression must
  2299.    match exactly [or must match with a (tag (*))].
  2300.  
  2301.  
  2302.  
  2303. 4.3.1.9 <valid>
  2304.  
  2305.    The <valid> field gives validity dates and/or on-line test
  2306.    information for the cert.
  2307.  
  2308.    <valid>:: <not-before>? <not-after>? <online-test>? ;
  2309.  
  2310.    <not-after>:: "(" "not-after" <date> ")" ;
  2311.  
  2312.    <not-before>:: "(" "not-before" <date> ")" ;
  2313.  
  2314.    The not-after and not-before options are self-explanatory.  If either
  2315.    is missing, then the cert is assumed valid for all time in that
  2316.    direction.  For example, one might omit the <not-before> field, if
  2317.    that date would be before or at the time of creation of the cert,
  2318.    unless one wanted to note the creation time for documentary purposes.
  2319.  
  2320.  
  2321.  
  2322. 4.3.1.9.1 <date>
  2323.  
  2324.    <date>:: <byte-string> ;
  2325.  
  2326.  
  2327.    A date field is an ASCII byte string of the form:
  2328.  
  2329.    YYYY-MM-DD_HH:MM:SS
  2330.  
  2331.  
  2332.  
  2333.  
  2334. Ellison, et al.                                                [Page 41]
  2335.  
  2336. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2337.  
  2338.  
  2339.    always UTC.  For internal use, it is treated as a normal byte string.
  2340.    For example, "1997-07-26_23:15:10" is a valid date.  So is
  2341.    "2001-01-01_00:00:00".  <date> fields are compared as normal ASCII
  2342.    byte strings since one never needs to compute the size of a time
  2343.    interval to test validity -- only determine greater-than, less-than
  2344.    or equal.
  2345.  
  2346.  
  2347.  
  2348. 4.3.1.9.2 <online-test>
  2349.  
  2350.    <online-test>:: "(" "online" <online-type> <uri> <principal> <s-
  2351.    part>* ")" ;
  2352.  
  2353.    <online-type>:: "crl" | "reval" | "one-time" ;
  2354.  
  2355.    The online test option allows a cert to be backed up by finer grain
  2356.    validity testing.  The reply from an online test is a digitally
  2357.    signed object, validated by the <principal> given in the test
  2358.    specification.  That object includes validity dates, so that once one
  2359.    has the online test response, its validity dates can be intersected
  2360.    with the parent cert's validity dates to yield the current working
  2361.    validity dates for the cert.
  2362.  
  2363.    The crl form tells the verifier (or prover, who fetches this
  2364.    information for the verifier, in our standard model), the current
  2365.    list of invalid certs.  If the present cert is not on that list, then
  2366.    the cert is presumed valid.
  2367.  
  2368.    The revalidate form is the logical opposite of the crl.  It tells the
  2369.    verifier a list of valid certs -- or, just that the current cert is
  2370.    valid.
  2371.  
  2372.    The one-time form is a revalidate form without validity dates.  It
  2373.    must be fetched by the verifier, rather than the prover, since it is
  2374.    valid only for the current verification step.  [In effect, it has a
  2375.    validity period of just "now".]  The process of getting this one-time
  2376.    revalidation involves sending a unique (and partly random) challenge
  2377.    which is returned as part of the signed response.
  2378.  
  2379.    See section 6 for a full description of on-line test request and
  2380.    reply formats.
  2381.  
  2382.  
  2383.  
  2384.  
  2385.  
  2386.  
  2387.  
  2388.  
  2389.  
  2390.  
  2391. Ellison, et al.                                                [Page 42]
  2392.  
  2393. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2394.  
  2395.  
  2396. 4.3.1.10 <comment>
  2397.  
  2398.    <comment>::  "(" "comment" <byte-string> ")" ;
  2399.  
  2400.    This optional field allows the issuer to attach comments meant to be
  2401.    ignored by any processing code but presumably to be read by a human.
  2402.  
  2403.  
  2404.  
  2405. 4.3.2 SPKI/SDSI
  2406.  
  2407.    This level of <cert> fully implements the merged SPKI and SDSI
  2408.    proposals, except for the <tag> algebra improvement which was
  2409.    developed after the decision to merge (and which is described below).
  2410.    The full SPKI/SDSI <cert> involves enhancement of the <issuer> and
  2411.    <subject> fields, over what was included in the bare-bones SPKI cert.
  2412.  
  2413.  
  2414.  
  2415. 4.3.2.1 <issuer>
  2416.  
  2417.    The full form of issuer is:
  2418.  
  2419.    <issuer>:: "(" "issuer" <issuer-name> ")" ;
  2420.  
  2421.    <issuer-name>:: <principal> | <simple-name> ;
  2422.  
  2423.    <simple-name>:: "(" "name" <principal> <byte-string> ")" ;
  2424.  
  2425.    The additional construct allowed here gives the definition of a SDSI
  2426.    name in the name space of the issuer.  For example,
  2427.  
  2428.    (cert
  2429.     (issuer (name (hash md5 |Txoz1GxK/uBvJbx3prIhEw==|) fred))
  2430.     (subject (hash md5 |Z5pxCD64YwgS1IY4Rh61oA==|))
  2431.     (tag (*)) )
  2432.  
  2433.    or
  2434.  
  2435.    {KDQ6Y2VydCg2Omlzc3Vlcig0Om5hbWUoNDpoYXNoMzptZDUxNjpPGjPUbEr
  2436.    +4G8lvHemsiETKTQ6ZnJlZCkpKDc6c3ViamVjdCg0Omhhc2gzOm1kNTE2Ome
  2437.    acQg+uGMIEtSGOEYetaApKSgzOnRhZygxOiopKSk=}
  2438.  
  2439.    defines the name "fred" in the name space of the key which hashes to
  2440.    |Txoz1GxK/uBvJbx3prIhEw==|.  It is defined to be the key which hashes
  2441.    to |Z5pxCD64YwgS1IY4Rh61oA==|.  That key acquires all the permissions
  2442.    which might be delegated to "fred" by name.
  2443.  
  2444.  
  2445.  
  2446.  
  2447.  
  2448. Ellison, et al.                                                [Page 43]
  2449.  
  2450. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2451.  
  2452.  
  2453.    The cert must be signed by the key referenced in the (issuer ), in
  2454.    this case, the key hashing to |Txoz1GxK/uBvJbx3prIhEw==|.
  2455.  
  2456.  
  2457.  
  2458. 4.3.2.2 <subject>
  2459.  
  2460.    The full form of subject (except for k-of-n, described below) is:
  2461.  
  2462.    <subject>:: "(" "subject" <subj-obj> ")" ;
  2463.  
  2464.    <subj-obj>:: <principal> | <name> | <obj-hash> | <sec-key> |
  2465.    <keyholder> ;
  2466.  
  2467.  
  2468.  
  2469. 4.3.2.2.1 <name>
  2470.  
  2471.    The primary addition to the possibilities for <subject> is a SDSI
  2472.    name.  This can be either a relative name or a fully-qualified name.
  2473.  
  2474.    <name>:: <relative-name> | <fq-name> ;
  2475.  
  2476.    <relative-name>:: "(" "name" <names> ")" ;
  2477.  
  2478.    <fq-name>:: "(" "name" <principal> <names> ")" ;
  2479.  
  2480.    <names>:: <byte-string> | <names> <byte-string> ;
  2481.  
  2482.    For evaluation purposes, the relative name is translated into a
  2483.    fully-qualified name by using the key of the issuer.
  2484.  
  2485.    Unlike the <issuer> SDSI name, which is forced to be a name in the
  2486.    issuer's name space, the subject name can be in any name space.
  2487.  
  2488.    (subject (name (hash md5 |Txoz1GxK/uBvJbx3prIhEw==|) fred sam george
  2489.    mary))
  2490.  
  2491.    refers through "fred" defined in the name space of
  2492.    |Txoz1GxK/uBvJbx3prIhEw==|, to reduce to:
  2493.  
  2494.    (subject (name (hash md5 |Z5pxCD64YwgS1IY4Rh61oA==|) sam george
  2495.    mary))
  2496.  
  2497.    recursing until the subject reduces to a key.  This construct allows
  2498.    deferred binding of keys to names, while the bare-bones SPKI format
  2499.    forces binding of keys to names at the time the certificate is
  2500.    issued.  In particular, the owner of any name space involved in such
  2501.  
  2502.  
  2503.  
  2504.  
  2505. Ellison, et al.                                                [Page 44]
  2506.  
  2507. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2508.  
  2509.  
  2510.    a SDSI name chain can replace an existing name definition after the
  2511.    cert above is issued, without affecting the validity of that cert or
  2512.    forcing it to be reissued.  For that matter, the cert above can be
  2513.    issued before there is any definition of the referenced name.
  2514.  
  2515.  
  2516.  
  2517. 4.3.2.2.2 <obj-hash>
  2518.  
  2519.    <obj-hash>:: "(" "object-hash" <hash> ")" ;
  2520.  
  2521.    This option for a (subject ) refers to an object other than a
  2522.    <principal> (or SDSI name reducing to a principal).  One might use
  2523.    this form to assign attributes to an object (a file, a web page, an
  2524.    executable program, ...).
  2525.  
  2526.  
  2527.  
  2528. 4.3.2.2.3 <sec-key>
  2529.  
  2530.    <sec-key>:: "(" "secret-key" <sec-sig-alg-id> <s-expr>* <uri>? ")" ;
  2531.  
  2532.    A secret key can also be a Principal, in the formal sense, but we do
  2533.    not permit it to appear explicitly in an <issuer> for obvious
  2534.    reasons.  Most likely, a <cert> using a secret key will use the hash
  2535.    of the key, so that the cert could be published.  In that case, the
  2536.    builder of <sec-key> may be well advised to include a (nonce ...)
  2537.    field, unused by the secret-key algorithm but hiding any key value
  2538.    from brute force searches via the published hash value.
  2539.  
  2540.    It is also possible to have split secret keys, as is popular in some
  2541.    banking applications:  e.g.,
  2542.  
  2543.    (secret-key des3-split-4
  2544.    (a #ba1c9bd4#) (b #e747105c#) (c #7f62536b#) (d #0fa235f9#)
  2545.    )
  2546.  
  2547.    could define a 2-key triple-DES key, in four parts.  This key could
  2548.    be split among 4 different parties, via the S-expressions:
  2549.  
  2550.    (secret-key des3-split-4 (a #ba1c9bd4#) (nonce #5b30e629#) )
  2551.    (secret-key des3-split-4 (b #e747105c#) (nonce #a5e71fe3#) )
  2552.    (secret-key des3-split-4 (c #7f62536b#) (nonce #3c317d99#) )
  2553.    (secret-key des3-split-4 (d #0fa235f9#) (nonce #7597d39e#) )
  2554.  
  2555.    and each of those 4 partial keys could be given to a different party
  2556.    to hold, together with a certificate referring to the part by its
  2557.    hash, verifying its authenticity and its intended mode of use.  That
  2558.  
  2559.  
  2560.  
  2561.  
  2562. Ellison, et al.                                                [Page 45]
  2563.  
  2564. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2565.  
  2566.  
  2567.    certificate might also include a key serial number as part of its tag
  2568.    field.
  2569.  
  2570.  
  2571.  
  2572. 4.3.2.2.4 <keyholder>
  2573.  
  2574.    <keyholder>:: "(" "keyholder" <principal> ")" ;
  2575.  
  2576.    This form of subject refers to the flesh and blood (or iron and
  2577.    silicon) holder of the referenced key.  A <cert> with such a subject
  2578.    is saying something about that person or machine -- such as its
  2579.    location, its address, its age, its weight, its height, its picture,
  2580.    ....
  2581.  
  2582.  
  2583.  
  2584. 4.3.2.3 <subject-loc>
  2585.  
  2586.    <subject-loc>:: "(" "subject-info" <uri>* ")" ;
  2587.  
  2588.    This optional field might give the location of SDSI name cert servers
  2589.    to help the prover (the client code), which is building a list of
  2590.    certs to present to the verifier, to find those certs.
  2591.  
  2592.  
  2593.  
  2594. 4.3.3 Tag algebra
  2595.  
  2596.    This extension to bare-bones SPKI/SDSI provides a means for
  2597.    expressing sets of permissions (or ranges of parameters) so that a
  2598.    standard, simple algorithm in the verifier can intersect tag fields
  2599.    of two adjacent <certs> to yield the permission of the combination.
  2600.    When a verifier is equipped to do tag algebra using "*-forms", as we
  2601.    expect standard verifiers to be, cert chains can be expressed which
  2602.    delegate only a sub-portion of one's permissions.
  2603.  
  2604.    When composing certificate chains, the tag fields are automatically
  2605.    intersected by a standard intersection algorithm.  The user does not
  2606.    have to specify an intersection algorithm for his tags, but he does
  2607.    have to write his tags in such a way that the standard intersection
  2608.    algorithm gives the desired behavior.
  2609.  
  2610.  
  2611.  
  2612.  
  2613.  
  2614.  
  2615.  
  2616.  
  2617.  
  2618.  
  2619. Ellison, et al.                                                [Page 46]
  2620.  
  2621. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2622.  
  2623.  
  2624. 4.3.3.1 *-forms
  2625.  
  2626.    An S-expression of the form ( * ... ) is called a "*-form".
  2627.  
  2628.    An S-expression that does not contain any *-forms (at any level) is
  2629.    called a "*-free" S-expression.  (Byte strings are *-free.)  *-free
  2630.    S-expressions are significant because we assume that elementary
  2631.    authorizations (permissions, or rights) are expressed as *-free S-
  2632.    expressions.  The simplest form of a certificate has a tag that is
  2633.    *-free.  [Bare-bones SPKI/SDSI certs have *-free tags.]
  2634.  
  2635.    The intersection of two *-free S-expressions s1 and s2 is either s1
  2636.    (if s1 and s2 are identical), or null otherwise.
  2637.  
  2638.    Other S-expressions are called "variable" S-expressions.
  2639.  
  2640.    Every S-expression (T) (*-free or not) is understood to represent a
  2641.    set m(T) of *-free S-expressions.  Each of those *-free tags has a
  2642.    meaning and that meaning is defined by the verifier code.
  2643.  
  2644.    A variable S-expression may represent a large set of *-free S-
  2645.    expressions.  The use of *-forms allows one to denote such a set
  2646.    efficiently.
  2647.  
  2648.    Issuing a certificate with tag T (i.e. with field (tag T)) has the
  2649.    same effect as issuing a separate certificate with tag T' for every
  2650.    element T' of m(T).  That is, the elements of m(T) are assumed to
  2651.    have meanings which are permissions or capabilities and the meaning
  2652.    of m(T) is the union of the permissions of the elements of m(T).
  2653.  
  2654.    A certificate chain with tags T1, ..., Tk reduces to a result
  2655.    certificate with a meaning that is the intersection of
  2656.    m(T1),...,m(Tk).
  2657.  
  2658.  
  2659.  
  2660. 4.3.3.1.1 Sets of S-expressions
  2661.  
  2662.    Here are some simple *-forms, operating on whole S-expressions:
  2663.  
  2664.    (*)   whose meaning is the set of all S-expressions
  2665.    (* null)  whose meaning is the empty set
  2666.    (* set s1 ... sk) whose meaning is just the union of the meanings
  2667.    m(s1), ..., m(sk)
  2668.    (* intersect s1 ... sk) whose meaning is just the intersection of the
  2669.    meanings m(s1),...,m(sk)
  2670.  
  2671.    The (* null) expression is unlikely to occur in a certificate tag,
  2672.  
  2673.  
  2674.  
  2675.  
  2676. Ellison, et al.                                                [Page 47]
  2677.  
  2678. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2679.  
  2680.  
  2681.    but is useful to have as part of the algebra of *-forms.  The (*
  2682.    intersect) form is also not expected to occur in a certificate.  It
  2683.    is defined for completeness.  [In some cases, it can ease the
  2684.    programming of the *-form intersection software by permitting it to
  2685.    postpone an intersection.  This is because it is always easy to
  2686.    intersect a *-free form with a *-form and the final result of a
  2687.    verification step is almost certainly a *-free form.]
  2688.  
  2689.  
  2690.    One can also build sets of S-expressions by reordering, adding or
  2691.    deleting parts:
  2692.  
  2693.    ( * append s ) -- represents all S-expressions that can be obtained
  2694.    by appending additional elements to the end of list s.
  2695.  
  2696.    Example:
  2697.    T1 =  ( tag ( * append ( ftp "abc.com" )))
  2698.    allows there to be additional elements at the end of the ftp list
  2699.    after "abc.com".
  2700.  
  2701.    ( * reorder s )
  2702.    ( * reorder-insert s )
  2703.    ( * reorder-delete s )
  2704.    These represent the set of S-expressions you can get from s by re-
  2705.    ordering the elements of s (other than the first) and possibly
  2706.    inserting new elements, or deleting some elements (other than the
  2707.    first).
  2708.  
  2709.    For example, (* reorder (rsa (n #44#)(e #03#))) allows the n and e
  2710.    fields to be given in either order.
  2711.  
  2712.    Or, the meaning of (* reorder-insert (a (b "4")(c "5"))) includes (a
  2713.    d (c "5") e f (g "23") (b "4"))
  2714.  
  2715.    The (* reorder) family of constructs is good when the elements of the
  2716.    list are indexed by keywords or list type, rather than by position,
  2717.    while the (* append) construct is good for positional tag forms.
  2718.  
  2719.  
  2720.  
  2721. 4.3.3.1.2 S-expressions with *-form parts
  2722.  
  2723.    An s-expression can be written that is not a *-form, but which
  2724.    contains *-forms:
  2725.  
  2726.    Let s denote the list
  2727.           (s1 s2 ... sk)  (where s1 is not *)
  2728.    Then m(s) is the set
  2729.  
  2730.  
  2731.  
  2732.  
  2733. Ellison, et al.                                                [Page 48]
  2734.  
  2735. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2736.  
  2737.  
  2738.           { ( t1 ... tk ) : each ti is an element of m(si) }
  2739.    That is, the meaning of a list is the cross product of the meanings
  2740.    of its elements.
  2741.  
  2742.    For example:
  2743.      if   s    = ( W (* set a b) (* set c d e) )
  2744.      then m(s) = { (W a c) (W a d) (W a e) (W b c) (W b d) (W b e) }
  2745.  
  2746.    If s is the list (s1 ... sk) and s' is the list (s1' ... sk') (where
  2747.    s1 and s1' are not *), then
  2748.      (* intersect s s')
  2749.    has the same meaning as
  2750.      ((* intersect s1 s1') ... (* intersect sk sk'))
  2751.    The meaning of an intersection of lists is the list of intersections
  2752.    of their meaning.
  2753.  
  2754.  
  2755.    [example] Consider the tag
  2756.           T1 = (tag (spend-from "45123"))
  2757.    Here 45123 is an account number at the bank.  Since this is *-free,
  2758.    the intersection of T1 with the tags from other certificates in a
  2759.    certificate chain can only yield either T1 or (* null).
  2760.  
  2761.    Consider now the variable S-expression of the form
  2762.           T2 = (tag (spend-from (* set "45123" "11112")))
  2763.    This is intended to denote an authorization to spend from either
  2764.    account 45123 or account 11112.
  2765.  
  2766.    Alice can delegate to Bob the authority to spend from either account
  2767.    using tag T2, and Bob can delegate to Charles the ability to spend
  2768.    from account 45123 only using tag T1.  This works properly
  2769.    automatically, since
  2770.           (* intersect T1 T2) =  T1
  2771.    because
  2772.           (* intersect tag tag) = tag
  2773.           (* intersect spend-from spend-from) = spend-from
  2774.           (* intersect "45123" (* set "45123" "11112")) = "45123"
  2775.  
  2776.    Here are two simple *-forms representing sets of byte strings:
  2777.  
  2778.    (* prefix "abc")        -- represents the set of byte strings having
  2779.    "abc" as a prefix.
  2780.  
  2781.    Example of use:
  2782.    T1 = (tag (http (* prefix "http://abc.com/")))
  2783.    This can be automatically intersected with
  2784.    T2 = (tag (http (* prefix "http://abc.com/accounting")))
  2785.    to yield
  2786.  
  2787.  
  2788.  
  2789.  
  2790. Ellison, et al.                                                [Page 49]
  2791.  
  2792. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2793.  
  2794.  
  2795.    T2 = (tag (http (* prefix "http://abc.com/accounting")))
  2796.  
  2797.    (* range <order> <lower-limit>? <upper-limit>? )
  2798.    where <order> is one of "alpha", "numeric", "time" or "binary" and
  2799.    <lower-limit> ::= (<ge-or-geq> <byte-string>)
  2800.    <ge-or-geq> ::= "g" | "ge" ;
  2801.    <upper-limit> ::= (<le-or-leq> <byte-string>)
  2802.    <le-or-leq> ::= "l" | "le"
  2803.    "alpha" restricts the set to byte strings, with left-justified
  2804.    comparisons
  2805.    "numeric" restricts the set to ASCII strings representing positive or
  2806.    negative numbers (possibly with a decimal point and following digits)
  2807.    "time" restricts the set to ASCII strings representing times (apart
  2808.    from their dates)
  2809.    "binary" restricts the set to binary strings representing numbers,
  2810.    that is byte strings with right-justified comparisons and sign taken
  2811.    from the most significant bit.
  2812.  
  2813.  
  2814.    Examples of use:
  2815.      T1 = (tag (spend-amount (* range numeric (l "5000")) USD ))
  2816.    authorizes someone to spend up to 5000 US dollars.
  2817.  
  2818.    T2 = (tag (login cybercash.com cme (time (* range time (ge
  2819.    "04:00:00") (le "12:00:00")))))
  2820.    authorizes the keyholder to login on cybercash.com as user cme during
  2821.    the hours 4 am to noon UTC.
  2822.  
  2823.  
  2824.  
  2825. 4.3.3.1.3 *-form reduction
  2826.  
  2827.    It is possible to recursively work out the intersections for tags
  2828.    using *-forms in an automatic manner.  For example, the intersection
  2829.    of
  2830.  
  2831.    (tag (spend (amount (* range numeric (l "5000"))) (account (* set
  2832.    "12345" "67890")) (* reorder-insert (for socks shirt pants))))
  2833.  
  2834.    and
  2835.  
  2836.    (tag (spend (amount (* range numeric (l "1000"))) (account (* set
  2837.    "87654" "12345")) (for tie pants socks belt shirt)))
  2838.  
  2839.    is
  2840.  
  2841.    (tag (spend (amount (* range numeric (l "1000"))) (account "12345")
  2842.    (for tie pants socks belt shirt)))
  2843.  
  2844.  
  2845.  
  2846.  
  2847. Ellison, et al.                                                [Page 50]
  2848.  
  2849. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2850.  
  2851.  
  2852.    Note that *-forms can be used to get the effect of multiple tags per
  2853.    certificate; a certificate with tag
  2854.  
  2855.    ( tag ( * set T1 T2 ... Tk ) )
  2856.  
  2857.    is entirely equivalent to a set of separate certificates with tag
  2858.    fields T1, T2, etc.  However, we should point out that if too many
  2859.    permissions are accumulated in a single certificate, then the
  2860.    certificate itself forms a kind of dossier on the keyholder which
  2861.    might be considered a privacy violation.
  2862.  
  2863.  
  2864.  
  2865.  
  2866. 4.3.3.2 <tag> *-form BNF
  2867.  
  2868.    The *-form algebra above is expressed in BNF as:
  2869.  
  2870.    <tag>:: "(" "tag" <tag-body>  ")" ;
  2871.  
  2872.    <tag-body>:: <simple-tag> | <list-set> ;
  2873.  
  2874.    <list-set>:: <impl-list-set> | <list-union> | <list-intersect> |
  2875.    <misc-set> ;
  2876.  
  2877.    <impl-list-set>:: "(" "*" <list-set-type> <tag-body> ")" ;
  2878.  
  2879.    <list-set-type>:: "append" | "reorder" | "reorder-insert" | "reorder-
  2880.    delete" ;
  2881.  
  2882.    <list-union>:: "(" "*" "set" <tag-body>* ")" ;
  2883.  
  2884.    <list-intersect>:: "(" "*" "intersect" <tag-body>* ")" ;
  2885.  
  2886.    <misc-set>:: <all-set> | <null-set> ;
  2887.  
  2888.    <all-set>:: "(" "*" ")" ;
  2889.  
  2890.    <null-set>:: "(" "*" "null" ")" ;
  2891.  
  2892.    <simple-tag>:: "(" <byte-string> <tag-param>* ")" ;
  2893.  
  2894.    <tag-param>:: <s-part> | <string-set> ;
  2895.  
  2896.    <string-set>:: <prefix-set> | <range-set> | <string-union> | <string-
  2897.    intersect> | <misc-set> ;
  2898.  
  2899.    <prefix-set>:: "(" "*" "prefix" <byte-string> ")" ;
  2900.  
  2901.  
  2902.  
  2903.  
  2904. Ellison, et al.                                                [Page 51]
  2905.  
  2906. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2907.  
  2908.  
  2909.    <range-set>:: "(" "*" "range" <range-ordering> <low-lim>? <up-lim>?
  2910.    ")" ;
  2911.  
  2912.    <range-ordering>:: "alpha" | "numeric" | "time" | "binary" ;
  2913.  
  2914.    <low-lim>:: <gte> <byte-string> ;
  2915.  
  2916.    <gte>:: "g" | "ge" ;
  2917.  
  2918.    <up-lim>:: <lte> <byte-string> ;
  2919.  
  2920.    <lte>:: "l" | "le" ;
  2921.  
  2922.    <string-union>:: "(" "*" "set" <byte-string>* ")" ;
  2923.  
  2924.    <string-intersect>:: "(" "*" "intersect" <byte-string>* ")" ;
  2925.  
  2926.  
  2927.  
  2928.  
  2929. 4.3.4 Threshold subjects
  2930.  
  2931.    A threshold subject, introduced by Tatu Ylonen for SPKI and by Rivest
  2932.    and Lampson in SDSI 1.0, specifies N subjects for a certificate or
  2933.    ACL entry, of which K must agree before the permission is passed
  2934.    along.
  2935.  
  2936.    The actual intent is to insure that there are K distinct paths
  2937.    passing permission between the verifier's ACL and the prover's
  2938.    request.  These multiple paths branch and re-join, so the k-of-n
  2939.    construct could theoretically be part of either the Subject or the
  2940.    Issuer.  Since an ACL might want to specify these multiple paths (and
  2941.    an ACL has no Issuer) and since a cert is  signed by a single Issuer,
  2942.    we have chosen to specify the branching at the Subject.
  2943.  
  2944.    A certificate or ACL with a k-of-n Subject does not delegate
  2945.    permission to any of those subjects, alone.  Only if at least K of
  2946.    the N subjects show certificate paths which converge on a single
  2947.    target Subject during reduction, is that permission transmitted to
  2948.    the target.  If fewer than K such paths can be shown, then the
  2949.    permission is blocked.
  2950.  
  2951.    The first reaction is that this is far from simple.  However, it is
  2952.    extremely useful.  It has been demanded by a number of initial
  2953.    customers of SPKI certificates.  It also solves a number of sticky
  2954.    political problems.  This section lays out the specification of K-of-
  2955.    N subjects.  The rules for reducing 5-tuples containing such entries
  2956.    are given below in Section 7.
  2957.  
  2958.  
  2959.  
  2960.  
  2961. Ellison, et al.                                                [Page 52]
  2962.  
  2963. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  2964.  
  2965.  
  2966. 4.3.4.1 Examples
  2967.  
  2968.    Examples of the use of K-of-N permission propagation include:
  2969.  
  2970.  
  2971.    1.  co-signing of electronic corporate checks or purchase orders
  2972.        above a certain amount
  2973.  
  2974.    2.  establishing the root DNSSEC key, bypassing the political battles
  2975.        which would inevitably ensue if one country were to hold *the*
  2976.        root key for the entire world.  The same goes for any root key.
  2977.  
  2978.    3.  establishing a root key for a trusted service, via multiple
  2979.        algorithms.  That is, one could have three root keys, using RSA,
  2980.        DSA and Elliptic Curve signature algorithms (for example), and
  2981.        require that two of them yield a valid chain.  This way, if
  2982.        someone were to break an entire algorithm (find a way to invert
  2983.        the algorithm), much less if someone were to break one key in the
  2984.        set of three, the root remains securely established.  At the same
  2985.        time, there is fault tolerance.  In case one of the keys is
  2986.        revoked, the following certificates remain empowered.
  2987.  
  2988.    4.  using online and off-line issuers.  One could have a permission
  2989.        established by an off-line key issuing a long-lived certificate
  2990.        and echoed by an online automated server, issuing short-lived
  2991.        certificates.  The delegation of this permission could require
  2992.        both before the eventual subject gets the permission.  This can
  2993.        be achieved through the use of (online ) tests in a long-lived
  2994.        certificate, but the K-of-N subject mechanism may be cleaner.
  2995.  
  2996.    5.  ultra-secure applications.  There are many applications which
  2997.        follow the nuclear weapons launch scenario.  That is, multiple
  2998.        agreement is required before the permission is granted.
  2999.  
  3000.  
  3001.  
  3002.  
  3003. 4.3.4.2 Definition
  3004.  
  3005.    <subj-thresh>:: "(" "k-of-n" <k-val> <n-val> <subj-obj>* ")" ;
  3006.  
  3007.    where the first int is K and the second is N, K < N, and there are N
  3008.    <subj-obj> subjects listed.
  3009.  
  3010.    The processing of certs and ACLs (therefore 5-tuples) using k-of-n
  3011.    subjects is presented below in section 7.5.
  3012.  
  3013.  
  3014.  
  3015.  
  3016.  
  3017.  
  3018. Ellison, et al.                                                [Page 53]
  3019.  
  3020. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3021.  
  3022.  
  3023. 5. Examples
  3024.  
  3025.    The <tag> fields listed here are not meant to be an exhaustive list
  3026.    of all possible <tag>s.  Such is not possible.  The final arbiter of
  3027.    what needs to be an <tag> and what parameters a particular <tag>
  3028.    needs is the designer of the code which verifies a certificate, e.g.,
  3029.    to grant access.  Listed here are <tag> fields we suspect might be
  3030.    useful and we present these here as a guide to the developer's
  3031.    imagination.
  3032.  
  3033.  
  3034.  
  3035. 5.1 ftp tag
  3036.  
  3037.    (tag (ftp cybercash.com cme ))
  3038.  
  3039.    This <tag> indicates that the Subject has permission to do FTP into
  3040.    host cybercash.com as user cme.
  3041.  
  3042.  
  3043.  
  3044. 5.2 http tag
  3045.  
  3046.    (tag (http http://acme.com/company-private/personnel/ ))
  3047.  
  3048.    This <tag> gives the Subject permission to access web pages which
  3049.    start with the given URI.
  3050.  
  3051.  
  3052.  
  3053. 5.3 telnet tag
  3054.  
  3055.    (tag (telnet clark.net cme ))
  3056.  
  3057.    This <tag> gives the Subject permission to telnet into host clark.net
  3058.    as user cme.
  3059.  
  3060.  
  3061.  
  3062. 5.4 Public Key Protected File System tags
  3063.  
  3064.    (tag (pkpfs //<host-name>/<path> <access> ))
  3065.    (tag (pkpfs (* prefix //<host-name>/<path>/) <access> ))
  3066.  
  3067.    refers to a hypothetical distributed file system whose access is
  3068.    controlled by public key challenge/response.  The first form gives
  3069.    access to a single file or a small set of files (by use of "*" in the
  3070.    file name) while the second form gives access to an entire sub-
  3071.  
  3072.  
  3073.  
  3074.  
  3075. Ellison, et al.                                                [Page 54]
  3076.  
  3077. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3078.  
  3079.  
  3080.    directory.
  3081.  
  3082.    <access> is a (* set ...) whose elements are chosen from:
  3083.    (read) (write) (append) (delete) (execute)
  3084.  
  3085.  
  3086.  
  3087. 5.5 Authority to spend money
  3088.  
  3089.    (tag (spend <bank> <account> (* range le <amount> )))
  3090.  
  3091.    indicates that the subject has authority to authorize spending up to
  3092.    <amount> per electronic check from <account> at <bank>.
  3093.  
  3094.  
  3095.  
  3096. 5.6 Process Server cert
  3097.  
  3098.    A process server certificate, mentioned in Section 3.5.5.2, might
  3099.    have the form:
  3100.  
  3101.    (cert
  3102.     (issuer (hash md5 |u2kl73MiObh5o1zkGmHdbA==|))
  3103.     (subject (keyholder (hash md5 |kuXyqx8jYWdZ/j7Vffr+yg==| key2-pub)))
  3104.     (tag (tracking-fee "150" USD))
  3105.     (not-after "2003-01-01_00:00:00")
  3106.    )
  3107.  
  3108.    {KDQ6Y2VydCg2Omlzc3Vlcig0Omhhc2gzOm1kNTE2OrtpJe9zIjm4eaNc5Bp
  3109.    h3WwpKSg3OnN1YmplY3QoOTprZXlob2xkZXIoNDpoYXNoMzptZDUxNjqS5fK
  3110.    rHyNhZ1n+PtV9+v7KODprZXkyLXB1YikpKSgzOnRhZygxMjp0cmFja2luZy1
  3111.    mZWUzOjE1MDM6VVNEKSkoOTpub3QtYWZ0ZXIxOToyMDAzLTAxLTAxXzAwOjA
  3112.    wOjAwKSk=}
  3113.  
  3114.    noting in its tag field that it will serve papers on the indicated
  3115.    Keyholder for a tracking fee of $150 until the beginning of 2003.
  3116.  
  3117.  
  3118.  
  3119. 5.7 PICS-like ratings cert
  3120.  
  3121.    (cert
  3122.     (issuer (hash md5 |Ut9m14byPzdbCNZWdDjNQg==|))
  3123.     (subject
  3124.      (object-hash
  3125.       (hash md5 |vN6ySKWE9K6T6cP9U5wntA==|
  3126.        http://www.clark.net/pub/cme/home.html)))
  3127.     (tag (ratings (sex "0") (violence "0") (crypto "6"))))
  3128.  
  3129.  
  3130.  
  3131.  
  3132. Ellison, et al.                                                [Page 55]
  3133.  
  3134. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3135.  
  3136.  
  3137.    {KDQ6Y2VydCg2Omlzc3Vlcig0Omhhc2gzOm1kNTE2OlLfZteG8j83WwjWVnQ
  3138.    4zUIpKSg3OnN1YmplY3QoMTE6b2JqZWN0LWhhc2goNDpoYXNoMzptZDUxNjq
  3139.    83rJIpYT0rpPpw/1TnCe0Mzg6aHR0cDovL3d3dy5jbGFyay5uZXQvcHViL2N
  3140.    tZS9ob21lLmh0bWwpKSkoMzp0YWcoNzpyYXRpbmdzKDM6c2V4MTowKSg4OnZ
  3141.    pb2xlbmNlMTowKSg2OmNyeXB0bzE6NikpKSk=}
  3142.  
  3143.  
  3144.  
  3145. 5.8 Virus checking cert
  3146.  
  3147.    (cert
  3148.     (issuer (hash md5 |Ut9m14byPzdbCNZWdDjNQg==|))
  3149.     (subject
  3150.      (object-hash
  3151.       (hash md5 |szKSlSK+SNzIsHH3wjAsTQ==| runemacs.exe)))
  3152.     (tag virus-free))
  3153.  
  3154.    {KDQ6Y2VydCg2Omlzc3Vlcig0Omhhc2gzOm1kNTE2OlLfZteG8j83WwjWVnQ
  3155.    4zUIpKSg3OnN1YmplY3QoMTE6b2JqZWN0LWhhc2goNDpoYXNoMzptZDUxNjq
  3156.    zMpKVIr5I3MiwcffCMCxNMTI6cnVuZW1hY3MuZXhlKSkpKDM6dGFnMTA6dml
  3157.    ydXMtZnJlZSkp}
  3158.  
  3159.  
  3160.  
  3161. 5.9 Full sequence, with donation cert
  3162.  
  3163.    For one full example of a real certificate, the following sequence
  3164.    presents the public key used, calls for the verifier to hash it (and
  3165.    store it away, to be referred to later by its hash), gives a
  3166.    certificate body and then a signature (which by side-effect calls for
  3167.    the previous object to be stored and hashed by the signature
  3168.    algorithm's hash function).  The example used is a temporary donation
  3169.    cert.
  3170.  
  3171.    (sequence
  3172.     (public-key
  3173.      rsa-pkcs1-md5
  3174.      (e #03#)
  3175.      (n
  3176.       |AKMbo+VBqLu+90l2UuuGquzxLIXpqIypkSkrfEVprA0K2Vfm5ufmNZG3
  3177.       0yWqdnXlxdGuyyBglj+FloXTrqHWSQQJfvTv5EMBz+icJ2GMbjtP1zCY8
  3178.       krmchh5v/O3BntEwaq1hkMtmP+ZeFjI5yQ/YC2vVc5K1PTy+GOSP+xvYK
  3179.       C1|))
  3180.     (do hash md5)
  3181.     (cert
  3182.      (issuer (hash md5 |Z4a6hysK/0qN0L5SFkcJFQ==|))
  3183.      (subject
  3184.       (keyholder (hash md5 |Z4a6hysK/0qN0L5SFkcJFQ==|)))
  3185.  
  3186.  
  3187.  
  3188.  
  3189. Ellison, et al.                                                [Page 56]
  3190.  
  3191. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3192.  
  3193.  
  3194.      (tag
  3195.       (*
  3196.        set
  3197.        (name "Carl M. Ellison")
  3198.        (street "207 Grindall St.")
  3199.        (city "Baltimore MD 21230-4103")))
  3200.      (not-after "1997-08-15_00:00:00"))
  3201.     (signature
  3202.      (hash md5 |PC4M1LNpkMHtgacc73ch5A==|)
  3203.      (hash md5 |Z4a6hysK/0qN0L5SFkcJFQ==| cme.key)
  3204.      |PQkhssqNW191aVwNR9DflDQemWf/E2maSdIk/5GulzRB7cjagEn9FqI9J
  3205.      vGOTkqT5miJmsFx9pY5nXQxp+tJZdwLYeSEA3iAzjcwBY1qG+DQqpWu2AC
  3206.      JqSnnKmo6kh8KbbySNtCbpguNJs2WM/eRBdkph/AUjTkqe0Xnv/mKEXA=|
  3207.      ))
  3208.  
  3209.    with canonical form encoded in base 64:
  3210.  
  3211.    {KDg6c2VxdWVuY2UoMTA6cHVibGljLWtleTEzOnJzYS1wa2NzMS1tZDUoMTp
  3212.    lMToDKSgxOm4xMjk6AKMbo+VBqLu+90l2UuuGquzxLIXpqIypkSkrfEVprA0
  3213.    K2Vfm5ufmNZG30yWqdnXlxdGuyyBglj+FloXTrqHWSQQJfvTv5EMBz+icJ2G
  3214.    MbjtP1zCY8krmchh5v/O3BntEwaq1hkMtmP+ZeFjI5yQ/YC2vVc5K1PTy+GO
  3215.    SP+xvYKC1KSkoMjpkbzQ6aGFzaDM6bWQ1KSg0OmNlcnQoNjppc3N1ZXIoNDp
  3216.    oYXNoMzptZDUxNjpnhrqHKwr/So3QvlIWRwkVKSkoNzpzdWJqZWN0KDk6a2V
  3217.    5aG9sZGVyKDQ6aGFzaDM6bWQ1MTY6Z4a6hysK/0qN0L5SFkcJFSkpKSgzOnR
  3218.    hZygxOiozOnNldCg0Om5hbWUxNTpDYXJsIE0uIEVsbGlzb24pKDY6c3RyZWV
  3219.    0MTY6MjA3IEdyaW5kYWxsIFN0LikoNDpjaXR5MjM6QmFsdGltb3JlIE1EIDI
  3220.    xMjMwLTQxMDMpKSkoOTpub3QtYWZ0ZXIxOToxOTk3LTA4LTE1XzAwOjAwOjA
  3221.    wKSkoOTpzaWduYXR1cmUoNDpoYXNoMzptZDUxNjo8LgzUs2mQwe2BpxzvdyH
  3222.    kKSg0Omhhc2gzOm1kNTE2OmeGuocrCv9KjdC+UhZHCRU3OmNtZS5rZXkpMTI
  3223.    4Oj0JIbLKjVtfdWlcDUfQ35Q0Hpln/xNpmknSJP+Rrpc0Qe3I2oBJ/RaiPSb
  3224.    xjk5Kk+ZoiZrBcfaWOZ10MafrSWXcC2HkhAN4gM43MAWNahvg0KqVrtgAiak
  3225.    p5ypqOpIfCm28kjbQm6YLjSbNljP3kQXZKYfwFI05KntF57/5ihFwKSk=}
  3226.  
  3227.  
  3228.  
  3229.  
  3230.  
  3231.  
  3232.  
  3233.  
  3234.  
  3235.  
  3236.  
  3237.  
  3238.  
  3239.  
  3240.  
  3241.  
  3242.  
  3243.  
  3244.  
  3245.  
  3246. Ellison, et al.                                                [Page 57]
  3247.  
  3248. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3249.  
  3250.  
  3251. 6. On-line test reply formats
  3252.  
  3253.    Given here is the BNF for on-line test replies.  This section does
  3254.    not give details of protocols for connecting to online servers or
  3255.    transmitting messages between them.  It is assumed that, for example,
  3256.    the requester can provide a URI and use HTTP, while the URI includes
  3257.    any parameters the requester needs to pass along.  The reply from the
  3258.    on-line source will be in canonical form, according to the BNF given
  3259.    below.  If a protocol is used other than HTTP, the (online ...)
  3260.    object includes optional <s-part> fields which can be used to hold
  3261.    parameters for those tests (e.g., indicating which certificate is of
  3262.    interest, how to authenticate to the server, etc.).
  3263.  
  3264.  
  3265.  
  3266. 6.1 CRL and delta-CRL
  3267.  
  3268.    The full or delta CRL is:
  3269.  
  3270.    <crl>:: "(" "crl" <version> <hash-list> <valid> ")" ;
  3271.  
  3272.    <hash-list>:: "(" "canceled" <hash>* ")" ;
  3273.  
  3274.    <delta-crl>:: "(" "delta-crl" <version> <hash-of-crl> <hash-list>
  3275.    <valid> ")" ;
  3276.  
  3277.    <hash-of-crl>:: <hash> ;
  3278.  
  3279.    and should be signed by the principal indicated in the (online...)
  3280.    field which directed the CRL to be fetched.
  3281.  
  3282.    The CRL request can be a straight HTTP transaction, using the URI
  3283.    provided in the cert, but we do not specify online protocols in this
  3284.    draft.
  3285.  
  3286.    If the verifier has a complete CRL, then it can provide the hash of
  3287.    that CRL in whatever protocol is chosen and get back just the
  3288.    additions to the previous CRL, in the form of a <delta-crl>
  3289.  
  3290.  
  3291.  
  3292. 6.2 Revalidation
  3293.  
  3294.    <reval>:: "(" "reval" <version> <subj-hash> <valid> ")" ;
  3295.  
  3296.    <subj-hash>:: "(" "cert" <hash> ")" ;
  3297.  
  3298.    This construct specifies the hash of the current cert as <subj-hash>
  3299.  
  3300.  
  3301.  
  3302.  
  3303. Ellison, et al.                                                [Page 58]
  3304.  
  3305. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3306.  
  3307.  
  3308.    and gives a new validity period for that cert.  It should be signed
  3309.    by the <principal> indicated in the (online...) field which directed
  3310.    it to be fetched.
  3311.  
  3312.    The reval request can be a straight HTTP transaction, using the URI
  3313.    provided in the (online...) field, but we do not specify online
  3314.    protocols in this draft.
  3315.  
  3316.  
  3317.  
  3318. 6.3 One-time revalidation
  3319.  
  3320.    For one-time revalidation, the verifier itself must fetch the (reval
  3321.    ) record, which will have the form:
  3322.  
  3323.    <reval>:: "(" "reval" <version> <subj-hash> <one-valid> ")" ;
  3324.  
  3325.    <one-valid>:: "(" "one-time" <byte-string> ")" ;
  3326.  
  3327.    with the byte string inside <one-valid> being one provided by the
  3328.    caller, expected to be unique over time and unguessable -- e.g., a
  3329.    large random number or random number plus sequence number.  This
  3330.    reply should be signed by the <principal> indicated in the (online..)
  3331.    field which directed it to be fetched.
  3332.  
  3333.    This result, if successful, yields a Validity value for the 5-tuple
  3334.    of "now".
  3335.  
  3336.  
  3337.  
  3338.  
  3339.  
  3340.  
  3341.  
  3342.  
  3343.  
  3344.  
  3345.  
  3346.  
  3347.  
  3348.  
  3349.  
  3350.  
  3351.  
  3352.  
  3353.  
  3354.  
  3355.  
  3356.  
  3357.  
  3358.  
  3359.  
  3360. Ellison, et al.                                                [Page 59]
  3361.  
  3362. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3363.  
  3364.  
  3365. 7. 5-Tuple Reduction (full)
  3366.  
  3367.    This section describes the operation of the trust evaluation
  3368.    machinery assumed to be part of every verifier which accepts SPKI
  3369.    certificates.  The inputs to that trust engine are 5-tuples and any
  3370.    kind of certificate, not just SPKI, as well as Access Control List
  3371.    (ACL) entries can be translated to 5-tuples so that they can all
  3372.    participate in the trust engine decision process.
  3373.  
  3374.    A 5-tuple is an internal construct and therefore best described by a
  3375.    programming language data structure.  A separate document will give
  3376.    the 5-tuple reduction code and those data structures.
  3377.  
  3378.    For this purpose, we describe the content in BNF, but want to make
  3379.    sure that a 5-tuple will never be expressed in canonical BNF form,
  3380.    transmitted in that form, etc.  The <5-tuple> differs from a <cert>
  3381.    by leaving out some fields and by augmenting the possibilities for
  3382.    <issuer>.  This latter is because there are intermediate states in
  3383.    which the issuer holds a full SDSI name -- a state not allowed in
  3384.    normal <cert>.
  3385.  
  3386.  
  3387.  
  3388. 7.1 <5-tuple> BNF
  3389.  
  3390.    A 5-tuple is a positional construct of the form:
  3391.  
  3392.    <5-tuple>:: <issuer5> <subject5> <deleg5> <tag-body5> <valid5> ;
  3393.  
  3394.    <issuer5>:: <key5> | <fq-name5> | "self" ;
  3395.  
  3396.    <subject5>:: <key5> | <fq-name5> | <obj-hash> | <keyholder> |
  3397.    <threshold-subj> ;
  3398.  
  3399.    <deleg5>:: "t" | "f" ;
  3400.  
  3401.    <key5>:: <pub-key> | <sec-key> ;
  3402.  
  3403.    <fq-name5>:: "(" "name" <key5> <names> ")" ;
  3404.  
  3405.    <valid5>:: <valid> | "null" ;
  3406.  
  3407.    <tag-body5>:: <tag-body> | "null" ;
  3408.  
  3409.    Standard implementations are expected to store keys (and other bulky
  3410.    things) only once and refer to them by pointer.  This permits us to
  3411.    use keys directly rather than hashes of keys while doing 5-tuple
  3412.    reduction.  This also permits us to reduce certs which used the same
  3413.  
  3414.  
  3415.  
  3416.  
  3417. Ellison, et al.                                                [Page 60]
  3418.  
  3419. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3420.  
  3421.  
  3422.    key but referred to it by different hash algorithms.
  3423.  
  3424.    The extra option for issuer, "self", is provided for ACL entries.
  3425.    The self referred to is the verifier, holding that ACL and doing the
  3426.    verification of offered proofs.
  3427.  
  3428.    The only 5-tuples which mean anything to the verifier, after
  3429.    reduction is done, are those with "self" as issuer.
  3430.  
  3431.  
  3432.  
  3433. 7.2 Bare-bones case
  3434.  
  3435.    A bare-bones SPKI cert is reduced as described above in section
  3436.    3.3.1.  The only issuer and subject fields allowed are principals
  3437.    which are keys.  The tag fields a_i are *-free S-expressions or the
  3438.    form (tag *).
  3439.  
  3440.    <i1,s1,d1,a1,v1> + <i2,s2,d2,a2,v2> yields <i1,s2,d2,a,v> if:
  3441.     s1 = i2
  3442.     d1 = "t"
  3443.     a = (* intersect a1 a2)
  3444.     v = the intersection of v1 and v2
  3445.  
  3446.    Validity intersection involves normal intersection of date ranges, if
  3447.    there are not-before or not-after fields in v1 or v2, and union of
  3448.    on-line tests, if those are present in v1 or v2.  Each on-line test
  3449.    includes a validity period, so there is a resulting validity interval
  3450.    in terms of dates.  This can include the string "now", as the product
  3451.    of a one-time on-line test result.  "now" intersects with any date
  3452.    range including the present to yield "now".  If v is an empty time
  3453.    interval, then the certificates don't reduce.
  3454.  
  3455.    a = (* intersect a1 a2) in the bare-bones case is given by the
  3456.    following rules:
  3457.  
  3458.    If a1 is (tag (*)), a = a2.
  3459.  
  3460.    If a2 is (tag (*)), a = a1.
  3461.  
  3462.    If a1 == a2, a = a2.
  3463.  
  3464.    Otherwise, a = (* null) and the 5-tuple doesn't reduce.
  3465.  
  3466.  
  3467.  
  3468.  
  3469.  
  3470.  
  3471.  
  3472.  
  3473.  
  3474. Ellison, et al.                                                [Page 61]
  3475.  
  3476. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3477.  
  3478.  
  3479. 7.3 Intersection of *-form tag sets
  3480.  
  3481.    The intersection of *-forms was presented above in section 4.3.3.1 by
  3482.    way of examples.  The full rules are presented below.  Via these
  3483.    rules any (tag)s can be intersected, but in actual practice it will
  3484.    probably be the case that intersection will start with a *-free form
  3485.    which will yield a *-free form for all intermediate results.
  3486.    However, for theoretical completeness, the following rules are
  3487.    provided:
  3488.  
  3489.    S, T: *-free S-expressions, assumed unequal
  3490.    A, B, C, D, E, F: byte-strings, assumed unequal in display type,
  3491.                       string value or both
  3492.    U, V, X, Y, Z: any S-expression (*-free or *-form)
  3493.  
  3494.    X . Y = Y . X
  3495.  
  3496.    A . A = A
  3497.    A . B = (* null)
  3498.    A . U = (* null)
  3499.    U . U = U
  3500.    S . T = (* null)
  3501.  
  3502.    Y . (* set X_1 ... X_n) = (* set Y.X_1 ... Y.X_n)
  3503.  
  3504.    Y . (* intersect X_1 ... X_n) = (* intersect X_1 ... X_n Y)
  3505.                            = (* intersect Y.X_1 ... Y.X_n)
  3506.                      /* depending on which looks more productive */
  3507.                      /* do the second form if one of those becomes */
  3508.                      /* (* null) or if Y is *-free */
  3509.  
  3510.    (* set (* null) X_1 ... X_n) = (* set X_1 ... X_n)
  3511.    (* set (*) X_1 ... X_n ) = (*)
  3512.    (* intersect (* null) X_1 ... X_n) = (* null)
  3513.    (* intersect (*) X_1 ... X_n) = (* intersect X_1 ... X_n)
  3514.    (* set X) = X
  3515.    (* intersect X) = X
  3516.    (* intersect X X Y_1 ... Y_n) = (* intersect X Y_1 ... Y_n)
  3517.    (* set X X Y_1 ... Y_n) = (* set X Y_1 ... Y_n)
  3518.  
  3519.    Both (* set) and (* intersect) are fully commutative, therefore any
  3520.    (* null) in a (* intersect) turns the whole result (* null) and any
  3521.    (* null) in a (* set) can be deleted, for example.
  3522.  
  3523.    X . (*) = X
  3524.    X . (* null) = (* null)
  3525.  
  3526.  
  3527.  
  3528.  
  3529.  
  3530.  
  3531. Ellison, et al.                                                [Page 62]
  3532.  
  3533. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3534.  
  3535.  
  3536. 7.3.1 Reduction to (* null) by data type mismatch
  3537.  
  3538.    If a byte-string is intersected with a list, the result is (* null).
  3539.    Some *-forms are of one data type or the other, so this can lead to
  3540.    reductions to (* null) at a high level.  Specifically,
  3541.  
  3542.    (* prefix ...)
  3543.    (* range ...)
  3544.  
  3545.    are always byte strings, while
  3546.  
  3547.    (* append)
  3548.    (* reorder)
  3549.    (* reorder-insert)
  3550.    (* reorder-delete)
  3551.  
  3552.    are always lists.
  3553.  
  3554.  
  3555.  
  3556. 7.3.2 Specific intersections
  3557.  
  3558.    U . (* append X) = U if X is a prefix of U
  3559.  
  3560.    U . (* reorder X) = U if X is a reordering of U
  3561.  
  3562.    U . (* reorder-insert X) = U if X is a reordering of a subset of U
  3563.  
  3564.    U . (* reorder-delete X) = U if X is a reordering of a superset of U
  3565.  
  3566.    A . (* prefix B) = A if B is an initial substring of A and has the
  3567.                    same display hint as A
  3568.  
  3569.    A . (* range ...) = A if A is contained within the specified range
  3570.               and the range limits have the same display hints as A
  3571.  
  3572.    (* append X) . (* append Y) = (* append Y) if X a prefix of Y
  3573.                    or (* append X) if Y is a prefix of X
  3574.                    or (* null)
  3575.  
  3576.    (* reorder X) . (* reorder Y) = (* reorder X) if Y is a reordering
  3577.                                                     of X
  3578.  
  3579.    (* reorder X) . (* reorder-insert Y) = (* reorder X) if Y is a
  3580.                                reordering of a subset of X
  3581.  
  3582.    (* reorder X) . (* reorder-delete Y) = (* reorder X) if Y is a
  3583.                                reordering of a superset of X
  3584.  
  3585.  
  3586.  
  3587.  
  3588. Ellison, et al.                                                [Page 63]
  3589.  
  3590. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3591.  
  3592.  
  3593.    (* reorder-insert X) . (* reorder-insert Y) = (* reorder-insert X)
  3594.                            if Y is a reordering of a subset of X
  3595.  
  3596.    (* reorder-delete X) . (* reorder-delete Y) = (* reorder-delete X)
  3597.                           if Y is a reordering of a superset of X
  3598.  
  3599.  
  3600.    (* prefix A) . (* prefix B) = (* prefix A) if B is a prefix of A
  3601.  
  3602.    (* range A B) . (* range C D) = (* range E F) by intersection of
  3603.                                               the two linear ranges
  3604.  
  3605.  
  3606.  
  3607. 7.3.3 Deferred intersections
  3608.  
  3609.    Note that in every case it is legal to express
  3610.           X . Y as (* intersect X Y)
  3611.    if another rule for intersection would involve a great deal of work
  3612.    or if no rule is given.  For example, intersection of sets could
  3613.    produce a huge set, with no real benefit, assuming that an eventual
  3614.    *-free form will yield a single element from each set.
  3615.  
  3616.  
  3617.  
  3618. 7.4 Reduction of SDSI names
  3619.  
  3620.    By the rules for bare-bones SPKI 5-tuple reduction,
  3621.  
  3622.    <i1,s1,d1,a1,v1> + <i2,s2,d2,a2,v2> yields <i1,s2,d2,a,v> if:
  3623.     s1 = i2
  3624.     d1 = "t"
  3625.  
  3626.    For the purpose of this section, we consider only the first two
  3627.    elements of the 5-tuple: the issuer and subject.  We also modify the
  3628.    interpretation of d1 (to incorporate the so-called "stop at key"
  3629.    condition).
  3630.  
  3631.    <i1,s1> + <i2,s2> yields <i1,s2> if:
  3632.     s1 = i2
  3633.     (d1 = "t") OR (s1 is a name rather than a key)
  3634.  
  3635.    With the introduction of SDSI names, both Issuer and Subject names
  3636.    are mapped to fully qualified SDSI names:
  3637.  
  3638.    (name <key> N_1 .. N_k)
  3639.  
  3640.    where k can be 0, in which case we have (name <key>).
  3641.  
  3642.  
  3643.  
  3644.  
  3645. Ellison, et al.                                                [Page 64]
  3646.  
  3647. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3648.  
  3649.  
  3650.    An Issuer inside a cert always maps to a single name or single <key>
  3651.    while a Subject may have a SDSI name chain longer than 1.
  3652.  
  3653.    The introduction of SDSI names causes this reduction rule to be
  3654.    modified to become:
  3655.  
  3656.    <i1,s1> + <i2,s2> yields <i3,s3>
  3657.  
  3658.    Consider the general case:
  3659.  
  3660.    <(name k1 r_1 .. r_s),(name k2 n_1 .. n_m)>
  3661.     + <(name k2 n_1 .. n_p),(name k3 t_1 .. t_u)>
  3662.  
  3663.    where n_i is assumed to be the same on both sides of the + operator.
  3664.  
  3665.    If m = p, then the reduction is:
  3666.  
  3667.    <(name k1 r_1 .. r_s),(name k3 t_1 .. t_u)>
  3668.  
  3669.    If m > p, the reduction is:
  3670.  
  3671.    <(name k1 r_1 .. r_s),(name k3 t_1 .. t_u n_{p+1} .. n_m)>
  3672.  
  3673.    If m < p, the reduction is:
  3674.  
  3675.    <(name k1 r_1 .. r_s n_{m+1} .. n_p), (name k3 t_1 .. t_u)>
  3676.  
  3677.    The following sections give some examples to illustrate this
  3678.    procedure.
  3679.  
  3680.  
  3681.  
  3682. 7.4.1 Simple SDSI name reduction
  3683.  
  3684.    The most basic SDSI case is the definition of a single name as a key:
  3685.  
  3686.    <(name k1 fred),(name k2)>
  3687.  
  3688.    One can then do the reduction:
  3689.  
  3690.    <i3, (name k1 fred sam)>
  3691.      + <(name k1 fred),(name k2)> = <i3,(name k2 sam)>
  3692.  
  3693.  
  3694.  
  3695.  
  3696.  
  3697.  
  3698.  
  3699.  
  3700.  
  3701.  
  3702. Ellison, et al.                                                [Page 65]
  3703.  
  3704. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3705.  
  3706.  
  3707. 7.4.2 SDSI name composition with subject name growth
  3708.  
  3709.    One is not limited to define local names as keys.  They can be
  3710.    defined as other names.  For example,
  3711.  
  3712.    <(name k1 fred), (name k2 joe brother)>
  3713.  
  3714.    which would lead to the "reduction":
  3715.  
  3716.    <i3, (name k1 fred sam)>
  3717.     + <(name k1 fred), (name k2 joe brother)>
  3718.      = <i3, (name k2 joe brother sam)>
  3719.  
  3720.    With this form of SDSI name definition allowed, any flood-style
  3721.    5-tuple reduction software must be careful to detect and not allow
  3722.    infinite loops of names.  Current plans for 5-tuple reduction call
  3723.    for the prover to drive the verifier with a fixed sequence, in which
  3724.    case this is not an issue.
  3725.  
  3726.  
  3727.  
  3728. 7.4.3 SDSI Name composition with issuer name growth
  3729.  
  3730.    It is possible to imagine a pairing of 5-tuples in which the issuer
  3731.    name grows beyond 1 name.  Start with the three 2-tuples:
  3732.  
  3733.    <(name k4),(name k1 alice joe)>
  3734.     + <(name k1 alice), (name k2)>
  3735.     + <(name k2 joe), (name k3)>
  3736.  
  3737.    If we group the reduction from the left, we get
  3738.  
  3739.    <(name k4), (name k2 joe)>
  3740.     + <(name k2 joe), (name k3)> = <(name k4),(name k3)>
  3741.  
  3742.    However, if we group from the right, we get
  3743.  
  3744.    <(name k1 alice), (name k2)>
  3745.     + <(name k2 joe), (name k3)> = <(name k1 alice joe), (name k3)>
  3746.  
  3747.    and
  3748.  
  3749.    <(name k4),(name k1 alice joe)>
  3750.     + <(name k1 alice joe), (name k3)> = <(name k4),(name k3)>
  3751.  
  3752.    The result is the same, but there is an intermediate result in which
  3753.    the issuer name grows.  As in the previous example, we will need to
  3754.    be careful to make sure to detect and prohibit infinite loops of name
  3755.  
  3756.  
  3757.  
  3758.  
  3759. Ellison, et al.                                                [Page 66]
  3760.  
  3761. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3762.  
  3763.  
  3764.    growth in this case.
  3765.  
  3766.  
  3767.  
  3768. 7.5 Reduction of (subject (threshold ..))
  3769.  
  3770.    There are at least two ways to reduce a set of certificates including
  3771.    a (subject (threshold ...)): from left to right and from right to
  3772.    left.
  3773.  
  3774.  
  3775.  
  3776. 7.5.1 Left-to-right
  3777.  
  3778.    One plan for processing of k-of-n subjects introduces new opcodes for
  3779.    the (do ...) construct.  Let us assume K=7 and N=12.  We assume a
  3780.    primary "stack" for 5-tuples which never exceeds a depth of 2 for
  3781.    other reductions, but needs to be a real stack for this one.
  3782.  
  3783.    (cert ... (k-of-n ...))
  3784.  
  3785.    arrives and is held on a separate stack.
  3786.  
  3787.    (do subject #01#)
  3788.  
  3789.    pulls a copy of the k-of-n cert from the separate stack and activates
  3790.    subject #1.  So, the k-of-n 5-tuple acts like a normal, single-
  3791.    subject 5-tuple.  It acquires a record noting which subject is
  3792.    active, so that at eventual reduction time, the code can verify that
  3793.    K different subjects were used.
  3794.  
  3795.    Normal 5-tuple reduction proceeds until the reduced subject field is
  3796.    the merge point of these K separate threads of certificates.  Then
  3797.    the opcode
  3798.  
  3799.    (do subject #02#)
  3800.  
  3801.    brings one copy of the k-of-n 5-tuple from the top of the auxiliary
  3802.    stack and selects another subject.  At this point, another thread can
  3803.    be reduced to the common (merge-point) subject.
  3804.  
  3805.    Whenever two threads have been reduced to 5-tuples on the primary
  3806.    stack, the opcode
  3807.  
  3808.    (do k-of-n)
  3809.  
  3810.    merges the top 2 items of the primary 5-tuple stack, verifying that
  3811.    their reduced subjects are equal and intersecting their tag and
  3812.  
  3813.  
  3814.  
  3815.  
  3816. Ellison, et al.                                                [Page 67]
  3817.  
  3818. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3819.  
  3820.  
  3821.    validity fields.  At the end of the K thread reductions, the final
  3822.  
  3823.    (do k-of-n)
  3824.  
  3825.    yields the final result 5-tuple from the K different threads.  At
  3826.    this point,
  3827.  
  3828.    (do pop-aux)
  3829.  
  3830.    pops the k-of-n 5-tuple from the auxiliary stack.
  3831.  
  3832.  
  3833.  
  3834. 7.5.2 Right-to-left
  3835.  
  3836.    If we choose to process k-of-n certs right-to-left, then all K cert
  3837.    threads to the right of the k-of-n cert are processed first.  This
  3838.    requires the opcode:
  3839.  
  3840.    (do push)
  3841.  
  3842.    to move the current (R-to-L) 5-tuple result to the top of the
  3843.    auxiliary stack.
  3844.  
  3845.    (do copy)
  3846.  
  3847.    copies the current 5-tuple from the top of the auxiliary stack to the
  3848.    top of the normal stack  and normal cert processing proceeds, up to
  3849.    the point where the k-of-n cert would be required.  At this point,
  3850.    another
  3851.  
  3852.    (do copy)
  3853.  
  3854.    fetches another copy of the right end of this thread (the merge
  3855.    point) and another cert thread is processed.
  3856.  
  3857.    When all K threads are processed, the k-of-n cert is presented, the
  3858.    auxiliary stack is popped, and the k-of-n cert combines with the K
  3859.    5-tuples on the stack below it, to yield a single 5-tuple or a "null"
  3860.    result.  At this point, each of the K 5-tuples on the stack below the
  3861.    k-of-n cert will have to have the same subject field and an issuer
  3862.    field to match one of the k-of-n cert's subject fields.
  3863.  
  3864.  
  3865.  
  3866.  
  3867.  
  3868.  
  3869.  
  3870.  
  3871.  
  3872.  
  3873. Ellison, et al.                                                [Page 68]
  3874.  
  3875. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3876.  
  3877.  
  3878. 8. Full BNF
  3879.  
  3880.    In the BNF to follow, top level constructs are: <sequence>, <cert>,
  3881.    <pub-key>, <signature>.
  3882.  
  3883.  
  3884.    <acl-entry>:: <subj-obj>* <deleg>? <tag> <valid>? <comment>? ;
  3885.  
  3886.    <acl>:: "(" "acl" <version>? <acl-entry>* ")" ;
  3887.  
  3888.    <all-set>:: "(" "*" ")" ;
  3889.  
  3890.    <byte-string>:: <bytes> | <display-type> <bytes> ;
  3891.  
  3892.    <bytes>:: <decimal> ":" {binary byte string of that length} ;
  3893.  
  3894.    <cert-display>:: "(" "display" <byte-string> ")" ;
  3895.  
  3896.    <cert>:: "(" "cert" <version>? <cert-display>? <issuer> <issuer-loc>?
  3897.    <subject> <subject-loc>? <deleg>? <tag> <valid>? <comment>? ")" ;
  3898.  
  3899.    <comment>::  "(" "comment" <byte-string> ")" ;
  3900.  
  3901.    <date>:: <byte-string> ;
  3902.  
  3903.    <ddigit>:: "0" | <nzddigit> ;
  3904.  
  3905.    <decimal>:: <nzddigit> <ddigit>* ;
  3906.  
  3907.    <deleg>:: "(" "propagate" ")" ;
  3908.  
  3909.    <display-type>:: "[" <bytes> "]" ;
  3910.  
  3911.    <fq-name>:: "(" "name" <principal> <names> ")" ;
  3912.  
  3913.    <general-op>:: "(" "do" <byte-string> <s-part>* ")" ;
  3914.  
  3915.    <gte>:: "g" | "ge" ;
  3916.  
  3917.    <hash-alg-name>:: "md5" | "sha1" | <uri> ;
  3918.  
  3919.    <hash-of-key>:: <hash> ;
  3920.  
  3921.    <hash-op>:: "(" "do" "hash" <hash-alg-name> ")" ;
  3922.  
  3923.    <hash-value>:: <byte-string> ;
  3924.  
  3925.    <hash>:: "(" "hash" <hash-alg-name> <hash-value> <uri>? ")" ;
  3926.  
  3927.  
  3928.  
  3929.  
  3930. Ellison, et al.                                                [Page 69]
  3931.  
  3932. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3933.  
  3934.  
  3935.    <impl-list-set>:: "(" "*" <list-set-type> <tag-body> ")" ;
  3936.  
  3937.    <issuer-loc>:: "(" "issuer-info" <uri>* ")" ;
  3938.  
  3939.    <issuer-name>:: <principal> | <simple-name> ;
  3940.  
  3941.    <issuer>:: "(" "issuer" <issuer-name> ")" ;
  3942.  
  3943.    <k-val>:: <byte-string> ;  a binary integer
  3944.  
  3945.    <keyholder>:: "(" "keyholder" <principal> ")" ;
  3946.  
  3947.    <list-intersect>:: "(" "*" "intersect" <tag-body>* ")" ;
  3948.  
  3949.    <list-set-type>:: "append" | "reorder" | "reorder-insert" | "reorder-
  3950.    delete" ;
  3951.  
  3952.    <list-set>:: <impl-list-set> | <list-union> | <list-intersect> |
  3953.    <misc-set> ;
  3954.  
  3955.    <list-union>:: "(" "*" "set" <tag-body>* ")" ;
  3956.  
  3957.    <low-lim>:: <gte> <byte-string> ;
  3958.  
  3959.    <lte>:: "l" | "le" ;
  3960.  
  3961.    <misc-set>:: <all-set> | <null-set> ;
  3962.  
  3963.    <n-val>:: <byte-string> ; /* the number of <subj-obj> to follow */
  3964.  
  3965.    <name>:: <relative-name> | <fq-name> ;
  3966.  
  3967.    <names>:: <byte-string> | <names> <byte-string> ;
  3968.  
  3969.    <not-after>:: "(" "not-after" <date> ")" ;
  3970.  
  3971.    <not-before>:: "(" "not-before" <date> ")" ;
  3972.  
  3973.    <null-set>:: "(" "*" "null" ")" ;
  3974.  
  3975.    <nzddigit>:: "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
  3976.  
  3977.    <obj-hash>:: "(" "object-hash" <hash> ")" ;
  3978.  
  3979.    <online-test>:: "(" "online" <online-type> <uri> <principal> <s-
  3980.    part>* ")" ;
  3981.  
  3982.    <online-type>:: "crl" | "reval" | "one-time" ;
  3983.  
  3984.  
  3985.  
  3986.  
  3987. Ellison, et al.                                                [Page 70]
  3988.  
  3989. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  3990.  
  3991.  
  3992.    <op>:: <hash-op> | <general-op> ;
  3993.  
  3994.    <prefix-set>:: "(" "*" "prefix" <byte-string> ")" ;
  3995.  
  3996.    <principal>:: <pub-key> | <hash-of-key> ;
  3997.  
  3998.    <priv-key>:: "(" "private-key" <pub-sig-alg-id> <s-expr>* <uri>? ")"
  3999.    ;
  4000.  
  4001.    <pub-key>:: "(" "public-key" <pub-sig-alg-id> <s-expr>* <uri>? ")" ;
  4002.  
  4003.    <pub-sig-alg-id>:: "rsa-pkcs1-md5" | "rsa-pkcs1-sha1" | "dsa-sha1" |
  4004.    <uri> ;
  4005.  
  4006.    <range-ordering>:: "alpha" | "numeric" | "time" | "binary" ;
  4007.  
  4008.    <range-set>:: "(" "*" "range" <range-ordering> <low-lim>? <up-lim>?
  4009.    ")" ;
  4010.  
  4011.    <relative-name>:: "(" "name" <names> ")" ;
  4012.  
  4013.    <s-expr>:: "(" <byte-string> <s-part>* ")" ;
  4014.  
  4015.    <s-part>:: <byte-string> | <s-expr> ;
  4016.  
  4017.    <sec-key>:: "(" "secret-key" <sec-sig-alg-id> <s-expr>* <uri>? ")" ;
  4018.  
  4019.    <sec-sig-alg-id>:: "hmac-md5" | "hmac-sha1" | "des-cbc-mac" | <uri> ;
  4020.  
  4021.    <seq-ent>:: <cert> | <pub-key> | <signature> | <op> ;
  4022.  
  4023.    <sequence>:: "(" "sequence" <seq-ent>* ")" ;
  4024.  
  4025.    <sig-val>:: <s-part> ;
  4026.  
  4027.    <signature>:: "(" "signature" <hash> <principal> <sig-val> ")" ;
  4028.  
  4029.    <simple-name>:: "(" "name" <principal> <byte-string> ")" ;
  4030.  
  4031.    <simple-tag>:: "(" <byte-string> <tag-param>* ")" ;
  4032.  
  4033.    <string-intersect>:: "(" "*" "intersect" <byte-string>* ")" ;
  4034.  
  4035.    <string-set>:: <prefix-set> | <range-set> | <string-union> | <string-
  4036.    intersect> | <misc-set> ;
  4037.  
  4038.    <string-union>:: "(" "*" "set" <byte-string>* ")" ;
  4039.  
  4040.  
  4041.  
  4042.  
  4043.  
  4044. Ellison, et al.                                                [Page 71]
  4045.  
  4046. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  4047.  
  4048.  
  4049.    <subj-obj>:: <principal> | <name> | <obj-hash> | <sec-key> |
  4050.    <keyholder> | <threshold-subj> ;
  4051.  
  4052.    <subject-loc>:: "(" "subject-info" <uri>* ")" ;
  4053.  
  4054.    <subject>:: "(" "subject" <subj-obj> ")" ;
  4055.  
  4056.    <tag-body>:: <simple-tag> | <list-set> ;
  4057.  
  4058.    <tag-param>:: <s-part> | <string-set> ;
  4059.  
  4060.    <tag>:: "(" "tag" "*" ")" | "(" "tag" <tag-body>  ")" ;
  4061.  
  4062.    <threshold-subj>:: "(" "k-of-n" <k-val> <n-val> <subj-obj>* ")" ;
  4063.  
  4064.    <up-lim>:: <lte> <byte-string> ;
  4065.  
  4066.    <uri>:: <byte-string> ;
  4067.  
  4068.    <valid>:: <not-before>? <not-after>? <online-test>? ;
  4069.  
  4070.    <version>:: "(" "version" <byte-string> ")" ;
  4071.  
  4072.  
  4073.  
  4074.  
  4075.  
  4076.  
  4077.  
  4078.  
  4079.  
  4080.  
  4081.  
  4082.  
  4083.  
  4084.  
  4085.  
  4086.  
  4087.  
  4088.  
  4089.  
  4090.  
  4091.  
  4092.  
  4093.  
  4094.  
  4095.  
  4096.  
  4097.  
  4098.  
  4099.  
  4100.  
  4101. Ellison, et al.                                                [Page 72]
  4102.  
  4103. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  4104.  
  4105.  
  4106. Closed Issues
  4107.  
  4108.  
  4109.      1) Should we require that all certificates be signed by both Issuer
  4110.         and Subject, when the Subject reduces to a key?  [When the
  4111.         Subject is a non-key object, it can't sign.]
  4112.  
  4113.              [Answer: no.  Signing by the Subject can not be prevented
  4114.              so it can be used if a need arises, but at present no
  4115.              security enhancement is seen to come from Subject signing.
  4116.              This seems to address the concerns of lawyers only.]
  4117.  
  4118.      2) Can the Signature object support blind signatures with
  4119.         algorithms other than RSA?
  4120.  
  4121.              [Answer: yes -- any algorithm which supports blind
  4122.              signatures can be used here.]
  4123.  
  4124.      3) Should we eliminate the final ":" in field names?  These are
  4125.         always the first names in a list and the ":" seems to be a
  4126.         carry-over from RFC822 without a real purpose.
  4127.  
  4128.              [Answer: yes.]
  4129.  
  4130.      4) Should we continue to lump public key algorithm, hash algorithm
  4131.         and padding algorithm together in one pub-key-name?  This could
  4132.         lead to an explosion of names.  Of course, on the other hand
  4133.         this might reduce the number of competing algorithm/hash/pad
  4134.         mixes and simplify code.
  4135.  
  4136.              [Answer: no.  There are a number of proposals for
  4137.              expressing the components of a signature verification
  4138.              algorithm and one should settle out by the week after the
  4139.              April IETF meeting.]
  4140.  
  4141.              [Revised answer: yes, for now.  Each of those proposals had
  4142.              a complication or flaw and we need to get this draft
  4143.              solidified.]
  4144.  
  4145.      5) Should the delegation parameter be integer or boolean?
  4146.  
  4147.              [Answer: boolean is all people want, except for the third
  4148.              value "stop-at-key" proposed by Ron Rivest.  It turns out
  4149.              that if delegate is false in a certificate with a SDSI name
  4150.              subject, then "stop-at-key" must be intended.]
  4151.  
  4152.      6) Are object names (e.g., "Issuer") case sensitive?
  4153.  
  4154.  
  4155.  
  4156.  
  4157.  
  4158. Ellison, et al.                                                [Page 73]
  4159.  
  4160. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  4161.  
  4162.  
  4163.              [Answer: yes.  All other strings are, so these byte strings
  4164.              should be also.  However, we decided to use all lower-case
  4165.              for object names that we define.]
  4166.  
  4167.      7) Should we allow multiple <tag>s in one cert?  It saves space and
  4168.         time, maybe, but could constitute a privacy threat and may
  4169.         complicate the cert reading code.
  4170.  
  4171.              [Answer: yes.  The (* set ..) mechanism makes it easy to
  4172.              specify without constituting a serious complication to the
  4173.              5-tuple reduction process.]
  4174.  
  4175.      8) How much can we specify the <online-test>?  Are there only a
  4176.         handful possible/desirable tests, that we can fully spell out,
  4177.         or do we need to leave that open for invention?
  4178.  
  4179.              [Answer: this draft includes full specification of online
  4180.              tests.]
  4181.  
  4182.      9) How many pre-defined <tag>s should we bother defining?
  4183.  
  4184.              [Answer: none should be cast in stone here -- only examples
  4185.              provided to spur the imagination of developers.]
  4186.  
  4187.     10) If the Subject is a hash of a Bundle of hashes of keys, does
  4188.         this mean that the cert applies to all keys in the bundle?
  4189.  
  4190.              [Answer: no -- although this is a discussion left to be
  4191.              addressed by the folks who sign web pages.]
  4192.  
  4193.     11) If the Subject is a hash of a file and the file contains hashes
  4194.         of other things, does the cert apply to the other things?
  4195.  
  4196.              [Answer: no, according to general opinion.  This is a more
  4197.              general issue which the community needs to consider.
  4198.              Perhaps W3C DSig will be the first to encounter examples of
  4199.              this in practice.]
  4200.  
  4201.     12) Do we want to include validity fields for private key dates, as
  4202.         was done with X.509v3?
  4203.  
  4204.              [Answer: not at this time and not in these certificates.
  4205.              An SPKI/SDSI certificate doesn't define a public key.  The
  4206.              public key is a primitive.  There remains open the question
  4207.              of whether we want keys to expire and, if so, what kind of
  4208.              a data structure we want to support key validity dates.
  4209.              The subject-info field can point to or yield such a
  4210.              structure, should we define one.]
  4211.  
  4212.  
  4213.  
  4214.  
  4215. Ellison, et al.                                                [Page 74]
  4216.  
  4217. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  4218.  
  4219.  
  4220.     13) How do we want to name algorithms?  One possibility is to define
  4221.         a few common ones (ones we want to encourage everyone to use for
  4222.         interoperability reasons) and allow others to be defined as URIs
  4223.         pointing to the definition of the algorithm.
  4224.  
  4225.              [Answer: we will choose short names and turn the process
  4226.              over to IANA, but allow URIs for user-defined algorithm
  4227.              names.  Presumably the URI will give a description of the
  4228.              algorithm and maybe even code to implement it.]
  4229.  
  4230.     14) Should we restore the explanation of [ECR] and define a <valid>
  4231.         field option for it?  This was removed from this draft in the
  4232.         interest of simplification.
  4233.  
  4234.              [Answer: there has been no request for its restoration.]
  4235.  
  4236.     15) Should we allow Object as an optional element of the Signature
  4237.         expression, or force that block to give the Object's hash?
  4238.  
  4239.              [Answer: this draft assumes that (signature ) contains only
  4240.              the object hash, not the object, in order to avoid the
  4241.              complexity of ASN.1's "SIGNED" macro and to permit multiple
  4242.              signatures on the same body without habit getting in the
  4243.              way.]
  4244.  
  4245.     16) Should we define an RSA signature algorithm with no hash and no
  4246.         padding, to hold verbatim objects being signed (assuming they
  4247.         are small enough)?
  4248.  
  4249.              [Answer: no.]
  4250.  
  4251.     17) What is the difference between the Member and Name <tag>?  Can
  4252.         they be combined into one?
  4253.  
  4254.              [Answer: these tags have disappeared with the use of names
  4255.              in the issuer field.]
  4256.  
  4257.     18) Should we restrict the <issuer> definition to preclude the
  4258.         possibility of the same cert body being signed by multiple keys
  4259.         as Issuer (which can happen when the <issuer> is a general SDSI
  4260.         name resolving to a key)?  If so, should we permit an <issuer>
  4261.         to be a group name, thus allowing the (Moi) <tag> to define SDSI
  4262.         group membership?
  4263.  
  4264.              [Answer: this is an irrelevant question under the current
  4265.              specification.]
  4266.  
  4267.  
  4268.  
  4269.  
  4270.  
  4271.  
  4272. Ellison, et al.                                                [Page 75]
  4273.  
  4274. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  4275.  
  4276.  
  4277.     19) [RLR] Should we replace the display info syntax [xxx] "yyy" with
  4278.         ( display-type xxx "yyy" ) ?
  4279.  
  4280.              [Answer: no.]
  4281.  
  4282.     20) [RLR] Should we have only one spelling of each object type?  If
  4283.         so, should it be the long or the short form?  Can we make such
  4284.         spellings short enough that they don't force line continuations
  4285.         while keeping them descriptive?
  4286.  
  4287.              [Answer: one spelling, preferably one English word (so that
  4288.              a user can look it up in a dictionary).]
  4289.  
  4290.     21) [CME] Are object types reserved words over the entire
  4291.         certificate body or are they to be non-conflicting only within
  4292.         their enclosing object?  [In the latter case, the ( Tag XXX ...
  4293.         ) object is to be considered to be of type "Tag XXX".]  That is,
  4294.         when we go into an object, do we acquire a new dictionary of
  4295.         object types relevant to the interior of that object or do we
  4296.         use a single global such dictionary?  [I believe we have to use
  4297.         local dictionaries, in order to allow distributed <tag>
  4298.         definition.]
  4299.  
  4300.              [Answer: object names have scope only within an object
  4301.              which defines them.]
  4302.  
  4303.     22) [RLR] Should we allow the Subject to optionally be the hash of
  4304.         some non-key object?  This could be seen as encroaching on the
  4305.         territory of signed PICS labels.
  4306.  
  4307.              [Answer: yes.  It's desirable enough and we don't want to
  4308.              force all tags into the form of a PICS rating.  On the +
  4309.              side, this permits the single trust management program to
  4310.              decide if a document or program is permitted to run.  On
  4311.              the - side, this doesn't help much with on-line access
  4312.              control protocols.]
  4313.  
  4314.     23) [RLR] Should we define another, non-cert object, ( assert .. ),
  4315.         to cover signed statements about non-keys?
  4316.  
  4317.              [Answer: no.]
  4318.  
  4319.     24) [RLR] Should we make a clear statement that the keys used in
  4320.         these certs are signature keys?  [[CME] I think that's
  4321.         understood from the fact that the only crypto we use is for
  4322.         signatures.]
  4323.  
  4324.              [Answer: yes -- this should be clear in the document.]
  4325.  
  4326.  
  4327.  
  4328.  
  4329. Ellison, et al.                                                [Page 76]
  4330.  
  4331. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  4332.  
  4333.  
  4334.     25) [RLR] Should we continue to use different object types for fq-
  4335.         name, rel-name and grp-name, or use "Ref" as the type and let
  4336.         the parameters determine which is intended?
  4337.  
  4338.              [Answer: no -- use "ref", although that is not an English
  4339.              word.  Re-answered: use "name" instead of "ref", because
  4340.              it's English.]
  4341.  
  4342.     26) [RLR] Should we define (keyholder <principal>) to mean the human
  4343.         or computer etc. who/which holds a private key, to be used in
  4344.         Subject lines?
  4345.  
  4346.              [Answer: yes.]
  4347.  
  4348.     27) [RLR] There are different cert-like entities, in that they all
  4349.         reduce to 5-tuples, but they may have different object names and
  4350.         slightly different BNF definitions:
  4351.         a) certificate -- subject is a <principal>
  4352.         b) assertion -- subject is a cyberspace object
  4353.         c) request -- (a kind of assertion)
  4354.         d) ACL entry -- issuer is missing
  4355.         e) auto-cert -- subject is (keyholder [of] <principal>)
  4356.  
  4357.              [Answer: call them all certificates, except ACL.  Request
  4358.              is a wide open term, so that is probably different from
  4359.              certificate also.  This draft includes a field in <cert>
  4360.              for a cert display type, so that the issuer can label the
  4361.              kind of cert.]
  4362.  
  4363.     28) [RLR, CME] As written now, it is inconsistent to have a name as
  4364.         a Subject in a cert with (delegate false).  RLR proposes that
  4365.         (delegate to-key) mean that propagation occurs through
  4366.         certificate sub-chains which have non-key subjects and stop when
  4367.         the subject is a key.
  4368.  
  4369.              [Answer: use to-key as an argument to delegate, but rename
  4370.              delegate to propagate.  Revised: (propagate) means
  4371.              delegate; lack of that field means "stop at key".]
  4372.  
  4373.     29) Should we extend <deleg> to permit a group name or key as a
  4374.         parameter, that being the group of principals allowed to
  4375.         delegate?
  4376.  
  4377.              [Answer: no -- too complicated.]
  4378.  
  4379.  
  4380.  
  4381.  
  4382.  
  4383.  
  4384.  
  4385.  
  4386. Ellison, et al.                                                [Page 77]
  4387.  
  4388. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  4389.  
  4390.  
  4391. Open Issues
  4392.  
  4393.  
  4394.      1) [RLR] Let's add a section to the I-D showing how each of the
  4395.         original SDSI constructs is handled in SPKI.  [[CME] We could
  4396.         also add a section for PICS labels, X.509 certs, PGP signed
  4397.         keys, ...]
  4398.  
  4399.  
  4400.      2) Should we start another draft to cover operation of a
  4401.         certificate server (as in SDSI 1.0) including protocols for
  4402.         communicating with it or should that discussion be in this
  4403.         draft?
  4404.  
  4405.      3) Should we start another draft to cover fully worked out examples
  4406.         of tags for real operations (e.g., FTP, HTTP) or let those be
  4407.         part of this draft?
  4408.  
  4409.      4) What kind of <cert-display> parameters might we want to allow?
  4410.         Do we want <cert-display> in the first place?
  4411.  
  4412.      5) [BL] Why not replace (* reorder-insert X) with
  4413.         (* reorder (* append X)) ?
  4414.  
  4415.      6) [CME] We need to specify (online..) protocols -- perhaps a
  4416.         variety of them (HTTP, socket connection, e-mail, ...).
  4417.  
  4418.  
  4419.  
  4420.  
  4421.  
  4422.  
  4423.  
  4424.  
  4425.  
  4426.  
  4427.  
  4428.  
  4429.  
  4430.  
  4431.  
  4432.  
  4433.  
  4434.  
  4435.  
  4436.  
  4437.  
  4438.  
  4439.  
  4440.  
  4441.  
  4442.  
  4443. Ellison, et al.                                                [Page 78]
  4444.  
  4445. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  4446.  
  4447.  
  4448. References
  4449.  
  4450.    [Ab97] Abadi, Martin, "On SDSI's Linked Local Name Spaces", to appear
  4451.    in the Proceedings of the 10th IEEE Computer Security Foundations
  4452.    Workshop (June 1997).
  4453.  
  4454.    [BFL] Matt Blaze, Joan Feigenbaum and Jack Lacy, "Distributed Trust
  4455.    Management", Proceedings 1996 IEEE Symposium on Security and Privacy.
  4456.  
  4457.    [CHAUM] D. Chaum, "Blind Signatures for Untraceable Payments",
  4458.    Advances in Cryptology -- CRYPTO '82, 1983.
  4459.  
  4460.    [DvH] J. B. Dennis and E. C. Van Horn, "Programming Semantics for
  4461.    Multiprogrammed Computations", Communications of the ACM 9(3), March
  4462.    1966
  4463.  
  4464.    [ECR] Silvio Micali, "Efficient Certificate Revocation", manuscript,
  4465.    MIT LCS.
  4466.  
  4467.    [HARDY] Hardy, Norman, "THE KeyKOS Architecture", Operating Systems
  4468.    Review, v.19 n.4, October 1985. pp 8-25.
  4469.  
  4470.    [IDENT] Carl Ellison, "Establishing Identity Without Certification
  4471.    Authorities", USENIX Security Symposium, July 1996.
  4472.  
  4473.    [IWG] McConnell and Appel, ``Enabling Privacy, Commerce, Security and
  4474.    Public Safety in the Global Information Infrastructure'', report of
  4475.    the Interagency Working Group on Cryptography Policy, May 12, 1996;
  4476.    (quote from paragraph 5 of the Introduction)
  4477.  
  4478.    [KEYKOS] Bomberger, Alan, et al., "The KeyKOS(r) Nanokernel
  4479.    Architecture", Proceedings of the USENIX Workshop on Micro-Kernels
  4480.    and Other Kernel Architectures, USENIX Association, April 1992. pp
  4481.    95-112 (In addition, there are KeyKOS papers on the net available
  4482.    through http://www.cis.upenn.edu/~KeyKOS/#bibliography)
  4483.  
  4484.    [LAMPSON] B. Lampson, M. Abadi, M. Burrows, and E. Wobber,
  4485.    "Authentication in distributed systems: Theory and practice", ACM
  4486.    Trans. Computer Systems 10, 4 (Nov.  1992), pp 265-310.
  4487.  
  4488.    [LANDAU] Landau, Charles, "Security in a Secure Capability-Based
  4489.    System", Operating Systems Review, Oct 1989 pp 2-4
  4490.  
  4491.    [LEVY] Henry M. Levy, "Capability-Based Computer Systems", Digital
  4492.    Press, 12 Crosby Dr., Bedford MA 01730, 1984
  4493.  
  4494.    [LINDEN] T. A. Linden, "Operating System Structures to Support
  4495.    Security and Reliable Software", Computing Surveys 8(4), December
  4496.  
  4497.  
  4498.  
  4499.  
  4500. Ellison, et al.                                                [Page 79]
  4501.  
  4502. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  4503.  
  4504.  
  4505.    1976.
  4506.  
  4507.    [PKCS1] PKCS #1: RSA Encryption Standard, RSA Data Security, Inc., 3
  4508.    June 1991, Version 1.4.
  4509.  
  4510.    [PKLOGIN] David Kemp, "The Public Key Login Protocol", working draft,
  4511.    06/12/1996.
  4512.  
  4513.    [RFC1321] R. Rivest, "The MD5 Message-Digest Algorithm", April 16
  4514.    1992.
  4515.  
  4516.    [RFC2045] N. Freed and N. Borenstein, "Multipurpose Internet Mail
  4517.    Extensions (MIME) Part One: Format of Internet Message Bodies", Dec 2
  4518.    1996.
  4519.  
  4520.    [RFC2046] N. Freed and N. Borenstein, "Multipurpose Internet Mail
  4521.    Extensions (MIME) Part Two: Media Types", Dec 2 1996.
  4522.  
  4523.    [RFC2047] K. Moore, "MIME (Multipurpose Internet Mail Extensions)
  4524.    Part Three: Message Header Extensions for Non-ASCII Text", Dec 2
  4525.    1996.
  4526.  
  4527.    [RFC2065] D. Eastlake and C. Kaufman, "Proposed Standard for DNS
  4528.    Security", Jan 1997.
  4529.  
  4530.    [RFC2104] H. Krawczyk, M. Bellare and R. Canetti, "HMAC: Keyed-
  4531.    Hashing for Message Authentication", Feb 1997.
  4532.  
  4533.    [SDSI] Ron Rivest and Butler Lampson, "SDSI - A Simple Distributed
  4534.    Security Infrastructure [SDSI]",
  4535.    http://theory.lcs.mit.edu/~cis/sdsi.html
  4536.  
  4537.    [SEXP] Ron Rivest, code and description of S-expressions,
  4538.    http://theory.lcs.mit.edu/~rivest/sexp.html .
  4539.  
  4540.    [SRC-070] Abadi, Burrows, Lampson and Plotkin, "A Calculus for Access
  4541.    Control in Distributed Systems", DEC SRC-070, revised August 28,
  4542.    1991.
  4543.  
  4544.  
  4545.  
  4546.  
  4547.  
  4548.  
  4549.  
  4550.  
  4551.  
  4552.  
  4553.  
  4554.  
  4555.  
  4556.  
  4557. Ellison, et al.                                                [Page 80]
  4558.  
  4559. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  4560.  
  4561.  
  4562. Authors' Addresses
  4563.  
  4564.    Carl M. Ellison
  4565.    CyberCash, Inc.
  4566.    207 Grindall Street
  4567.    Baltimore MD 21230-4103 USA
  4568.  
  4569.    Telephone:   +1 410-727-4288
  4570.                 +1 410-727-4293(FAX)
  4571.                 +1 703-620-4200(main office, Reston, Virginia, USA)
  4572.    EMail:       cme@cybercash.com
  4573.                 cme@acm.org
  4574.    Web:         http://www.clark.net/pub/cme
  4575.  
  4576.  
  4577.    Bill Frantz
  4578.    Electric Communities
  4579.    10101 De Anza Blvd.
  4580.    Cupertino CA 95014
  4581.  
  4582.    Telephone:   +1 408-342-9576
  4583.    Email:       frantz@netcom.com
  4584.  
  4585.  
  4586.    Butler Lampson
  4587.    Microsoft
  4588.    180 Lake View Ave
  4589.    Cambridge MA 02138
  4590.  
  4591.    Telephone:   +1 617-547-9580 (voice + FAX)
  4592.    EMail:       blampson@microsoft.com
  4593.  
  4594.  
  4595.    Ron Rivest
  4596.    Room 324, MIT Laboratory for Computer Science
  4597.    545 Technology Square
  4598.    Cambridge MA 02139
  4599.  
  4600.    Telephone:   +1-617-253-5880
  4601.                 +1-617-258-9738(FAX)
  4602.    Email:       rivest@theory.lcs.mit.edu
  4603.    Web:         http://theory.lcs.mit.edu/~rivest
  4604.  
  4605.  
  4606.    Brian Thomas
  4607.    Southwestern Bell
  4608.    One Bell Center, Room 23Q1
  4609.    St. Louis MO 63101 USA
  4610.  
  4611.  
  4612.  
  4613.  
  4614. Ellison, et al.                                                [Page 81]
  4615.  
  4616. INTERNET-DRAFT        Simple Public Key Certificate         29 July 1997
  4617.  
  4618.  
  4619.    Telephone:   +1 314-235-3141
  4620.                 +1 314-331-2755(FAX)
  4621.    EMail:       bt0008@entropy.sbc.com
  4622.  
  4623.  
  4624.    Tatu Ylonen
  4625.    SSH Communications Security Ltd.
  4626.    Tekniikantie 12
  4627.    FIN-02150 ESPOO
  4628.    Finland
  4629.  
  4630.    E-mail: ylo@ssh.fi
  4631.  
  4632.  
  4633.  
  4634. Expiration and File Name
  4635.  
  4636.    This draft expires 29 January 1998.
  4637.  
  4638.    Its file name is draft-ietf-spki-cert-structure-02.txt
  4639.  
  4640.  
  4641.  
  4642.  
  4643.  
  4644.  
  4645.  
  4646.  
  4647.  
  4648.  
  4649.  
  4650.  
  4651.  
  4652.  
  4653.  
  4654.  
  4655.  
  4656.  
  4657.  
  4658.  
  4659.  
  4660.  
  4661.  
  4662.  
  4663.  
  4664.  
  4665.  
  4666.  
  4667.  
  4668.  
  4669.  
  4670.  
  4671. Ellison, et al.                                                [Page 82]
  4672.