diff options
| author | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 | 
|---|---|---|
| committer | Thomas Voss <mail@thomasvoss.com> | 2024-11-27 20:54:24 +0100 | 
| commit | 4bfd864f10b68b71482b35c818559068ef8d5797 (patch) | |
| tree | e3989f47a7994642eb325063d46e8f08ffa681dc /doc/rfc/rfc4758.txt | |
| parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) | |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc4758.txt')
| -rw-r--r-- | doc/rfc/rfc4758.txt | 3027 | 
1 files changed, 3027 insertions, 0 deletions
diff --git a/doc/rfc/rfc4758.txt b/doc/rfc/rfc4758.txt new file mode 100644 index 0000000..05e8250 --- /dev/null +++ b/doc/rfc/rfc4758.txt @@ -0,0 +1,3027 @@ + + + + + + +Network Working Group                                        M. Nystroem +Request for Comments: 4758                                  RSA Security +Category: Informational                                    November 2006 + + +       Cryptographic Token Key Initialization Protocol (CT-KIP) +                         Version 1.0 Revision 1 + +Status of This Memo + +   This memo provides information for the Internet community.  It does +   not specify an Internet standard of any kind.  Distribution of this +   memo is unlimited. + +Copyright Notice + +   Copyright (C) The IETF Trust (2006). + +Abstract + +   This document constitutes Revision 1 of Cryptographic Token Key +   Initialization Protocol (CT-KIP) Version 1.0 from RSA Laboratories' +   One-Time Password Specifications (OTPS) series.  The body of this +   document, except for the intellectual property considerations +   section, is taken from the CT-KIP Version 1.0 document, but comments +   received during the IETF review are reflected; hence, the status of a +   revised version.  As no "bits-on-the-wire" have changed, the protocol +   specified herein is compatible with CT-KIP Version 1.0. + +   CT-KIP is a client-server protocol for initialization (and +   configuration) of cryptographic tokens.  The protocol requires +   neither private-key capabilities in the cryptographic tokens, nor an +   established public-key infrastructure.  Provisioned (or generated) +   secrets will only be available to the server and the cryptographic +   token itself. + + + + + + + + + + + + + + + + +Nystroem                     Informational                      [Page 1] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +Table of Contents + +   1. Introduction ....................................................4 +      1.1. Scope ......................................................4 +      1.2. Background .................................................4 +      1.3. Document Organization ......................................5 +   2. Acronyms and Notation ...........................................5 +      2.1. Acronyms ...................................................5 +      2.2. Notation ...................................................5 +   3. CT-KIP ..........................................................6 +      3.1. Overview ...................................................6 +      3.2. Entities ...................................................7 +      3.3. Principles of Operation ....................................7 +      3.4. The CT-KIP One-Way Pseudorandom Function, CT-KIP-PRF ......10 +           3.4.1. Introduction .......................................10 +           3.4.2. Declaration ........................................11 +      3.5. Generation of Cryptographic Keys for Tokens ...............11 +      3.6. Encryption of Pseudorandom Nonces Sent from the +           CT-KIP Client .............................................12 +      3.7. CT-KIP Schema Basics ......................................13 +           3.7.1. Introduction .......................................13 +           3.7.2. General XML Schema Requirements ....................13 +           3.7.3. The AbstractRequestType Type .......................13 +           3.7.4. The AbstractResponseType type ......................14 +           3.7.5. The StatusCode Type ................................14 +           3.7.6. The IdentifierType Type ............................16 +           3.7.7. The NonceType Type .................................16 +           3.7.8. The ExtensionsType and the +                  AbstractExtensionType Types ........................17 +      3.8. CT-KIP Messages ...........................................17 +           3.8.1. Introduction .......................................17 +           3.8.2. CT-KIP Initialization ..............................17 +           3.8.3. The CT-KIP Client's Initial PDU ....................18 +           3.8.4. The CT-KIP server's initial PDU ....................20 +           3.8.5. The CT-KIP Client's Second PDU .....................23 +           3.8.6. The CT-KIP Server's Final PDU ......................24 +      3.9. Protocol Extensions .......................................27 +           3.9.1. The ClientInfoType Type ............................27 +           3.9.2. The ServerInfoType Type ............................28 +           3.9.3. The OTPKeyConfigurationDataType Type ...............28 +   4. Protocol Bindings ..............................................29 +      4.1. General Requirement .......................................29 +      4.2. HTTP/1.1 binding for CT-KIP ...............................29 +           4.2.1. Introduction .......................................29 +           4.2.2. Identification of CT-KIP Messages ..................29 +           4.2.3. HTTP Headers .......................................29 +           4.2.4. HTTP Operations ....................................30 +           4.2.5. HTTP Status Codes ..................................30 + + + +Nystroem                     Informational                      [Page 2] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +           4.2.6. HTTP Authentication ................................31 +           4.2.7. Initialization of CT-KIP ...........................31 +           4.2.8. Example Messages ...................................31 +   5. Security considerations ........................................32 +      5.1. General ...................................................32 +      5.2. Active Attacks ............................................32 +           5.2.1. Introduction .......................................32 +           5.2.2. Message Modifications ..............................32 +           5.2.3. Message Deletion ...................................34 +           5.2.4. Message Insertion ..................................34 +           5.2.5. Message Replay .....................................34 +           5.2.6. Message Reordering .................................35 +           5.2.7. Man in the Middle ..................................35 +      5.3. Passive Attacks ...........................................35 +      5.4. Cryptographic Attacks .....................................35 +      5.5. Attacks on the Interaction between CT-KIP and User +           Authentication ............................................36 +   6. Intellectual Property Considerations ...........................36 +   7. References .....................................................37 +      7.1. Normative References ......................................37 +      7.2. Informative References ....................................37 +   Appendix A. CT-KIP Schema .........................................39 +   Appendix B. Examples of CT-KIP Messages ...........................46 +      B.1. Introduction ..............................................46 +      B.2. Example of a CT-KIP Initialization (Trigger) Message ......46 +      B.3. Example of a <ClientHello> Message ........................46 +      B.4. Example of a <ServerHello> Message ........................47 +      B.5. Example of a <ClientNonce> Message ........................47 +      B.6. Example of a <ServerFinished> Message .....................48 +   Appendix C. Integration with PKCS #11 .............................48 +   Appendix D. Example CT-KIP-PRF Realizations .......................48 +      D.1. Introduction ..............................................48 +      D.2. CT-KIP-PRF-AES ............................................48 +           D.2.1. Identification .....................................48 +           D.2.2. Definition .........................................49 +           D.2.3. Example ............................................50 +      D.3. CT-KIP-PRF-SHA256 .........................................50 +           D.3.1. Identification .....................................50 +           D.3.2. Definition .........................................51 +           D.3.3. Example ............................................52 +   Appendix E. About OTPS ............................................53 + + + + + + + + + + +Nystroem                     Informational                      [Page 3] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +1.  Introduction + +   Note: This document is Revision 1 of CT-KIP Version 1.0 [12] from RSA +   Laboratories' OTPS series. + +1.1.  Scope + +   This document describes a client-server protocol for initialization +   (and configuration) of cryptographic tokens.  The protocol requires +   neither private-key capabilities in the cryptographic tokens, nor an +   established public-key infrastructure. + +   The objectives of this protocol are: + +   o  To provide a secure method of initializing cryptographic tokens +      with secret keys without exposing generated, secret material to +      any other entities than the server and the cryptographic token +      itself, + +   o  To avoid, as much as possible, any impact on existing +      cryptographic token manufacturing processes, + +   o  To provide a solution that is easy to administer and scales well. + +   The mechanism is intended for general use within computer and +   communications systems employing connected cryptographic tokens (or +   software emulations thereof). + +1.2.  Background + +   A cryptographic token may be a handheld hardware device, a hardware +   device connected to a personal computer through an electronic +   interface such as USB, or a software module resident on a personal +   computer, which offers cryptographic functionality that may be used, +   e.g., to authenticate a user towards some service.  Increasingly, +   these tokens work in a connected fashion, enabling their programmatic +   initialization as well as programmatic retrieval of their output +   values.  This document intends to meet the need for an open and +   interoperable mechanism to programmatically initialize and configure +   connected cryptographic tokens.  A companion document entitled "A +   PKCS #11 Mechanism for the Cryptographic Token Key Initialization +   Protocol" [2] describes an application-programming interface suitable +   for use with this mechanism. + + + + + + + + +Nystroem                     Informational                      [Page 4] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +1.3.  Document Organization + +   The organization of this document is as follows: + +   o  Section 1 is an introduction. + +   o  Section 2 defines some notation used in this document. + +   o  Section 3 defines the protocol mechanism in detail. + +   o  Section 4 defines a binding of the protocol to transports. + +   o  Section 5 provides security considerations. + +   o  Appendix A defines the XML schema for the protocol mechanism, +      Appendix B gives example messages, and Appendix C discusses +      integration with PKCS #11 [3]. + +   o  Appendix D provides example realizations of an abstract +      pseudorandom function defined in Section 3. + +   o  Appendix E provides general information about the One-Time +      Password Specifications. + +2.  Acronyms and Notation + +2.1.  Acronyms + +   MAC      Message Authentication Code + +   PDU      Protocol Data Unit + +   PRF      Pseudo-Random Function + +   CT-KIP   Cryptographic Token Key Initialization Protocol (the +            protocol mechanism described herein) + +2.2.  Notation + +   ||       String concatenation + +   [x]      Optional element x + +   A ^ B    Exclusive-or operation on strings A and B (A and B of equal +            length) + +   K_AUTH   Secret key used for authentication purposes + + + + +Nystroem                     Informational                      [Page 5] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   K_TOKEN  Secret key used for token computations, generated in CT-KIP + +   K_SERVER Public key of CT-KIP server + +   K_SHARED Secret key shared between the cryptographic token and the +            CT-KIP server + +   K        Key used to encrypt R_C (either K_SERVER or K_SHARED) + +   R        Pseudorandom value chosen by the cryptographic token and +            used for MAC computations + +   R_C      Pseudorandom value chosen by the cryptographic token + +   R_S      Pseudorandom value chosen by the CT-KIP server + +   The following typographical convention is used in the body of the +   text: <XMLElement>. + +3.  CT-KIP + +3.1.  Overview + +   The CT-KIP is a client-server protocol for the secure initialization +   of cryptographic tokens.  The protocol is meant to provide high +   assurance for both the server and the client (cryptographic token) +   that generated keys have been correctly and randomly generated and +   not exposed to other entities.  The protocol does not require the +   existence of a public-key infrastructure. + +   +---------------+                            +---------------+ +   |               |                            |               | +   | CT-KIP client |                            | CT-KIP server | +   |               |                            |               | +   +---------------+                            +---------------+ +           |                                            | +           |        [ <---- CT-KIP trigger ---- ]       | +           |                                            | +           |        ------- Client Hello ------->       | +           |                                            | +           |        <------ Server Hello --------       | +           |                                            | +           |        ------- Client Nonce ------->       | +           |                                            | +           |        <----- Server Finished ------       | + +   Figure 1: The 4-pass CT-KIP protocol (with optional preceding +   trigger) + + + +Nystroem                     Informational                      [Page 6] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +3.2.  Entities + +   In principle, the protocol involves a CT-KIP client and a CT-KIP +   server. + +   It is assumed that a desktop/laptop or a wireless device (e.g., a +   mobile phone or a PDA) will host an application communicating with +   the CT-KIP server as well as the cryptographic token, and +   collectively, the cryptographic token and the communicating +   application form the CT-KIP client.  When there is a need to point +   out if an action is to be performed by the communicating application +   or by the token the text will make this explicit. + +   The manner in which the communicating application will transfer CT- +   KIP protocol elements to and from the cryptographic token is +   transparent to the CT-KIP server.  One method for this transfer is +   described in [2]. + +3.3.  Principles of Operation + +   To initiate a CT-KIP session, a user may use a browser to connect to +   a web server running on some host.  The user may then identify (and +   authenticate) herself (through some means that essentially are out of +   scope for this document) and possibly indicate how the CT-KIP client +   shall contact the CT-KIP server.  There are also other alternatives +   for CT-KIP session initiation, such as the CT-KIP client being pre- +   configured to contact a certain CT-KIP server, or the user being +   informed out-of-band about the location of the CT-KIP server.  In any +   event, once the location of the CT-KIP server is known, the CT-KIP +   client and the CT-KIP server engage in a 4-pass protocol in which: + +   a.  The CT-KIP client provides information to the CT-KIP server about +       the cryptographic token's identity, supported CT-KIP versions, +       cryptographic algorithms supported by the token and for which +       keys may be generated using this protocol, and encryption and MAC +       algorithms supported by the cryptographic token for the purposes +       of this protocol. + +   b.  Based on this information, the CT-KIP server provides a random +       nonce, R_S, to the CT-KIP client, along with information about +       the type of key to generate, the encryption algorithm chosen to +       protect sensitive data sent in the protocol.  In addition, it +       provides either information about a shared secret key to use for +       encrypting the cryptographic token's random nonce (see below), or +       its own public key.  The length of the nonce R_S may depend on +       the selected key type. + + + + + +Nystroem                     Informational                      [Page 7] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   c.  The cryptographic token generates a random nonce R_C and encrypts +       it using the selected encryption algorithm and with a key K that +       is either the CT-KIP server's public key K_SERVER, or a shared +       secret key K_SHARED as indicated by the CT-KIP server.  The +       length of the nonce R_C may depend on the selected key type.  The +       CT-KIP client then sends the encrypted random nonce to the CT-KIP +       server.  The token also calculates a cryptographic key K_TOKEN of +       the selected type from the combination of the two random nonces +       R_S and R_C, the encryption key K, and possibly some other data, +       using the CT-KIP-PRF function defined herein. + +   d.  The CT-KIP server decrypts R_C, calculates K_TOKEN from the +       combination of the two random nonces R_S and R_C, the encryption +       key K, and possibly some other data, using the CT-KIP-PRF +       function defined herein.  The server then associates K_TOKEN with +       the cryptographic token in a server-side data store.  The intent +       is that the data store later on will be used by some service that +       needs to verify or decrypt data produced by the cryptographic +       token and the key. + +   e.  Once the association has been made, the CT-KIP server sends a +       confirmation message to the CT-KIP client.  The confirmation +       message includes an identifier for the generated key and may also +       contain additional configuration information, e.g., the identity +       of the CT-KIP server. + +   f.  Upon receipt of the CT-KIP server's confirmation message, the +       cryptographic token associates the provided key identifier with +       the generated key K_TOKEN, and stores the provided configuration +       data, if any. + +   Note: Conceptually, although R_C is one pseudorandom string, it may +   be viewed as consisting of two components, R_C1 and R_C2, where R_C1 +   is generated during the protocol run, and R_C2 can be generated at +   the cryptographic token manufacturing time and stored in the +   cryptographic token.  In that case, the latter string, R_C2, should +   be unique for each cryptographic token for a given manufacturer. + + + + + + + + + + + + + + +Nystroem                     Informational                      [Page 8] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   +----------------------+    +-------+     +----------------------+ +   |    +------------+    |    |       |     |                      | +   |    | Server key |    |    |       |     |                      | +   | +<-|  Public    |------>------------->-------------+---------+ | +   | |  |  Private   |    |    |       |     |          |         | | +   | |  +------------+    |    |       |     |          |         | | +   | |        |           |    |       |     |          |         | | +   | V        V           |    |       |     |          V         V | +   | |   +---------+      |    |       |     |        +---------+ | | +   | |   | Decrypt |<-------<-------------<-----------| Encrypt | | | +   | |   +---------+      |    |       |     |        +---------+ | | +   | |      |  +--------+ |    |       |     |            ^       | | +   | |      |  | Server | |    |       |     |            |       | | +   | |      |  | Random |--->------------->------+  +----------+  | | +   | |      |  +--------+ |    |       |     |   |  | Client   |  | | +   | |      |      |      |    |       |     |   |  | Random   |  | | +   | |      |      |      |    |       |     |   |  +----------+  | | +   | |      |      |      |    |       |     |   |        |       | | +   | |      V      V      |    |       |     |   V        V       | | +   | |   +------------+   |    |       |     | +------------+     | | +   | +-->| CT-KIP PRF |   |    |       |     | | CT-KIP PRF |<----+ | +   |     +------------+   |    |       |     | +------------+       | +   |           |          |    |       |     |       |              | +   |           V          |    |       |     |       V              | +   |       +-------+      |    |       |     |   +-------+          | +   |       |  Key  |      |    |       |     |   |  Key  |          | +   |       +-------+      |    |       |     |   +-------+          | +   |       +-------+      |    |       |     |   +-------+          | +   |       |Key Id |-------->------------->------|Key Id |          | +   |       +-------+      |    |       |     |   +-------+          | +   +----------------------+    +-------+     +----------------------+ +        CT-KIP Server        CT-KIP Client     CT-KIP Client (Token) +                               (PC Host) + +   Figure 2: Principal data flow for CT-KIP key generation - using +   public server key + +   The inclusion of the two random nonces R_S and R_C in the key +   generation provides assurance to both sides (the token and the CT-KIP +   server) that they have contributed to the key's randomness and that +   the key is unique.  The inclusion of the encryption key K ensures +   that no man-in-the-middle may be present, or else the cryptographic +   token will end up with a key different from the one stored by the +   legitimate CT-KIP server. + +   Note: A man-in-the middle (in the form of corrupt client software or +   a mistakenly contacted server) may present his own public key to the +   token.  This will enable the attacker to learn the client's version + + + +Nystroem                     Informational                      [Page 9] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   of K_TOKEN.  However, the attacker is not able to persuade the +   legitimate server to derive the same value for K_TOKEN, since K_TOKEN +   is a function of the public key involved, and the attacker's public +   key must be different than the correct server's (or else the attacker +   would not be able to decrypt the information received from the +   client).  Therefore, once the attacker is no longer "in the middle", +   the client and server will detect that they are "out of synch" when +   they try to use their keys.  Therefore, in the case of encrypting R_C +   with K_SERVER, it is important to verify that K_SERVER really is the +   legitimate server's key.  One way to do this is to independently +   validate a newly generated K_TOKEN against some validation service at +   the server (e.g., by using a connection independent from the one used +   for the key generation). + +   The CT-KIP server may couple an initial user authentication to the +   CT-KIP execution in several ways to ensure that a generated K_TOKEN +   ends up associated with the correct token and user.  One way is to +   provide a one-time value to the user or CT-KIP client after +   successful user authentication and require this value to be used when +   contacting the CT-KIP service (in effect coupling the user +   authentication with the subsequent CT-KIP protocol run).  This value +   could, for example, be placed in a <TriggerNonce> element of the CT- +   KIP initialization trigger (if triggers are used; see Section 4.2.7). +   Another way is for the user to provide a token identifier which will +   later be used in the CT-KIP protocol to the server during the +   authentication phase.  The server may then include this token +   identifier in the CT-KIP initialization trigger.  It is also +   legitimate for a CT-KIP client to initiate a CT-KIP protocol run +   without having received an initialization message from a server, but +   in this case any provided token identifier shall not be accepted by +   the server unless the server has access to a unique token key for the +   identified token and that key will be used in the protocol.  Whatever +   the method, the CT-KIP server must ensure that a generated key is +   associated with the correct token and, if applicable, the correct +   user.  For a further discussion of this and threats related to man- +   in-the-middle attacks in this context, see Section 5.5. + +3.4.  The CT-KIP One-Way Pseudorandom Function, CT-KIP-PRF + +3.4.1.  Introduction + +   The general requirements on CT-KIP-PRF are the same as on keyed hash +   functions: It shall take an arbitrary length input, and be one-way +   and collision-free (for a definition of these terms, see, e.g., [4]). +   Further, the CT-KIP-PRF function shall be capable of generating a +   variable-length output, and its output shall be unpredictable even if +   other outputs for the same key are known. + + + + +Nystroem                     Informational                     [Page 10] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   It is assumed that any realization of CT-KIP-PRF takes three input +   parameters: A secret key k, some combination of variable data, and +   the desired length of the output.  Examples of the variable data +   include, but are not limited to, a current token counter value, the +   current token time, and a challenge.  The combination of variable +   data can, without loss of generalization, be considered as a salt +   value (see PKCS #5 Version 2.0 [5], Section 4), and this +   characterization of CT-KIP-PRF should fit all actual PRF algorithms +   implemented by tokens.  From the point of view of this specification, +   CT-KIP-PRF is a "black-box" function that, given the inputs, +   generates a pseudorandom value. + +   Separate specifications may define the implementation of CT-KIP-PRF +   for various types of cryptographic tokens.  Appendix D contains two +   example realizations of CT-KIP-PRF. + +3.4.2.  Declaration + +   CT-KIP-PRF (k, s, dsLen) + +   Input: + +   k     secret key in octet string format + +   s     octet string of varying length consisting of variable data +         distinguishing the particular string being derived + +   dsLen desired length of the output + +   Output: + +   DS    pseudorandom string, dsLen-octets long + +   For the purposes of this document, the secret key k shall be 16 +   octets long. + +3.5.  Generation of Cryptographic Keys for Tokens + +   In CT-KIP, keys are generated using the CT-KIP-PRF function, a secret +   random value R_C chosen by the CT-KIP client, a random value R_S +   chosen by the CT-KIP server, and the key k used to encrypt R_C.  The +   input parameter s of CT-KIP-PRF is set to the concatenation of the +   (ASCII) string "Key generation", k, and R_S, and the input parameter +   dsLen is set to the desired length of the key, K_TOKEN (the length of +   K_TOKEN is given by the key's type): + + + + + + +Nystroem                     Informational                     [Page 11] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   dsLen = (desired length of K_TOKEN) + +   K_TOKEN = CT-KIP-PRF (R_C, "Key generation" || k || R_S, dsLen) + +   When computing K_TOKEN above, the output of CT-KIP-PRF may be subject +   to an algorithm-dependent transform before being adopted as a key of +   the selected type.  One example of this is the need for parity in DES +   keys. + +3.6.  Encryption of Pseudorandom Nonces Sent from the CT-KIP Client + +   CT-KIP client random nonce(s) are either encrypted with the public +   key provided by the CT-KIP server or by a shared secret key.  For +   example, in the case of a public RSA key, an RSA encryption scheme +   from PKCS #1 [6] may be used. + +   In the case of a shared secret key, to avoid dependence on other +   algorithms, the CT-KIP client may use the CT-KIP-PRF function +   described herein with the shared secret key K_SHARED as input +   parameter k (in this case, K_SHARED should be used solely for this +   purpose), the concatenation of the (ASCII) string "Encryption" and +   the server's nonce R_S as input parameter s, and dsLen set to the +   length of R_C: + +   dsLen = len(R_C) + +   DS = CT-KIP-PRF(K_SHARED, "Encryption" || R_S, dsLen) + +   This will produce a pseudorandom string DS of length equal to R_C. +   Encryption of R_C may then be achieved by XOR-ing DS with R_C: + +   Enc-R_C = DS ^ R_C + +   The CT-KIP server will then perform the reverse operation to extract +   R_C from Enc-R_C. + +   Note: It may appear that an attacker, who learns a previous value of +   R_C, may be able to replay the corresponding R_S and, hence, learn a +   new R_C as well.  However, this attack is mitigated by the +   requirement for a server to show knowledge of K_AUTH (see below) in +   order to successfully complete a key re-generation. + + + + + + + + + + +Nystroem                     Informational                     [Page 12] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +3.7.  CT-KIP Schema Basics + +3.7.1.  Introduction + +   Core parts of the XML schema for CT-KIP, found in Appendix A, are +   explained in this section.  Specific protocol message elements are +   defined in Section 3.8.  Examples can be found in Appendix B. + +   The XML format for CT-KIP messages have been designed to be +   extensible.  However, it is possible that the use of extensions will +   harm interoperability; therefore, any use of extensions should be +   carefully considered.  For example, if a particular implementation +   relies on the presence of a proprietary extension, then it may not be +   able to interoperate with independent implementations that have no +   knowledge of this extension. + +   XML types defined in this sub-section are not CT-KIP messages; rather +   they provide building blocks that are used by CT-KIP messages. + +3.7.2.  General XML Schema Requirements + +   Some CT-KIP elements rely on the parties being able to compare +   received values with stored values.  Unless otherwise noted, all +   elements in this document that have the XML Schema "xs:string" type, +   or a type derived from it, must be compared using an exact binary +   comparison.  In particular, CT-KIP implementations must not depend on +   case-insensitive string comparisons, normalization or trimming of +   white space, or conversion of locale-specific formats such as +   numbers. + +   Implementations that compare values that are represented using +   different character encodings must use a comparison method that +   returns the same result as converting both values to the Unicode +   character encoding, Normalization Form C [1], and then performing an +   exact binary comparison. + +   No collation or sorting order for attributes or element values is +   defined.  Therefore, CT-KIP implementations must not depend on +   specific sorting orders for values. + +3.7.3.  The AbstractRequestType Type + +   All CT-KIP requests are defined as extensions to the abstract +   AbstractRequestType type.  The elements of the AbstractRequestType, +   therefore, apply to all CT-KIP requests.  All CT-KIP requests must +   contain a Version attribute.  For this version of this specification, +   Version shall be set to "1.0". + + + + +Nystroem                     Informational                     [Page 13] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   <xs:complexType name="AbstractRequestType" abstract="true"> +     <xs:attribute name="Version" type="VersionType" +      use="required"/> +   </xs:complexType> + +3.7.4.  The AbstractResponseType type + +   All CT-KIP responses are defined as extensions to the abstract +   AbstractResponseType type.  The elements of the AbstractResponseType, +   therefore, apply to all CT-KIP responses.  All CT-KIP responses +   contain a Version attribute indicating the version that was used.  A +   Status attribute, which indicates whether the preceding request was +   successful or not must also be present.  Finally, all responses may +   contain a SessionID attribute identifying the particular CT-KIP +   session.  The SessionID attribute needs only be present if more than +   one roundtrip is required for a successful protocol run (this is the +   case with the protocol version described herein). + +   <xs:complexType name="AbstractResponseType" abstract="true"> +     <xs:attribute name="Version" type="VersionType" use="required"/> +     <xs:attribute name="SessionID" type="IdentifierType"/> +     <xs:attribute name="Status" type="StatusCode" use="required"/> +   </xs:complexType> + +3.7.5.  The StatusCode Type + +   The StatusCode type enumerates all possible return codes: + +   <xs:simpleType name="StatusCode"> +     <xs:restriction base="xs:string"> +       <xs:enumeration value="Continue"/> +       <xs:enumeration value="Success"/> +       <xs:enumeration value="Abort"/> +       <xs:enumeration value="AccessDenied"/> +       <xs:enumeration value="MalformedRequest"/> +       <xs:enumeration value="UnknownRequest"/> +       <xs:enumeration value="UnknownCriticalExtension"/> +       <xs:enumeration value="UnsupportedVersion"/> +       <xs:enumeration value="NoSupportedKeyTypes"/> +       <xs:enumeration value="NoSupportedEncryptionAlgorithms"/> +       <xs:enumeration value="NoSupportedMACAlgorithms"/> +       <xs:enumeration value="InitializationFailed"/> +     </xs:restriction> +   </xs:simpleType> + +   Upon transmission or receipt of a message for which the Status +   attribute's value is not "Success" or "Continue", the default +   behavior, unless explicitly stated otherwise below, is that both the + + + +Nystroem                     Informational                     [Page 14] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   CT-KIP server and the CT-KIP client shall immediately terminate the +   CT-KIP session.  CT-KIP servers and CT-KIP clients must delete any +   secret values generated as a result of failed runs of the CT-KIP +   protocol.  Session identifiers may be retained from successful or +   failed protocol runs for replay detection purposes, but such retained +   identifiers shall not be reused for subsequent runs of the protocol. + +   When possible, the CT-KIP client should present an appropriate error +   message to the user. + +   These status codes are valid in all CT-KIP-Response messages unless +   explicitly stated otherwise. + +   o  "Continue" indicates that the CT-KIP server is ready for a +      subsequent request from the CT-KIP client.  It cannot be sent in +      the server's final message. + +   o  "Success" indicates successful completion of the CT-KIP session. +      It can only be sent in the server's final message. + +   o  "Abort" indicates that the CT-KIP server rejected the CT-KIP +      client's request for unspecified reasons. + +   o  "AccessDenied" indicates that the CT-KIP client is not authorized +      to contact this CT-KIP server. + +   o  "MalformedRequest" indicates that the CT-KIP server failed to +      parse the CT-KIP client's request. + +   o  "UnknownRequest" indicates that the CT-KIP client made a request +      that is unknown to the CT-KIP server. + +   o  "UnknownCriticalExtension" indicates that a critical CT-KIP +      extension (see below) used by the CT-KIP client was not supported +      or recognized by the CT-KIP server. + +   o  "UnsupportedVersion" indicates that the CT-KIP client used a CT- +      KIP protocol version not supported by the CT-KIP server.  This +      error is only valid in the CT-KIP server's first response message. + +   o  "NoSupportedKeyTypes" indicates that the CT-KIP client only +      suggested key types that are not supported by the CT-KIP server. +      This error is only valid in the CT-KIP server's first response +      message.  Note that the error will only occur if the CT-KIP server +      does not support any of the CT-KIP client's suggested key types. + + + + + + +Nystroem                     Informational                     [Page 15] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   o  "NoSupportedEncryptionAlgorithms" indicates that the CT-KIP client +      only suggested encryption algorithms that are not supported by the +      CT-KIP server.  This error is only valid in the CT-KIP server's +      first response message.  Note that the error will only occur if +      the CT-KIP server does not support any of the CT-KIP client's +      suggested encryption algorithms. + +   o  "NoSupportedMACAlgorithms" indicates that the CT-KIP client only +      suggested MAC algorithms that are not supported by the CT-KIP +      server.  This error is only valid in the CT-KIP server's first +      response message.  Note that the error will only occur if the CT- +      KIP server does not support any of the CT-KIP client's suggested +      MAC algorithms. + +   o  "InitializationFailed" indicates that the CT-KIP server could not +      generate a valid key given the provided data.  When this status +      code is received, the CT-KIP client should try to restart CT-KIP, +      as it is possible that a new run will succeed. + +3.7.6.  The IdentifierType Type + +   The IdentifierType type is used to identify various CT-KIP elements, +   such as sessions, users, and services.  Identifiers must not be +   longer than 128 octets. + +   <xs:simpleType name="IdentifierType"> +     <xs:restriction base="xs:string"> +       <xs:maxLength value="128"/> +     </xs:restriction> +   </xs:simpleType> + +3.7.7.  The NonceType Type + +   The NonceType type is used to carry pseudorandom values in CT-KIP +   messages.  A nonce, as the name implies, must be used only once.  For +   each CT-KIP message that requires a nonce element to be sent, a fresh +   nonce shall be generated each time.  Nonce values must be at least 16 +   octets long. + +   <xs:simpleType name="NonceType"> +     <xs:restriction base="xs:base64Binary"> +       <xs:minLength value="16"/> +     </xs:restriction> +   </xs:simpleType> + + + + + + + +Nystroem                     Informational                     [Page 16] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +3.7.8.  The ExtensionsType and the AbstractExtensionType Types + +   The ExtensionsType type is a list of type-value pairs that define +   optional CT-KIP features supported by a CT-KIP client or server. +   Extensions may be sent with any CT-KIP message.  Please see the +   description of individual CT-KIP messages in Section 3.8 of this +   document for applicable extensions.  Unless an extension is marked as +   Critical, a receiving party need not be able to interpret it.  A +   receiving party is always free to disregard any (non-critical) +   extensions. + +   <xs:complexType name="AbstractExtensionsType"> +     <xs:sequence maxOccurs="unbounded"> +       <xs:element name="Extension" type="AbstractExtensionType"/> +     </xs:sequence> +   </xs:complexType> + +   <xs:complexType name="AbstractExtensionType" abstract="true"> +     <xs:attribute name="Critical" type="xs:boolean"/> +   </xs:complexType> + +3.8.  CT-KIP Messages + +3.8.1.  Introduction + +   In this section, CT-KIP messages, including their parameters, +   encodings and semantics are defined. + +3.8.2.  CT-KIP Initialization + +   The CT-KIP server may initialize the CT-KIP protocol by sending a +   <CT-KIPTrigger> message.  This message may, e.g., be sent in response +   to a user requesting token initialization in a browsing session. + +   <xs:complexType name="InitializationTriggerType"> +     <xs:sequence> +       <xs:element name="TokenID" type="xs:base64Binary" minOccurs="0"/> +       <xs:element name="KeyID" type="xs:base64Binary" minOccurs="0"/> +       <xs:element name="TokenPlatformInfo" +         type="TokenPlatformInfoType" minOccurs="0"/> +       <xs:element name="TriggerNonce" type="NonceType"/> +       <xs:element name="CT-KIPURL" type="xs:anyURI" minOccurs="0"/> +       <xs:any namespace="##other" processContents="strict" +         minOccurs="0"/> +     </xs:sequence> +     <xs:attribute name="id" type="xs:ID"/> +   </xs:complexType> + + + + +Nystroem                     Informational                     [Page 17] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   <xs:element name="CT-KIPTrigger" type="CT-KIPTriggerType"/> + +   <xs:complexType name="CT-KIPTriggerType"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +          Message used to trigger the device to initiate a +          CT-KIP run. +       </xs:documentation> +     </xs:annotation> +     <xs:sequence> +       <xs:choice> +         <xs:element name="InitializationTrigger" +           type="InitializationTriggerType"/> +         <xs:any nameSpace="##other" processContents="strict"/> +       </xs:choice> +     </xs:sequence> +     <xs:attribute name="Version" type="ct-kip:VersionType"/> +   </xs:complexType> + +   The <CT-KIPTrigger> element is intended for the CT-KIP client and may +   inform the CT-KIP client about the identifier for the token that is +   to be initialized, and, optionally, of the identifier for the key on +   that token.  The latter would apply when re-seeding.  The trigger +   always contains a nonce to allow the server to couple the trigger +   with a later CT-KIP <ClientHello> request.  Finally, the trigger may +   contain a URL to use when contacting the CT-KIP server.  The <xs:any> +   elements are for future extensibility.  Any provided <TokenID> or +   <KeyID> values shall be used by the CT-KIP client in the subsequent +   <ClientHello> request.  The optional <TokenPlatformInfo> element +   informs the CT-KIP client about the characteristics of the intended +   token platform, and applies in the public-key variant of CT-KIP in +   situations when the client potentially needs to decide which one of +   several tokens to initialize. + +   The Version attribute shall be set to "1.0" for this version of CT- +   KIP. + +3.8.3.  The CT-KIP Client's Initial PDU + +   This message is the initial message sent from the CT-KIP client to +   the CT-KIP server. + +   <xs:element name="ClientHello" type="ClientHelloPDU"/> + +   <xs:complexType name="ClientHelloPDU"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +          Message sent from CT-KIP client to CT-KIP server to + + + +Nystroem                     Informational                     [Page 18] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +          initiate a CT-KIP session. +       </xs:documentation> +     </xs:annotation> +     <xs:complexContent> +       <xs:extension base="AbstractRequestType"> +         <xs:sequence> +           <xs:element name="TokenID" +             type="xs:base64Binary" minOccurs="0"/> +           <xs:element name="KeyID" +             type="xs:base64Binary" minOccurs="0"/> +           <xs:element name="ClientNonce" +             type="NonceType" minOccurs="0"/> +           <xs:element name= "TriggerNonce" +             type="NonceType" minOccurs="0"/> +           <xs:element name="SupportedKeyTypes" +             type="AlgorithmsType"/> +           <xs:element name="SupportedEncryptionAlgorithms" +             type="AlgorithmsType"/> +           <xs:element name="SupportedMACAlgorithms" +             type="AlgorithmsType"/> +           <xs:element name="Extensions" +             type="ExtensionsType" minOccurs="0"/> +         </xs:sequence> +       </xs:extension> +     </xs:complexContent> +   </xs:complexType> + +   The components of this message have the following meaning: + +   o  Version: (attribute inherited from the AbstractRequestType type) +      The highest version of this protocol the client supports.  Only +      version one ("1.0") is currently specified. + +   o  <TokenID>: An identifier for the cryptographic token (allows the +      server to find, e.g., a correct shared secret for MACing +      purposes).  The identifier shall only be present if such shared +      secrets exist or if the identifier was provided by the server in a +      <CT-KIPTrigger> element (see Section 4.2.7 below).  In the latter +      case, it must have the same value as the identifier provided in +      that element. + +   o  <KeyID>: An identifier for the key that will be overwritten if the +      protocol run is successful.  The identifier shall only be present +      if the key exists or was provided by the server in a +      <CT-KIPTrigger> element (see Section 4.2.7 below).  In the latter +      case, it must have the same value as the identifier provided in +      that element. + + + + +Nystroem                     Informational                     [Page 19] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   o  <ClientNonce>: This is the nonce R, which, when present, shall be +      used by the server when calculating MAC values (see below).  It is +      recommended that clients include this element whenever the <KeyID> +      element is present. + +   o  <TriggerNonce>: This optional element shall be present if and only +      if the CT-KIP run was initialized with a <CT-KIPTrigger> message +      (see Section 4.2.7 below), and shall, in that case, have the same +      value as the <TriggerNonce> child of that message.  A server using +      nonces in this way must verify that the nonce is valid and that +      any token or key identifier values provided in the <CT-KIPTrigger> +      message match the corresponding identifier values in the +      <ClientHello> message. + +   o  <SupportedKeyTypes>: A sequence of URIs indicating the key types +      for which the token is willing to generate keys through CT-KIP. + +   o  <SupportedEncryptionAlgorithms>: A sequence of URIs indicating the +      encryption algorithms supported by the cryptographic token for the +      purposes of CT-KIP.  The CT-KIP client may indicate the same +      algorithm both as a supported key type and as an encryption +      algorithm. + +   o  <SupportedMACAlgorithms>: A sequence of URIs indicating the MAC +      algorithms supported by the cryptographic token for the purposes +      of CT-KIP.  The CT-KIP client may indicate the same algorithm both +      as an encryption algorithm and as a MAC algorithm (e.g., http:// +      www.rsasecurity.com/rsalabs/otps/schemas/2005/12/ +      ct-kip#ct-kip-prf-aes defined in Appendix D) + +   o  <Extensions>: A sequence of extensions.  One extension is defined +      for this message in this version of CT-KIP: the ClientInfoType +      (see Section 3.9.1). + +3.8.4.  The CT-KIP server's initial PDU + +   This message is the first message sent from the CT-KIP server to the +   CT-KIP client (assuming a trigger message has not been sent to +   initiate the protocol, in which case, this message is the second +   message sent from the CT-KIP server to the CT-KIP client).  It is +   sent upon reception of a <ClientHello> message. + +   <xs:element name="ServerHello" type="ServerHelloPDU"/> + +   <xs:complexType name="ServerHelloPDU"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +         Message sent from CT-KIP server to CT-KIP + + + +Nystroem                     Informational                     [Page 20] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +         client in response to a received ClientHello +         PDU. +       </xs:documentation> +     </xs:annotation> +     <xs:complexContent> +       <xs:extension base="AbstractResponseType"> +         <xs:sequence minOccurs="0"> +           <xs:element name="KeyType" +             type="AlgorithmType"/> +           <xs:element name="EncryptionAlgorithm" +             type="AlgorithmType"/> +           <xs:element name="MacAlgorithm" +             type="AlgorithmType"/> +           <xs:element name="EncryptionKey" +             type="ds:KeyInfoType"/> +           <xs:element name="Payload" +             type="PayloadType"/> +           <xs:element name="Extensions" +             type="ExtensionsType" minOccurs="0"/> +           <xs:element name="Mac" type="MacType" +             minOccurs="0"/> +         </xs:sequence> +       </xs:extension> +     </xs:complexContent> +   </xs:complexType> + + +   <xs:complexType name="PayloadType"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +         Currently, only the nonce is defined.  In future versions, +         other payloads may be defined, e.g., for one-roundtrip +         initialization protocols. +       </xs:documentation> +     </xs:annotation> +     <xs:choice> +       <xs:element name="Nonce" type="NonceType"/> +       <any namespace="##other" processContents="strict"/> +     </xs:choice> +   </xs:complexType> + +   <xs:complexType name="MacType"> +     <xs:simpleContent> +       <xs:extension base="xs:base64Binary"> +         <xs:attribute name="MacAlgorithm" type="xs:anyURI"/> +       </xs:extension> +     </xs:simpleContent> +   </xs:complexType> + + + +Nystroem                     Informational                     [Page 21] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   The components of this message have the following meaning: + +   o  Version: (attribute inherited from the AbstractResponseType type) +      The version selected by the CT-KIP server.  May be lower than the +      version indicated by the CT-KIP client, in which case, local +      policy at the client will determine whether or not to continue the +      session. + +   o  SessionID: (attribute inherited from the AbstractResponseType +      type) An identifier for this session. + +   o  Status: (attribute inherited from the abstract +      AbstractResponseType type) Return code for the <ClientHello>.  If +      Status is not "Continue", only the Status and Version attributes +      will be present; otherwise, all the other elements must be present +      as well. + +   o  <KeyType>: The type of the key to be generated. + +   o  <EncryptionAlgorithm>: The encryption algorithm to use when +      protecting R_C. + +   o  <MacAlgorithm>: The MAC algorithm to be used by the CT-KIP server. + +   o  <EncryptionKey>: Information about the key to use when encrypting +      R_C.  It will either be the server's public key (the <ds:KeyValue> +      alternative of ds:KeyInfoType) or an identifier for a shared +      secret key (the <ds:KeyName> alternative of ds:KeyInfoType). + +   o  <Payload>: The actual payload.  For this version of the protocol, +      only one payload is defined: the pseudorandom string R_S. + +   o  <Extensions>: A list of server extensions.  Two extensions are +      defined for this message in this version of CT-KIP: the +      ClientInfoType and the ServerInfoType (see Section 3.9). + +   o  <Mac>: The MAC must be present if the CT-KIP run will result in +      the replacement of an existing token key with a new one (i.e., if +      the <KeyID> element was present in the <ClientHello> message).  In +      this case, the CT-KIP server must prove to the cryptographic token +      that it is authorized to replace it.  The MAC value shall be +      computed on the (ASCII) string "MAC 1 computation", the client's +      nonce R (if sent), and the server's nonce R_S using an +      authentication key K_AUTH that should be a special authentication +      key used only for this purpose but may be the current K_TOKEN. + + + + + + +Nystroem                     Informational                     [Page 22] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +      The MAC value may be computed by using the CT-KIP-PRF function of +      Section 3.4, in which case the input parameter s shall be set to +      the concatenation of the (ASCII) string "MAC 1 computation", R (if +      sent by the client), and R_S, and k shall be set to K_AUTH.  The +      input parameter dsLen shall be set to the length of R_S: + +      dsLen = len(R_S) + +      MAC = CT-KIP-PRF (K_AUTH, "MAC 1 computation" || [R ||] R_S, +      dsLen) + +      The CT-KIP client must verify the MAC if the successful execution +      of the protocol will result in the replacement of an existing +      token key with a newly generated one.  The CT-KIP client must +      terminate the CT-KIP session if the MAC does not verify, and must +      delete any nonces, keys, and/or secrets associated with the failed +      run of the CT-KIP protocol. + +      The MacType's MacAlgorithm attribute shall, when present, identify +      the negotiated MAC algorithm. + +3.8.5.  The CT-KIP Client's Second PDU + +   This message contains the nonce chosen by the cryptographic token, +   R_C, encrypted by the specified encryption key and encryption +   algorithm. + +   <xs:element name="ClientNonce" type="ClientNoncePDU"/> + +   <xs:complexType name="ClientNoncePDU"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +         Second message sent from CT-KIP client to +         CT-KIP server in a CT-KIP session. +       </xs:documentation> +     </xs:annotation> +     <xs:complexContent> +       <xs:extension base="AbstractRequestType"> +         <xs:sequence> +           <xs:element name="EncryptedNonce" +             type="xs:base64Binary"/> +           <xs:element name="Extensions" +             type="ExtensionsType" minOccurs="0"/> +         </xs:sequence> +         <xs:attribute name="SessionID" type="IdentifierType" +           use="required"/> +       </xs:extension> +     </xs:complexContent> + + + +Nystroem                     Informational                     [Page 23] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   </xs:complexType> + +   The components of this message have the following meaning: + +   o  Version: (inherited from the AbstractRequestType type) Shall be +      the same version as in the <ServerHello> message. + +   o  SessionID: Shall have the same value as the SessionID attribute in +      the received <ServerHello> message. + +   o  <EncryptedNonce>: The nonce generated and encrypted by the token. +      The encryption shall be made using the selected encryption +      algorithm and identified key, and as specified in Section 3.4. + +   o  <Extensions>: A list of extensions.  Two extensions are defined +      for this message in this version of CT-KIP: the ClientInfoType and +      the ServerInfoType (see Section 3.9). + +3.8.6.  The CT-KIP Server's Final PDU + +   This message is the last message of a two roundtrip CT-KIP exchange. +   The CT-KIP server sends this message to the CT-KIP client in response +   to the <ClientNonce> message. + +   <xs:element name="ServerFinished" type="ServerFinishedPDU"/> + +   <xs:complexType name="ServerFinishedPDU"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +         Final message sent from CT-KIP server to +         CT-KIP client in a CT-KIP session. +       </xs:documentation> +     </xs:annotation> +     <xs:complexContent> +       <xs:extension base="AbstractResponseType"> +         <xs:sequence minOccurs="0"> +           <xs:element name="TokenID" +             type="xs:base64Binary"/> +           <xs:element name="KeyID" +             type="xs:base64Binary"/> +           <xs:element name="KeyExpiryDate" +             type="xs:dateTime" minOccurs="0"/> +           <xs:element name="ServiceID" +             type="IdentifierType" minOccurs="0"/> +           <xs:element name="ServiceLogo" +             type="LogoType" minOccurs="0"/> +           <xs:element name="UserID" +             type="IdentifierType" minOccurs="0"/> + + + +Nystroem                     Informational                     [Page 24] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +           <xs:element name="Extensions" +             type="ExtensionsType" minOccurs="0"/> +           <xs:element name="Mac" +             type="MacType"/> +         </xs:sequence> +       </xs:extension> +     </xs:complexContent> +   </xs:complexType> + +   The components of this message have the following meaning: + +   o  Version: (inherited from the AbstractResponseType type) The CT-KIP +      version used in this session. + +   o  SessionID: (inherited from the AbstractResponseType type) The +      previously established identifier for this session. + +   o  Status: (inherited from the AbstractResponseType type) Return code +      for the <ServerFinished> message.  If Status is not "Success", +      only the Status, SessionID, and Version attributes will be present +      (the presence of the SessionID attribute is dependent on the type +      of reported error); otherwise, all the other elements must be +      present as well.  In this latter case, the <ServerFinished> +      message can be seen as a "Commit" message, instructing the +      cryptographic token to store the generated key and associate the +      given key identifier with this key. + +   o  <TokenID>: An identifier for the token carrying the generated key. +      Must have the same value as the <TokenID> element of the +      <ClientHello> message, if one was provided.  When assigned by the +      CT-KIP server, the <TokenID> element shall be unique within the +      domain of the CT-KIP server. + +   o  <KeyID>: An identifier for the newly generated key.  The +      identifier shall be globally unique.  Must have the same value as +      any key identifier provided by the CT-KIP client in the +      <ClientHello> message. + +      The reason for requiring globally unique key identifiers is that +      it avoids potential conflicts when associating key holders with +      key identifiers.  One way of achieving global uniqueness with +      reasonable certainty is to hash the combination of the issuer's +      fully qualified domain name with an (issuer-specific) serial +      number, assuming that each issuer makes sure their serial numbers +      never repeat. + + + + + + +Nystroem                     Informational                     [Page 25] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +      CT-KIP clients must support key identifiers at least 64 octets +      long.  CT-KIP servers should not generate key identifiers longer +      than 64 octets. + +   o  <KeyExpiryDate>: This optional element provides the date and time +      after which the generated key should be treated as expired and +      invalid. + +   o  <ServiceID>: An optional identifier for the service that has +      stored the generated key.  The cryptographic token may store this +      identifier associated with the key in order to simplify later +      lookups.  The identifier shall be a printable string. + +   o  <ServiceLogo>: This optional element provides a graphical logo +      image for the service that can be displayed in user interfaces, +      e.g., to help a user select a certain key.  The logo should +      contain an image within the size range of 60 pixels wide by 45 +      pixels high, and 200 pixels wide by 150 pixels high.  The required +      MimeType attribute of this type provides information about the +      MIME type of the image.  This specification supports both the JPEG +      and GIF image formats (with MIME types of "image/jpeg" and "image/ +      gif"). + +   o  <UserID>: An optional identifier for the user associated with the +      generated key in the authentication service.  The cryptographic +      token may store this identifier associated with the generated key +      in order to enhance later user experiences.  The identifier shall +      be a printable string. + +   o  <Extensions>: A list of extensions chosen by the CT-KIP server. +      For this message, this version of CT-KIP defines two extensions, +      the OTPKeyConfigurationDataType and the ClientInfoType (see +      Section 3.9). + +   o  <Mac>: To avoid a false "Commit" message causing the token to end +      up in an initialized state for which the server does not know the +      stored key, <ServerFinished> messages must always be authenticated +      with a MAC.  The MAC shall be made using the already established +      MAC algorithm.  The MAC value shall be computed on the (ASCII) +      string "MAC 2 computation" and R_C using an authentication key +      K_AUTH.  Again, this should be a special authentication key used +      only for this purpose, but may also be an existing K_TOKEN.  (In +      this case, implementations must protect against attacks where +      K_TOKEN is used to pre-compute MAC values.)  If no authentication +      key is present in the token, and no K_TOKEN existed before the CT- +      KIP run, K_AUTH shall be the newly generated K_TOKEN. + + + + + +Nystroem                     Informational                     [Page 26] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +      If CT-KIP-PRF is used as the MAC algorithm, then the input +      parameter s shall consist of the concatenation of the (ASCII) +      string "MAC 2 computation" and R_C, and the parameter dsLen shall +      be set to the length of R_C: + +      dsLen = len(R_C) + +      MAC = CT-KIP-PRF (K_AUTH, "MAC 2 computation" || R_C, dsLen) + +      When receiving a <ServerFinished> message with Status = "Success" +      for which the MAC verifies, the CT-KIP client shall associate the +      generated key K_TOKEN with the provided key identifier and store +      this data permanently.  After this operation, it shall not be +      possible to overwrite the key unless knowledge of an authorizing +      key is proven through a MAC on a later <ServerHello> (and +      <ServerFinished>) message. + +      The CT-KIP client must verify the MAC.  The CT-KIP client must +      terminate the CT-KIP session if the MAC does not verify, and must, +      in this case, also delete any nonces, keys, and/or secrets +      associated with the failed run of the CT-KIP protocol. + +      The MacType's MacAlgorithm attribute shall, when present, identify +      the negotiated MAC algorithm. + +3.9.  Protocol Extensions + +3.9.1.  The ClientInfoType Type + +   When present in a <ClientHello> or a <ClientNonce> message, the +   optional ClientInfoType extension contains CT-KIP client-specific +   information.  CT-KIP servers must support this extension.  CT-KIP +   servers must not attempt to interpret the data it carries and, if +   received, must include it unmodified in the current protocol run's +   next server response.  Servers need not retain the ClientInfoType's +   data after that response has been generated. + +   <xs:complexType name="ClientInfoType"> +     <xs:complexContent> +       <xs:extension base="AbstractExtensionType"> +         <xs:sequence> +           <xs:element name="Data" +             type="xs:base64Binary"/> +         </xs:sequence> +       </xs:extension> +     </xs:complexContent> +   </xs:complexType> + + + + +Nystroem                     Informational                     [Page 27] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +3.9.2.  The ServerInfoType Type + +   When present, the optional ServerInfoType extension contains CT-KIP +   server-specific information.  This extension is only valid in +   <ServerHello> messages for which Status = "Continue".  CT-KIP clients +   must support this extension.  CT-KIP clients must not attempt to +   interpret the data it carries and, if received, must include it +   unmodified in the current protocol run's next client request (i.e., +   the <ClientNonce> message).  CT-KIP clients need not retain the +   ServerInfoType's data after that request has been generated.  This +   extension may be used, e.g., for state management in the CT-KIP +   server. + +   <xs:complexType name="ServerInfoType"> +     <xs:complexContent> +       <xs:extension base="AbstractExtensionType"> +         <xs:sequence> +           <xs:element name="Data" +             type="xs:base64Binary"/> +         </xs:sequence> +       </xs:extension> +     </xs:complexContent> +   </xs:complexType> + +3.9.3.  The OTPKeyConfigurationDataType Type + +   The optional OTPKeyConfigurationDataType extension contains +   additional key configuration data for OTP keys: + +   <xs:complexType name="OTPKeyConfigurationDataType"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +         This extension is only valid in ServerFinished +         PDUs.  It carries additional configuration data +         that an OTP token should use (subject to local +         policy) when generating OTP values with a newly +         generated OTP key. +       </xs:documentation> +     </xs:annotation> +     <xs:complexContent> +       <xs:extension base="ExtensionType"> +         <xs:sequence> +           <xs:element name="OTPFormat" +             type="OTPFormatType"/> +           <xs:element name="OTPLength" +             type="xs:positiveInteger"/> +           <xs:element name="OTPMode" +             type="OTPModeType" minOccurs="0"/> + + + +Nystroem                     Informational                     [Page 28] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +         </xs:sequence> +       </xs:extension> +     </xs:complexContent> +   </xs:complexType> + +   This extension is only valid in <ServerFinished> messages.  It +   carries additional configuration data that the cryptographic token +   should use (subject to local policy) when generating OTP values from +   the newly generated OTP key.  The components of this extension have +   the following meaning: + +   o  OTPFormat: The default format of OTPs produced with this key. + +   o  OTPLength: The default length of OTPs produced with this key. + +   o  OTPMode: The default mode of operation when producing OTPs with +      this key. + +4.  Protocol Bindings + +4.1.  General Requirement + +   CT-KIP assumes a reliable transport. + +4.2.  HTTP/1.1 binding for CT-KIP + +4.2.1.  Introduction + +   This section presents a binding of the previous messages to HTTP/1.1 +   [7].  Note that the HTTP client normally will be different from the +   CT-KIP client, i.e., the HTTP client will only exist to "proxy" CT- +   KIP messages from the CT-KIP client to the CT-KIP server.  Likewise, +   on the HTTP server side, the CT-KIP server may receive CT-KIP PDUs +   from a "front-end" HTTP server. + +4.2.2.  Identification of CT-KIP Messages + +   The MIME-type for all CT-KIP messages shall be + +   application/vnd.otps.ct-kip+xml + +4.2.3.  HTTP Headers + +   HTTP proxies must not cache responses carrying CT-KIP messages.  For +   this reason, the following holds: + + + + + + +Nystroem                     Informational                     [Page 29] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   o  When using HTTP/1.1, requesters should: + +      *  Include a Cache-Control header field set to "no-cache, +         no-store". + +      *  Include a Pragma header field set to "no-cache". + +   o  When using HTTP/1.1, responders should: + +      *  Include a Cache-Control header field set to "no-cache, +         no-must-revalidate, private". + +      *  Include a Pragma header field set to "no-cache". + +      *  NOT include a Validator, such as a Last-Modified or ETag +         header. + +   There are no other restrictions on HTTP headers, besides the +   requirement to set the Content-Type header value to application/ +   vnd.otps.ct-kip+xml. + +4.2.4.  HTTP Operations + +   Persistent connections as defined in HTTP/1.1 are assumed but not +   required.  CT-KIP requests are mapped to HTTP POST operations.  CT- +   KIP responses are mapped to HTTP responses. + +4.2.5.  HTTP Status Codes + +   A CT-KIP HTTP responder that refuses to perform a message exchange +   with a CT-KIP HTTP requester should return a 403 (Forbidden) +   response.  In this case, the content of the HTTP body is not +   significant.  In the case of an HTTP error while processing a CT-KIP +   request, the HTTP server must return a 500 (Internal Server Error) +   response.  This type of error should be returned for HTTP-related +   errors detected before control is passed to the CT-KIP processor, or +   when the CT-KIP processor reports an internal error (for example, the +   CT-KIP XML namespace is incorrect, or the CT-KIP schema cannot be +   located).  If the type of a CT-KIP request cannot be determined, the +   CT-KIP responder must return a 400 (Bad request) response. + +   In these cases (i.e., when the HTTP response code is 4xx or 5xx), the +   content of the HTTP body is not significant. + +   Redirection status codes (3xx) apply as usual. + + + + + + +Nystroem                     Informational                     [Page 30] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   Whenever the HTTP POST is successfully invoked, the CT-KIP HTTP +   responder must use the 200 status code and provide a suitable CT-KIP +   message (possibly with CT-KIP error information included) in the HTTP +   body. + +4.2.6.  HTTP Authentication + +   No support for HTTP/1.1 authentication is assumed. + +4.2.7.  Initialization of CT-KIP + +   The CT-KIP server may initialize the CT-KIP protocol by sending an +   HTTP response with Content-Type set to application/ +   vnd.otps.ct-kip+xml and response code set to 200 (OK).  This message +   may, e.g., be sent in response to a user requesting token +   initialization in a browsing session.  The initialization message may +   carry data in its body.  If this is the case, the data shall be a +   valid instance of a <CT-KIPTrigger> element. + +4.2.8.  Example Messages + +   a.  Initialization from CT-KIP server: + +   HTTP/1.1 200 OK +   Cache-Control: no-store +   Content-Type: application/vnd.otps.ct-kip+xml +   Content-Length: <some value> + +   CT-KIP initialization data in XML form... + +   b.  Initial request from CT-KIP client: + +   POST http://example.com/cgi-bin/CT-KIP-server HTTP/1.1 +   Cache-Control: no-store +   Pragma: no-cache +   Host: example.com +   Content-Type: application/vnd.otps.ct-kip+xml +   Content-Length: <some value> + +   CT-KIP data in XML form (supported version, supported algorithms...) + + + + + + + + + + + +Nystroem                     Informational                     [Page 31] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   c.  Initial response from CT-KIP server: + +   HTTP/1.1 200 OK +   Cache-Control: no-store +   Content-Type: application/vnd.otps.ct-kip+xml +   Content-Length: <some other value> + +   CT-KIP data in XML form (server random nonce, server public key, ...) + +5.  Security considerations + +5.1.  General + +   CT-KIP is designed to protect generated key material from exposure. +   No other entities than the CT-KIP server and the cryptographic token +   will have access to a generated K_TOKEN if the cryptographic +   algorithms used are of sufficient strength and, on the CT-KIP client +   side, generation and encryption of R_C and generation of K_TOKEN take +   place as specified and in the token.  This applies even if malicious +   software is present in the CT-KIP client.  However, as discussed in +   the following, CT-KIP does not protect against certain other threats +   resulting from man-in-the-middle attacks and other forms of attacks. +   CT-KIP should, therefore, be run over a transport providing privacy +   and integrity, such as HTTP over Transport Layer Security (TLS) with +   a suitable ciphersuite, when such threats are a concern.  Note that +   TLS ciphersuites with anonymous key exchanges are not suitable in +   those situations. + +5.2.  Active Attacks + +5.2.1.  Introduction + +   An active attacker may attempt to modify, delete, insert, replay or +   reorder messages for a variety of purposes including service denial +   and compromise of generated key material.  Sections 5.2.2 through +   5.2.7 analyze these attack scenarios. + +5.2.2.  Message Modifications + +   Modifications to a <CT-KIPTrigger> message will either cause denial- +   of-service (modifications of any of the identifiers or the nonce) or +   the CT-KIP client to contact the wrong CT-KIP server.  The latter is +   in effect a man-in-the-middle attack and is discussed further in +   Section 5.2.7. + +   An attacker may modify a <ClientHello> message.  This means that the +   attacker could indicate a different key or token than the one +   intended by the CT-KIP client, and could also suggest other + + + +Nystroem                     Informational                     [Page 32] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   cryptographic algorithms than the ones preferred by the CT-KIP +   client, e.g., cryptographically weaker ones.  The attacker could also +   suggest earlier versions of the CT-KIP protocol, in case these +   versions have been shown to have vulnerabilities.  These +   modifications could lead to an attacker succeeding in initializing or +   modifying another token than the one intended (i.e., the server +   assigning the generated key to the wrong token), or gaining access to +   a generated key through the use of weak cryptographic algorithms or +   protocol versions.  CT-KIP implementations may protect against the +   latter by having strict policies about what versions and algorithms +   they support and accept.  The former threat (assignment of a +   generated key to the wrong token) is not possible when the shared-key +   variant of CT-KIP is employed (assuming existing shared keys are +   unique per token) but is possible in the public-key variant. +   Therefore, CT-KIP servers must not accept unilaterally provided token +   identifiers in the public-key variant.  This is also indicated in the +   protocol description.  In the shared-key variant, however, an +   attacker may be able to provide the wrong identifier (possibly also +   leading to the incorrect user being associated with the generated +   key) if the attacker has real-time access to the token with the +   identified key.  In other words, the generated key is associated with +   the correct token but the token is associated with the incorrect +   user.  See further Section 5.5 for a discussion of this threat and +   possible countermeasures. + +   An attacker may also modify a <ServerHello> message.  This means that +   the attacker could indicate different key types, algorithms, or +   protocol versions than the legitimate server would, e.g., +   cryptographically weaker ones.  The attacker could also provide a +   different nonce than the one sent by the legitimate server.  Clients +   will protect against the former through strict adherence to policies +   regarding permissible algorithms and protocol versions.  The latter +   (wrong nonce) will not constitute a security problem, as a generated +   key will not match the key generated on the legitimate server.  Also, +   whenever the CT-KIP run would result in the replacement of an +   existing key, the <Mac> element protects against modifications of +   R_S. + +   Modifications of <ClientNonce> messages are also possible.  If an +   attacker modifies the SessionID attribute, then, in effect, a switch +   to another session will occur at the server, assuming the new +   SessionID is valid at that time on the server.  It still will not +   allow the attacker to learn a generated K_TOKEN since R_C has been +   wrapped for the legitimate server.  Modifications of the +   <EncryptedNonce> element, e.g., replacing it with a value for which +   the attacker knows an underlying R'C, will not result in the client +   changing its pre-CT-KIP state, since the server will be unable to +   provide a valid MAC in its final message to the client.  The server + + + +Nystroem                     Informational                     [Page 33] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   may, however, end up storing K'TOKEN rather than K_TOKEN.  If the +   token has been associated with a particular user, then this could +   constitute a security problem.  For a further discussion about this +   threat, and a possible countermeasure, see Section 5.5 below.  Note +   that use of Secure Socket Layer (SSL) or TLS does not protect against +   this attack if the attacker has access to the CT-KIP client (e.g., +   through malicious software, "trojans"). + +   Finally, attackers may also modify the <ServerFinished> message. +   Replacing the <Mac> element will only result in denial-of-service. +   Replacement of any other element may cause the CT-KIP client to +   associate, e.g., the wrong service with the generated key.  CT-KIP +   should be run over a transport providing privacy and integrity when +   this is a concern. + +5.2.3.  Message Deletion + +   Message deletion will not cause any other harm than denial-of- +   service, since a token shall not change its state (i.e., "commit" to +   a generated key) until it receives the final message from the CT-KIP +   server and successfully has processed that message, including +   validation of its MAC.  A deleted <ServerFinished> message will not +   cause the server to end up in an inconsistent state vis-a-vis the +   token if the server implements the suggestions in Section 5.5. + +5.2.4.  Message Insertion + +   An active attacker may initiate a CT-KIP run at any time, and suggest +   any token identifier.  CT-KIP server implementations may receive some +   protection against inadvertently initializing a token or +   inadvertently replacing an existing key or assigning a key to a token +   by initializing the CT-KIP run by use of the <CT-KIPTrigger>.  The +   <TriggerNonce> element allows the server to associate a CT-KIP +   protocol run with, e.g., an earlier user-authenticated session.  The +   security of this method, therefore, depends on the ability to protect +   the <TriggerNonce> element in the CT-KIP initialization message.  If +   an eavesdropper is able to capture this message, he may race the +   legitimate user for a key initialization.  CT-KIP over a transport +   providing privacy and integrity, coupled with the recommendations in +   Section 5.5, is recommended when this is a concern. + +   Insertion of other messages into an existing protocol run is seen as +   equivalent to modification of legitimately sent messages. + +5.2.5.  Message Replay + +   Attempts to replay a previously recorded CT-KIP message will be +   detected, as the use of nonces ensures that both parties are live. + + + +Nystroem                     Informational                     [Page 34] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +5.2.6.  Message Reordering + +   An attacker may attempt to re-order messages but this will be +   detected, as each message is of a unique type. + +5.2.7.  Man in the Middle + +   In addition to other active attacks, an attacker posing as a man in +   the middle may be able to provide his own public key to the CT-KIP +   client.  This threat and countermeasures to it are discussed in +   Section 3.3.  An attacker posing as a man-in-the-middle may also be +   acting as a proxy and, hence, may not interfere with CT-KIP runs but +   still learn valuable information; see Section 5.3. + +5.3.  Passive Attacks + +   Passive attackers may eavesdrop on CT-KIP runs to learn information +   that later on may be used to impersonate users, mount active attacks, +   etc. + +   If CT-KIP is not run over a transport providing privacy, a passive +   attacker may learn: + +   o  What tokens a particular user is in possession of; + +   o  The identifiers of keys on those tokens and other attributes +      pertaining to those keys, e.g., the lifetime of the keys; and + +   o  CT-KIP versions and cryptographic algorithms supported by a +      particular CT-KIP client or server. + +   Whenever the above is a concern, CT-KIP should be run over a +   transport providing privacy.  If man-in-the-middle attacks for the +   purposes described above are a concern, the transport should also +   offer server-side authentication. + +5.4.  Cryptographic Attacks + +   An attacker with unlimited access to an initialized token may use the +   token as an "oracle" to pre-compute values that later on may be used +   to impersonate the CT-KIP server.  Sections 3.6 and 3.8 contain +   discussions of this threat and steps recommended to protect against +   it. + + + + + + + + +Nystroem                     Informational                     [Page 35] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +5.5.  Attacks on the Interaction between CT-KIP and User Authentication + +   If keys generated in CT-KIP will be associated with a particular user +   at the CT-KIP server (or a server trusted by, and communicating with +   the CT-KIP server), then in order to protect against threats where an +   attacker replaces a client-provided encrypted R_C with his own R'C +   (regardless of whether the public-key variant or the shared-secret +   variant of CT-KIP is employed to encrypt the client nonce), the +   server should not commit to associate a generated K_TOKEN with the +   given token (user) until the user simultaneously has proven both +   possession of a token containing K_TOKEN and some out-of-band +   provided authenticating information (e.g., a temporary password). +   For example, if the token is a one-time password token, the user +   could be required to authenticate with both a one-time password +   generated by the token and an out-of-band provided temporary PIN in +   order to have the server "commit" to the generated token value for +   the given user.  Preferably, the user should perform this operation +   from another host than the one used to initialize the token, in order +   to minimize the risk of malicious software on the client interfering +   with the process. + +   Another threat arises when an attacker is able to trick a user to +   authenticate to the attacker rather than to the legitimate service +   before the CT-KIP protocol run.  If successful, the attacker will +   then be able to impersonate the user towards the legitimate service, +   and subsequently receive a valid CT-KIP trigger.  If the public-key +   variant of CT-KIP is used, this may result in the attacker being able +   to (after a successful CT-KIP protocol run) impersonate the user. +   Ordinary precautions must, therefore, be in place to ensure that +   users authenticate only to legitimate services. + +6.  Intellectual Property Considerations + +   RSA and SecurID are registered trademarks or trademarks of RSA +   Security Inc. in the United States and/or other countries.  The names +   of other products and services mentioned may be the trademarks of +   their respective owners. + + + + + + + + + + + + + + +Nystroem                     Informational                     [Page 36] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +7.  References + +7.1.  Normative References + +   [1]   Davis, M. and M. Duerst, "Unicode Normalization Forms", +         March 2001, +         <http://www.unicode.org/unicode/reports/tr15/tr15-21.html>. + +7.2.  Informative References + +   [2]   RSA Laboratories, "PKCS #11 Mechanisms for the Cryptographic +         Token Key Initialization Protocol", PKCS #11 Version 2.20 +         Amendment 2, December 2005, <ftp://ftp.rsasecurity.com/pub/ +         pkcs/pkcs-11/v2-20/pkcs-11v2-20a2.pdf>. + +   [3]   RSA Laboratories, "Cryptographic Token Interface Standard", +         PKCS #11 Version 2.20, June 2004, <ftp://ftp.rsasecurity.com/ +         pub/pkcs/pkcs-11/v2-20/pkcs-11v2-20.pdf>. + +   [4]   RSA Laboratories, "Frequently Asked Questions About Today's +         Cryptography. Version 4.1", 2000, <http://www.rsasecurity.com/ +         rsalabs/faq/files/rsalabs_faq41.pdf>. + +   [5]   RSA Laboratories, "Password-Based Cryptography Standard", +         PKCS #5 Version 2.0, March 1999, +         <ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-5v2/pkcs5v2-0.pdf>. + +   [6]   RSA Laboratories, "RSA Cryptography Standard", PKCS #1 Version +         2.1, June 2002, +         <ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf>. + +   [7]   Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., +         Leach, P., and T. Berners-Lee, "Hypertext Transfer Protocol -- +         HTTP/1.1", RFC 2616, June 1999. + +   [8]   National Institute of Standards and Technology, "Specification +         for the Advanced Encryption Standard (AES)", FIPS 197, +         November 2001, +         <http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf>. + +   [9]   Krawzcyk, H., Bellare, M., and R. Canetti, "HMAC: Keyed-Hashing +         for Message Authentication", RFC 2104, February 1997. + +   [10]  Iwata, T. and K. Kurosawa, "OMAC: One-Key CBC MAC.  In Fast +         Software Encryption, FSE 2003, pages 129 - 153. +         Springer-Verlag", 2003, +         <http://crypt.cis.ibaraki.ac.jp/omac/docs/omac.pdf>. + + + + +Nystroem                     Informational                     [Page 37] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   [11]  National Institute of Standards and Technology, "Secure Hash +         Standard", FIPS 197, February 2004, <http://csrc.nist.gov/ +         publications/fips/fips180-2/fips180-2withchangenotice.pdf>. + +   [12]  RSA Laboratories, "Cryptographic Token Key Initialization +         Protocol", OTPS Version 1.0, December 2005, +         <ftp://ftp.rsasecurity.com/pub/otps/ct-kip/ct-kip-v1-0.pdf>. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Nystroem                     Informational                     [Page 38] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +Appendix A.  CT-KIP Schema + +   <xs:schema +     targetNamespace= +     "http://www.rsasecurity.com/rsalabs/otps/schemas/2005/12/ct-kip#" +     xmlns:xs="http://www.w3.org/2001/XMLSchema" +     xmlns:ds="http://www.w3.org/2000/09/xmldsig#" +     xmlns= +     "http://www.rsasecurity.com/rsalabs/otps/schemas/2005/12/ct-kip#"> + +   <xs:import namespace="http://www.w3.org/2000/09/xmldsig#" +     schemaLocation= +     "http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/ +   xmldsig-core-schema.xsd"/> + +   <!-- Basic types --> + +   <xs:complexType name="AbstractRequestType" abstract="true"> +     <xs:attribute name="Version" type="VersionType" use="required"/> +   </xs:complexType> + +   <xs:complexType name="AbstractResponseType" abstract="true"> +     <xs:attribute name="Version" type="VersionType" use="required"/> +     <xs:attribute name="SessionID" type="IdentifierType"/> +     <xs:attribute name="Status" type="StatusCode" use="required"/> +   </xs:complexType> + +   <xs:simpleType name="StatusCode"> +     <xs:restriction base="xs:string"> +       <xs:enumeration value="Continue"/> +       <xs:enumeration value="Success"/> +       <xs:enumeration value="Abort"/> +       <xs:enumeration value="AccessDenied"/> +       <xs:enumeration value="MalformedRequest"/> +       <xs:enumeration value="UnknownRequest"/> +       <xs:enumeration value="UnknownCriticalExtension"/> +       <xs:enumeration value="UnsupportedVersion"/> +       <xs:enumeration value="NoSupportedKeyTypes"/> +       <xs:enumeration value="NoSupportedEncryptionAlgorithms"/> +       <xs:enumeration value="NoSupportedMACAlgorithms"/> +       <xs:enumeration value="InitializationFailed"/> +     </xs:restriction> +   </xs:simpleType> + +   <xs:simpleType name="VersionType"> +     <xs:restriction base="xs:string"> +       <xs:pattern value="\d{1,2}\.\d{1,3}"/> +     </xs:restriction> + + + +Nystroem                     Informational                     [Page 39] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   </xs:simpleType> + +   <xs:simpleType name="IdentifierType"> +     <xs:restriction base="xs:string"> +       <xs:maxLength value="128"/> +     </xs:restriction> +   </xs:simpleType> + +   <xs:simpleType name="NonceType"> +     <xs:restriction base="xs:base64Binary"> +       <xs:length value="16"/> +     </xs:restriction> +   </xs:simpleType> + +   <xs:complexType name="LogoType"> +     <xs:simpleContent> +       <xs:extension base="xs:base64Binary"> +         <xs:attribute name="MimeType" type="MimeTypeType" +         use="required"/> +       </xs:extension> +     </xs:simpleContent> +   </xs:complexType> + +   <xs:simpleType name="MimeTypeType"> +     <xs:restriction base="xs:string"> +       <xs:enumeration value="image/jpeg"/> +       <xs:enumeration value="image/gif"/> +     </xs:restriction> +   </xs:simpleType> + +   <!-- Algorithms are identified through URIs --> +   <xs:complexType name="AlgorithmsType"> +     <xs:sequence maxOccurs="unbounded"> +       <xs:element name="Algorithm" type="AlgorithmType"/> +     </xs:sequence> +   </xs:complexType> + +   <xs:simpleType name="AlgorithmType"> +     <xs:restriction base="xs:anyURI"/> +   </xs:simpleType> + +   <xs:complexType name="MacType"> +     <xs:simpleContent> +       <xs:extension base="xs:base64Binary"> +         <xs:attribute name="MacAlgorithm" +         type="xs:anyURI"/> +       </xs:extension> +     </xs:simpleContent> + + + +Nystroem                     Informational                     [Page 40] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   </xs:complexType> + +   <!-- CT-KIP extensions (for future use) --> +   <xs:complexType name="ExtensionsType"> +     <xs:sequence maxOccurs="unbounded"> +       <xs:element name="Extension" type="AbstractExtensionType"/> +     </xs:sequence> +   </xs:complexType> + +   <xs:complexType name="AbstractExtensionType" abstract="true"> +     <xs:attribute name="Critical" type="xs:boolean"/> +   </xs:complexType> + +   <xs:complexType name="ClientInfoType"> +     <xs:complexContent> +       <xs:extension base="AbstractExtensionType"> +         <xs:sequence> +           <xs:element name="Data" type="xs:base64Binary"/> +         </xs:sequence> +       </xs:extension> +     </xs:complexContent> +   </xs:complexType> + +   <xs:complexType name="ServerInfoType"> +     <xs:complexContent> +       <xs:extension base="AbstractExtensionType"> +         <xs:sequence> +           <xs:element name="Data" type="xs:base64Binary"/> +         </xs:sequence> +       </xs:extension> +     </xs:complexContent> +   </xs:complexType> + +   <xs:complexType name="OTPKeyConfigurationDataType"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +         This extension is only valid in ServerFinished PDUs.  It +         carries additional configuration data that an OTP token should +         use (subject to local policy) when generating OTP values from a +         newly generated OTP key. +       </xs:documentation> +     </xs:annotation> +     <xs:complexContent> +       <xs:extension base="AbstractExtensionType"> +         <xs:sequence> +           <xs:element name="OTPFormat" type="OTPFormatType"/> +           <xs:element name="OTPLength" type="xs:positiveInteger"/> +           <xs:element name="OTPMode" type="OTPModeType" minOccurs="0"/> + + + +Nystroem                     Informational                     [Page 41] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +         </xs:sequence> +       </xs:extension> +     </xs:complexContent> +   </xs:complexType> + +   <xs:simpleType name="OTPFormatType"> +     <xs:restriction base="xs:string"> +       <xs:enumeration value="Decimal"/> +       <xs:enumeration value="Hexadecimal"/> +       <xs:enumeration value="Alphanumeric"/> +       <xs:enumeration value="Binary"/> +     </xs:restriction> +   </xs:simpleType> + +   <xs:complexType name="OTPModeType"> +     <xs:choice maxOccurs="unbounded"> +       <xs:element name="Time" type="TimeType"/> +       <xs:element name="Counter"/> +       <xs:element name="Challenge"/> +       <xs:any namespace="##other" processContents="strict"/> +     </xs:choice> +   </xs:complexType> + +   <xs:complexType name="TimeType"> +     <xs:complexContent> +       <xs:restriction base="xs:anyType"> +         <xs:attribute name="TimeInterval" type="xs:positiveInteger"/> +       </xs:restriction> +     </xs:complexContent> +   </xs:complexType> + +   <xs:complexType name="PayloadType"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +       </xs:documentation> +     </xs:annotation> +     <xs:choice> +       <xs:element name="Nonce" type="NonceType"/> +       <xs:any namespace="##other" processContents="strict"/> +     </xs:choice> +   </xs:complexType> + +   <xs:simpleType name="PlatformType"> +     <xs:restriction base="xs:string"> +       <xs:enumeration value="Hardware"/> +       <xs:enumeration value="Software"/> +       <xs:enumeration value="Unspecified"/> +     </xs:restriction> + + + +Nystroem                     Informational                     [Page 42] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   </xs:simpleType> + +   <xs:complexType name="TokenPlatformInfoType"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +         Carries token platform information helping the client to select +         a suitable token. +       </xs:documentation> +     </xs:annotation> +     <xs:attribute name="KeyLocation" type="PlatformType"/> +     <xs:attribute name="AlgorithmLocation" type="PlatformType"/> +   </xs:complexType> + +   <xs:complexType name="InitializationTriggerType"> +     <xs:sequence> +       <xs:element name="TokenID" type="xs:base64Binary" minOccurs="0"/> +       <xs:element name="KeyID" type="xs:base64Binary" minOccurs="0"/> +       <xs:element name="TokenPlatformInfo" type="TokenPlatformInfoType" +         minOccurs="0"/> +       <xs:element name="TriggerNonce" type="NonceType"/> +       <xs:element name="CT-KIPURL" type="xs:anyURI" minOccurs="0"/> +       <xs:any namespace="##other" processContents="strict" +         minOccurs="0"/> +     </xs:sequence> +   </xs:complexType> + +   <!-- CT-KIP PDUs --> + +   <!-- CT-KIP trigger --> +   <xs:element name="CT-KIPTrigger" type="CT-KIPTriggerType"/> + +   <xs:complexType name="CT-KIPTriggerType"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +         Message used to trigger the device to initiate a CT-KIP run. +       </xs:documentation> +     </xs:annotation> +     <xs:sequence> +       <xs:choice> +         <xs:element name="InitializationTrigger" +         type="InitializationTriggerType"/> +         <xs:any namespace="##other" processContents="strict"/> +       </xs:choice> +     </xs:sequence> +     <xs:attribute name="Version" type="VersionType"/> +   </xs:complexType> + +   <!-- ClientHello PDU --> + + + +Nystroem                     Informational                     [Page 43] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   <xs:element name="ClientHello" type="ClientHelloPDU"/> + +   <xs:complexType name="ClientHelloPDU"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +         Message sent from CT-KIP client to CT-KIP server to initiate an +         CT-KIP session. +       </xs:documentation> +     </xs:annotation> +     <xs:complexContent> +       <xs:extension base="AbstractRequestType"> +         <xs:sequence> +           <xs:element name="TokenID" type="xs:base64Binary" +             minOccurs="0"/> +           <xs:element name="KeyID" type="xs:base64Binary" +             minOccurs="0"/> +           <xs:element name="ClientNonce" type="NonceType" +             minOccurs="0"/> +           <xs:element name="TriggerNonce" type="NonceType" +             minOccurs="0"/> +           <xs:element name="SupportedKeyTypes" type="AlgorithmsType"/> +           <xs:element name="SupportedEncryptionAlgorithms" +             type="AlgorithmsType"/> +           <xs:element name="SupportedMACAlgorithms" +             type="AlgorithmsType"/> +           <xs:element name="Extensions" type="ExtensionsType" +             minOccurs="0"/> +         </xs:sequence> +       </xs:extension> +     </xs:complexContent> +   </xs:complexType> + +   <!-- ServerHello PDU --> +   <xs:element name="ServerHello" type="ServerHelloPDU"/> + +   <xs:complexType name="ServerHelloPDU"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +         Message sent from CT-KIP server to CT-KIP client in response to +         a received ClientHello PDU. +       </xs:documentation> +     </xs:annotation> +     <xs:complexContent> +       <xs:extension base="AbstractResponseType"> +         <xs:sequence minOccurs="0"> +           <xs:element name="KeyType" type="AlgorithmType"/> +           <xs:element name="EncryptionAlgorithm" type="AlgorithmType"/> +           <xs:element name="MacAlgorithm" type="AlgorithmType"/> + + + +Nystroem                     Informational                     [Page 44] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +           <xs:element name="EncryptionKey" type="ds:KeyInfoType"/> +           <xs:element name="Payload" type="PayloadType"/> +           <xs:element name="Extensions" type="ExtensionsType" +             minOccurs="0"/> +           <xs:element name="Mac" type="MacType" minOccurs="0"/> +         </xs:sequence> +       </xs:extension> +     </xs:complexContent> +   </xs:complexType> + +   <!-- ClientNonce PDU --> +   <xs:element name="ClientNonce" type="ClientNoncePDU"/> + +   <xs:complexType name="ClientNoncePDU"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +         Second message sent from CT-KIP client to CT-KIP server to +         convey the client's chosen secret. +       </xs:documentation> +     </xs:annotation> +     <xs:complexContent> +       <xs:extension base="AbstractRequestType"> +         <xs:sequence> +           <xs:element name="EncryptedNonce" type="xs:base64Binary"/> +           <xs:element name="Extensions" type="ExtensionsType" +             minOccurs="0"/> +         </xs:sequence> +         <xs:attribute name="SessionID" type="IdentifierType" +           use="required"/> +       </xs:extension> +     </xs:complexContent> +   </xs:complexType> + +   <!-- ServerFinished PDU --> +   <xs:element name="ServerFinished" type="ServerFinishedPDU"/> +   <xs:complexType name="ServerFinishedPDU"> +     <xs:annotation> +       <xs:documentation xml:lang="en"> +         Final message sent from CT-KIP server to CT-KIP client in an +         CT-KIP session. +       </xs:documentation> +     </xs:annotation> +     <xs:complexContent> +       <xs:extension base="AbstractResponseType"> +         <xs:sequence minOccurs="0"> +           <xs:element name="TokenID" type="xs:base64Binary"/> +           <xs:element name="KeyID" type="xs:base64Binary"/> +           <xs:element name="KeyExpiryDate" type="xs:dateTime" + + + +Nystroem                     Informational                     [Page 45] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +             minOccurs="0"/> +           <xs:element name="ServiceID" type="IdentifierType" +             minOccurs="0"/> +           <xs:element name="ServiceLogo" type="LogoType" +             minOccurs="0"/> +           <xs:element name="UserID" type="IdentifierType" +             minOccurs="0"/> +           <xs:element name="Extensions" type="ExtensionsType" +             minOccurs="0"/> +           <xs:element name="Mac" type="MacType"/> +         </xs:sequence> +       </xs:extension> +     </xs:complexContent> +   </xs:complexType> + +   </xs:schema> + +Appendix B.  Examples of CT-KIP Messages + +B.1.  Introduction + +   All examples are syntactically correct.  MAC and cipher values are +   fictitious, however.  The examples illustrate a complete CT-KIP +   exchange, starting with an initialization (trigger) message from the +   server. + +B.2.  Example of a CT-KIP Initialization (Trigger) Message + +   <CT-KIPTrigger +     xmlns= +     "http://www.rsasecurity.com/rsalabs/otps/schemas/2005/12/ct-kip#" +     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +     Version="1.0"> +     <InitializationTrigger> +       <TokenID>12345678</TokenID> +       <TriggerNonce>112dsdfwf312asder394jw==</TriggerNonce> +     </InitializationTrigger> +   </CT-KIPTrigger> + +B.3.  Example of a <ClientHello> Message + +   <?xml version="1.0" encoding="UTF-8"?> +   <ClientHello +     xmlns= +     "http://www.rsasecurity.com/rsalabs/otps/schemas/2005/12/ct-kip#" +     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +     Version="1.0"> +     <TokenID>12345678</TokenID> + + + +Nystroem                     Informational                     [Page 46] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +    <TriggerNonce>112dsdfwf312asder394jw==</TriggerNonce> +     <SupportedKeyTypes> +       <Algorithm>http://www.rsasecurity.com/rsalabs/otps/schemas +   /2005/09/otps-wst#SecurID-AES</Algorithm> +     </SupportedKeyTypes> +     <SupportedEncryptionAlgorithms> +       <Algorithm>http://www.w3.org/2001/04/xmlenc#rsa-1_5</Algorithm> +       <Algorithm>http://www.rsasecurity.com/rsalabs/otps/schemas/ +   2005/12/ct-kip#ct-kip-prf-aes</Algorithm> +     </SupportedEncryptionAlgorithms> +     <SupportedMACAlgorithms> +       <Algorithm>http://www.rsasecurity.com/rsalabs/otps/schemas/ +   2005/12/ct-kip#ct-kip-prf-aes</Algorithm> +     </SupportedMACAlgorithms> +   </ClientHello> + +B.4.  Example of a <ServerHello> Message + +   <?xml version="1.0" encoding="UTF-8"?> +   <ServerHello +     xmlns= +   "http://www.rsasecurity.com/rsalabs/otps/schemas/2005/12/ct-kip#" +     xmlns:ds="http://www.w3.org/2000/09/xmldsig#" +     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +     Version="1.0" SessionID="4114" Status="Success"> +     <KeyType>http://www.rsasecurity.com/rsalabs/otps/schemas/2005/09/ +   otps-wst#SecurID-AES</KeyType> +     <EncryptionAlgorithm>http://www.rsasecurity.com/rsalabs/otps/ +   schemas/2005/12/ct-kip#ct-kip-prf-aes</EncryptionAlgorithm> +     <MacAlgorithm>http://www.rsasecurity.com/rsalabs/otps/schemas/ +   2005/12/ct-kip#ct-kip-prf-aes</MacAlgorithm> +     <EncryptionKey> +       <ds:KeyName>KEY-1</ds:KeyName> +     </EncryptionKey> +     <Payload> +       <Nonce>qw2ewasde312asder394jw==</Nonce> +     </Payload> +   </ServerHello> + +B.5.  Example of a <ClientNonce> Message + +   <?xml version="1.0" encoding="UTF-8"?> +   <ClientNonce +     xmlns="http://www.rsasecurity.com/rsalabs/otps/schemas/ +   2005/12/ct-kip#" +     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +     Version="1.0" SessionID="4114"> +     <EncryptedNonce>vXENc+Um/9/NvmYKiHDLaErK0gk=</EncryptedNonce> + + + +Nystroem                     Informational                     [Page 47] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   </ClientNonce> + +B.6.  Example of a <ServerFinished> Message + +   <?xml version="1.0" encoding="UTF-8"?> +   <ServerFinished +     xmlns="http://www.rsasecurity.com/rsalabs/otps/schemas/ +   2005/12/ct-kip#" +     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +     Version="1.0" SessionID="4114" Status="Success"> +     <TokenID>12345678</TokenID> +     <KeyExpiryDate>2009-09-16T03:02:00Z</KeyExpiryDate> +     <KeyID>43212093</KeyID> +     <ServiceID>Example Enterprise Name</ServiceID> +     <UserID>exampleLoginName</UserID> +     <Extensions> +       <Extension xsi:type="OTPKeyConfigurationDataType"> +         <OTPFormat>Decimal</OTPFormat> +         <OTPLength>6</OTPLength> +         <OTPMode><Time/></OTPMode> +       </Extension> +     </Extensions> +     <Mac>miidfasde312asder394jw==</Mac> +   </ServerFinished> + +Appendix C.  Integration with PKCS #11 + +   A CT-KIP client that needs to communicate with a connected +   cryptographic token to perform a CT-KIP exchange may use PKCS #11 [3] +   as a programming interface.  When performing CT-KIP with a +   cryptographic token using the PKCS #11 programming interface, the +   procedure described in [2], Appendix B, is recommended. + +Appendix D.  Example CT-KIP-PRF Realizations + +D.1.  Introduction + +   This example appendix defines CT-KIP-PRF in terms of AES [8] and HMAC +   [9]. + +D.2.  CT-KIP-PRF-AES + +D.2.1.  Identification + +   For tokens supporting this realization of CT-KIP-PRF, the following +   URI may be used to identify this algorithm in CT-KIP: + +   http://www.rsasecurity.com/rsalabs/otps/schemas/2005/12/ + + + +Nystroem                     Informational                     [Page 48] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   ct-kip#ct-kip-prf-aes + +   When this URI is used to identify the encryption algorithm to use, +   the method for encryption of R_C values described in Section 3.6 +   shall be used. + +D.2.2.  Definition + +   CT-KIP-PRF-AES (k, s, dsLen) + +   Input: + +   k     encryption key to use + +   s     octet string consisting of randomizing material.  The length of +         the string s is sLen. + +   dsLen desired length of the output + +   Output: + +   DS    a pseudorandom string, dsLen-octets long + +   Steps: + +   1.  Let bLen be the output block size of AES in octets: + +       bLen = (AES output block length in octets) + +       (normally, bLen = 16) + +   2.  If dsLen > (2**32 - 1) * bLen, output "derived data too long" and +       stop + +   3.  Let n be the number of bLen-octet blocks in the output data, +       rounding up, and let j be the number of octets in the last block: + +       n = ROUND( dsLen / bLen ) + +       j = dsLen - (n - 1) * bLen + +   4.  For each block of the pseudorandom string DS, apply the function +       F defined below to the key k, the string s and the block index to +       compute the block: + +       B1 = F (k, s, 1) , + +       B2 = F (k, s, 2) , + + + +Nystroem                     Informational                     [Page 49] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +       ... + +       Bn = F (k, s, n) + +   The function F is defined in terms of the OMAC1 construction from +   [10], using AES as the block cipher: + +   F (k, s, i) = OMAC1-AES (k, INT (i) || s) + +   where INT (i) is a four-octet encoding of the integer i, most +   significant octet first, and the output length of OMAC1 is set to +   bLen. + +   Concatenate the blocks and extract the first dsLen octets to produce +   the desired data string DS: + +   DS = B1 || B2 || ... || Bn<0..j-1> + +   Output the derived data DS. + +D.2.3.  Example + +   If we assume that dsLen = 16, then: + +   n = 16 / 16 = 1 + +   j = 16 - (1 - 1) * 16 = 16 + +   DS = B1 = F (k, s, 1) = OMAC1-AES (k, INT (1) || S) + +D.3.  CT-KIP-PRF-SHA256 + +D.3.1.  Identification + +   For tokens supporting this realization of CT-KIP-PRF, the following +   URI may be used to identify this algorithm in CT-KIP: + +   http://www.rsasecurity.com/rsalabs/otps/schemas/2005/12/ +   ct-kip#ct-kip-prf-sha256 + +   When this URI is used to identify the encryption algorithm to use, +   the method for encryption of R_C values described in Section 3.6 +   shall be used. + + + + + + + + +Nystroem                     Informational                     [Page 50] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +D.3.2.  Definition + +   CT-KIP-PRF-SHA256 (k, s, dsLen) + +   Input: + +   k     encryption key to use + +   s     octet string consisting of randomizing material.  The length of +         the string s is sLen + +   dsLen desired length of the output + +   Output: + +   DS    a pseudorandom string, dsLen-octets long + +   Steps: + +   1.  Let bLen be the output size in octets of SHA-256 [11] (no +       truncation is done on the HMAC output): + +       bLen = 32 + +   2.  If dsLen > (2**32 - 1) bLen, output "derived data too long" and +       stop + +   3.  Let n be the number of bLen-octet blocks in the output data, +       rounding up, and let j be the number of octets in the last block: + +       n = ROUND ( dsLen / bLen ) + +       j = dsLen - (n - 1) * bLen + +   4.  For each block of the pseudorandom string DS, apply the function +       F defined below to the key k, the string s and the block index to +       compute the block: + +       B1 = F (k, s, 1) , + +       B2 = F (k, s, 2) , + +       ... + +       Bn = F (k, s, n) + + + + + + +Nystroem                     Informational                     [Page 51] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +   The function F is defined in terms of the HMAC construction from [9], +   using SHA-256 as the digest algorithm: + +   F (k, s, i) = HMAC-SHA256 (k, INT (i) || s) + +   where INT (i) is a four-octet encoding of the integer i, most +   significant octet first, and the output length of HMAC is set to +   bLen. + +   Concatenate the blocks and extract the first dsLen octets to produce +   the desired data string DS: + +   DS = B1 || B2 || ... || Bn<0..j-1> + +   Output the derived data DS. + +D.3.3.  Example + +   If we assume that sLen = 256 (two 128-octet long values) and dsLen = +   16, then: + +   n = ROUND ( 16 / 32 ) = 1 + +   j = 16 - (1 - 1) * 32 = 16 + +   B1 = F (k, s, 1) = HMAC-SHA256 (k, INT (1) || s ) + +   DS = B1<0 ... 15> + +   That is, the result will be the first 16 octets of the HMAC output. + + + + + + + + + + + + + + + + + + + + + +Nystroem                     Informational                     [Page 52] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +Appendix E.  About OTPS + +   The One-Time Password Specifications are documents produced by RSA +   Laboratories in cooperation with secure systems developers for the +   purpose of simplifying integration and management of strong +   authentication technology into secure applications, and to enhance +   the user experience of this technology. + +   Further development of the OTPS series will occur through mailing +   list discussions and occasional workshops, and suggestions for +   improvement are welcome.  As for our PKCS documents, results may also +   be submitted to standards forums.  For more information, contact: + +   OTPS Editor +   RSA Laboratories +   174 Middlesex Turnpike +   Bedford, MA  01730 USA +   otps-editor@rsasecurity.com +   http://www.rsasecurity.com/rsalabs/ + +Author's Address + +   Magnus Nystroem +   RSA Security + +   EMail: magnus@rsasecurity.com + + + + + + + + + + + + + + + + + + + + + + + + + +Nystroem                     Informational                     [Page 53] + +RFC 4758             CT-KIP Version 1.0 Revision 1         November 2006 + + +Full Copyright Statement + +   Copyright (C) The IETF Trust (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. + +   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, THE IETF TRUST, +   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. + +Intellectual Property + +   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. + +Acknowledgement + +   Funding for the RFC Editor function is currently provided by the +   Internet Society. + + + + + + +Nystroem                     Informational                     [Page 54] +  |