home *** CD-ROM | disk | FTP | other *** search
/ Internet Core Protocols / Oreilly-InternetCoreProtocols.iso / RFCs / rfc2704.txt < prev    next >
Encoding:
Text File  |  1999-10-14  |  80.1 KB  |  2,076 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                           M. Blaze
  8. Request for Comments: 2704                                 J. Feigenbaum
  9. Category: Informational                                     J. Ioannidis
  10.                                                     AT&T Labs - Research
  11.                                                             A. Keromytis
  12.                                                       U. of Pennsylvania
  13.                                                           September 1999
  14.  
  15.  
  16.              The KeyNote Trust-Management System Version 2
  17.  
  18. Status of this Memo
  19.  
  20.    This memo provides information for the Internet community.  It does
  21.    not specify an Internet standard of any kind.  Distribution of this
  22.    memo is unlimited.
  23.  
  24. Copyright Notice
  25.  
  26.    Copyright (C) The Internet Society (1999).  All Rights Reserved.
  27.  
  28. Abstract
  29.  
  30.    This memo describes version 2 of the KeyNote trust-management system.
  31.    It specifies the syntax and semantics of KeyNote `assertions',
  32.    describes `action attribute' processing, and outlines the application
  33.    architecture into which a KeyNote implementation can be fit.  The
  34.    KeyNote architecture and language are useful as building blocks for
  35.    the trust management aspects of a variety of Internet protocols and
  36.    services.
  37.  
  38. 1.  Introduction
  39.  
  40.    Trust management, introduced in the PolicyMaker system [BFL96], is a
  41.    unified approach to specifying and interpreting security policies,
  42.    credentials, and relationships; it allows direct authorization of
  43.    security-critical actions.  A trust-management system provides
  44.    standard, general-purpose mechanisms for specifying application
  45.    security policies and credentials.  Trust-management credentials
  46.    describe a specific delegation of trust and subsume the role of
  47.    public key certificates; unlike traditional certificates, which bind
  48.    keys to names, credentials can bind keys directly to the
  49.    authorization to perform specific tasks.
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58. Blaze, et al.                Informational                      [Page 1]
  59.  
  60. RFC 2704          The KeyNote Trust-Management System     September 1999
  61.  
  62.  
  63.    A trust-management system has five basic components:
  64.  
  65.    *  A language for describing `actions', which are operations with
  66.       security consequences that are to be controlled by the system.
  67.  
  68.    *  A mechanism for identifying `principals', which are entities that
  69.       can be authorized to perform actions.
  70.  
  71.    *  A language for specifying application `policies', which govern the
  72.       actions that principals are authorized to perform.
  73.  
  74.    *  A language for specifying `credentials', which allow principals to
  75.       delegate authorization to other principals.
  76.  
  77.    *  A `compliance checker', which provides a service to applications
  78.       for determining how an action requested by principals should be
  79.       handled, given a policy and a set of credentials.
  80.  
  81.    The trust-management approach has a number of advantages over other
  82.    mechanisms for specifying and controlling authorization, especially
  83.    when security policy is distributed over a network or is otherwise
  84.    decentralized.
  85.  
  86.    Trust management unifies the notions of security policy, credentials,
  87.    access control, and authorization.  An application that uses a
  88.    trust-management system can simply ask the compliance checker whether
  89.    a requested action should be allowed.  Furthermore, policies and
  90.    credentials are written in standard languages that are shared by all
  91.    trust-managed applications; the security configuration mechanism for
  92.    one application carries exactly the same syntactic and semantic
  93.    structure as that of another, even when the semantics of the
  94.    applications themselves are quite different.
  95.  
  96.    Trust-management policies are easy to distribute across networks,
  97.    helping to avoid the need for application-specific distributed policy
  98.    configuration mechanisms, access control lists, and certificate
  99.    parsers and interpreters.
  100.  
  101.    For a general discussion of the use of trust management in
  102.    distributed system security, see [Bla99].
  103.  
  104.    KeyNote is a simple and flexible trust-management system designed to
  105.    work well for a variety of large- and small-scale Internet-based
  106.    applications.  It provides a single, unified language for both local
  107.    policies and credentials.  KeyNote policies and credentials, called
  108.    `assertions', contain predicates that describe the trusted actions
  109.    permitted by the holders of specific public keys.  KeyNote assertions
  110.    are essentially small, highly-structured programs.  A signed
  111.  
  112.  
  113.  
  114. Blaze, et al.                Informational                      [Page 2]
  115.  
  116. RFC 2704          The KeyNote Trust-Management System     September 1999
  117.  
  118.  
  119.    assertion, which can be sent over an untrusted network, is also
  120.    called a `credential assertion'.  Credential assertions, which also
  121.    serve the role of certificates, have the same syntax as policy
  122.    assertions but are also signed by the principal delegating the trust.
  123.  
  124.    In KeyNote:
  125.  
  126.    *  Actions are specified as a collection of name-value pairs.
  127.  
  128.    *  Principal names can be any convenient string and can directly
  129.       represent cryptographic public keys.
  130.  
  131.    *  The same language is used for both policies and credentials.
  132.  
  133.    *  The policy and credential language is concise, highly expressive,
  134.       human readable and writable, and compatible with a variety of
  135.       storage and transmission media, including electronic mail.
  136.  
  137.    *  The compliance checker returns an application-configured `policy
  138.       compliance value' that describes how a request should be handled
  139.       by the application.  Policy compliance values are always
  140.       positively derived from policy and credentials, facilitating
  141.       analysis of KeyNote-based systems.
  142.  
  143.    *  Compliance checking is efficient enough for high-performance and
  144.       real-time applications.
  145.  
  146.    This document describes the KeyNote policy and credential assertion
  147.    language, the structure of KeyNote action descriptions, and the
  148.    KeyNote model of computation.
  149.  
  150.    We assume that applications communicate with a locally trusted
  151.    KeyNote compliance checker via a `function call' style interface,
  152.    sending a collection of KeyNote policy and credential assertions plus
  153.    an action description as input and accepting the resulting policy
  154.    compliance value as output.  However, the requirements of different
  155.    applications, hosts, and environments may give rise to a variety of
  156.    different interfaces to KeyNote compliance checkers; this document
  157.    does not aim to specify a complete compliance checker API.
  158.  
  159. 2.  KeyNote Concepts
  160.  
  161.    In KeyNote, the authority to perform trusted actions is associated
  162.    with one or more `principals'.  A principal may be a physical entity,
  163.    a process in an operating system, a public key, or any other
  164.    convenient abstraction.  KeyNote principals are identified by a
  165.    string called a `Principal Identifier'.  In some cases, a Principal
  166.    Identifier will contain a cryptographic key interpreted by the
  167.  
  168.  
  169.  
  170. Blaze, et al.                Informational                      [Page 3]
  171.  
  172. RFC 2704          The KeyNote Trust-Management System     September 1999
  173.  
  174.  
  175.    KeyNote system (e.g., for credential signature verification).  In
  176.    other cases, Principal Identifiers may have a structure that is
  177.    opaque to KeyNote.
  178.  
  179.    Principals perform two functions of concern to KeyNote: They request
  180.    `actions' and they issue `assertions'.  Actions are any trusted
  181.    operations that an application places under KeyNote control.
  182.    Assertions delegate the authorization to perform actions to other
  183.    principals.
  184.  
  185.    Actions are described to the KeyNote compliance checker in terms of a
  186.    collection of name-value pairs called an `action attribute set'.  The
  187.    action attribute set is created by the invoking application.  Its
  188.    structure and format are described in detail in Section 3 of this
  189.    document.
  190.  
  191.    KeyNote provides advice to applications about the interpretation of
  192.    policy with regard to specific requested actions.  Applications
  193.    invoke the KeyNote compliance checker by issuing a `query' containing
  194.    a proposed action attribute set and identifying the principal(s)
  195.    requesting it.  The KeyNote system determines and returns an
  196.    appropriate `policy compliance value' from an ordered set of possible
  197.    responses.
  198.  
  199.    The policy compliance value returned from a KeyNote query advises the
  200.    application how to process the requested action.  In the simplest
  201.    case, the compliance value is Boolean (e.g., "reject" or "approve").
  202.    Assertions can also be written to select from a range of possible
  203.    compliance values, when appropriate for the application (e.g., "no
  204.    access", "restricted access", "full access").  Applications can
  205.    configure the relative ordering (from `weakest' to `strongest') of
  206.    compliance values at query time.
  207.  
  208.    Assertions are the basic programming unit for specifying policy and
  209.    delegating authority.  Assertions describe the conditions under which
  210.    a principal authorizes actions requested by other principals.  An
  211.    assertion identifies the principal that made it, which other
  212.    principals are being authorized, and the conditions under which the
  213.    authorization applies.  The syntax of assertions is given in Section
  214.    4.
  215.  
  216.    A special principal, whose identifier is "POLICY", provides the root
  217.    of trust in KeyNote.  "POLICY" is therefore considered to be
  218.    authorized to perform any action.
  219.  
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226. Blaze, et al.                Informational                      [Page 4]
  227.  
  228. RFC 2704          The KeyNote Trust-Management System     September 1999
  229.  
  230.  
  231.    Assertions issued by the "POLICY" principal are called `policy
  232.    assertions' and are used to delegate authority to otherwise untrusted
  233.    principals.  The KeyNote security policy of an application consists
  234.    of a collection of policy assertions.
  235.  
  236.    When a principal is identified by a public key, it can digitally sign
  237.    assertions and distribute them over untrusted networks for use by
  238.    other KeyNote compliance checkers.  These signed assertions are also
  239.    called `credentials', and serve a role similar to that of traditional
  240.    public key certificates.  Policies and credentials share the same
  241.    syntax and are evaluated according to the same semantics.  A
  242.    principal can therefore convert its policy assertions into
  243.    credentials simply by digitally signing them.
  244.  
  245.    KeyNote is designed to encourage the creation of human-readable
  246.    policies and credentials that are amenable to transmission and
  247.    storage over a variety of media.  Its assertion syntax is inspired by
  248.    the format of RFC822-style message headers [Cro82].  A KeyNote
  249.    assertion contains a sequence of sections, called `fields', each of
  250.    which specifies one aspect of the assertion's semantics.  Fields
  251.    start with an identifier at the beginning of a line and continue
  252.    until the next field is encountered.  For example:
  253.  
  254.       KeyNote-Version: 2
  255.       Comment: A simple, if contrived, email certificate for user mab
  256.       Local-Constants:  ATT_CA_key = "RSA:acdfa1df1011bbac"
  257.                         mab_key = "DSA:deadbeefcafe001a"
  258.       Authorizer: ATT_CA_key
  259.       Licensees: mab_key
  260.       Conditions: ((app_domain == "email")  # valid for email only
  261.                 && (address == "mab@research.att.com"));
  262.       Signature: "RSA-SHA1:f00f2244"
  263.  
  264.    The meanings of the various sections are described in Sections 4 and
  265.    5 of this document.
  266.  
  267.    KeyNote semantics resolve the relationship between an application's
  268.    policy and actions requested by other principals, as supported by
  269.    credentials.  The KeyNote compliance checker processes the assertions
  270.    against the action attribute set to determine the policy compliance
  271.    value of a requested action.  These semantics are defined in Section
  272.    5.
  273.  
  274.    An important principle in KeyNote's design is `assertion
  275.    monotonicity'; the policy compliance value of an action is always
  276.    positively derived from assertions made by trusted principals.
  277.    Removing an assertion never results in increasing the compliance
  278.    value returned by KeyNote for a given query.  The monotonicity
  279.  
  280.  
  281.  
  282. Blaze, et al.                Informational                      [Page 5]
  283.  
  284. RFC 2704          The KeyNote Trust-Management System     September 1999
  285.  
  286.  
  287.    property can simplify the design and analysis of complex network-
  288.    based security protocols; network failures that prevent the
  289.    transmission of credentials can never result in spurious
  290.    authorization of dangerous actions.  A detailed discussion of
  291.    monotonicity and safety in trust management can be found in [BFL96]
  292.    and [BFS98].
  293.  
  294. 3.  Action Attributes
  295.  
  296.    Trusted actions to be evaluated by KeyNote are described by a
  297.    collection of name-value pairs called the `action attribute set'.
  298.    Action attributes are the mechanism by which applications communicate
  299.    requests to KeyNote and are the primary objects on which KeyNote
  300.    assertions operate.  An action attribute set is passed to the KeyNote
  301.    compliance checker with each query.
  302.  
  303.    Each action attribute consists of a name and a value.  The semantics
  304.    of the names and values are not interpreted by KeyNote itself; they
  305.    vary from application to application and must be agreed upon by the
  306.    writers of applications and the writers of the policies and
  307.    credentials that will be used by them.
  308.  
  309.    Action attribute names and values are represented by arbitrary-length
  310.    strings.  KeyNote guarantees support of attribute names and values up
  311.    to 2048 characters long.  The handling of longer attribute names or
  312.    values is not specified and is KeyNote-implementation-dependent.
  313.    Applications and assertions should therefore avoid depending on the
  314.    the use of attributes with names or values longer than 2048
  315.    characters.  The length of an attribute value is represented by an
  316.    implementation-specific mechanism (e.g., NUL-terminated strings, an
  317.    explicit length field, etc.).
  318.  
  319.    Attribute values are inherently untyped and are represented as
  320.    character strings by default.  Attribute values may contain any non-
  321.    NUL ASCII character.  Numeric attribute values should first be
  322.    converted to an ASCII text representation by the invoking
  323.    application, e.g., the value 1234.5 would be represented by the
  324.    string "1234.5".
  325.  
  326.    Attribute names are of the form:
  327.  
  328.        <AttributeID>:: {Any string starting with a-z, A-Z, or the
  329.                         underscore character, followed by any number of
  330.                         a-z, A-Z, 0-9, or underscore characters} ;
  331.  
  332.    That is, an <AttributeID> begins with an alphabetic or underscore
  333.    character and can be followed by any number of alphanumerics and
  334.    underscores.  Attribute names are case-sensitive.
  335.  
  336.  
  337.  
  338. Blaze, et al.                Informational                      [Page 6]
  339.  
  340. RFC 2704          The KeyNote Trust-Management System     September 1999
  341.  
  342.  
  343.    The exact mechanism for passing the action attribute set to the
  344.    compliance checker is determined by the KeyNote implementation.
  345.    Depending on specific requirements, an implementation may provide a
  346.    mechanism for including the entire attribute set as an explicit
  347.    parameter of the query, or it may provide some form of callback
  348.    mechanism invoked as each attribute is dereferenced, e.g., for access
  349.    to kernel variables.
  350.  
  351.    If an action attribute is not defined its value is considered to be
  352.    the empty string.
  353.  
  354.    Attribute names beginning with the "_" character are reserved for use
  355.    by the KeyNote runtime environment and cannot be passed from
  356.    applications as part of queries.  The following special attribute
  357.    names are used:
  358.  
  359.        Name                        Purpose
  360.        ------------------------    ------------------------------------
  361.        _MIN_TRUST                  Lowest-order (minimum) compliance
  362.                                    value in query; see Section 5.1.
  363.  
  364.        _MAX_TRUST                  Highest-order (maximum) compliance
  365.                                    value in query; see Section 5.1.
  366.  
  367.        _VALUES                     Linearly ordered set of compliance
  368.                                    values in query; see Section 5.1.
  369.                                    Comma separated.
  370.  
  371.        _ACTION_AUTHORIZERS         Names of principals directly
  372.                                    authorizing action in query.
  373.                                    Comma separated.
  374.  
  375.    In addition, attributes with names of the form "_<N>", where <N> is
  376.    an ASCII-encoded integer, are used by the regular expression matching
  377.    mechanism described in Section 5.
  378.  
  379.    The assignment and semantics of any other attribute names beginning
  380.    with "_" is unspecified and implementation-dependent.
  381.  
  382.    The names of other attributes in the action attribute set are not
  383.    specified by KeyNote but must be agreed upon by the writers of any
  384.    policies and credentials that are to inter-operate in a specific
  385.    KeyNote query evaluation.
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394. Blaze, et al.                Informational                      [Page 7]
  395.  
  396. RFC 2704          The KeyNote Trust-Management System     September 1999
  397.  
  398.  
  399.    By convention, the name of the application domain over which action
  400.    attributes should be interpreted is given in the attribute named
  401.    "app_domain".  The IANA (or some other suitable authority) will
  402.    provide a registry of reserved app_domain names.  The registry will
  403.    list the names and meanings of each application's attributes.
  404.  
  405.    The app_domain convention helps to ensure that credentials are
  406.    interpreted as they were intended.  An attribute with any given name
  407.    may be used in many different application domains but might have
  408.    different meanings in each of them.  However, the use of a global
  409.    registry is not always required for small-scale, closed applications;
  410.    the only requirement is that the policies and credentials made
  411.    available to the KeyNote compliance checker interpret attributes
  412.    according to the same semantics assumed by the application that
  413.    created them.
  414.  
  415.    For example, an email application might reserve the app_domain
  416.    "RFC822-EMAIL" and might use the attributes named "address" (the
  417.    email address of a message's sender), "name" (the human name of the
  418.    message sender), and any "organization" headers present (the
  419.    organization name).  The values of these attributes would be derived
  420.    in the obvious way from the email message headers.  The public key of
  421.    the message's signer would be given in the "_ACTION_AUTHORIZERS"
  422.    attribute.
  423.  
  424.    Note that "RFC822-EMAIL" is a hypothetical example; such a name may
  425.    or may not appear in the actual registry with these or different
  426.    attributes.  (Indeed, we recognize that the reality of email security
  427.    is considerably more complex than this example might suggest.)
  428.  
  429. 4.  KeyNote Assertion Syntax
  430.  
  431.    In the following sections, the notation [X]* means zero or more
  432.    repetitions of character string X.  The notation [X]+ means one or
  433.    more repetitions of X.  The notation <X>* means zero or more
  434.    repetitions of non-terminal <X>.  The notation <X>+ means one or more
  435.    repetitions of X, whereas <X>? means zero or one repetitions of X.
  436.    Nonterminal grammar symbols are enclosed in angle brackets.  Quoted
  437.    strings in grammar productions represent terminals.
  438.  
  439. 4.1  Basic Structure
  440.  
  441.        <Assertion>:: <VersionField>? <AuthField> <LicenseesField>?
  442.                      <LocalConstantsField>? <ConditionsField>?
  443.                      <CommentField>? <SignatureField>? ;
  444.  
  445.    All KeyNote assertions are encoded in ASCII.
  446.  
  447.  
  448.  
  449.  
  450. Blaze, et al.                Informational                      [Page 8]
  451.  
  452. RFC 2704          The KeyNote Trust-Management System     September 1999
  453.  
  454.  
  455.    KeyNote assertions are divided into sections, called `fields', that
  456.    serve various semantic functions.  Each field starts with an
  457.    identifying label at the beginning of a line, followed by the ":"
  458.    character and the field's contents.  There can be at most one field
  459.    per line.
  460.  
  461.    A field may be continued over more than one line by indenting
  462.    subsequent lines with at least one ASCII SPACE or TAB character.
  463.    Whitespace (a SPACE, TAB, or NEWLINE character) separates tokens but
  464.    is otherwise ignored outside of quoted strings.  Comments with a
  465.    leading octothorp character (see Section 4.2) may begin in any
  466.    column.
  467.  
  468.    One mandatory field is required in all assertions:
  469.  
  470.       Authorizer
  471.  
  472.    Six optional fields may also appear:
  473.  
  474.       Comment
  475.       Conditions
  476.       KeyNote-Version
  477.       Licensees
  478.       Local-Constants
  479.       Signature
  480.  
  481.    All field names are case-insensitive.  The "KeyNote-Version" field,
  482.    if present, appears first.  The "Signature" field, if present,
  483.    appears last.  Otherwise, fields may appear in any order.  Each field
  484.    may appear at most once in any assertion.
  485.  
  486.    Blank lines are not permitted in assertions.  Multiple assertions
  487.    stored in a file (e.g., in application policy configurations),
  488.    therefore, can be separated from one another unambiguously by the use
  489.    of blank lines between them.
  490.  
  491. 4.2  Comments
  492.  
  493.       <Comment>:: "#" {ASCII characters} ;
  494.  
  495.    The octothorp character ("#", ASCII 35 decimal) can be used to
  496.    introduce comments.  Outside of quoted strings (see Section 4.3), all
  497.    characters from the "#" character through the end of the current line
  498.    are ignored.  However, commented text is included in the computation
  499.    of assertion signatures (see Section 4.6.7).
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506. Blaze, et al.                Informational                      [Page 9]
  507.  
  508. RFC 2704          The KeyNote Trust-Management System     September 1999
  509.  
  510.  
  511. 4.3  Strings
  512.  
  513.    A `string' is a lexical object containing a sequence of characters.
  514.    Strings may contain any non-NUL characters, including newlines and
  515.    nonprintable characters.  Strings may be given as literals, computed
  516.    from complex expressions, or dereferenced from attribute names.
  517.  
  518. 4.3.1  String Literals
  519.  
  520.       <StringLiteral>:: "\"" {see description below} "\"" ;
  521.  
  522.    A string literal directly represents the value of a string.  String
  523.    literals must be quoted by preceding and following them with the
  524.    double-quote character (ASCII 34 decimal).
  525.  
  526.    A printable character may be `escaped' inside a quoted string literal
  527.    by preceding it with the backslash character (ASCII 92 decimal)
  528.    (e.g., "like \"this\".").  This permits the inclusion of the double-
  529.    quote and backslash characters inside string literals.
  530.  
  531.    A similar escape mechanism is also used to represent non-printable
  532.    characters.  "\n" represents the newline character (ASCII character
  533.    10 decimal), "\r" represents the carriage-return character (ASCII
  534.    character 13 decimal), "\t" represents the tab character (ASCII
  535.    character 9 decimal), and "\f" represents the form-feed character
  536.    (ASCII character 12 decimal).  A backslash character followed by a
  537.    newline suppresses all subsequent whitespace (including the newline)
  538.    up to the next non-whitespace character (this allows the continuation
  539.    of long string constants across lines).  Un-escaped newline and
  540.    return characters are illegal inside string literals.
  541.  
  542.    The constructs "\0o", "\0oo", and "\ooo" (where o represents any
  543.    octal digit) may be used to represent any non-NUL ASCII characters
  544.    with their corresponding octal values (thus, "\012" is the same as
  545.    "\n", "\101" is "A", and "\377" is the ASCII character 255 decimal).
  546.    However, the NUL character cannot be encoded in this manner; "\0",
  547.    "\00", and "\000" are converted to the strings "0", "00", and "000"
  548.    respectively.  Similarly, all other escaped characters have the
  549.    leading backslash removed (e.g., "\a" becomes "a", and "\\" becomes
  550.    "\").  The following four strings are equivalent:
  551.  
  552.         "this string contains a newline\n followed by one space."
  553.         "this string contains a newline\n \
  554.         followed by one space."
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562. Blaze, et al.                Informational                     [Page 10]
  563.  
  564. RFC 2704          The KeyNote Trust-Management System     September 1999
  565.  
  566.  
  567.         "this str\
  568.            ing contains a \
  569.              newline\n followed by one space."
  570.  
  571.         "this string contains a newline\012\040followed by one space."
  572.  
  573. 4.3.2  String Expressions
  574.  
  575.    In general, anywhere a quoted string literal is allowed, a `string
  576.    expression' can be used.  A string expression constructs a string
  577.    from string constants, dereferenced attributes (described in Section
  578.    4.4), and a string concatenation operator.  String expressions may be
  579.    parenthesized.
  580.  
  581.        <StrEx>:: <StrEx> "." <StrEx>    /* String concatenation */
  582.                | <StringLiteral>        /* Quoted string */
  583.                | "(" <StrEx> ")"
  584.                | <DerefAttribute>       /* See Section 4.4 */
  585.                | "$" <StrEx> ;          /* See Section 4.4 */
  586.  
  587.    The "$" operator has higher precedence than the "." operator.
  588.  
  589. 4.4  Dereferenced Attributes
  590.  
  591.    Action attributes provide the primary mechanism for applications to
  592.    pass information to assertions.  Attribute names are strings from a
  593.    limited character set (<AttributeID> as defined in Section 3), and
  594.    attribute values are represented internally as strings.  An attribute
  595.    is dereferenced simply by using its name.  In general, KeyNote allows
  596.    the use of an attribute anywhere a string literal is permitted.
  597.  
  598.    Attributes are dereferenced as strings by default.  When required,
  599.    dereferenced attributes can be converted to integers or floating
  600.    point numbers with the type conversion operators "@" and "&".  Thus,
  601.    an attribute named "foo" having the value "1.2" may be interpreted as
  602.    the string "1.2" (foo), the integer value 1 (@foo), or the floating
  603.    point value 1.2 (&foo).
  604.  
  605.    Attributes converted to integer and floating point numbers are
  606.    represented according to the ANSI C `long' and `float' types,
  607.    respectively.  In particular, integers range from -2147483648 to
  608.    2147483647, whilst floats range from 1.17549435E-38F to
  609.    3.40282347E+38F.
  610.  
  611.    Any uninitialized attribute has the empty-string value when
  612.    dereferenced as a string and the value zero when dereferenced as an
  613.    integer or float.
  614.  
  615.  
  616.  
  617.  
  618. Blaze, et al.                Informational                     [Page 11]
  619.  
  620. RFC 2704          The KeyNote Trust-Management System     September 1999
  621.  
  622.  
  623.    Attribute names may be given literally or calculated from string
  624.    expressions and may be recursively dereferenced.  In the simplest
  625.    case, an attribute is dereferenced simply by using its name outside
  626.    of quotes; e.g., the string value of the attribute named "foo" is by
  627.    reference to `foo' (outside of quotes).  The "$<StrEx>" construct
  628.    dereferences the attribute named in the string expression <StrEx>.
  629.    For example, if the attribute named "foo" contains the string "bar",
  630.    the attribute named "bar" contains the string "xyz", and the
  631.    attribute "xyz" contains the string "qua", the following string
  632.    comparisons are all true:
  633.  
  634.     foo == "bar"
  635.     $("foo") == "bar"
  636.     $foo == "xyz"
  637.     $(foo) == "xyz"
  638.     $$foo == "qua"
  639.  
  640.    If <StrEx> evaluates to an invalid or uninitialized attribute name,
  641.    its value is considered to be the empty string (or zero if used as a
  642.    numeric).
  643.  
  644.    The <DerefAttribute> token is defined as:
  645.  
  646.       <DerefAttribute>:: <AttributeID> ;
  647.  
  648. 4.5  Principal Identifiers
  649.  
  650.    Principals are represented as ASCII strings called `Principal
  651.    Identifiers'.  Principal Identifiers may be arbitrary labels whose
  652.    structure is not interpreted by the KeyNote system or they may encode
  653.    cryptographic keys that are used by KeyNote for credential signature
  654.    verification.
  655.  
  656.        <PrincipalIdentifier>:: <OpaqueID>
  657.                              | <KeyID> ;
  658.  
  659.    4.5.1  Opaque Principal Identifiers
  660.  
  661.    Principal Identifiers that are used by KeyNote only as labels are
  662.    said to be `opaque'.  Opaque identifiers are encoded in assertions as
  663.    strings (see Section 4.3):
  664.  
  665.        <OpaqueID>:: <StrEx> ;
  666.  
  667.    Opaque identifier strings should not contain the ":" character.
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674. Blaze, et al.                Informational                     [Page 12]
  675.  
  676. RFC 2704          The KeyNote Trust-Management System     September 1999
  677.  
  678.  
  679. 4.5.2  Cryptographic Principal Identifiers
  680.  
  681.    Principal Identifiers that are used by KeyNote as keys, e.g., to
  682.    verify credential signatures, are said to be `cryptographic'.
  683.    Cryptographic identifiers are also lexically encoded as strings:
  684.  
  685.        <KeyID>:: <StrEx> ;
  686.  
  687.    Unlike Opaque Identifiers, however, Cryptographic Identifier strings
  688.    have a special form.  To be interpreted by KeyNote (for signature
  689.    verification), an identifier string should be of the form:
  690.  
  691.       <IDString>:: <ALGORITHM>":"<ENCODEDBITS> ;
  692.  
  693.    "ALGORITHM" is an ASCII substring that describes the algorithms to be
  694.    used in interpreting the key's bits.  The ALGORITHM identifies the
  695.    major cryptographic algorithm (e.g., RSA [RSA78], DSA [DSA94], etc.),
  696.    structured format (e.g., PKCS1 [PKCS1]), and key bit encoding (e.g.,
  697.    HEX or BASE64).  By convention, the ALGORITHM substring starts with
  698.    an alphabetic character and can contain letters, digits, underscores,
  699.    or dashes (i.e., it should match the regular expression "[a-zA-Z][a-
  700.    zA-Z0-9_-]*").  The IANA (or some other appropriate authority) will
  701.    provide a registry of reserved algorithm identifiers.
  702.  
  703.    "ENCODEDBITS" is a substring of characters representing the key's
  704.    bits, the encoding and format of which depends on the ALGORITHM.  By
  705.    convention, hexadecimal encoded keys use lower-case ASCII characters.
  706.  
  707.    Cryptographic Principal Identifiers are converted to a normalized
  708.    canonical form for the purposes of any internal comparisons between
  709.    them; see Section 5.2.
  710.  
  711.    Note that the keys used in examples throughout this document are
  712.    fictitious and generally much shorter than would be required for
  713.    security in practice.
  714.  
  715. 4.6  KeyNote Fields
  716.  
  717. 4.6.1  The KeyNote-Version Field
  718.  
  719.    The KeyNote-Version field identifies the version of the KeyNote
  720.    assertion language under which the assertion was written.  The
  721.    KeyNote-Version field is of the form
  722.  
  723.        <VersionField>:: "KeyNote-Version:" <VersionString> ;
  724.        <VersionString>:: <StringLiteral>
  725.                        | <IntegerLiteral> ;
  726.  
  727.  
  728.  
  729.  
  730. Blaze, et al.                Informational                     [Page 13]
  731.  
  732. RFC 2704          The KeyNote Trust-Management System     September 1999
  733.  
  734.  
  735.    where <VersionString> is an ASCII-encoded string.  Assertions in
  736.    production versions of KeyNote use decimal digits in the version
  737.    representing the version number of the KeyNote language under which
  738.    they are to be interpreted.  Assertions written to conform with this
  739.    document should be identified with the version string "2" (or the
  740.    integer 2).  The KeyNote-Version field, if included, should appear
  741.    first.
  742.  
  743. 4.6.2  The Local-Constants Field
  744.  
  745.    This field adds or overrides action attributes in the current
  746.    assertion only.  This mechanism allows the use of short names for
  747.    (frequently lengthy) cryptographic principal identifiers, especially
  748.    to make the Licensees field more readable.  The Local-Constants field
  749.    is of the form:
  750.  
  751.        <LocalConstantsField>:: "Local-Constants:" <Assignments> ;
  752.        <Assignments>:: /* can be empty */
  753.                      | <AttributeID> "=" <StringLiteral> <Assignments> ;
  754.  
  755.    <AttributeID> is an attribute name from the action attribute
  756.    namespace as defined in Section 3.  The name is available for use as
  757.    an attribute in any subsequent field.  If the Local-Constants field
  758.    defines more than one identifier, it can occupy more than one line
  759.    and be indented.  <StringLiteral> is a string literal as described in
  760.    Section 4.3.  Attributes defined in the Local-Constants field
  761.    override any attributes with the same name passed in with the action
  762.    attribute set.
  763.  
  764.    An attribute may be initialized at most once in the Local-Constants
  765.    field.  If an attribute is initialized more than once in an
  766.    assertion, the entire assertion is considered invalid and is not
  767.    considered by the KeyNote compliance checker in evaluating queries.
  768.  
  769. 4.6.3  The Authorizer Field
  770.  
  771.    The Authorizer identifies the Principal issuing the assertion.  This
  772.    field is of the form
  773.  
  774.        <AuthField>:: "Authorizer:" <AuthID> ;
  775.        <AuthID>:: <PrincipalIdentifier>
  776.                 | <DerefAttribute> ;
  777.  
  778.    The Principal Identifier may be given directly or by reference to the
  779.    attribute namespace (as defined in Section 4.4).
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786. Blaze, et al.                Informational                     [Page 14]
  787.  
  788. RFC 2704          The KeyNote Trust-Management System     September 1999
  789.  
  790.  
  791. 4.6.4   The Licensees Field
  792.  
  793.    The Licensees field identifies the principals authorized by the
  794.    assertion.  More than one principal can be authorized, and
  795.    authorization can be distributed across several principals through
  796.    the use of `and' and threshold constructs.  This field is of the form
  797.  
  798.        <LicenseesField>:: "Licensees:" <LicenseesExpr> ;
  799.  
  800.        <LicenseesExpr>::      /* can be empty */
  801.                          | <PrincExpr> ;
  802.  
  803.        <PrincExpr>:: "(" <PrincExpr> ")"
  804.                      | <PrincExpr> "&&" <PrincExpr>
  805.                      | <PrincExpr> "||" <PrincExpr>
  806.                      | <K>"-of(" <PrincList> ")"        /* Threshold */
  807.                      | <PrincipalIdentifier>
  808.                      | <DerefAttribute> ;
  809.  
  810.        <PrincList>:: <PrincipalIdentifier>
  811.                    | <DerefAttribute>
  812.                    | <PrincList> "," <PrincList> ;
  813.  
  814.        <K>:: {Decimal number starting with a digit from 1 to 9} ;
  815.  
  816.    The "&&" operator has higher precedence than the "||" operator.  <K>
  817.    is an ASCII-encoded positive decimal integer.  If a <PrincList>
  818.    contains fewer than <K> principals, the entire assertion is omitted
  819.    from processing.
  820.  
  821. 4.6.5  The Conditions Field
  822.  
  823.    This field gives the `conditions' under which the Authorizer trusts
  824.    the Licensees to perform an action.  `Conditions' are predicates that
  825.    operate on the action attribute set.  The Conditions field is of the
  826.    form:
  827.  
  828.     <ConditionsField>:: "Conditions:" <ConditionsProgram> ;
  829.  
  830.     <ConditionsProgram>:: /* Can be empty */
  831.                           | <Clause> ";" <ConditionsProgram> ;
  832.  
  833.     <Clause>:: <Test> "->" "{" <ConditionsProgram> "}"
  834.              | <Test> "->" <Value>
  835.              | <Test> ;
  836.  
  837.     <Value>:: <StrEx> ;
  838.  
  839.  
  840.  
  841.  
  842. Blaze, et al.                Informational                     [Page 15]
  843.  
  844. RFC 2704          The KeyNote Trust-Management System     September 1999
  845.  
  846.  
  847.     <Test>:: <RelExpr> ;
  848.  
  849.     <RelExpr>:: "(" <RelExpr> ")"        /* Parentheses */
  850.               | <RelExpr> "&&" <RelExpr> /* Logical AND */
  851.               | <RelExpr> "||" <RelExpr> /* Logical OR */
  852.               | "!" <RelExpr>         /* Logical NOT */
  853.               | <IntRelExpr>
  854.               | <FloatRelExpr>
  855.               | <StringRelExpr>
  856.               | "true"        /* case insensitive */
  857.               | "false" ;     /* case insensitive */
  858.  
  859.     <IntRelExpr>:: <IntEx> "==" <IntEx>
  860.                  | <IntEx> "!=" <IntEx>
  861.                  | <IntEx> "<" <IntEx>
  862.                  | <IntEx> ">" <IntEx>
  863.                  | <IntEx> "<=" <IntEx>
  864.                  | <IntEx> ">=" <IntEx> ;
  865.  
  866.     <FloatRelExpr>:: <FloatEx> "<" <FloatEx>
  867.                    | <FloatEx> ">" <FloatEx>
  868.                    | <FloatEx> "<=" <FloatEx>
  869.                    | <FloatEx> ">=" <FloatEx> ;
  870.  
  871.     <StringRelExpr>:: <StrEx> "==" <StrEx>  /* String equality */
  872.                     | <StrEx> "!=" <StrEx>  /* String inequality */
  873.                     | <StrEx> "<" <StrEx>   /* Alphanum. comparisons */
  874.                     | <StrEx> ">" <StrEx>
  875.                     | <StrEx> "<=" <StrEx>
  876.                     | <StrEx> ">=" <StrEx>
  877.                     | <StrEx> "~=" <RegExpr> ; /* Reg. expr. matching */
  878.  
  879.     <IntEx>:: <IntEx> "+" <IntEx>        /* Integer */
  880.             | <IntEx> "-" <IntEx>
  881.             | <IntEx> "*" <IntEx>
  882.             | <IntEx> "/" <IntEx>
  883.             | <IntEx> "%" <IntEx>
  884.             | <IntEx> "^" <IntEx>        /* Exponentiation */
  885.             | "-" <IntEx>
  886.             | "(" <IntEx> ")"
  887.             | <IntegerLiteral>
  888.             | "@" <StrEx> ;
  889.  
  890.     <FloatEx>:: <FloatEx> "+" <FloatEx>  /* Floating point */
  891.               | <FloatEx> "-" <FloatEx>
  892.               | <FloatEx> "*" <FloatEx>
  893.               | <FloatEx> "/" <FloatEx>
  894.               | <FloatEx> "^" <FloatEx> /* Exponentiation */
  895.  
  896.  
  897.  
  898. Blaze, et al.                Informational                     [Page 16]
  899.  
  900. RFC 2704          The KeyNote Trust-Management System     September 1999
  901.  
  902.  
  903.               | "-" <FloatEx>
  904.               | "(" <FloatEx> ")"
  905.               | <FloatLiteral>
  906.               | "&" <StrEx> ;
  907.  
  908.     <IntegerLiteral>:: {Decimal number of at least one digit} ;
  909.     <FloatLiteral>:: <IntegerLiteral>"."<IntegerLiteral> ;
  910.  
  911.     <StringLiteral> is a quoted string as defined in Section 4.3
  912.     <AttributeID> is defined in Section 3.
  913.  
  914.    The operation precedence classes are (from highest to lowest):
  915.         { (, ) }
  916.         {unary -, @, &, $}
  917.         {^}
  918.         {*, /, %}
  919.         {+, -, .}
  920.  
  921.    Operators in the same precedence class are evaluated left-to-right.
  922.  
  923.    Note the inability to test for floating point equality,  as most
  924.    floating point implementations (hardware or otherwise) do not
  925.    guarantee accurate equality testing.
  926.  
  927.    Also note that integer and floating point expressions can only be
  928.    used within clauses of condition fields, but in no other KeyNote
  929.    field.
  930.  
  931.    The keywords "true" and "false" are not reserved; they can be used as
  932.    attribute or principal identifier names (although this practice makes
  933.    assertions difficult to understand and is discouraged).
  934.  
  935.    <RegExpr> is a standard regular expression, conforming to the POSIX
  936.    1003.2 regular expression syntax and semantics.
  937.  
  938.    Any string expression (or attribute) containing the ASCII
  939.    representation of a numeric value can be converted to an integer or
  940.    float with the use of the "@" and "&" operators, respectively.  Any
  941.    fractional component of an attribute value dereferenced as an integer
  942.    is rounded down.  If an attribute dereferenced as a number cannot be
  943.    properly converted (e.g., it contains invalid characters or is empty)
  944.    its value is considered to be zero.
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954. Blaze, et al.                Informational                     [Page 17]
  955.  
  956. RFC 2704          The KeyNote Trust-Management System     September 1999
  957.  
  958.  
  959. 4.6.6  The Comment Field
  960.  
  961.    The Comment field allows assertions to be annotated with information
  962.    describing their purpose.  It is of the form
  963.  
  964.        <CommentField>:: "Comment:" <text> ;
  965.  
  966.    No interpretation of the contents of this field is performed by
  967.    KeyNote.  Note that this is one of two mechanisms for including
  968.    comments in KeyNote assertions; comments can also be inserted
  969.    anywhere in an assertion's body by preceding them with the "#"
  970.    character (except inside string literals).
  971.  
  972. 4.6.7  The Signature Field
  973.  
  974.    The Signature field identifies a signed assertion and gives the
  975.    encoded digital signature of the principal identified in the
  976.    Authorizer field.  The Signature field is of the form:
  977.  
  978.        <SignatureField>:: "Signature:" <Signature> ;
  979.  
  980.        <Signature>:: <StrEx> ;
  981.  
  982.    The <Signature> string should be of the form:
  983.  
  984.        <IDString>:: <ALGORITHM>":"<ENCODEDBITS> ;
  985.  
  986.    The formats of the "ALGORITHM" and "ENCODEDBITS" substrings are as
  987.    described for Cryptographic Principal Identifiers in Section 4.4.2
  988.    The algorithm name should be the same as that of the principal
  989.    appearing in the Authorizer field.  The IANA (or some other suitable
  990.    authority) will provide a registry of reserved names.  It is not
  991.    necessary that the encodings of the signature and the authorizer key
  992.    be the same.
  993.  
  994.    If the signature field is included, the principal named in the
  995.    Authorizer field must be a Cryptographic Principal Identifier, the
  996.    algorithm must be known to the KeyNote implementation, and the
  997.    signature must be correct for the assertion body and authorizer key.
  998.  
  999.    The signature is computed over the assertion text, beginning with the
  1000.    first field (including the field identifier string), up to (but not
  1001.    including) the Signature field identifier.  The newline preceding the
  1002.    signature field identifier is the last character included in
  1003.    signature calculation.  The signature is always the last field in a
  1004.    KeyNote assertion.  Text following this field is not considered part
  1005.    of the assertion.
  1006.  
  1007.  
  1008.  
  1009.  
  1010. Blaze, et al.                Informational                     [Page 18]
  1011.  
  1012. RFC 2704          The KeyNote Trust-Management System     September 1999
  1013.  
  1014.  
  1015.    The algorithms for computing and verifying signatures must be
  1016.    configured into each KeyNote implementation and are defined and
  1017.    documented separately.
  1018.  
  1019.    Note that all signatures used in examples in this document are
  1020.    fictitious and generally much shorter than would be required for
  1021.    security in practice.
  1022.  
  1023. 5.   Query Evaluation Semantics
  1024.  
  1025.    The KeyNote compliance checker finds and returns the Policy
  1026.    Compliance Value of queries, as defined in Section 5.3, below.
  1027.  
  1028. 5.1  Query Parameters
  1029.  
  1030.    A KeyNote query has four parameters:
  1031.  
  1032.    *  The identifier of the principal(s) requesting the action.
  1033.  
  1034.    *  The action attribute set describing the action.
  1035.  
  1036.    *  The set of compliance values of interest to the application,
  1037.       ordered from _MIN_TRUST to _MAX_TRUST
  1038.  
  1039.    *  The policy and credential assertions that should be included in
  1040.       the evaluation.
  1041.  
  1042.    The mechanism for passing these parameters to the KeyNote evaluator
  1043.    is application dependent.  In particular, an evaluator might provide
  1044.    for some parameters to be passed explicitly, while others are looked
  1045.    up externally (e.g., credentials might be looked up in a network-
  1046.    based distribution system), while still others might be requested
  1047.    from the application as needed by the evaluator, through a `callback'
  1048.    mechanism (e.g., for attribute values that represent values from
  1049.    among a very large namespace).
  1050.  
  1051. 5.1.1  Action Requester
  1052.  
  1053.    At least one Principal must be identified in each query as the
  1054.    `requester' of the action.  Actions may be requested by several
  1055.    principals, each considered to have individually requested it.  This
  1056.    allows policies that require multiple authorizations, e.g., `two
  1057.    person control'.  The set of authorizing principals is made available
  1058.    in the special attribute "_ACTION_AUTHORIZERS"; if several principals
  1059.    are authorizers, their identifiers are separated with commas.
  1060.  
  1061.  
  1062.  
  1063.  
  1064.  
  1065.  
  1066. Blaze, et al.                Informational                     [Page 19]
  1067.  
  1068. RFC 2704          The KeyNote Trust-Management System     September 1999
  1069.  
  1070.  
  1071. 5.1.2  Ordered Compliance Value Set
  1072.  
  1073.    The set of compliance values of interest to an application (and their
  1074.    relative ranking to one another) is determined by the invoking
  1075.    application and passed to the KeyNote evaluator as a parameter of the
  1076.    query.  In many applications, this will be Boolean, e.g., the ordered
  1077.    sets {FALSE, TRUE} or {REJECT, APPROVE}.  Other applications may
  1078.    require a range of possible values, e.g., {No_Access, Limited_Access,
  1079.    Full_Access}.  Note that applications should include in this set only
  1080.    compliance value names that are actually returned by the assertions.
  1081.  
  1082.    The lowest-order and highest-order compliance value strings given in
  1083.    the query are available in the special attributes named "_MIN_TRUST"
  1084.    and "_MAX_TRUST", respectively.  The complete set of query compliance
  1085.    values is made available in ascending order (from _MIN_TRUST to
  1086.    _MAX_TRUST) in the special attribute named "_VALUES".  Values are
  1087.    separated with commas; applications that use assertions that make use
  1088.    of the _VALUES attribute should therefore avoid the use of compliance
  1089.    value strings that themselves contain commas.
  1090.  
  1091. 5.2  Principal Identifier Normalization
  1092.  
  1093.    Principal identifier comparisons among Cryptographic Principal
  1094.    Identifiers (that represent keys) in the Authorizer and Licensees
  1095.    fields or in an action's direct authorizers are performed after
  1096.    normalizing them by conversion to a canonical form.
  1097.  
  1098.    Every cryptographic algorithm used in KeyNote defines a method for
  1099.    converting keys to their canonical form and that specifies how the
  1100.    comparison for equality of two keys is performed.  If the algorithm
  1101.    named in the identifier is unknown to KeyNote, the identifier is
  1102.    treated as opaque.
  1103.  
  1104.    Opaque identifiers are compared as case-sensitive strings.
  1105.  
  1106.    Notice that use of opaque identifiers in the Authorizer field
  1107.    requires that the assertion's integrity be locally trusted (since it
  1108.    cannot be cryptographically verified by the compliance checker).
  1109.  
  1110. 5.3  Policy Compliance Value Calculation
  1111.  
  1112.    The Policy Compliance Value of a query is the Principal Compliance
  1113.    Value of the principal named "POLICY".  This value is defined as
  1114.    follows:
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122. Blaze, et al.                Informational                     [Page 20]
  1123.  
  1124. RFC 2704          The KeyNote Trust-Management System     September 1999
  1125.  
  1126.  
  1127. 5.3.1  Principal Compliance Value
  1128.  
  1129.    The Compliance Value of a principal <X> is the highest order
  1130.    (maximum) of:
  1131.  
  1132.       -  the Direct Authorization Value of principal <X>; and
  1133.  
  1134.       -  the Assertion Compliance Values of all assertions identifying
  1135.          <X> in the Authorizer field.
  1136.  
  1137. 5.3.2  Direct Authorization Value
  1138.  
  1139.    The Direct Authorization Value of a principal <X> is _MAX_TRUST if
  1140.    <X> is listed in the query as an authorizer of the action.
  1141.    Otherwise, the Direct Authorization Value of <X> is _MIN_TRUST.
  1142.  
  1143. 5.3.3  Assertion Compliance Value
  1144.  
  1145.    The Assertion Compliance Value of an assertion is the lowest order
  1146.    (minimum) of the assertion's Conditions Compliance Value and its
  1147.    Licensee Compliance Value.
  1148.  
  1149. 5.3.4 Conditions Compliance Value
  1150.  
  1151.    The Conditions Compliance Value of an assertion is the highest-order
  1152.    (maximum) value among all successful clauses listed in the conditions
  1153.    section.
  1154.  
  1155.    If no clause's test succeeds or the Conditions field is empty, an
  1156.    assertion's Conditions Compliance Value is considered to be the
  1157.    _MIN_TRUST value, as defined Section 5.1.
  1158.  
  1159.    If an assertion's Conditions field is missing entirely, its
  1160.    Conditions Compliance Value is considered to be the _MAX_TRUST value,
  1161.    as defined in Section 5.1.
  1162.  
  1163.    The set of successful test clause values is calculated as follows:
  1164.  
  1165.    Recall from the grammar of section 4.6.5 that each clause in the
  1166.    conditions section has two logical parts: a `test' and an optional
  1167.    `value', which, if present, is separated from the test with the "->"
  1168.    token.  The test subclause is a predicate that either succeeds
  1169.    (evaluates to logical `true') or fails (evaluates to logical
  1170.    `false').  The value subclause is a string expression that evaluates
  1171.    to one value from the ordered set of compliance values given with the
  1172.    query.  If the value subclause is missing, it is considered to be
  1173.    _MAX_TRUST.  That is, the clause
  1174.  
  1175.  
  1176.  
  1177.  
  1178. Blaze, et al.                Informational                     [Page 21]
  1179.  
  1180. RFC 2704          The KeyNote Trust-Management System     September 1999
  1181.  
  1182.  
  1183.        foo=="bar";
  1184.  
  1185.    is equivalent to
  1186.  
  1187.        foo=="bar" -> _MAX_TRUST;
  1188.  
  1189.    If the value component of a clause is present, in the simplest case
  1190.    it contains a string expression representing a possible compliance
  1191.    value.  For example, consider an assertion with the following
  1192.    Conditions field:
  1193.  
  1194.        Conditions:
  1195.           @user_id == 0 -> "full_access";             # clause (1)
  1196.           @user_id < 1000 -> "user_access";           # clause (2)
  1197.           @user_id < 10000 -> "guest_access";         # clause (3)
  1198.           user_name == "root" -> "full_access";       # clause (4)
  1199.  
  1200.    Here, if the value of the "user_id" attribute is "1073" and the
  1201.    "user_name" attribute is "root", the possible compliance value set
  1202.    would contain the values "guest_access" (by clause (3)) and
  1203.    "full_access" (by clause (4)).  If the ordered set of compliance
  1204.    values given in the query (in ascending order) is {"no_access",
  1205.    "guest_access", "user_access", "full_access"}, the Conditions
  1206.    Compliance Value of the assertion would be "full_access" (because
  1207.    "full_access" has a higher-order value than "guest_access").  If the
  1208.    "user_id" attribute had the value "19283" and the "user_name"
  1209.    attribute had the value "nobody", no clause would succeed and the
  1210.    Conditions Compliance Value would be "no_access", which is the
  1211.    lowest-order possible value (_MIN_TRUST).
  1212.  
  1213.    If a clause lists an explicit value, its value string must be named
  1214.    in the query ordered compliance value set.  Values not named in the
  1215.    query compliance value set are considered equivalent to _MIN_TRUST.
  1216.  
  1217.    The value component of a clause can also contain recursively-nested
  1218.    clauses.  Recursively-nested clauses are evaluated only if their
  1219.    parent test is true.  That is,
  1220.  
  1221.        a=="b" ->  { b=="c" -> "value1";
  1222.                     d=="e"  -> "value2";
  1223.                     true -> "value3"; } ;
  1224.  
  1225.    is equivalent to
  1226.  
  1227.        (a=="b") && (b=="c") -> "value1";
  1228.        (a=="b") && (d=="e") -> "value2";
  1229.        (a=="b") -> "value3";
  1230.  
  1231.  
  1232.  
  1233.  
  1234. Blaze, et al.                Informational                     [Page 22]
  1235.  
  1236. RFC 2704          The KeyNote Trust-Management System     September 1999
  1237.  
  1238.  
  1239.    String comparisons are case-sensitive.
  1240.  
  1241.    A regular expression comparison ("~=") is considered true if the
  1242.    left-hand-side string expression matches the right-hand-side regular
  1243.    expression.  If the POSIX regular expression group matching scheme is
  1244.    used, the number of groups matched is placed in the temporary meta-
  1245.    attribute "_0" (dereferenced as _0), and each match is placed in
  1246.    sequence in the temporary attributes (_1, _2, ..., _N).  These
  1247.    match-attributes' values are valid only within subsequent references
  1248.    made within the same clause.  Regular expression evaluation is case-
  1249.    sensitive.
  1250.  
  1251.    A runtime error occurring in the evaluation of a test, such as
  1252.    division by zero or an invalid regular expression, causes the test to
  1253.    be considered false.  For example:
  1254.  
  1255.       foo == "bar" -> {
  1256.                         @a == 1/0 -> "oneval";    # subclause 1
  1257.                         @a == 2 -> "anotherval";  # subclause 2
  1258.                       };
  1259.  
  1260.    Here, subclause 1 triggers a runtime error.  Subclause 1 is therefore
  1261.    false (and has the value _MIN_TRUST).  Subclause 2, however, would be
  1262.    evaluated normally.
  1263.  
  1264.    An invalid <RegExpr> is considered a runtime error and causes the
  1265.    test in which it occurs to be considered false.
  1266.  
  1267. 5.3.5  Licensee Compliance Value
  1268.  
  1269.    The Licensee Compliance Value of an assertion is calculated by
  1270.    evaluating the expression in the Licensees field, based on the
  1271.    Principal Compliance Value of the principals named there.
  1272.  
  1273.    If an assertion's Licensees field is empty, its Licensee Compliance
  1274.    Value is considered to be _MIN_TRUST.  If an assertion's Licensees
  1275.    field is missing altogether, its Licensee Compliance Value is
  1276.    considered to be _MAX_TRUST.
  1277.  
  1278.    For each principal named in the Licensees field, its Principal
  1279.    Compliance Value is substituted for its name.  If no Principal
  1280.    Compliance Value can be found for some named principal, its name is
  1281.    substituted with the _MIN_TRUST value.
  1282.  
  1283.    The licensees expression (as defined in Section 4.6.4) is evaluated
  1284.    as follows:
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290. Blaze, et al.                Informational                     [Page 23]
  1291.  
  1292. RFC 2704          The KeyNote Trust-Management System     September 1999
  1293.  
  1294.  
  1295.    *  A "(...)" expression has the value of the enclosed subexpression.
  1296.  
  1297.    *  A "&&" expression has the lower-order (minimum) of its two
  1298.         subexpression values.
  1299.  
  1300.    *  A "||" expression has the higher-order (maximum) of its two
  1301.       subexpression values.
  1302.  
  1303.    *  A "<K>-of(<List>)" expression has the K-th highest order
  1304.       compliance value listed in <list>.  Values that appear multiple
  1305.       times are counted with multiplicity.  For example, if K = 3 and
  1306.       the orders of the listed compliance values are (0, 1, 2, 2, 3),
  1307.       the value of the expression is the compliance value of order 2.
  1308.  
  1309.    For example, consider the following Licensees field:
  1310.  
  1311.         Licensees: ("alice" && "bob") || "eve"
  1312.  
  1313.    If the Principal Compliance Value is "yes" for principal "alice",
  1314.    "no" for principal "bob", and "no" for principal "eve", and "yes" is
  1315.    higher order than "no" in the query's Compliance Value Set, then the
  1316.    resulting Licensee Compliance Value is "no".
  1317.  
  1318.    Observe that if there are exactly two possible compliance values
  1319.    (e.g., "false" and "true"), the rules of Licensee Compliance Value
  1320.    resolution reduce exactly to standard Boolean logic.
  1321.  
  1322. 5.4  Assertion Management
  1323.  
  1324.    Assertions may be either signed or unsigned.  Only signed assertions
  1325.    should be used as credentials or transmitted or stored on untrusted
  1326.    media.  Unsigned assertions should be used only to specify policy and
  1327.    for assertions whose integrity has already been verified as
  1328.    conforming to local policy by some mechanism external to the KeyNote
  1329.    system itself (e.g., X.509 certificates converted to KeyNote
  1330.    assertions by a trusted conversion program).
  1331.  
  1332.    Implementations that permit signed credentials to be verified by the
  1333.    KeyNote compliance checker generally provide two `channels' through
  1334.    which applications can make assertions available.  Unsigned,
  1335.    locally-trusted assertions are provided over a `trusted' interface,
  1336.    while signed credentials are provided over an `untrusted' interface.
  1337.    The KeyNote compliance checker verifies correct signatures for all
  1338.    assertions submitted over the untrusted interface.  The integrity of
  1339.    KeyNote evaluation requires that only assertions trusted as
  1340.    reflecting local policy are submitted to KeyNote via the trusted
  1341.    interface.
  1342.  
  1343.  
  1344.  
  1345.  
  1346. Blaze, et al.                Informational                     [Page 24]
  1347.  
  1348. RFC 2704          The KeyNote Trust-Management System     September 1999
  1349.  
  1350.  
  1351.    Note that applications that use KeyNote exclusively as a local policy
  1352.    specification mechanism need use only trusted assertions.  Other
  1353.    applications might need only a small number of infrequently changed
  1354.    trusted assertions to `bootstrap' a policy whose details are
  1355.    specified in signed credentials issued by others and submitted over
  1356.    the untrusted interface.
  1357.  
  1358. 5.5  Implementation Issues
  1359.  
  1360.    Informally, the semantics of KeyNote evaluation can be thought of as
  1361.    involving the construction a directed graph of KeyNote assertions
  1362.    rooted at a POLICY assertion that connects with at least one of the
  1363.    principals that requested the action.
  1364.  
  1365.    Delegation of some authorization from principal <A> to a set of
  1366.    principals <B> is expressed as an assertion with principal <A> given
  1367.    in the Authorizer field, principal set <B> given in the Licensees
  1368.    field, and the authorization to be delegated encoded in the
  1369.    Conditions field.  How the expression digraph is constructed is
  1370.    implementation-dependent and implementations may use different
  1371.    algorithms for optimizing the graph's construction.  Some
  1372.    implementations might use a `bottom up' traversal starting at the
  1373.    principals that requested the action, others might follow a `top
  1374.    down' approach starting at the POLICY assertions, and still others
  1375.    might employ other heuristics entirely.
  1376.  
  1377.    Implementations are encouraged to employ mechanisms for recording
  1378.    exceptions (such as division by zero or syntax error), and reporting
  1379.    them to the invoking application if requested.  Such mechanisms are
  1380.    outside the scope of this document.
  1381.  
  1382. 6.  Examples
  1383.  
  1384.    In this section, we give examples of KeyNote assertions that might be
  1385.    used in hypothetical applications.  These examples are intended
  1386.    primarily to illustrate features of KeyNote assertion syntax and
  1387.    semantics, and do not necessarily represent the best way to integrate
  1388.    KeyNote into applications.
  1389.  
  1390.    In the interest of readability, we use much shorter keys than would
  1391.    ordinarily be used in practice.  Note that the Signature fields in
  1392.    these examples do not represent the result of any real signature
  1393.    calculation.
  1394.  
  1395.  
  1396.  
  1397.  
  1398.  
  1399.  
  1400.  
  1401.  
  1402. Blaze, et al.                Informational                     [Page 25]
  1403.  
  1404. RFC 2704          The KeyNote Trust-Management System     September 1999
  1405.  
  1406.  
  1407.    1. TRADITIONAL CA / EMAIL
  1408.  
  1409.       A. A policy unconditionally authorizing RSA key abc123 for all
  1410.          actions.  This essentially defers the ability to specify
  1411.          policy to the holder of the secret key corresponding to
  1412.          abc123:
  1413.  
  1414.            Authorizer: "POLICY"
  1415.            Licensees: "RSA:abc123"
  1416.  
  1417.       B. A credential assertion in which RSA Key abc123 trusts either
  1418.          RSA key 4401ff92 (called `Alice') or DSA key d1234f (called
  1419.          `Bob') to perform actions in which the "app_domain" is
  1420.          "RFC822-EMAIL", where the "address" matches the regular
  1421.          expression "^.*@keynote\.research\.att\.com$".  In other
  1422.          words, abc123 trusts Alice and Bob as certification
  1423.          authorities for the keynote.research.att.com domain.
  1424.  
  1425.            KeyNote-Version: 2
  1426.            Local-Constants: Alice="DSA:4401ff92"  # Alice's key
  1427.                             Bob="RSA:d1234f"      # Bob's key
  1428.            Authorizer: "RSA:abc123"
  1429.            Licensees: Alice || Bob
  1430.            Conditions: (app_domain == "RFC822-EMAIL") &&
  1431.                        (address ~=   # only applies to one domain
  1432.                          "^.*@keynote\\.research\\.att\\.com$");
  1433.            Signature: "RSA-SHA1:213354f9"
  1434.  
  1435.       C. A certificate credential for a specific user whose email
  1436.          address is mab@keynote.research.att.com and whose name, if
  1437.          present, must be "M. Blaze". The credential was issued by the
  1438.          `Alice' authority (whose key is certified in Example B
  1439.          above):
  1440.  
  1441.            KeyNote-Version: 2
  1442.            Authorizer: "DSA:4401ff92"  # the Alice CA
  1443.            Licensees: "DSA:12340987"   # mab's key
  1444.            Conditions: ((app_domain == "RFC822-EMAIL") &&
  1445.                         (name == "M. Blaze" || name == "") &&
  1446.                         (address == "mab@keynote.research.att.com"));
  1447.            Signature: "DSA-SHA1:ab23487"
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458. Blaze, et al.                Informational                     [Page 26]
  1459.  
  1460. RFC 2704          The KeyNote Trust-Management System     September 1999
  1461.  
  1462.  
  1463.       D. Another certificate credential for a specific user, also
  1464.          issued by the `Alice' authority.  This example allows three
  1465.          different keys to sign as jf@keynote.research.att.com (each
  1466.          for a different cryptographic algorithm).  This is, in
  1467.          effect, three credentials in one:
  1468.  
  1469.            KeyNote-Version: "2"
  1470.            Authorizer: "DSA:4401ff92"   # the Alice CA
  1471.            Licensees: "DSA:abc991" ||   # jf's DSA key
  1472.                       "RSA:cde773" ||   # jf's RSA key
  1473.                       "BFIK:fd091a"     # jf's BFIK key
  1474.            Conditions: ((app_domain == "RFC822-EMAIL") &&
  1475.                         (name == "J. Feigenbaum" || name == "") &&
  1476.                         (address == "jf@keynote.research.att.com"));
  1477.            Signature: "DSA-SHA1:8912aa"
  1478.  
  1479.          Observe that under policy A and credentials B, C and D, the
  1480.          following action attribute sets are accepted (they return
  1481.          _MAX_TRUST):
  1482.  
  1483.              _ACTION_AUTHORIZERS = "dsa:12340987"
  1484.              app_domain = "RFC822-EMAIL"
  1485.              address = "mab@keynote.research.att.com"
  1486.           and
  1487.              _ACTION_AUTHORIZERS = "dsa:12340987"
  1488.              app_domain = "RFC822-EMAIL"
  1489.              address = "mab@keynote.research.att.com"
  1490.              name = "M. Blaze"
  1491.  
  1492.          while the following are not accepted (they return
  1493.          _MIN_TRUST):
  1494.  
  1495.              _ACTION_AUTHORIZERS = "dsa:12340987"
  1496.              app_domain = "RFC822-EMAIL"
  1497.              address = "angelos@dsl.cis.upenn.edu"
  1498.           and
  1499.              _ACTION_AUTHORIZERS = "dsa:abc991"
  1500.              app_domain = "RFC822-EMAIL"
  1501.              address = "mab@keynote.research.att.com"
  1502.              name = "M. Blaze"
  1503.           and
  1504.              _ACTION_AUTHORIZERS = "dsa:12340987"
  1505.              app_domain = "RFC822-EMAIL"
  1506.              address = "mab@keynote.research.att.com"
  1507.              name = "J. Feigenbaum"
  1508.  
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514. Blaze, et al.                Informational                     [Page 27]
  1515.  
  1516. RFC 2704          The KeyNote Trust-Management System     September 1999
  1517.  
  1518.  
  1519.    2. WORKFLOW/ELECTRONIC COMMERCE
  1520.  
  1521.       E. A policy that delegates authority for the "SPEND" application
  1522.          domain to RSA key dab212 when the amount given in the
  1523.          "dollars" attribute is less than 10000.
  1524.  
  1525.            Authorizer: "POLICY"
  1526.            Licensees: "RSA:dab212"  # the CFO's key
  1527.            Conditions: (app_domain=="SPEND") && (@dollars < 10000);
  1528.  
  1529.       F. RSA key dab212 delegates authorization to any two signers,
  1530.          from a list, one of which must be DSA key feed1234 in the
  1531.          "SPEND" application when @dollars < 7500.  If the amount in
  1532.          @dollars is 2500 or greater, the request is approved but
  1533.          logged.
  1534.  
  1535.            KeyNote-Version: 2
  1536.            Comment: This credential specifies a spending policy
  1537.            Authorizer: "RSA:dab212"        # the CFO
  1538.            Licensees: "DSA:feed1234" &&    # The vice president
  1539.                           ("RSA:abc123" || # middle manager #1
  1540.                            "DSA:bcd987" || # middle manager #2
  1541.                            "DSA:cde333" || # middle manager #3
  1542.                            "DSA:def975" || # middle manager #4
  1543.                            "DSA:978add")   # middle manager #5
  1544.            Conditions: (app_domain=="SPEND")  # note nested clauses
  1545.                          -> { (@(dollars) < 2500)
  1546.                                 -> _MAX_TRUST;
  1547.                               (@(dollars) < 7500)
  1548.                                 -> "ApproveAndLog";
  1549.                             };
  1550.            Signature: "RSA-SHA1:9867a1"
  1551.  
  1552.       G. According to this policy, any two signers from the list of
  1553.          managers will do if @(dollars) < 1000:
  1554.  
  1555.            KeyNote-Version: 2
  1556.            Authorizer: "POLICY"
  1557.            Licensees: 2-of("DSA:feed1234", # The VP
  1558.                            "RSA:abc123",   # Middle management clones
  1559.                            "DSA:bcd987",
  1560.                            "DSA:cde333",
  1561.                            "DSA:def975",
  1562.                            "DSA:978add")
  1563.            Conditions: (app_domain=="SPEND") &&
  1564.                        (@(dollars) < 1000);
  1565.  
  1566.  
  1567.  
  1568.  
  1569.  
  1570. Blaze, et al.                Informational                     [Page 28]
  1571.  
  1572. RFC 2704          The KeyNote Trust-Management System     September 1999
  1573.  
  1574.  
  1575.       H. A credential from dab212 with a similar policy, but only one
  1576.          signer is required if @(dollars) < 500.  A log entry is made if
  1577.          the amount is at least 100.
  1578.  
  1579.            KeyNote-Version: 2
  1580.            Comment: This one credential is equivalent to six separate
  1581.                     credentials, one for each VP and middle manager.
  1582.                     Individually, they can spend up to $500, but if
  1583.                     it's $100 or more, we log it.
  1584.            Authorizer: "RSA:dab212"      # From the CFO
  1585.            Licensees: "DSA:feed1234" ||  # The VP
  1586.                       "RSA:abc123" ||    # The middle management clones
  1587.                       "DSA:bcd987" ||
  1588.                       "DSA:cde333" ||
  1589.                       "DSA:def975" ||
  1590.                       "DSA:978add"
  1591.            Conditions: (app_domain="SPEND")  # nested clauses
  1592.                          -> { (@(dollars) < 100) -> _MAX_TRUST;
  1593.                               (@(dollars) < 500) -> "ApproveAndLog";
  1594.                             };
  1595.            Signature: "RSA-SHA1:186123"
  1596.  
  1597.       Assume a query in which the ordered set of Compliance Values is
  1598.       {"Reject", "ApproveAndLog", "Approve"}.  Under policies E and G,
  1599.       and credentials F and H, the Policy Compliance Value is
  1600.       "Approve" (_MAX_TRUST) when:
  1601.  
  1602.            _ACTION_AUTHORIZERS = "DSA:978add"
  1603.            app_domain = "SPEND"
  1604.            dollars = "45"
  1605.            unmentioned_attribute = "whatever"
  1606.        and
  1607.            _ACTION_AUTHORIZERS = "RSA:abc123,DSA:cde333"
  1608.            app_domain = "SPEND"
  1609.            dollars = "550"
  1610.  
  1611.       The following return "ApproveAndLog":
  1612.  
  1613.            _ACTION_AUTHORIZERS = "DSA:feed1234,DSA:cde333"
  1614.            app_domain = "SPEND"
  1615.            dollars = "5500"
  1616.        and
  1617.            _ACTION_AUTHORIZERS = "DSA:cde333"
  1618.            app_domain = "SPEND"
  1619.            dollars = "150"
  1620.  
  1621.  
  1622.  
  1623.  
  1624.  
  1625.  
  1626. Blaze, et al.                Informational                     [Page 29]
  1627.  
  1628. RFC 2704          The KeyNote Trust-Management System     September 1999
  1629.  
  1630.  
  1631.       However, the following return "Reject" (_MIN_TRUST):
  1632.  
  1633.            _ACTION_AUTHORIZERS = "DSA:def975"
  1634.            app_domain = "SPEND"
  1635.            dollars = "550"
  1636.        and
  1637.            _ACTION_AUTHORIZERS = "DSA:cde333,DSA:978add"
  1638.            app_domain = "SPEND"
  1639.            dollars = "5500"
  1640.  
  1641. 7.  Trust-Management Architecture
  1642.  
  1643.    KeyNote provides a simple mechanism for describing security policy
  1644.    and representing credentials.  It differs from traditional
  1645.    certification systems in that the security model is based on binding
  1646.    keys to predicates that describe what the key is authorized by policy
  1647.    to do, rather than on resolving names.  The infrastructure and
  1648.    architecture to support a KeyNote system is therefore rather
  1649.    different from that required for a name-based certification scheme.
  1650.    The KeyNote trust-management architecture is based on that of
  1651.    PolicyMaker [BFL96,BFS98].
  1652.  
  1653.    It is important to understand the separation between the
  1654.    responsibilities of the KeyNote system and those of the application
  1655.    and other support infrastructure.  A KeyNote compliance checker will
  1656.    determine, based on policy and credential assertions, whether a
  1657.    proposed action is permitted according to policy.  The usefulness of
  1658.    KeyNote output as a policy enforcement mechanism depends on a number
  1659.    of factors:
  1660.  
  1661.    *  The action attributes and the assignment of their values must
  1662.       reflect accurately the security requirements of the application.
  1663.       Identifying the attributes to include in the action attribute set
  1664.       is perhaps the most important task in integrating KeyNote into new
  1665.       applications.
  1666.  
  1667.    *  The policy of the application must be correct and well-formed.  In
  1668.       particular, trust must be deferred only to principals that should,
  1669.       in fact, be trusted by the application.
  1670.  
  1671.    *  The application itself must be trustworthy.  KeyNote does not
  1672.       directly enforce policy; it only provides advice to the
  1673.       applications that call it.  In other words, KeyNote assumes that
  1674.       the application itself is trusted and that the policy assertions
  1675.       it specifies are correct.  Nothing prevents an application from
  1676.       submitting misleading or incorrect assertions to KeyNote or from
  1677.       ignoring KeyNote altogether.
  1678.  
  1679.  
  1680.  
  1681.  
  1682. Blaze, et al.                Informational                     [Page 30]
  1683.  
  1684. RFC 2704          The KeyNote Trust-Management System     September 1999
  1685.  
  1686.  
  1687.    It is also up to the application (or some service outside KeyNote) to
  1688.    select the appropriate credentials and policy assertions with which
  1689.    to run a particular query.  Note, however, that even if inappropriate
  1690.    credentials are provided to KeyNote, this cannot result in the
  1691.    approval of an illegal action (as long as the policy assertions are
  1692.    correct and the the action attribute set itself is correctly passed
  1693.    to KeyNote).
  1694.  
  1695.    KeyNote is monotonic; adding an assertion to a query can never result
  1696.    in a query's having a lower compliance value that it would have had
  1697.    without the assertion.  Omitting credentials may, of course, result
  1698.    in legal actions being disallowed.  Selecting appropriate credentials
  1699.    (e.g., from a distributed database or `key server') is outside the
  1700.    scope of the KeyNote language and may properly be handled by a remote
  1701.    client making a request, by the local application receiving the
  1702.    request, or by a network-based service, depending on the application.
  1703.  
  1704.    In addition, KeyNote does not itself provide credential revocation
  1705.    services, although credentials can be written to expire after some
  1706.    date by including a date test in the predicate.  Applications that
  1707.    require credential revocation can use KeyNote to help specify and
  1708.    implement revocation policies.  A future document will address
  1709.    expiration and revocation services in KeyNote.
  1710.  
  1711.    Because KeyNote is designed to support a variety of applications,
  1712.    several different application interfaces to a KeyNote implementation
  1713.    are possible.  In its simplest form, a KeyNote compliance checker
  1714.    would exist as a stand-alone application, with other applications
  1715.    calling it as needed.  KeyNote might also be implemented as a library
  1716.    to which applications are linked.  Finally, a KeyNote implementation
  1717.    might run as a local trusted service, with local applications
  1718.    communicating their queries via some interprocess communication
  1719.    mechanism.
  1720.  
  1721. 8.  Security Considerations
  1722.  
  1723.    Trust management is itself a security service.  Bugs in or incorrect
  1724.    use of a KeyNote compliance checker implementation could have
  1725.    security implications for any applications in which it is used.
  1726.  
  1727. 9. IANA Considerations
  1728.  
  1729.    This document contains three identifiers to be maintained by the
  1730.    IANA.  This section explains the criteria to be used by the IANA to
  1731.    assign additional identifiers in each of these lists.
  1732.  
  1733.  
  1734.  
  1735.  
  1736.  
  1737.  
  1738. Blaze, et al.                Informational                     [Page 31]
  1739.  
  1740. RFC 2704          The KeyNote Trust-Management System     September 1999
  1741.  
  1742.  
  1743. 9.1  app_domain Identifiers
  1744.  
  1745.    The only thing required of IANA on allocation of these identifiers is
  1746.    that they be unique strings.  These strings are case-sensitive for
  1747.    KeyNote purposes, however it is strongly recommended that IANA assign
  1748.    different capitalizations of the same string only to the same
  1749.    organization.
  1750.  
  1751. 9.2  Public Key Format Identifiers
  1752.  
  1753.    These strings uniquely identify a public key algorithm as used in the
  1754.    KeyNote system for representing keys.  Requests for assignment of new
  1755.    identifiers must be accompanied by an RFC-style document that
  1756.    describes the details of this encoding.  Example strings are "rsa-
  1757.    hex:" and "dsa-base64:".  These strings are case-insensitive.
  1758.  
  1759. 9.3  Signature Algorithm Identifiers
  1760.  
  1761.    These strings uniquely identify a public key algorithm as used in the
  1762.    KeyNote system for representing public key signatures.  Requests for
  1763.    assignment of new identifiers must be accompanied by an RFC-style
  1764.    document that describes the details of this encoding. Example strings
  1765.    are "sig-rsa-md5-hex:" and "sig-dsa-sha1-base64:".  Note that all
  1766.    such strings must begin with the prefix "sig-".  These strings are
  1767.    case-insensitive.
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774.  
  1775.  
  1776.  
  1777.  
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.  
  1787.  
  1788.  
  1789.  
  1790.  
  1791.  
  1792.  
  1793.  
  1794. Blaze, et al.                Informational                     [Page 32]
  1795.  
  1796. RFC 2704          The KeyNote Trust-Management System     September 1999
  1797.  
  1798.  
  1799. A.  Acknowledgments
  1800.  
  1801.    We thank Lorrie Faith Cranor (AT&T Labs - Research) and Jonathan M.
  1802.    Smith (University of Pennsylvania) for their suggestions and comments
  1803.    on earlier versions of this document.
  1804.  
  1805. B.  Full BNF (alphabetical order)
  1806.  
  1807.    <ALGORITHM>:: {see section 4.4.2} ;
  1808.  
  1809.    <Assertion>:: <VersionField>? <AuthField> <LicenseesField>?
  1810.                  <LocalConstantsField>? <ConditionsField>?
  1811.                  <CommentField>? <SignatureField>? ;
  1812.  
  1813.    <Assignments>:: "" | <AttributeID> "=" <StringLiteral> <Assignments>
  1814.    ;
  1815.  
  1816.    <AttributeID>:: {Any string starting with a-z, A-Z, or the
  1817.                     underscore character, followed by any number of
  1818.                     a-z, A-Z, 0-9, or underscore characters} ;
  1819.  
  1820.    <AuthField>:: "Authorizer:" <AuthID> ;
  1821.  
  1822.    <AuthID>:: <PrincipalIdentifier> | <DerefAttribute> ;
  1823.  
  1824.    <Clause>:: <Test> "->" "{" <ConditionsProgram> "}"
  1825.             | <Test> "->" <Value> | <Test> ;
  1826.  
  1827.    <Comment>:: "#" {ASCII characters} ;
  1828.  
  1829.    <CommentField>:: "Comment:" {Free-form text} ;
  1830.  
  1831.    <ConditionsField>:: "Conditions:" <ConditionsProgram> ;
  1832.  
  1833.    <ConditionsProgram>:: "" | <Clause> ";" <ConditionsProgram> ;
  1834.  
  1835.    <DerefAttribute>:: <AttributeID> ;
  1836.  
  1837.    <ENCODEDBITS>:: {see section 4.4.2} ;
  1838.  
  1839.    <FloatEx>:: <FloatEx> "+" <FloatEx> | <FloatEx> "-" <FloatEx>
  1840.              | <FloatEx> "*" <FloatEx> | <FloatEx> "/" <FloatEx>
  1841.              | <FloatEx> "^" <FloatEx> | "-" <FloatEx>
  1842.              | "(" <FloatEx> ")" | <FloatLiteral> | "&" <StrEx> ;
  1843.  
  1844.    <FloatRelExpr>:: <FloatEx> "<" <FloatEx> | <FloatEx> ">" <FloatEx>
  1845.                   | <FloatEx> "<=" <FloatEx>
  1846.                   | <FloatEx> ">=" <FloatEx> ;
  1847.  
  1848.  
  1849.  
  1850. Blaze, et al.                Informational                     [Page 33]
  1851.  
  1852. RFC 2704          The KeyNote Trust-Management System     September 1999
  1853.  
  1854.  
  1855.    <FloatLiteral>:: <IntegerLiteral>"."<IntegerLiteral> ;
  1856.  
  1857.    <IDString>:: <ALGORITHM>":"<ENCODEDBITS> ;
  1858.  
  1859.    <IntegerLiteral>:: {Decimal number of at least one digit} ;
  1860.  
  1861.    <IntEx>:: <IntEx> "+" <IntEx> | <IntEx> "-" <IntEx>
  1862.            | <IntEx> "*" <IntEx> | <IntEx> "/" <IntEx>
  1863.            | <IntEx> "%" <IntEx> | <IntEx> "^" <IntEx>
  1864.            | "-" <IntEx> | "(" <IntEx> ")" | <IntegerLiteral>
  1865.            | "@" <StrEx> ;
  1866.  
  1867.    <IntRelExpr>:: <IntEx> "==" <IntEx> | <IntEx> "!=" <IntEx>
  1868.                 | <IntEx> "<" <IntEx>  | <IntEx> ">" <IntEx>
  1869.                 | <IntEx> "<=" <IntEx> | <IntEx> ">=" <IntEx> ;
  1870.  
  1871.    <K>:: {Decimal number starting with a digit from 1 to 9} ;
  1872.  
  1873.    <KeyID>:: <StrEx> ;
  1874.  
  1875.    <LicenseesExpr>:: "" | <PrincExpr> ;
  1876.  
  1877.    <LicenseesField>:: "Licensees:" <LicenseesExpr> ;
  1878.  
  1879.    <LocalConstantsField>:: "Local-Constants:" <Assignments> ;
  1880.  
  1881.    <OpaqueID>:: <StrEx> ;
  1882.  
  1883.    <PrincExpr>:: "(" <PrincExpr> ")" | <PrincExpr> "&&" <PrincExpr>
  1884.                | <PrincExpr> "||" <PrincExpr>
  1885.                | <K>"-of(" <PrincList> ")" | <PrincipalIdentifier>
  1886.                | <DerefAttribute> ;
  1887.  
  1888.    <PrincipalIdentifier>:: <OpaqueID> | <KeyID> ;
  1889.  
  1890.    <PrincList>:: <PrincipalIdentifier> | <DerefAttribute>
  1891.                | <PrincList> "," <PrincList> ;
  1892.  
  1893.    <RegExpr>:: {POSIX 1003.2 Regular Expression}
  1894.  
  1895.    <RelExpr>:: "(" <RelExpr> ")" | <RelExpr> "&&" <RelExpr>
  1896.              | <RelExpr> "||" <RelExpr> | "!" <RelExpr>
  1897.              | <IntRelExpr> | <FloatRelExpr> | <StringRelExpr>
  1898.              | "true" | "false" ;
  1899.  
  1900.    <Signature>:: <StrEx> ;
  1901.  
  1902.    <SignatureField>:: "Signature:" <Signature> ;
  1903.  
  1904.  
  1905.  
  1906. Blaze, et al.                Informational                     [Page 34]
  1907.  
  1908. RFC 2704          The KeyNote Trust-Management System     September 1999
  1909.  
  1910.  
  1911.    <StrEx>:: <StrEx> "." <StrEx> | <StringLiteral> | "(" <StrEx> ")"
  1912.            | <DerefAttribute> | "$" <StrEx> ;
  1913.  
  1914.    <StringLiteral>:: {see section 4.3.1} ;
  1915.  
  1916.    <StringRelExpr>:: <StrEx> "==" <StrEx> | <StrEx> "!=" <StrEx>
  1917.                    | <StrEx> "<" <StrEx> | <StrEx> ">" <StrEx>
  1918.                    | <StrEx> "<=" <StrEx> | <StrEx> ">=" <StrEx>
  1919.                    | <StrEx> "~=" <RegExpr> ;
  1920.  
  1921.    <Test>:: <RelExpr> ;
  1922.  
  1923.    <Value>:: <StrEx> ;
  1924.  
  1925.    <VersionField>:: "KeyNote-Version:" <VersionString> ;
  1926.  
  1927.    <VersionString>:: <StringLiteral> | <IntegerLiteral> ;
  1928.  
  1929. References
  1930.  
  1931.    [BFL96] M. Blaze, J. Feigenbaum, J. Lacy. Decentralized Trust
  1932.            Management. Proceedings of the 17th IEEE Symp. on Security
  1933.            and Privacy. pp 164-173.  IEEE Computer Society, 1996.
  1934.            Available at
  1935.            <ftp://ftp.research.att.com/dist/mab/policymaker.ps>
  1936.  
  1937.    [BFS98] M. Blaze, J. Feigenbaum, M. Strauss. Compliance-Checking in
  1938.            the PolicyMaker Trust-Management System. Proc. 2nd Financial
  1939.            Crypto Conference. Anguilla 1998.  LNCS #1465, pp 251-265,
  1940.            Springer-Verlag, 1998.  Available at
  1941.            <ftp://ftp.research.att.com/dist/mab/pmcomply.ps>
  1942.  
  1943.    [Bla99] M. Blaze, J. Feigenbaum, J. Ioannidis, A. Keromytis.  The
  1944.            Role of Trust Management in Distributed System Security.
  1945.            Chapter in Secure Internet Programming: Security Issues for
  1946.            Mobile and Distributed Objects (Vitek and Jensen, eds.).
  1947.            Springer-Verlag, 1999.  Available at
  1948.            <ftp://ftp.research.att.com/dist/mab/trustmgt.ps>.
  1949.  
  1950.    [Cro82] Crocker, D., "Standard for the Format of ARPA Internet Text
  1951.            Messages", STD 11, RFC 822, August 1982.
  1952.  
  1953.    [DSA94] Digital Signature Standard. FIPS-186. National Institute of
  1954.            Standards, U.S. Department of Commerce. May 1994.
  1955.  
  1956.    [PKCS1] PKCS #1: RSA Encryption Standard, Version 1.5. RSA
  1957.            Laboratories. November 1993.
  1958.  
  1959.  
  1960.  
  1961.  
  1962. Blaze, et al.                Informational                     [Page 35]
  1963.  
  1964. RFC 2704          The KeyNote Trust-Management System     September 1999
  1965.  
  1966.  
  1967.    [RSA78] R. L. Rivest, A. Shamir, L. M. Adleman.  A Method for
  1968.            Obtaining Digital Signatures and Public-Key Cryptosystems.
  1969.            Communications of the ACM, v21n2. pp 120-126.  February 1978.
  1970.  
  1971. Authors' Addresses
  1972.  
  1973.    Comments about this document should be discussed on the keynote-users
  1974.    mailing list hosted at nsa.research.att.com.  To subscribe, send an
  1975.    email message containing the single line
  1976.                  subscribe keynote-users
  1977.    in the message body to <majordomo@nsa.research.att.com>.
  1978.  
  1979.    Questions about this document can also be directed to the authors as
  1980.    a group at the keynote@research.att.com alias, or to the individual
  1981.    authors at:
  1982.  
  1983.    Matt Blaze
  1984.    AT&T Labs - Research
  1985.    180 Park Avenue
  1986.    Florham Park, New Jersey 07932-0971
  1987.  
  1988.    EMail: mab@research.att.com
  1989.  
  1990.  
  1991.    Joan Feigenbaum
  1992.    AT&T Labs - Research
  1993.    180 Park Avenue
  1994.    Florham Park, New Jersey 07932-0971
  1995.  
  1996.    EMail: jf@research.att.com
  1997.  
  1998.  
  1999.    John Ioannidis
  2000.    AT&T Labs - Research
  2001.    180 Park Avenue
  2002.    Florham Park, New Jersey 07932-0971
  2003.  
  2004.    EMail: ji@research.att.com
  2005.  
  2006.  
  2007.    Angelos D. Keromytis
  2008.    Distributed Systems Lab
  2009.    CIS Department, University of Pennsylvania
  2010.    200 S. 33rd Street
  2011.    Philadelphia, Pennsylvania  19104-6389
  2012.  
  2013.    EMail: angelos@dsl.cis.upenn.edu
  2014.  
  2015.  
  2016.  
  2017.  
  2018. Blaze, et al.                Informational                     [Page 36]
  2019.  
  2020. RFC 2704          The KeyNote Trust-Management System     September 1999
  2021.  
  2022.  
  2023. Full Copyright Statement
  2024.  
  2025.    Copyright (C) The Internet Society (1999).  All Rights Reserved.
  2026.  
  2027.    This document and translations of it may be copied and furnished to
  2028.    others, and derivative works that comment on or otherwise explain it
  2029.    or assist in its implementation may be prepared, copied, published
  2030.    and distributed, in whole or in part, without restriction of any
  2031.    kind, provided that the above copyright notice and this paragraph are
  2032.    included on all such copies and derivative works.  However, this
  2033.    document itself may not be modified in any way, such as by removing
  2034.    the copyright notice or references to the Internet Society or other
  2035.    Internet organizations, except as needed for the purpose of
  2036.    developing Internet standards in which case the procedures for
  2037.    copyrights defined in the Internet Standards process must be
  2038.    followed, or as required to translate it into languages other than
  2039.    English.
  2040.  
  2041.    The limited permissions granted above are perpetual and will not be
  2042.    revoked by the Internet Society or its successors or assigns.
  2043.  
  2044.    This document and the information contained herein is provided on an
  2045.    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
  2046.    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
  2047.    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
  2048.    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
  2049.    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  2050.  
  2051. Acknowledgement
  2052.  
  2053.    Funding for the RFC Editor function is currently provided by the
  2054.    Internet Society.
  2055.  
  2056.  
  2057.  
  2058.  
  2059.  
  2060.  
  2061.  
  2062.  
  2063.  
  2064.  
  2065.  
  2066.  
  2067.  
  2068.  
  2069.  
  2070.  
  2071.  
  2072.  
  2073.  
  2074. Blaze, et al.                Informational                     [Page 37]
  2075.  
  2076.