Internet DRAFT - draft-dang-nistkdf

draft-dang-nistkdf









      
      
     Personal Draft                                    Q. Dang 
     Internet Draft                                    T. Polk 
     Expires: November 2006                              NIST 
                                                    June 23, 2006 
                                         
      
                                   
                   Hash-Based Key Derivation (HKD) 
                      draft-dang-nistkdf-01.txt 


        Status of this Memo 

        By submitting this Internet-Draft, each author 
        represents that any applicable patent or other 
        IPR claims of which he or she is aware have been 
        or will be disclosed, and any of which he or she 
        becomes aware will be disclosed, in accordance 
        with Section 6 of BCP 79. 

        Internet-Drafts are working documents of the 
        Internet Engineering Task Force (IETF), its 
        areas, and its working groups. Note that other 
        groups may also distribute working documents as 
        Internet-Drafts. 

        Internet-Drafts are draft documents valid for a 
        maximum of six months and may be updated, 
        replaced, or obsoleted by other documents at any 
        time. It is inappropriate to use Internet-Drafts 
        as reference material or to cite them other than 
        as "work in progress". 

        The list of current Internet-Drafts can be accessed at 
        http://www.ietf.org/ietf/1id-abstracts.txt 

        The list of Internet-Draft Shadow Directories can 
        be accessed at http://www.ietf.org/shadow.html. 








      
      
      
     Dang                Expires December 2006            [Page 1] 
      






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

                            Abstract 

        This draft specifies two Key Derivation Functions 
        (KDFs) that may be used to derive symmetric keying 
        material for participating parties from a secret value 
        and application specific information. Each KDF is 
        based on a concatenation technique and a secure hash 
        function. The length in bits of secret keying material 
        that can be generated by either of the KDFs is limited 
        to (2**32 - 1) times the length in bits of the output 
        block of the hash function. The derived keying 
        material is a concatenation of the outputs of the 
        hashing operations. Outputs from the KDFs are either 
        "Invalid" or desired secret keying material. 

        The HKDFs specified in this document are intended for 
        use in scenarios where the communicating parties 
        derive keying material for their own use.  This 
        specification is not intended for implementation of 
        key hierarchies. 

                Conventions used in this document 

        The Key Word "Secret Value" and "Key Derivation" are 
        defined as follows: 

        Secret Value: A value known only by the two 
        communicating parties that will be used as input to the 
        key derivation function. This value may be established 
        out-of-band, selected by one of the communicating 
        parties, or by the two communicating parties.  

        Key Derivation: The process by which keying material 
        (e.g., one or more symmetric keys) is derived from a 
        secret value and other non-secret information. 

        The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", 
        "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", 
        "MAY", and "OPTIONAL" in this document are to be 
        interpreted as described in [RFC 2119]. 






      
      
     Dang            Expires December 2006       [Page 2] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

                          Table of Contents 

         
        1. Introduction......................................4 
        2. Hash-Based Key Derivation Overview................5 
           2.1   HKDF Inputs.................................6 
           2.2   Basic HKDF Algorithm........................7 
        3. Specific HKDF Functions...........................8 
           3.1. Concatenation Based HKDF.....................9 
              3.1.1. Inputs and Fixed Values.................9 
                 3.1.1.1. Secret Value (SV)..................9 
                 3.1.1.2. algorithmID.......................10 
                 3.1.1.4  keydatalen........................12 
                 3.1.1.5  SharedInfo........................13 
                 3.1.1.6  hashlen and max-hash-inputlen.....14 
              3.1.2    Concatenation HKDF Algorithm.........14 
           3.2   ASN.1 Structured HKDF......................15 
              3.2.1    Inputs and Fixed Values..............16 
                 3.2.1.1  Secret Value......................16 
                 3.2.1.2  Key Data Length...................17 
                 3.2.1.3 Algorithm Identifier(s)............17 
                 3.2.1.4   Initiator Identifier.............17 
                 3.2.1.5   Recipient Identifier.............18 
                 3.2.1.6  Supplemental Private Information..18 
                 3.2.1.7  Supplemental Public Information...18 
                 3.2.1.8  Hash Length.......................19 
                 3.2.1.9  Maximum Hash Input Length.........19 
              3.2.2    ASN.1 Encoding.......................19 
              3.2.3    ASN.1 Structured HKDF Algorithm......19 
        4. Supported Scenarios..............................21 
           4.1 Static-Static Key Agreement..................21 
           4.2 Static-Ephemeral Key Agreement...............22 
           4.3 Ephemeral-Ephemeral Key Agreement............23 
           4.4 Anonymous Key Agreement......................24 
        5. Security Considerations..........................24 
        6. IANA Considerations..............................26 
        7. Acknowledgments..................................26 
        8. References.......................................26 
           8.1 Normative References.........................26 
           8.2  Informative References......................26 
        9. Author's Addresses...............................27 
        10. Intellectual Property Statement.................28 
        11. Disclaimer of Validity..........................28 
        12. Copyright Statement.............................28 
        13. Acknowledgment..................................29 
         
      
      
     Dang            Expires December 2006       [Page 3] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

     1. Introduction 

        The security of a secret key shared between two 
        participating parties may be reduced if the secret 
        key is used for each and every secure channel or 
        transaction. However, it is inconvenient and 
        inefficient if communicating parties must maintain 
        different secret values for each secure channel or 
        transaction. To minimize the number of long term 
        secrets that must be maintained, it is often 
        preferable to derive distinct secret keying material 
        for each and every secure channel or transaction from 
        a single secret value shared between participating 
        parties. This algorithm should be strong and 
        standardized to overcome compatibility issues in 
        communication protocols and their implementations. 

        There are two such algorithms described in this draft. 
        They are hash-based key derivation functions (HKDFs). 
        They are used to derive secret keying material from a 
        secret value. The output from either of the HKDFs is 
        only used for secret keying material, such as a 
        symmetric key used for data encryption or message 
        integrity, a secret initialization vector, etc. Non-
        secret keying material (such as a non-secret 
        initialization vector) is not generated using the 
        secret value.  

        Each of the algorithms is based on a secret value, a 
        hash function (e.g., SHA-256) [FIPS 180-2], and 
        concatenation. 

        This document defines two hash-based key derivation 
        functions that can be used with any secure hash 
        functions.  Section 2 provides an overview of hash-
        based key derivation, and defines inputs and 
        parameters that are common to the two HKDFs specified 
        in this document.  Section 3 describes the two 
        algorithms in detail.  Each algorithm includes 
        mandatory and optional inputs, enabling the algorithm 
        to support a broad range of protocols and 
        applications. Section 4 describes four key agreement 
        scenarios to establish secret values that are used in 
        the HKDFs, and indicates when the optional steps are 
        required.  Section 5 presents security considerations 
        with respect to the application of the HKDFs. 
      
      
     Dang            Expires December 2006       [Page 4] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

             


     2. Hash-Based Key Derivation Overview 

        Each of the HKDFs is constructed from a secure 
        hash function, called H. The HKDF accepts 
        mandatory and optional inputs, in addition to 
        several implementation dependent fixed values.  

        A secret value shared by all communication 
        parties is a required input.  This is the only 
        input that contributes entropy to the secret 
        keying material derived by the HKDF. Without this 
        required shared secret, the secret keying 
        material could be generated or known to everyone, 
        not only the communicating parties. 

        Other mandatory inputs are an algorithm 
        identifier which identifies the purpose of the 
        generating secret keying material and contextual 
        information which identifies the communicating 
        parties.  This information provides assurance 
        that the communicating parties agree on the use 
        of the derived keying material. 

        Beside mandatory inputs, each HKDF supports 
        optional supplementary information such as 
        protocol-specific information.  The 
        implementation dependent fixed values describe 
        properties (e.g., output length) of the hash 
        function H. 

        The inputs are more fully described below, in 
        Section 2.1. 

        The HKDF is constructed as an iterative process.  
        An initialization phase establishes counters and 
        constructs a string from the contextual 
        information (and other ooptional inputs) for 
        processing.  H is used to hash the counter, 
        secret value, and the input string to generate a 
        block of keying material.  If additional keying 
        material is required, the counter is incremented 
        and an additional block is generated until enough 
      
      
     Dang            Expires December 2006       [Page 5] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

        keying material is available.  The blocks of key 
        material are concatenated and returned to the 
        calling process.  Thr basic HKDF algorithm is 
        more fully described in Section 2.2. 

       2.1 HKDF Inputs 


        General inputs to a HKDF are described as 
        follows: 

            o hashlen: an integer equal to the length (in 
            bits) of the output of the pseudorandom 
            function used to derive blocks of secret 
            keying material. This is a fixed value and 
            implementation dependent.  For example, if 
            the pseudorandom function is SHA-1, hashlen 
            is fixed at 160.  If the pseudorandom 
            function is SHA-256, hashlen is 256. 

            o SeedKey: a bit string encoding of the 
            shared secret. 

            o AlgorithmID: a bit string identifying the 
            purpose for which the secret keying material 
            is being generated. 

            o contextID : a bit string identifying the 
            parties for which the secret keying material 
            is being generated; contextID is encoded in a 
            prefix-free manner - meaning that, in 
            addition to being a one-to-one function of 
            the represented data, the encoding ensures 
            that one contextID bit string can never 
            appear as even the initial portion of another 
            contextID bit string. This can be 
            accomplished, for example, by using ASN.1 DER 
            encoding, or, by constructing contextID as 
            the concatenation of a specific sequence of 
            fixed-length bit strings. 

            In this Recommendation, contextID includes 
            IDU and IDV,the bit strings that serve as 
                         
            identifiers of the two parties (U and V) who 
            are participating in the key establishment 
      
      
     Dang            Expires December 2006       [Page 6] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

            process; contextID may also include an 
            AlgorithmID that indicates how to parse the 
            derived secret keying material and allocate 
            the resulting bit strings to various 
            algorithms. 

            o keydatalen: a positive integer that 
            indicates the length (in bits) of the secret 
            keying material to be generated.  For the 
            HKDFs specified in this document, keydatalen 
            is limited to hashlen * (2**32 - 1). 

            o SharedInfo (optional): a bit string 
            consisting of data shared by the parties 
            generating the secret keying material. 


        2.2  Basic HKDF Algorithm 


          The HKDFs are constructed as an iterative 
          process.  Each iteration generates a block of 
          key material by hashing a message constructed 
          by concatenating a set of inputs.  The results 
          of each iteration are concatenated to generate 
          the desired keying material 

          Message construction requires careful ordering 
          and encoding techniques.  The inputs are 
          ordered so that the more variable input 
          components are first (leftmost) and the least 
          variable components last (rightmost). For 
          example, a counter is placed to the left of the 
          shared secret, and is incremented after each 
          iteration.  If the inputs are of fixed size, 
          the message can be constructed by simple 
          concatenation.  Where inputs are of variable 
          size, the representation must include the 
          length of each value to ensure that each 
          sequence of inputs is unambiguous. 

          Each HKDF described in Section 3 follow the 
          same basic process: 


      
      
     Dang            Expires December 2006       [Page 7] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

           1. Compute reps, the number of iterations required to 
           obtain the appropriate amount of keying material.  
           Verify that the KDF can securely generate that amount of 
           keying material.  If not, the process aborts. 

           2. Construct a fixed string from the algorithmID, 
           contextID, and the sharedInfo.  This string will be part 
           of the input to the hash function. 

           3. Establish a counter value (usually zero). 

           4. For i = 1 to reps by 1, do the following: 

            a. Construct a message M(i) from the Counter, 
               SeedKey, and the fixed string. 

            b. Hash M(i) to generate a block of secret 
               keying material H(i)  

            c. Increment the counter 

           5. Concatenate the output values to construct 
             the desired keying material: 

                H(1) ||  H(2) || ... || H(reps) 

        The output of the KDF will either be a bit string 
        of length keydatalen bits or an error indicator.  

     3. Specific HKDF Functions 

        This section specifies two HKDF functions that 
        satisfy the HKDF framework described in Section 
        2. 

        The first HKDF is called the Concatenation Based 
        HKDF, and is specified in Section 3.1.  The 
        Concatenation KDF converts values into a length 
        value notation before concatenation. The second 
        KDF is called the ASN.1 Structured HKDF, and is 
        specified in Section 3.2.  The ASN.1 Structured 
        KDF relies on ASN.1 DER encoding. Both KDFs were 
        originally specified in [SP 800-56A]. 



      
      
     Dang            Expires December 2006       [Page 8] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

        3.1. Concatenation Based HKDF 


        This HKDF accepts four mandatory inputs and one 
        optional input, and uses two implementation 
        dependent fixed values. 

        The mandatory HKDF inputs are the secret value 
        that is a bit string, algorithm identifier, the 
        contextual information, and the length of the 
        desired key material.  The optional HKDF input is 
        information shared between the participating 
        parties. The implementation dependent fixed value 
        describes the length of the output from the hash 
        function H.  The HKDF inputs and implementation-
        dependent fixed values are described in detail in 
        Section 3.1.  

        The HKDF algorithm returns either the desired key 
        material, or an error.  The complete HKDF 
        algorithm is presented in Section 3.2. 

        3.1.1. Inputs and Fixed Values 


        The mandatory, optional, and implementation 
        independent fixed value inputs of the 
        Concatenation HKDF are described as follows. 


        3.1.1.1. Secret Value (SV) 


        The secret value, SV, is a bit string known only 
        to the participating parties and is a mandatory 
        input. The secret value can be either a fixed or 
        variable length bit string. To ensure that the 
        secret value input by both parties is the same 
        when the secret value is variable in length, it 
        is preceded by a fixed length string that 
        indicates the length (in bytes) of the secret 
        value. 


      
      
     Dang            Expires December 2006       [Page 9] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

        Let SVData be a secret bit string that is 
        generated from one of Supported Scenarios 
        described in Section 3 of this document. When 
        SVData is a fixed length bit string, SV has the 
        form: 

                    SV = SVData 


        When SVData is a variable length bit string, SV 
        has the form: 

                    SV = SVLen || SVData 

        where SVData is a variable-length bit string of 
        (eight-bit) bytes, while SVLen is a fixed length 
        bit string that indicates the length (in bytes) 
        of SVData. 

        Protocols that reference this specification MUST 
        specify the format of the secret value and the 
        lengths of the fixed length quantities: 

            a. Where SV is a fixed length string, the 
               protocol MUST specify the length; and  

            b. Where SV is a variable length string, the 
               protocol MUST specify the size of SVLen. 

        SV may be established through off-line or on-line 
        processes, depending upon the scenario.  See 
        Section 3 for supported scenarios through which 
        the SV can be established. The security strength 
        of SV is determined by the method used to 
        generate SV (see Section 4). 

        3.1.1.2. algorithmID 


        The algorithmID is a mandatory input indicating 
        how the derived keying material will be parsed 
        and for which algorithm(s) the derived keying 
        material will be used. For example, algorithmID 
        might indicate that bits 1-80 are to be used as 

      
      
     Dang            Expires December 2006       [Page 10] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

        an 80-bit HMAC key, and that bits 81-208 are to 
        be used as a 128-bit AES key. 

        An algorithmID consists of two concatenated 
        values: algorithmLen and algorithmOID.  The 
        algorithmLen is a fixed length bit string that 
        indicates the length (in bytes) of algorithmOID.  
        The algorithmOID is an ASCII string representing 
        an ASN.1 object identifier. 

        Protocols that reference this specification MUST 
        specify the length of algorithmLen and the 
        semantics of any recognized object identifiers. 

        3.1.1.3. contextID  

        The contextID is a mandatory input.  The 
        contextID is a string formed by concatenating 
        strings IDU and IDV; IDU and IDV identify the 
        participating parties.  Each of the bit strings 
        IDU and IDV is an identifier (that is, a bit 
        string that is associated with a person, device 
        or organization). An identifier may be an 
        identifying name or may be something more 
        abstract (for example, an IP address and 
        timestamp), depending on the application.  IDU 
        identifies the initiator of the session or 
        transaction, and IDV identifies the responder, as 
        specified by the protocol. 

        There are two formats for the contextID: a fixed-
        length contextID format and a variable-length 
        contextID format. 

        The fixed-length contextID format is used where 
        IDU and IDV are fixed-length bit strings, and 
        contextID consists of IDU || IDV. 

        The variable-length contextID format is used 
        where IDU and IDV are variable-length bit 
        strings.  In this case, contextID has the form: 

         
                       IDlenU || IDU || IDlenV || IDV  
         

      
      
     Dang            Expires December 2006       [Page 11] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

        where IDU and IDV are variable-length strings (of 
        eight-bit bytes) that serve as the identifiers of the 
        participating parties, and IDLenU and IDlenV are 
        fixed-length bit strings that indicate the lengths (in 
        eight-bit bytes) of IDU and IDV, respectively. 
         
        Party U shall be the initiator, and party V shall be the 
        responder, as assigned by the protocol. 
         
        Protocols that reference this specification MUST specify 
        the following information: 
            
               1.Which party is defined as the initiator and which 
                 is the responder;  

               2.The contextID format (i.e., fixed length vs. 
                 variable length); 

               3. The source of the identifiers IDU and IDV (e.g., 
                 "use the dns name of the server as IDV"). The 
                 values for IDU and IDV should be as specific as 
                 feasible for their intended use, and each shall 
                 be represented in a protocol-specific format. 

                 d) The lengths for the fixed-length quantities and 
                    the acceptable range of variable-length 
                    quantities.  For the fixed-length contextID, 
                    the fixed-length quantities are IDU and IDV.  
                    For the variable-length contextID, the fixed-
                    length quantities are IDlenU and IDlenV.  (Note 
                    that the maximum length of IDU and IDV in the 
                    variable-length format must be consistent with 
                    the size of IDlenU and IDlenV. 

        3.1.1.4 keydatalen 


        Keydatalen is a mandatory input.  Keydatalen is 
        an integer that indicates the length in bits of 
        the secret keying material to be generated; 
        keydatalen shall be less than or equal to hashlen 
        x (2**32 - 1). 



      
      
     Dang            Expires December 2006       [Page 12] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

       3.1.1.5  SharedInfo 


        SharedInfo is an optional input.  SharedInfo is a 
        bit string that consists of the concatenation of 
        a (protocol-specific) sequence of substrings of 
        data shared by the parties generating the secret 
        keying material.  Where the substring has a fixed 
        length, the substring is composed of just the 
        substring data.  Where a substring has variable 
        length, the substring has the form Datalen || 
        Data, where Data is a variable length string (of 
        eight bit bytes), and Datalen is a fixed-length 
        string that indicates the length (in bytes) of 
        Data. This SharedInfo can be private or/and 
        public shared information between communicating 
        parties.  

        Protocols may specify a SharedInfo field that 
        contains fixed length substrings, variable length 
        substrings, or a combination. For each substring 
        of SharedInfo, a protocol using this key 
        derivation function must specify which of these 
        data representations is used.  The protocol must 
        also specify the lengths for all fixed-length 
        quantities. 

            SharedInfo ::= Substring-1 || Substring-2 
            ||... Substring-n 

            n is a number of substrings in SharedInfo. 

            Substring-i ::= FixedSubString /  
            VariableSubString 

            i is an integer between 1 and n. 

           FixedSubstring ::= Fixed-length bit string 

            VariableSubstring::= Datalen || Data 

            Datalen ::= fixed-length string 

            Data    ::= variable length eight-bit byte  
            string.  
      
      
     Dang            Expires December 2006       [Page 13] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

             

        3.1.1.6 hashlen and max-hash-inputlen  


        In addition to the input values, the HKDF 
        algorithm depends upon the base hash function and 
        two related implementation-dependent fixed 
        values. The base hash function, or H, is used to 
        derive blocks of secret keying material. One of 
        the implementation-dependent fixed values is 
        hashlen.  The hashlen is an integer value that 
        indicates the length in bits of the output block 
        of H. The other one is max-hash-inputlen. The 
        max-hash-inputlen is an integer that indicates 
        the maximum lengh (in bits) of the bit string(s) 
        input to the hash function. If the input sting(s) 
        is larger than this max-hash-inputlen value, then 
        the HKDF will not work and on output will be 
        produced except an error indicator.  

        Protocols that reference this specification 
        SHOULD support multiple hash functions and MAY 
        support negotiation between the communicating 
        parties for the selection of H. 

        3.1.2 Concatenation HKDF Algorithm  


          1. reps = ceiling ( keydatalen / hashlen ) 

          2. If reps > (2**32 - 1), then ABORT: and error indicator 
            and stop. 

          3. Initialize a 32-bit, big-endian bit string counter as 
            00000001 in hexadecimal. 

          4. If (counter || SV || algorithmID || contextID  {|| 
            SharedInfo}) is  more than max-hash-inputlen bits 
            long, then ABORT: an error indicator and stop. 

          5. For i = 1 to reps by 1, do the following: 

             a. Compute Hash-i = H (counter || SV || algorithmID || 
            contextID {|| SharedInfo}). 
      
      
     Dang            Expires December 2006       [Page 14] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

             b. Increment counter (modulo 2**32), treating it as an 
            unsigned 32-bit integer. 

          6. Let Hhash be set to Hash-reps if (keydatalen / 
            hashlen) is an integer; otherwise, let Hhash be set to 
            the (keydatalen mod hashlen) leftmost bits of Hash-
            reps. 

          7. Set DerivedKeyingMaterial = Hash-1 || Hash-2 || ... || 
            Hash-(reps-1)|| Hhash. 

                 Output: 


          The bit string DerivedKeyingMaterial of length 
          keydatalen bits (or an error indicator). 

          Any scheme attempting to call this key 
          derivation function with keydatalen greater 
          than or equal to hashlen * (2**32 - 1) shall 
          output and error indicator and stop without 
          outputting DerivedKeyingMaterial. Any call to 
          the key derivation function involving an 
          attempt to hash a bit string that is greater 
          than max-hash-inputlen bits long shall cause 
          the HKDF to output an error indicator and stop 
          without outputting DerivedKeyingMaterial.  

            3.2 ASN.1 Structured HKDF 


          This HKDF relies on ASN.1 DER encoding for 
          unambiguous encoding of input values. It 
          accepts five mandatory inputs, two optional 
          inputs, and uses two implementation dependent 
          fixed values. 

          The mandatory HKDF inputs are the secret value 
          that is a bit string, the algorithmID, two 
          identifiers decribing the initiator and 
          recipient, and the length of the desired key 
          material. One of the implementation dependent 
          fixed values describes the length of the output 
          from the hash function H, called hashlen. The 
          other is an integer equal to the maximum length 
      
      
     Dang            Expires December 2006       [Page 15] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

          (in bits) of the bit string(s) input to the 
          hash function, called max-hash-inputlen.  The 
          HKDF inputs and implementation-dependent fixed 
          values are described in detail in Section 
          3.2.1. 

          The HKDF inputs are DER ASN.1 encoded before 
          generating the key material.  Section 3.2.2 
          specifies the ASN.1 structure used to encode 
          the inputs 

          This HKDF algorithm returns either the desired 
          key material, or an error.  The complete HKDF 
          algorithm is presented in Section 3.2.3. 

            3.2.1    Inputs and Fixed Values 


          The mandatory, optional, and implementation 
          dependent fixed value inputs of the ASN.1 
          Structured HKDF are described in this section. 

          The ASN.1 Structured HKDF requires two 
          additional inputs.  These values are fixed with 
          respect to the hash function H that will be 
          used by the HKDF.  The additional inputs are 
          the Hash length and maximum hash input length.  
          These inputs are described in Sections 3.2.1.8 
          and 3.2.1.9. 

          3.2.1.1   Secret Value 


            The Secret Value (SV) is a byte string that 
            is the shared secret known only to the (two) 
            communicating parties. This is a mandatory 
            input to the HKDF function. 








      
      
     Dang            Expires December 2006       [Page 16] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

            3.2.1.2 Key Data Length 


            The keydatalen input is an integer that is 
            the length (in bits) of the secret keying 
            material to be generated; keydatalen must be 
            less than or equal to hashlen * (2**32  - 1). 
            This is a mandatory input to the HKDF 
            function. 


           3.2.1.3 Algorithm Identifier(s) 


           AlgorithmID is a unique object identifier that 
           indicates the algorithm(s) for which the 
           derived secret keying material will be used. 
           For example, AlgorithmID might indicate that 
           bits 1-128 are to be used as a 128-bit AES key 
           and that bits 129-208 are to be used as an 80-
           bit HMAC key. This is a mandatory input to the 
           HKDF function. 


           3.2.1.4   Initiator Identifier 

           PartyUInfo is a bit string that contains 
           public information contributed by the 
           initiator. At a minimum, PartyUInfo must 
           include IDU, the identifier of party U; 
           PartyUInfo may also contain other data 
           contributed by the initiator. This is a 
           mandatory input to the HKDF function. 


            








      
      
     Dang            Expires December 2006       [Page 17] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

           3.2.1.5   Recipient Identifier 

          PartyVInfo is a bit string that contains public 
          information that was contributed by the 
          recipient. At a minimum, PartyVInfo must 
          include IDV, the identifier of party V; 
          PartyVInfo may also contain other data 
          contributed by the recipient. This is a 
          mandatory input to the HKDF function. 


            Note: Each of the bit strings IDU and IDV is 
            an identifier (that is, a bit string that is 
            associated with a person, device or 
            organization). An identifier may be an 
            identifying name or may be something more 
            abstract (for example, an IP address and a 
            timestamp), depending on the application. The 
            values for IDU and IDV should be as specific 
            as feasible for their intended use. Party U 
            must be the initiator, and party V must be 
            the responder, as assigned by the protocol. 

          3.2.1.6   Supplemental Private Information 


          SuppPrivInfo is a bit string that contains some 
          additional, mutually-known private information 
          (for example, a shared secret symmetric key 
          that has been communicated through a separate 
          channel) to only the communicating parties U 
          and V. This is an optional input to the HKDF 
          function. 


            3.2.1.7 Supplemental Public Information 


          SuppPubInfo is a bit string that contains some 
          additional, mutually-known public information. 
          This information may be known to other parties 
          other than the communicating parties U and V. 
          This is an optional input to the HKDF function.   

      
      
     Dang            Expires December 2006       [Page 18] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

            3.2.1.8 Hash Length 


          Hashlen is an integer equal to the length (in 
          bits) of the output of the hash function used 
          to derive blocks of secret keying material. 
          This is a mandatory input to the HKDF function. 

            3.2.1.9 Maximum Hash Input Length 


          max_hash_inputlen is an integer equal to the 
          maximum length (in bits) of the bit string(s) 
          input to the hash function. This is a mandatory 
          input to the HKDF function. 

            3.2.2  ASN.1 Encoding  


          In this HKDF, algorithmID, PartyUInfor, PartyVinfor, 
          SuppPrivInfo, and SuppPubInfo are ASN. 1 DER encoded. 
          OtherInfo is the ASN.1 DER encoded value of the 
          attributes as following: 

          OtherInfo ::= SEQUENCE { 
              algorithmID   AlgorithmIdentifier, 
              partyUInfo     [0] OCTET STRING  MANDATORY, 
              partyVInfo     [1] OCTET STRING  MANDATORY, 
              suppPubInfo    [2] OCTET STRING  OPTIONAL, 
              suppPrivInfo   [3] OCTET STRING  OPTIONAL 
          } 
           

           

            3.2.3  ASN.1 Structured HKDF Algorithm 


                 1. Let reps = ceiling (keydatalen / hashlen). 

                 2. If reps > (2**32 - 1), then ABORT: and error 
                      indicator and stop. 


      
      
     Dang            Expires December 2006       [Page 19] 
         





     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

                 3. Set counter = 00000001in hex (and update 
                                           
                      OtherInfo accordingly).  

                 4. If ( counter || SV || OtherInfo ) is more than 
                      max_hash_inputlen bits long,  
                      then ABORT: output an error indicator and 
                      stop. 

                 5. For i = 1 to reps by 1, do the following: 

                      5.1 Compute h-i = H( counter|| SV || OtherInfo 
                      ). 

                      5.2 Convert counter to an unsigned, 32-bit 
                      integer. 

                      5.3 Increment counter (modulo 2**32). 

                      5.4 Convert counter to a 32-bit byte string 
                      (and update OtherInfo accordingly) for the 
                      next execution of the hash function H if i < 
                      reps. 

                 6. Let Hhash be set to h-reps if (keydatalen / 
                      hashlen) is an integer; otherwise, let Hhash 
                      be set to the (keydatalen mod hashlen) 
                      leftmost bits of h-reps.  

                 6. Compute DerivedKeyingMaterial = h-1|| h-2||... 
                                                             
                      || Hhash). . 

            Output:  


            The DerivedKeyingMaterial is as a bit string 
            of length keydatalen bits (or an error 
            indicator). 

            The ASN.1 HKDF produces secret keying 
            material that is at most hashlen * (2**32 -1) 
            bits in length. Any call to this key 
            derivation function using a keydatalen value 
            that is greater than hashlen * (2**32-1) will 
            cause the HKDF to output and error indicator 
            and stop without outputting 
      
      
     Dang            Expires December 2006       [Page 20] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

            DerivedKeyingMaterial. Similarly, it is 
            assumed that the key derivation function 
            calls do not involve hashing a bit string 
            that is more than max_hash_inputlen bits in 
            length. Any call to the key derivation 
            function involving a bit string counter || SV 
            || OtherInfo that is greater than 
            max_hash_inputlen bits long shall cause the 
            KDF to output and error indicator and stop 
            without outputting DerivedKeyingMaterial. 

     4. Supported Scenarios 

     This section describes four general Key Agreement 
     Scenarios to generate secret values for the hash-
     based key derivation function (HKDFs). Two 
     communicating parties use one of them to establish a 
     secret value. Communicating parties use asymmetric 
     cryptography (e.g., Diffie-Hellman or Menezes-Qu-
     Vanstone) to establish a secret value using a key 
     agreement scheme. The secret value is used with the 
     HKDF to establish a session-specific or transaction-
     specific keying material. The secret value should be 
     deleted immediately after computing the keying 
     material. 

     The parties may use previously registered long-term 
     asymmetric keys (a.k.a. static keys), or generate a 
     new ephemeral (temporary, one-time) key pair 
     specifically for this iteration of the key agreement 
     process. Where one or more static keys are employed, 
     the HKDF supplements the secret value with 
     application specific and/or session specific 
     information to ensure that the keying material is 
     distinct. 

   4.1 Static-Static Key Agreement 

     When both participating parties have complementary 
     static key pairs for key agreement, the secret value 
     SV may be computed.  For example, if both parties 
     have Diffie-Hellman static key pairs with the same 
     parameters, or elliptic curve key pairs over the 
     same curve, the secret value SV may be generated 
     using the appropriate key agreement algorithm. In 
     general, the public keys associated with these 
      
      
     Dang            Expires December 2006       [Page 21] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

     static key pairs are conveyed in X.509 certificates. 
     After SV is generated, it is then used to derive the 
     keying material.  

     Since both key pairs are static, this method will 
     always produce the same SV for any pair of 
     participants. The contextID (in the Concatenation 
     Based HKDF) will be the same for these participants 
     for any given protocol or application. To ensure 
     that distinct keying material is derived, a protocol 
     using static-static key agreement MUST include 
     SharedInfo substrings that are unique to this 
     session or execution of a protocol. The SharedInfo 
     substrings MUST include information contributed by 
     both the initiator and the recipient. Similarly, 
     PartyUInfo and PartyVInfo (in the ASN.1 Structured 
     HKDF) will be the same. And if the AlgorithmID is 
     the same, a protocol using static-static key 
     agreement MUST include optional SuppPrivInfo and/or 
     SuppPubInfo that are unique to this session or 
     execution of a protocol to ensure that distinct 
     keying material is derived.   

   4.2 Static-Ephemeral Key Agreement 

     Static-ephemeral key agreement may be performed when 
     one participant (the recipient) has a static key 
     pair, and the other party (the intiator) has the 
     ability to generate ephemeral keys. The recipient's 
     static public key is known to the initiator through 
     an X.509 certificate or other secure mechanism. In 
     this case, the initiator generates a complementary 
     ephemeral key pair (e.g., a temporary or one-time 
     Diffie-Hellman key pair that is generated with the 
     same parameters that were used to generate the 
     recipient's static key pair) for this specific 
     session or transaction. The initiator sends its 
     ephemeral public key to the recipient. Each party 
     uses its own key pair, the other party's public key 
     and the appropriate key agreement algorithm to 
     generate the secret value. The secret value is then 
     used to derive the keying material. (The initiator 
     should delete the ephemeral private key after 
     generating the secret value.) 


      
      
     Dang            Expires December 2006       [Page 22] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

     This method is vulnerable to man-in-the-middle 
     attacks if the initiator's ephemeral public key is 
     not verified, because an attacker can impersonate 
     the initiator in this key agreement protocol. 

     Authentication of the ephemeral public key can be 
     obtained if the initiator has a digital signature 
     key pair with a corresponding public key 
     certificate. In this case, the initiator signs its 
     ephemeral public key using its digital signature 
     private key, and then sends the ephemeral public key 
     and the signature to the recipient, who can use the 
     corresponding public key certificate to verify the 
     signature and authenticate the initiator.  

     The HKDF computation SHOULD include SharedInfo 
     substrings (in the Concatenation Based HKDF) or 
     SuppPrivInfo and/or SuppPubInfo (in the ASN.1 
     Structured HKDF) with unique transaction or 
     application-specific information. 

   4.3 Ephemeral-Ephemeral Key Agreement 

     Ephemeral-ephemeral key agreement may be performed 
     when neither participant has a long term key pair, 
     but each participant has the ability to generate 
     ephemeral key pairs. In this case, the participants 
     agree on parameters (or curves), then each 
     participant generates an ephemeral key pair using 
     those parameters. 

     Each participant signs the public key from its 
     ephemeral key agreement key pair using its private 
     digital signature key and sends the ephemeral public 
     key and the signature to the other party. The 
     receiver uses the sending party's corresponding 
     public key to verify the signature. In general, the 
     receiver will use the sender's public key 
     certificate to authenticate the participant.   

     Each party uses its own ephemeral key pair, the 
     other party's ephemeral public key and the 
     appropriate key agreement algorithm to compute the 
     secret value.  The ephemeral private keys should be 
     erased after computation of the secret value.  

      
      
     Dang            Expires December 2006       [Page 23] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

     This option appears to be the most secure of the key 
     agreement options because it results in a temporary, 
     authenticated ephemeral key. 

     For this scenario, the SharedInfo substrings (in the 
     Concatenation Based HKDF) and SuppPrivInfo and/or 
     SuppPubInfo (in the ASN.1 Structured HKDF) are 
     optional, since the participants generate a new 
     secret value based on new ephemeral key pairs for 
     each execution of the HKDF. Each participant 
     contributes randomness through their key generation 
     process. 

     4.4 Anonymous Key Agreement 

     In this scenario, the ephemeral-ephemeral key 
     agreement algorithm is used without authentication. 
     That is, the participants agree on public (e.g., 
     Diffie-Hellman) parameters and exchange ephemeral 
     public keys but do not sign the messages. This 
     protocol results in a secret value and derived 
     keying material in the same way as ephemeral-
     ephemeral key agreement.  

     This approach is vulnerable to man-in-the-middle 
     attacks, in which the attacker conducts anonymous 
     key agreement exchanges with both parties. The 
     public key agreement parameters can be delivered 
     physically or electronically. 

     As above, the SharedInfo substrings (in the 
     Concatenation Based HKDF) or SuppPrivInfo and/or 
     SuppPubInfo (in the ASN.1 Structured HKDF) are 
     optional, since the participants generate a new 
     secret value based on new ephemeral key pairs for 
     each execution of the HKDF.  

     5. Security Considerations 

     Special care should be taken to protect the secret 
     value and to limit its exposure over time. When a 
     secret value is no longer needed, it should be 
     destroyed. 

     If a session key generated from the HKDF is 
     compromised, an attacker can decrypt all the 
      
      
     Dang            Expires December 2006       [Page 24] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

     messages exchanged in the session. However, this 
     provides no information about the other session keys 
     or the original secret value. Previous and 
     subsequent session keys generated from the same 
     secret value in different HKDF computations are 
     still secure.This provides a much stronger security 
     than using the same key in all sessions. This is one 
     of the main purposes to use the HKDF algorithm as 
     described above.  

     If the original secret value is somehow compromised, 
     then an attacker can derive all the session keying 
     material and use it to access all messages in all 
     communication sessions between the two parties that 
     used that secret value. So, the original secret 
     value must be strongly resistant to brute-force 
     attacks and kept securely. 

     The strength of a key derived using the HKDF is 
     limited by the security strength of the hash 
     function H, the strength of the secret value, and 
     the length of the derived key itself. 

     Assuming that the output of the HKDF cannot be 
     differentiated from random data, the best attack 
     against a derived key is a brute force attack.  The 
     work factor to perform such an attack is 2**n, where 
     n is the length of the derived key. Then, the 
     security of a derived key will be the minimum 
     security strength of the hash function H, the secret 
     value, SV, and the length of the key itself. 

     When used in HKDF, the work factor to attack a 
     secure hash function is 2**h, where h is the length 
     of the output. 

     The HKDFs are intended for use in scenarios where 
     the communicating parties derive keying material for 
     their own use.  This specification is not intended 
     for scenarios where keys are redistributed, such as 
     key hierarchies. 

     When secret values are generated using key agreement 
     schemes, the security strengths of the secret values 
     depend on the key agreement algorithms used and the 
     security strengths of the asymmetric keys. For 
      
      
     Dang            Expires December 2006       [Page 25] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

     example, 1024 bit Diffie-Hellman has approximate 
     security strength of 80 bits. That is, a secret 
     value derived using 1024 bit Diffie-Hellman is 
     roughly equivalent to an 80 bit randomly generated 
     secret value. Similarly, a secret value derived 
     using 163 bit elliptic curve Diffie-Hellman is 
     roughly equivalent to an 80 bit randomly generated 
     secret value. For additional information regarding 
     the strength of values obtained using key agreement 
     schemes, see [RFC 3766] and [SP 800-57]. 

     6. IANA Considerations 

            None 


     7. Acknowledgments 

     The protocol defined in this document is based 
     largely on work by Elaine Barker, Don Johnson, and 
     Miles Smid in [SP 800-56A]. This document also 
     borrows some text from [SP 800-52] by C. Michael 
     Chernick, Charles Edington III, Mathew J. Fanto.  
     John Kelsey, Morrie Dworkin, and Bill Burr provided 
     invaluable advice and assistance. 

     8. References 

               8.1 Normative References 


        [RFC 2119] Bradner, S., "Key words for use in RFCs to 
                 Indicate Requirement Levels", BCP 14, RFC 2119, 
                 March 1997. 

         

               8.2  Informative References 


            

        [FIPS 180-2]   National Institute of Standards and 
             Technology, "Secure Hash Standard (SHS)", Federal 

      
      
     Dang            Expires December 2006       [Page 26] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

             Information Processing Standards Publication 180-2, 
             August 2002.  

        [SP 800-56A]   National Institute of Standards and 
             Technology, "Recommendation for Pair-Wise Key 
             Establishment Schemes Using Discrete Logarithm 
             Cryptography", NIST Special Publication 800-56A, 
             March, 2006.  

        [SP 800-52]   National Institute of Standards and 
             Technology, "Guidelines for the Selection and Use of 
             Transport Layer Security (TLS)Implementation", NIST 
             Special Publication 800-52, June, 2005.  

        [RFC 3766]    Orman H. and Hoffman P., "Determining 
             Strengths For Public Keys Used For Exchanging 
             Symmetric Keys", RFC 3766, April 2004. 

        [SP 800-57]   National Institute of Standards and 
             Technology, "Recommendation for Key Management", NIST 
             Special Publication 800-57, August 2005. 

        [FIPS 198]   National Institute of Standards and 
             Technology, "The Keyed-Hash Message Authentication 
             Code (HMAC)", Federal Information Processing 
             Standards Publication 198, March 2002. 

     9. Author's Addresses 

            Quynh Dang 
            National Institute of Standards and 
            Technology  
            100 Bureau Drive, Mail Stop 8930  
            Gaithersburg, MD 20899-8930  
            Email: quynh.dang@nist.gov 
             


            Tim Polk 
            National Institute of Standards and 
            Technology  
            100 Bureau Drive, Mail Stop 8930  
            Gaithersburg, MD 20899-8930 
            Email: tim.polk@nist.gov 
         
      
      
     Dang            Expires December 2006       [Page 27] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

         
     10. Intellectual Property Statement 

     The IETF takes no position regarding the validity or 
     scope of any Intellectual Property Rights or other 
     rights that might be claimed to pertain to the 
     implementation or use of the technology described in 
     this document or the extent to which any license 
     under such rights might or might not be available; 
     nor does it represent that it has made any 
     independent effort to identify any such rights.  
     Information on the procedures with respect to rights 
     in RFC documents can be found in BCP 78 and BCP 79. 

     Copies of IPR disclosures made to the IETF 
     Secretariat and any assurances of licenses to be 
     made available, or the result of an attempt made to 
     obtain a general license or permission for the use 
     of such proprietary rights by implementers or users 
     of this specification can be obtained from the IETF 
     on-line IPR repository at http://www.ietf.org/ipr. 

     The IETF invites any interested party to bring to 
     its attention any copyrights, patents or patent 
     applications, or other proprietary rights that may 
     cover technology that may be required to implement 
     this standard. Please address the information to the 
     IETF at ietf-ipr@ietf.org. 

     11. Disclaimer of Validity 

     This document and the information contained herein 
     are provided on an "AS IS" basis and THE 
     CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS OR 
     IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND 
     THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL 
     WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT 
     LIMITED TO ANY WARRANTY THAT THE USE OF THE 
     INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR 
     ANY IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS 
     FOR A PARTICULAR PURPOSE. 

     12. Copyright Statement 

     Copyright (C) The Internet Society (2006). 

      
      
     Dang            Expires December 2006       [Page 28] 
         






     Internet-Draft       Hash-Based Key Derivation  May 2006 
         

     This document is subject to the rights, licenses and 
     restrictions contained in BCP 78, and except as set forth 
     therein, the authors retain all their rights. 
         
         
     13. Acknowledgment 

     Funding for the RFC Editor function is currently provided by 
     the Internet Society. 
      



































      
      
     Dang            Expires December 2006       [Page 29]