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

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                           A. Chiu
  8. Request for Comments: 2695                             Sun Microsystems
  9. Category: Informational                                  September 1999
  10.  
  11.  
  12.                  Authentication Mechanisms for ONC RPC
  13.  
  14. Status of this Memo
  15.  
  16.    This memo provides information for the Internet community.  It does
  17.    not specify an Internet standard of any kind.  Distribution of this
  18.    memo is unlimited.
  19.  
  20. Copyright Notice
  21.  
  22.    Copyright (C) The Internet Society (1999).  All Rights Reserved.
  23.  
  24. ABSTRACT
  25.  
  26.    This document describes two authentication mechanisms created by Sun
  27.    Microsystems that are commonly used in conjunction with the ONC
  28.    Remote Procedure Call (ONC RPC Version 2) protocol.
  29.  
  30. WARNING
  31.  
  32.    The DH authentication as defined in Section 2 in this document refers
  33.    to the authentication mechanism with flavor AUTH_DH currently
  34.    implemented in ONC RPC.  It uses the underlying Diffie-Hellman
  35.    algorithm for key exchange.  The DH authentication defined in this
  36.    document is flawed due to the selection of a small prime for the BASE
  37.    field (Section 2.5). To avoid the flaw a new DH authentication
  38.    mechanism could be defined with a larger prime.  However, the new DH
  39.    authentication would not be interoperable with the existing DH
  40.    authentication.
  41.  
  42.    As illustrated in [10], a large number of attacks are possible on ONC
  43.    RPC system services that use non-secure authentication mechanisms.
  44.    Other secure authentication mechanisms need to be developed for ONC
  45.    RPC.  RFC 2203 describes the RPCSEC_GSS ONC RPC security flavor, a
  46.    secure authentication mechanism that enables RPC protocols to use
  47.    Generic Security Service Application Program Interface (RFC 2078) to
  48.    provide security services, integrity and privacy, that are
  49.    independent of the underlying security mechanisms.
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58. Chiu                         Informational                      [Page 1]
  59.  
  60. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  61.  
  62.  
  63. Table of Contents
  64.  
  65.       1. Introduction ............................................... 2
  66.       2. Diffie-Hellman Authentication .............................. 2
  67.       2.1 Naming .................................................... 3
  68.       2.2 DH Authentication Verifiers ............................... 3
  69.       2.3 Nicknames and Clock Synchronization ....................... 5
  70.       2.4 DH Authentication Protocol Specification .................. 5
  71.       2.4.1 The Full Network Name Credential and Verifier (Client) .. 6
  72.       2.4.2 The Nickname Credential and Verifier (Client) ........... 8
  73.       2.4.3 The Nickname Verifier (Server) .......................... 9
  74.       2.5 Diffie-Hellman Encryption ................................. 9
  75.       3. Kerberos-based Authentication ............................. 10
  76.       3.1 Naming ................................................... 11
  77.       3.2 Kerberos-based Authentication Protocol Specification ..... 11
  78.       3.2.1 The Full Network Name Credential and Verifier (Client) . 12
  79.       3.2.2 The Nickname Credential and Verifier (Client) .......... 14
  80.       3.2.3 The Nickname Verifier (Server) ......................... 15
  81.       3.2.4 Kerberos-specific Authentication Status Values ......... 15
  82.       4. Security Considerations ................................... 16
  83.       5. REFERENCES ................................................ 16
  84.       6. AUTHOR'S ADDRESS .......................................... 17
  85.       7. FULL COPYRIGHT STATEMENT ...................................18
  86.  
  87. 1. Introduction
  88.  
  89.    The ONC RPC protocol provides the fields necessary for a client to
  90.    identify itself to a service, and vice-versa, in each call and reply
  91.    message.  Security and access control mechanisms can be built on top
  92.    of this message authentication.  Several different authentication
  93.    protocols can be supported.
  94.  
  95.    This document specifies two authentication protocols created by Sun
  96.    Microsystems that are commonly used: Diffie-Hellman (DH)
  97.    authentication and Kerberos (Version 4) based authentication.
  98.  
  99.    As a prerequisite to reading this document, the reader is expected to
  100.    be familiar with [1] and [2].  This document uses terminology and
  101.    definitions from [1] and [2].
  102.  
  103. 2. Diffie-Hellman Authentication
  104.  
  105.    System authentication (defined in [1]) suffers from some problems.
  106.    It is very UNIX oriented, and can be easily faked (there is no
  107.    attempt to provide cryptographically secure authentication).
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114. Chiu                         Informational                      [Page 2]
  115.  
  116. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  117.  
  118.  
  119.    DH authentication was created to address these problems.  However, it
  120.    has been compromised [9] due to the selection of a small length for
  121.    the prime in the ONC RPC implementation.  While the information
  122.    provided here will be useful for implementors to ensure
  123.    interoperability with existing applications that use DH
  124.    authentication, it is strongly recommended that new applications use
  125.    more secure authentication, and that existing applications that
  126.    currently use DH authentication migrate to more robust authentication
  127.    mechanisms.
  128.  
  129. 2.1 Naming
  130.  
  131.    The client is addressed by a simple string of characters instead of
  132.    by an operating system specific integer.  This string of characters
  133.    is known as the "netname" or network name of the client. The server
  134.    is not allowed to interpret the contents of the client's name in any
  135.    other way except to identify the client.  Thus, netnames should be
  136.    unique for every client in the Internet.
  137.  
  138.    It is up to each operating system's implementation of DH
  139.    authentication to generate netnames for its users that insure this
  140.    uniqueness when they call upon remote servers.  Operating systems
  141.    already know how to distinguish users local to their systems. It is
  142.    usually a simple matter to extend this mechanism to the network.  For
  143.    example, a UNIX(tm) user at Sun with a user ID of 515 might be
  144.    assigned the following netname: "unix.515@sun.com".  This netname
  145.    contains three items that serve to insure it is unique.  Going
  146.    backwards, there is only one naming domain called "sun.com" in the
  147.    Internet.  Within this domain, there is only one UNIX(tm) user with
  148.    user ID 515.  However, there may be another user on another operating
  149.    system, for example VMS, within the same naming domain that, by
  150.    coincidence, happens to have the same user ID. To insure that these
  151.    two users can be distinguished we add the operating system name. So
  152.    one user is "unix.515@sun.com" and the other is "vms.515@sun.com".
  153.    The first field is actually a naming method rather than an operating
  154.    system name.  It happens that today there is almost a one-to-one
  155.    correspondence between naming methods and operating systems.  If the
  156.    world could agree on a naming standard, the first field could be the
  157.    name of that standard, instead of an operating system name.
  158.  
  159. 2.2 DH Authentication Verifiers
  160.  
  161.    Unlike System authentication, DH authentication does have a verifier
  162.    so the server can validate the client's credential (and vice-versa).
  163.    The contents of this verifier are primarily an encrypted timestamp.
  164.    The server can decrypt this timestamp, and if it is within an
  165.    accepted range relative to the current time, then the client must
  166.    have encrypted it correctly.  The only way the client could encrypt
  167.  
  168.  
  169.  
  170. Chiu                         Informational                      [Page 3]
  171.  
  172. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  173.  
  174.  
  175.    it correctly is to know the "conversation key" of the RPC session,
  176.    and if the client knows the conversation key, then it must be the
  177.    real client.
  178.  
  179.    The conversation key is a DES [5] key which the client generates and
  180.    passes to the server in the first RPC call of a session.  The
  181.    conversation key is encrypted using a public key scheme in this first
  182.    transaction.  The particular public key scheme used in DH
  183.    authentication is Diffie-Hellman [3] with 192-bit keys.  The details
  184.    of this encryption method are described later.
  185.  
  186.    The client and the server need the same notion of the current time in
  187.    order for all of this to work, perhaps by using the Network Time
  188.    Protocol [4].  If network time synchronization cannot be guaranteed,
  189.    then the client can determine the server's time before beginning the
  190.    conversation using a time request protocol.
  191.  
  192.    The way a server determines if a client timestamp is valid is
  193.    somewhat complicated. For any other transaction but the first, the
  194.    server just checks for two things:
  195.  
  196.    (1) the timestamp is greater than the one previously seen from the
  197.    same client.  (2) the timestamp has not expired.
  198.  
  199.    A timestamp is expired if the server's time is later than the sum of
  200.    the client's timestamp plus what is known as the client's "ttl"
  201.    (standing for "time-to-live" - you can think of this as the lifetime
  202.    for the client's credential).  The "ttl" is a number the client
  203.    passes (encrypted) to the server in its first transaction.
  204.  
  205.    In the first transaction, the server checks only that the timestamp
  206.    has not expired.  Also, as an added check, the client sends an
  207.    encrypted item in the first transaction known as the "ttl verifier"
  208.    which must be equal to the time-to-live minus 1, or the server will
  209.    reject the credential.  If either check fails, the server rejects the
  210.    credential with an authentication status of AUTH_BADCRED, however if
  211.    the timestamp is earlier than the previous one seen, the server
  212.    returns an authentication status of AUTH_REJECTEDCRED.
  213.  
  214.    The client too must check the verifier returned from the server to be
  215.    sure it is legitimate.  The server sends back to the client the
  216.    timestamp it received from the client, minus one second, encrypted
  217.    with the conversation key.  If the client gets anything different
  218.    than this, it will reject it, returning an AUTH_INVALIDRESP
  219.    authentication status to the user.
  220.  
  221.  
  222.  
  223.  
  224.  
  225.  
  226. Chiu                         Informational                      [Page 4]
  227.  
  228. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  229.  
  230.  
  231. 2.3 Nicknames and Clock Synchronization
  232.  
  233.    After the first transaction, the server's DH authentication subsystem
  234.    returns in its verifier to the client an integer "nickname" which the
  235.    client may use in its further transactions instead of passing its
  236.    netname. The nickname could be an index into a table on the server
  237.    which stores for each client its netname, decrypted conversation key
  238.    and ttl.
  239.  
  240.    Though they originally were synchronized, the client's and server's
  241.    clocks can get out of synchronization again.  When this happens the
  242.    server returns to the client an authentication status of
  243.    AUTH_REJECTEDVERF at which point the client should attempt to
  244.    resynchronize.
  245.  
  246.    A client may also get an AUTH_BADCRED error when using a nickname
  247.    that was previously valid.  The reason is that the server's nickname
  248.    table is a limited size, and it may flush entries whenever it wants.
  249.    A client should resend its original full name credential in this case
  250.    and the server will give it a new nickname.  If a server crashes, the
  251.    entire nickname table gets flushed, and all clients will have to
  252.    resend their original credentials.
  253.  
  254. 2.4 DH Authentication Protocol Specification
  255.  
  256.    There are two kinds of credentials: one in which the client uses its
  257.    full network name, and one in which it uses its "nickname" (just an
  258.    unsigned integer) given to it by the server.  The client must use its
  259.    fullname in its first transaction with the server, in which the
  260.    server will return to the client its nickname.  The client may use
  261.    its nickname in all further transactions with the server. There is no
  262.    requirement to use the nickname, but it is wise to use it for
  263.    performance reasons.
  264.  
  265.    The following definitions are used for describing the protocol:
  266.  
  267.       enum authdh_namekind {
  268.          ADN_FULLNAME = 0,
  269.          ADN_NICKNAME = 1
  270.       };
  271.  
  272.       typedef opaque des_block[8]; /* 64-bit block of encrypted data */
  273.  
  274.       const MAXNETNAMELEN = 255;   /* maximum length of a netname */
  275.  
  276.    The flavor used for all DH authentication credentials and verifiers
  277.    is "AUTH_DH", with the numerical value 3.  The opaque data
  278.    constituting the client credential encodes the following structure:
  279.  
  280.  
  281.  
  282. Chiu                         Informational                      [Page 5]
  283.  
  284. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  285.  
  286.  
  287.    union authdh_cred switch (authdh_namekind namekind) {
  288.    case ADN_FULLNAME:
  289.       authdh_fullname fullname;
  290.    case ADN_NICKNAME:
  291.       authdh_nickname nickname;
  292.    };
  293.  
  294.    The opaque data constituting a verifier that accompanies a client
  295.    credential encodes the following structure:
  296.  
  297.    union authdh_verf switch (authdh_namekind namekind) {
  298.    case ADN_FULLNAME:
  299.       authdh_fullname_verf fullname_verf;
  300.    case ADN_NICKNAME:
  301.       authdh_nickname_verf nickname_verf;
  302.    };
  303.  
  304.    The opaque data constituting a verifier returned by a server in
  305.    response to a client request encodes the following structure:
  306.  
  307.    struct authdh_server_verf;
  308.  
  309.    These structures are described in detail below.
  310.  
  311. 2.4.1 The Full Network Name Credential and Verifier (Client)
  312.  
  313.    First, the client creates a conversation key for the session. Next,
  314.    the client fills out the following structure:
  315.  
  316.       +---------------------------------------------------------------+
  317.       |   timestamp   |  timestamp    |               |               |
  318.       |   seconds     | micro seconds |      ttl      |   ttl - 1     |
  319.       |   32 bits     |    32 bits    |    32 bits    |   32 bits     |
  320.       +---------------------------------------------------------------+
  321.       0              31              63              95             127
  322.  
  323.    The fields are stored in XDR (external data representation) format.
  324.    The timestamp encodes the time since midnight, January 1, 1970. These
  325.    128 bits of data are then encrypted in the DES CBC mode, using the
  326.    conversation key for the session, and with an initialization vector
  327.    of 0.  This yields:
  328.  
  329.       +---------------------------------------------------------------+
  330.       |               T               |               |               |
  331.       |     T1               T2       |      W1       |     W2        |
  332.       |   32 bits     |    32 bits    |    32 bits    |   32 bits     |
  333.       +---------------------------------------------------------------+
  334.       0              31              63              95             127
  335.  
  336.  
  337.  
  338. Chiu                         Informational                      [Page 6]
  339.  
  340. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  341.  
  342.  
  343.    where T1, T2, W1, and W2 are all 32-bit quantities, and have some
  344.    correspondence to the original quantities occupying their positions,
  345.    but are now interdependent on each other for proper decryption.  The
  346.    64 bit sequence comprising T1 and T2 is denoted by T.
  347.  
  348.    The full network name credential is represented as follows using XDR
  349.    notation:
  350.  
  351.    struct authdh_fullname {
  352.       string name<MAXNETNAMELEN>;  /* netname of client             */
  353.       des_block key;               /* encrypted conversation key    */
  354.       opaque w1[4];                /* W1                            */
  355.    };
  356.  
  357.    The conversation key is encrypted using the "common key" using the
  358.    ECB mode.  The common key is a DES key that is derived from the
  359.    Diffie-Hellman public and private keys, and is described later.
  360.  
  361.    The verifier is represented as follows:
  362.  
  363.    struct authdh_fullname_verf {
  364.       des_block timestamp;         /* T (the 64 bits of T1 and T2) */
  365.       opaque w2[4];                /* W2                           */
  366.    };
  367.  
  368.    Note that all of the encrypted quantities (key, w1, w2, timestamp) in
  369.    the above structures are opaque.
  370.  
  371.    The fullname credential and its associated verifier together contain
  372.    the network name of the client, an encrypted conversation key, the
  373.    ttl, a timestamp, and a ttl verifier that is one less than the ttl.
  374.    The ttl is actually the lifetime for the credential.  The server will
  375.    accept the credential if the current server time is "within" the time
  376.    indicated in the timestamp plus the ttl.  Otherwise, the server
  377.    rejects the credential with an authentication status of AUTH_BADCRED.
  378.    One way to insure that requests are not replayed would be for the
  379.    server to insist that timestamps are greater than the previous one
  380.    seen, unless it is the first transaction.  If the timestamp is
  381.    earlier than the previous one seen, the server returns an
  382.    authentication status of AUTH_REJECTEDCRED.
  383.  
  384.    The server returns a authdh_server_verf structure, which is described
  385.    in detail below.  This structure contains a "nickname", which may be
  386.    used for subsequent requests in the current conversation.
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394. Chiu                         Informational                      [Page 7]
  395.  
  396. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  397.  
  398.  
  399. 2.4.2 The Nickname Credential and Verifier (Client)
  400.  
  401.    In transactions following the first, the client may use the shorter
  402.    nickname credential and verifier for efficiency.  First, the client
  403.    fills out the following structure:
  404.  
  405.       +-------------------------------+
  406.       |   timestamp   |  timestamp    |
  407.       |   seconds     | micro seconds |
  408.       |   32 bits     |    32 bits    |
  409.       +-------------------------------+
  410.       0              31              63
  411.  
  412.    The fields are stored in XDR (external data representation) format.
  413.    These 64 bits of data are then encrypted in the DES ECB mode, using
  414.    the conversation key for the session.  This yields:
  415.  
  416.       +-------------------------------+
  417.       |     (T1)      |      (T2)     |
  418.       |               T               |
  419.       |             64 bits           |
  420.       +-------------------------------+
  421.       0              31              63
  422.  
  423.    The nickname credential is represented as follows using XDR notation:
  424.  
  425.    struct authdh_nickname {
  426.       unsigned int nickname;       /* nickname returned by server   */
  427.    };
  428.  
  429.    The nickname verifier is represented as follows using XDR notation:
  430.  
  431.    struct authdh_nickname_verf {
  432.       des_block timestamp;         /* T (the 64 bits of T1 and T2) */
  433.       opaque w[4];                 /* Set to zero                  */
  434.    };
  435.  
  436.    The nickname credential may be reject by the server for several
  437.    reasons.  An authentication status of AUTH_BADCRED indicates that the
  438.    nickname is no longer valid. The client should retry the request
  439.    using the fullname credential.  AUTH_REJECTEDVERF indicates that the
  440.    nickname verifier is not valid.  Again, the client should retry the
  441.    request using the fullname credential.
  442.  
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450. Chiu                         Informational                      [Page 8]
  451.  
  452. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  453.  
  454.  
  455. 2.4.3 The Nickname Verifier (Server)
  456.  
  457.    The server never returns a credential.  It returns only one kind of
  458.    verifier, i.e., the nickname verifier.  This has the following XDR
  459.    representation:
  460.  
  461.    struct authdh_server_verf {
  462.       des_block timestamp_verf; /* timestamp verifier (encrypted)    */
  463.       unsigned int nickname;    /* new client nickname (unencrypted) */
  464.    };
  465.  
  466.    The timestamp verifier is constructed in exactly the same way as the
  467.    client nickname credential.  The server sets the timestamp value to
  468.    the value the client sent minus one second and encrypts it in DES ECB
  469.    mode using the conversation key.  The server also sends the client a
  470.    nickname to be used in future transactions (unencrypted).
  471.  
  472. 2.5 Diffie-Hellman Encryption
  473.  
  474.    In this scheme, there are two constants "BASE" and "MODULUS" [3].
  475.    The particular values Sun has chosen for these for the DH
  476.    authentication protocol are:
  477.  
  478.       const BASE = 3;
  479.       const MODULUS = "d4a0ba0250b6fd2ec626e7efd637df76c716e22d0944b88b";
  480.  
  481.    Note that the modulus is represented above as a hexadecimal string.
  482.  
  483.    The way this scheme works is best explained by an example.  Suppose
  484.    there are two people "A" and "B" who want to send encrypted messages
  485.    to each other.  So, A and B both generate "secret" keys at random
  486.    which they do not reveal to anyone.  Let these keys be represented as
  487.    SK(A) and SK(B).  They also publish in a public directory their
  488.    "public" keys. These keys are computed as follows:
  489.  
  490.       PK(A) = ( BASE ** SK(A) ) mod MODULUS
  491.       PK(B) = ( BASE ** SK(B) ) mod MODULUS
  492.  
  493.    The "**" notation is used here to represent exponentiation. Now, both
  494.    A and B can arrive at the "common" key between them, represented here
  495.    as CK(A, B), without revealing their secret keys.
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506. Chiu                         Informational                      [Page 9]
  507.  
  508. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  509.  
  510.  
  511.    A computes:
  512.  
  513.       CK(A, B) = ( PK(B) ** SK(A)) mod MODULUS
  514.  
  515.    while B computes:
  516.  
  517.       CK(A, B) = ( PK(A) ** SK(B)) mod MODULUS
  518.  
  519.    These two can be shown to be equivalent:
  520.  
  521.       (PK(B) ** SK(A)) mod MODULUS = (PK(A) ** SK(B)) mod MODULUS
  522.  
  523.    We drop the "mod MODULUS" parts and assume modulo arithmetic to simplify
  524.    things:
  525.  
  526.       PK(B) ** SK(A) = PK(A) ** SK(B)
  527.  
  528.    Then, replace PK(B) by what B computed earlier and likewise for PK(A).
  529.  
  530.       (BASE ** SK(B)) ** SK(A) = (BASE ** SK(A)) ** SK(B)
  531.  
  532.    which leads to:
  533.  
  534.       BASE ** (SK(A) * SK(B)) = BASE ** (SK(A) * SK(B))
  535.  
  536.    This common key CK(A, B) is not used to encrypt the timestamps used
  537.    in the protocol. Rather, it is used only to encrypt a conversation
  538.    key which is then used to encrypt the timestamps.  The reason for
  539.    doing this is to use the common key as little as possible, for fear
  540.    that it could be broken.  Breaking the conversation key is a far less
  541.    damaging, since conversations are relatively short-lived.
  542.  
  543.    The conversation key is encrypted using 56-bit DES keys, yet the
  544.    common key is 192 bits.  To reduce the number of bits, 56 bits are
  545.    selected from the common key as follows. The middle-most 8-bytes are
  546.    selected from the common key, and then parity is added to the lower
  547.    order bit of each byte, producing a 56-bit key with 8 bits of parity.
  548.  
  549.    Only 48 bits of the 8-byte conversation key are used in the DH
  550.    Authentication scheme.  The least and most significant bits of each
  551.    byte of the conversation key are unused.
  552.  
  553. 3. Kerberos-based Authentication
  554.  
  555.    Conceptually, Kerberos-based authentication is very similar to DH
  556.    authentication.  The major difference is, Kerberos-based
  557.    authentication takes advantage of the fact that Kerberos tickets have
  558.  
  559.  
  560.  
  561.  
  562. Chiu                         Informational                     [Page 10]
  563.  
  564. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  565.  
  566.  
  567.    encoded in them the client name and the conversation key.  This RFC
  568.    does not describe Kerberos name syntax, protocols and ticket formats.
  569.    The reader is referred to [6], [7], and [8].
  570.  
  571. 3.1 Naming
  572.  
  573.    A Kerberos name contains three parts.  The first is the principal
  574.    name, which is usually a user's or service's name.  The second is the
  575.    instance, which in the case of a user is usually NULL.  Some users
  576.    may have privileged instances, however, such as root or admin.  In
  577.    the case of a service, the instance is the name of the machine on
  578.    which it runs; that is, there can be an NFS service running on the
  579.    machine ABC, which is different from the NFS service running on the
  580.    machine XYZ.  The third part of a Kerberos name is the realm.  The
  581.    realm corresponds to the Kerberos service providing authentication
  582.    for the principal.  When writing a Kerberos name, the principal name
  583.    is separated from the instance (if not NULL) by a period, and the
  584.    realm (if not the local realm) follows, preceded by an "@" sign.  The
  585.    following are examples of valid Kerberos names:
  586.  
  587.       billb
  588.       jis.admin
  589.       srz@lcs.mit.edu
  590.       treese.root@athena.mit.edu
  591.  
  592. 3.2 Kerberos-based Authentication Protocol Specification
  593.  
  594.    The Kerberos-based authentication protocol described is based on
  595.    Kerberos version 4.
  596.  
  597.    There are two kinds of credentials: one in which the client uses its
  598.    full network name, and one in which it uses its "nickname" (just an
  599.    unsigned integer) given to it by the server.  The client must use its
  600.    fullname in its first transaction with the server, in which the
  601.    server will return to the client its nickname.  The client may use
  602.    its nickname in all further transactions with the server. There is no
  603.    requirement to use the nickname, but it is wise to use it for
  604.    performance reasons.
  605.  
  606.    The following definitions are used for describing the protocol:
  607.  
  608.       enum authkerb4_namekind {
  609.          AKN_FULLNAME = 0,
  610.          AKN_NICKNAME = 1
  611.       };
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618. Chiu                         Informational                     [Page 11]
  619.  
  620. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  621.  
  622.  
  623.    The flavor used for all Kerberos-based authentication credentials and
  624.    verifiers is "AUTH_KERB4", with numerical value 4.  The opaque data
  625.    constituting the client credential encodes the following structure:
  626.  
  627.    union authkerb4_cred switch (authkerb4_namekind namekind) {
  628.    case AKN_FULLNAME:
  629.       authkerb4_fullname fullname;
  630.    case AKN_NICKNAME:
  631.       authkerb4_nickname nickname;
  632.    };
  633.  
  634.    The opaque data constituting a verifier that accompanies a client
  635.    credential encodes the following structure:
  636.  
  637.    union authkerb4_verf switch (authkerb4_namekind namekind) {
  638.    case AKN_FULLNAME:
  639.       authkerb4_fullname_verf fullname_verf;
  640.    case AKN_NICKNAME:
  641.       authkerb4_nickname_verf nickname_verf;
  642.    };
  643.  
  644.    The opaque data constituting a verifier returned by a server in
  645.    response to a client request encodes the following structure:
  646.  
  647.    struct authkerb4_server_verf;
  648.  
  649.    These structures are described in detail below.
  650.  
  651. 3.2.1 The Full Network Name Credential and Verifier (Client)
  652.  
  653.    First, the client must obtain a Kerberos ticket from the Kerberos
  654.    Server.  The ticket contains a Kerberos session key, which will
  655.    become the conversation key.  Next, the client fills out the
  656.    following structure:
  657.  
  658.       +---------------------------------------------------------------+
  659.       |   timestamp   |  timestamp    |               |               |
  660.       |   seconds     | micro seconds |      ttl      |   ttl - 1     |
  661.       |   32 bits     |    32 bits    |    32 bits    |   32 bits     |
  662.       +---------------------------------------------------------------+
  663.       0              31              63              95             127
  664.  
  665.    The fields are stored in XDR (external data representation) format.
  666.    The timestamp encodes the time since midnight, January 1, 1970.
  667.    "ttl" is identical in meaning to the corresponding field in Diffie-
  668.    Hellman authentication: the credential "time-to-live" for the
  669.  
  670.  
  671.  
  672.  
  673.  
  674. Chiu                         Informational                     [Page 12]
  675.  
  676. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  677.  
  678.  
  679.    conversation being initiated.  These 128 bits of data are then
  680.    encrypted in the DES CBC mode, using the conversation key, and with
  681.    an initialization vector of 0.  This yields:
  682.  
  683.       +---------------------------------------------------------------+
  684.       |               T               |               |               |
  685.       |     T1               T2       |      W1       |     W2        |
  686.       |   32 bits     |    32 bits    |    32 bits    |   32 bits     |
  687.       +---------------------------------------------------------------+
  688.       0              31              63              95             127
  689.  
  690.    where T1, T2, W1, and W2 are all 32-bit quantities, and have some
  691.    correspondence to the original quantities occupying their positions,
  692.    but are now interdependent on each other for proper decryption.  The
  693.    64 bit sequence comprising T1 and T2 is denoted by T.
  694.  
  695.    The full network name credential is represented as follows using XDR
  696.    notation:
  697.  
  698.    struct authkerb4_fullname {
  699.       opaque ticket<>;         /* kerberos ticket for the server */
  700.       opaque w1[4];            /* W1                             */
  701.    };
  702.  
  703.    The verifier is represented as follows:
  704.  
  705.    struct authkerb4_fullname_verf {
  706.       des_block timestamp;         /* T (the 64 bits of T1 and T2) */
  707.       opaque w2[4];                /* W2                           */
  708.    };
  709.  
  710.    Note that all of the client-encrypted quantities (w1, w2, timestamp)
  711.    in the above structures are opaque.  The client does not encrypt the
  712.    Kerberos ticket for the server.
  713.  
  714.    The fullname credential and its associated verifier together contain
  715.    the Kerberos ticket (which contains the client name and the
  716.    conversation key), the ttl, a timestamp, and a ttl verifier that is
  717.    one less than the ttl.  The ttl is actually the lifetime for the
  718.    credential.  The server will accept the credential if the current
  719.    server time is "within" the time indicated in the timestamp plus the
  720.    ttl.  Otherwise, the server rejects the credential with an
  721.    authentication status of AUTH_BADCRED.  One way to insure that
  722.    requests are not replayed would be for the server to insist that
  723.    timestamps are greater than the previous one seen, unless it is the
  724.    first transaction.  If the timestamp is earlier than the previous one
  725.    seen, the server returns an authentication status of
  726.    AUTH_REJECTEDCRED.
  727.  
  728.  
  729.  
  730. Chiu                         Informational                     [Page 13]
  731.  
  732. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  733.  
  734.  
  735.    The server returns a authkerb4_server_verf structure, which is
  736.    described in detail below.  This structure contains a "nickname",
  737.    which may be used for subsequent requests in the current session.
  738.  
  739. 3.2.2 The Nickname Credential and Verifier (Client)
  740.  
  741.    In transactions following the first, the client may use the shorter
  742.    nickname credential and verifier for efficiency.  First, the client
  743.    fills out the following structure:
  744.  
  745.       +-------------------------------+
  746.       |   timestamp   |  timestamp    |
  747.       |   seconds     | micro seconds |
  748.       |   32 bits     |    32 bits    |
  749.       +-------------------------------+
  750.       0              31              63
  751.  
  752.    The fields are stored in XDR (external data representation) format.
  753.    These 64 bits of data are then encrypted in the DES ECB mode, using
  754.    the conversation key for the session.  This yields:
  755.  
  756.       +-------------------------------+
  757.       |     (T1)      |      (T2)     |
  758.       |               T               |
  759.       |             64 bits           |
  760.       +-------------------------------+
  761.       0              31              63
  762.  
  763.    The nickname credential is represented as follows using XDR notation:
  764.  
  765.    struct authkerb4_nickname {
  766.       unsigned int nickname;       /* nickname returned by server   */
  767.    };
  768.  
  769.    The nickname verifier is represented as follows using XDR notation:
  770.  
  771.    struct authkerb4_nickname_verf {
  772.       des_block timestamp;         /* T (the 64 bits of T1 and T2) */
  773.       opaque w[4];                 /* Set to zero                  */
  774.    };
  775.  
  776.    The nickname credential may be reject by the server for several
  777.    reasons.  An authentication status of AUTH_BADCRED indicates that the
  778.    nickname is no longer valid. The client should retry the request
  779.    using the fullname credential.  AUTH_REJECTEDVERF indicates that the
  780.    nickname verifier is not valid.  Again, the client should retry the
  781.  
  782.  
  783.  
  784.  
  785.  
  786. Chiu                         Informational                     [Page 14]
  787.  
  788. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  789.  
  790.  
  791.    request using the fullname credential.  AUTH_TIMEEXPIRE indicates
  792.    that the session's Kerberos ticket has expired.  The client should
  793.    initiate a new session by obtaining a new Kerberos ticket.
  794.  
  795. 3.2.3 The Nickname Verifier (Server)
  796.  
  797.    The server never returns a credential.  It returns only one kind of
  798.    verifier, i.e., the nickname verifier.  This has the following XDR
  799.    representation:
  800.  
  801.    struct authkerb4_server_verf {
  802.       des_block timestamp_verf; /* timestamp verifier (encrypted)    */
  803.       unsigned int nickname;    /* new client nickname (unencrypted) */
  804.    };
  805.  
  806.    The timestamp verifier is constructed in exactly the same way as the
  807.    client nickname credential.  The server sets the timestamp value to
  808.    the value the client sent minus one second and encrypts it in DES ECB
  809.    mode using the conversation key.  The server also sends the client a
  810.    nickname to be used in future transactions (unencrypted).
  811.  
  812. 3.2.4 Kerberos-specific Authentication Status Values
  813.  
  814.    The server may return to the client one of the following errors in
  815.    the authentication status field:
  816.  
  817.   enum auth_stat {
  818.       ...
  819.       /*
  820.        * kerberos errors
  821.        */
  822.       AUTH_KERB_GENERIC = 8,  /* Any Kerberos-specific error other
  823.                                  than the following                   */
  824.       AUTH_TIMEEXPIRE = 9,    /* The client's ticket has expired      */
  825.       AUTH_TKT_FILE = 10,     /* The server was unable to find the
  826.                                  ticket file.  The client should
  827.                                  create a new session by obtaining a
  828.                                  new ticket                           */
  829.       AUTH_DECODE = 11,       /* The server is unable to decode the
  830.                                  authenticator of the client's ticket */
  831.       AUTH_NET_ADDR = 12      /* The network address of the client
  832.                                  does not match the address contained
  833.                                  in the ticket                        */
  834.  
  835.       /* and more to be defined */
  836.   };
  837.  
  838.  
  839.  
  840.  
  841.  
  842. Chiu                         Informational                     [Page 15]
  843.  
  844. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  845.  
  846.  
  847. 4. Security Considerations
  848.  
  849.    The DH authentication mechanism and the Kerberos V4 authentication
  850.    mechanism are described in this document only for informational
  851.    purposes.
  852.  
  853.    In addition to the weakness pointed out earlier in this document (see
  854.    WARNING on page 1), the two security mechanisms described herein lack
  855.    the support for integrity and privacy data protection. It is strongly
  856.    recommended that new applications use more secure mechanisms, and
  857.    that existing applications migrate to more robust mechanisms.
  858.  
  859.    The RPCSEC_GSS ONC RPC security flavor, specified in RFC 2203, allows
  860.    applications built on top of RPC to access security mechanisms that
  861.    adhere to the GSS-API specification.  It provides a GSS-API based
  862.    security framework that allows for strong security mechanisms.  RFC
  863.    1964 describes the Kerberos Version 5 GSS-API security mechanism
  864.    which provides integrity and privacy, in addition to authentication.
  865.    RFC 2623 [14] describes how Kerberos V5 is pluggued into RPCSEC_GSS,
  866.    and how the Version 2 and Version 3 of the NFS protocol use Kerberos
  867.    V5 via RPCSEC_GSS. The RPCSEC_GSS/GSS-API/Kerberos-V5 stack provides
  868.    a robust security mechanism for applications that require strong
  869.    protection.
  870.  
  871. 5. REFERENCES
  872.  
  873.    [1]  Srinivasan, R., "Remote Procedure Call Protocol Version 2", RFC
  874.         1831, August 1995.
  875.  
  876.    [2]  Srinivasan, R., "XDR: External Data Representation Standard",
  877.         RFC 1832, August 1995.
  878.  
  879.    [3]  Diffie & Hellman, "New Directions in Cryptography", IEEE
  880.         Transactions on Information Theory IT-22, November 1976.
  881.  
  882.    [4]  Mills, D., "Network Time Protocol (Version 3)", RFC 1305, March
  883.         1992.
  884.  
  885.    [5]  National Bureau of Standards, "Data Encryption Standard",
  886.         Federal Information Processing Standards Publication 46, January
  887.         1977.
  888.  
  889.    [6]  Miller, S., Neuman, C., Schiller, J. and  J. Saltzer, "Section
  890.         E.2.1: Kerberos Authentication and Authorization System",
  891.         December 1987.
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898. Chiu                         Informational                     [Page 16]
  899.  
  900. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  901.  
  902.  
  903.    [7]  Steiner, J., Neuman, C. and J. Schiller, "Kerberos: An
  904.         Authentication Service for Open Network Systems", pp. 191-202 in
  905.         Usenix Conference Proceedings, Dallas, Texas, February, 1988.
  906.  
  907.    [8]  Kohl, J. and C. Neuman, "The Kerberos Network Authentication
  908.         Service (V5)", RFC 1510, September 1993.
  909.  
  910.    [9]  La Macchia, B.A., and Odlyzko, A.M., "Computation of Discrete
  911.         Logarithms in Prime Fields", pp. 47-62 in "Designs, Codes and
  912.         Cryptography", Kluwer Academic Publishers, 1991.
  913.  
  914.    [10] Cheswick, W.R., and Bellovin, S.M., "Firewalls and Internet
  915.         Security," Addison-Wesley, 1995.
  916.  
  917.    [11] Linn, J., "The Kerberos Version 5 GSS-API Mechanism", RFC 1964,
  918.         June 1996.
  919.  
  920.    [12] Linn, J., "Generic Security Service Application Program
  921.         Interface, Version 2", RFC 2078, January 1997.
  922.  
  923.    [13] Eisler, M., Chiu, A., and Ling, L., "RPCSEC_GSS Protocol
  924.         Specification", RFC 2203, September 1997.
  925.  
  926.    [14] Eisler, M., "NFS Version 2 and Version 3 Security Issues and the
  927.         NFS Protocol's Use of RPCSEC_GSS and Kerberos V5", RFC 2623,
  928.         June 1999.
  929.  
  930. 6. AUTHOR'S ADDRESS
  931.  
  932.    Alex Chiu
  933.    Sun Microsystems, Inc.
  934.    901 San Antonio Road
  935.    Palo Alto, CA 94303
  936.  
  937.    Phone: +1 (650) 786-6465
  938.    EMail: alex.chiu@Eng.sun.com
  939.  
  940.  
  941.  
  942.  
  943.  
  944.  
  945.  
  946.  
  947.  
  948.  
  949.  
  950.  
  951.  
  952.  
  953.  
  954. Chiu                         Informational                     [Page 17]
  955.  
  956. RFC 2695         Authentication Mechanisms for ONC RPC    September 1999
  957.  
  958.  
  959. 7.  Full Copyright Statement
  960.  
  961.    Copyright (C) The Internet Society (1999).  All Rights Reserved.
  962.  
  963.    This document and translations of it may be copied and furnished to
  964.    others, and derivative works that comment on or otherwise explain it
  965.    or assist in its implementation may be prepared, copied, published
  966.    and distributed, in whole or in part, without restriction of any
  967.    kind, provided that the above copyright notice and this paragraph are
  968.    included on all such copies and derivative works.  However, this
  969.    document itself may not be modified in any way, such as by removing
  970.    the copyright notice or references to the Internet Society or other
  971.    Internet organizations, except as needed for the purpose of
  972.    developing Internet standards in which case the procedures for
  973.    copyrights defined in the Internet Standards process must be
  974.    followed, or as required to translate it into languages other than
  975.    English.
  976.  
  977.    The limited permissions granted above are perpetual and will not be
  978.    revoked by the Internet Society or its successors or assigns.
  979.  
  980.    This document and the information contained herein is provided on an
  981.    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
  982.    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
  983.    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
  984.    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
  985.    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  986.  
  987. Acknowledgement
  988.  
  989.    Funding for the RFC Editor function is currently provided by the
  990.    Internet Society.
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.  
  998.  
  999.  
  1000.  
  1001.  
  1002.  
  1003.  
  1004.  
  1005.  
  1006.  
  1007.  
  1008.  
  1009.  
  1010. Chiu                         Informational                     [Page 18]
  1011.  
  1012.