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/rfc2025.txt | |
parent | ea76e11061bda059ae9f9ad130a9895cc85607db (diff) |
doc: Add RFC documents
Diffstat (limited to 'doc/rfc/rfc2025.txt')
-rw-r--r-- | doc/rfc/rfc2025.txt | 2523 |
1 files changed, 2523 insertions, 0 deletions
diff --git a/doc/rfc/rfc2025.txt b/doc/rfc/rfc2025.txt new file mode 100644 index 0000000..f4c3c61 --- /dev/null +++ b/doc/rfc/rfc2025.txt @@ -0,0 +1,2523 @@ + + + + + + +Network Working Group C. Adams +Request for Comments: 2025 Bell-Northern Research +Category: Standards Track October 1996 + + + The Simple Public-Key GSS-API Mechanism (SPKM) + +Status of this Memo + + This document specifies an Internet standards track protocol for the + Internet community, and requests discussion and suggestions for + improvements. Please refer to the current edition of the "Internet + Official Protocol Standards" (STD 1) for the standardization state + and status of this protocol. Distribution of this memo is unlimited. + +Abstract + + This specification defines protocols, procedures, and conventions to + be employed by peers implementing the Generic Security Service + Application Program Interface (as specified in RFCs 1508 and 1509) + when using the Simple Public-Key Mechanism. + +Background + + Although the Kerberos Version 5 GSS-API mechanism [KRB5] is becoming + well-established in many environments, it is important in some + applications to have a GSS-API mechanism which is based on a public- + key, rather than a symmetric-key, infrastructure. The mechanism + described in this document has been proposed to meet this need and to + provide the following features. + + 1) The SPKM allows both unilateral and mutual authentication + to be accomplished without the use of secure timestamps. This + enables environments which do not have access to secure time + to nevertheless have access to secure authentication. + + 2) The SPKM uses Algorithm Identifiers to specify various + algorithms to be used by the communicating peers. This allows + maximum flexibility for a variety of environments, for future + enhancements, and for alternative algorithms. + + 3) The SPKM allows the option of a true, asymmetric algorithm- + based, digital signature in the gss_sign() and gss_seal() + operations (now called gss_getMIC() and gss_wrap() in + [GSSv2]), rather than an integrity checksum based on a MAC + computed with a symmetric algorithm (e.g., DES). For some + environments, the availability of true digital signatures + supporting non-repudiation is a necessity. + + + +Adams Standards Track [Page 1] + +RFC 2025 SPKM October 1996 + + + 4) SPKM data formats and procedures are designed to be as similar + to those of the Kerberos mechanism as is practical. This is + done for ease of implementation in those environments where + Kerberos has already been implemented. + + For the above reasons, it is felt that the SPKM will offer + flexibility and functionality, without undue complexity or overhead. + +Key Management + + The key management employed in SPKM is intended to be as compatible + as possible with both X.509 [X.509] and PEM [RFC-1422], since these + represent large communities of interest and show relative maturity in + standards. + +Acknowledgments + + Much of the material in this document is based on the Kerberos + Version 5 GSS-API mechanism [KRB5], and is intended to be as + compatible with it as possible. This document also owes a great debt + to Warwick Ford and Paul Van Oorschot of Bell-Northern Research for + many fruitful discussions, to Kelvin Desplanque for implementation- + related clarifications, to John Linn of OpenVision Technologies for + helpful comments, and to Bancroft Scott of OSS for ASN.1 assistance. + +1. Overview + + The goal of the Generic Security Service Application Program + Interface (GSS-API) is stated in the abstract of [RFC-1508] as + follows: + + "This Generic Security Service Application Program Interface (GSS- + API) definition provides security services to callers in a generic + fashion, supportable with a range of underlying mechanisms and + technologies and hence allowing source-level portability of + applications to different environments. This specification defines + GSS-API services and primitives at a level independent of + underlying mechanism and programming language environment, and is + to be complemented by other, related specifications: + + - documents defining specific parameter bindings for particular + language environments; + + - documents defining token formats, protocols, and procedures to + be implemented in order to realize GSS-API services atop + particular security mechanisms." + + + + + +Adams Standards Track [Page 2] + +RFC 2025 SPKM October 1996 + + + The SPKM is an instance of the latter type of document and is + therefore termed a "GSS-API Mechanism". This mechanism provides + authentication, key establishment, data integrity, and data + confidentiality in an on-line distributed application environment + using a public-key infrastructure. Because it conforms to the + interface defined by [RFC-1508], SPKM can be used as a drop-in + replacement by any application which makes use of security services + through GSS-API calls (for example, any application which already + uses the Kerberos GSS-API for security). The use of a public-key + infrastructure allows digital signatures supporting non-repudiation + to be employed for message exchanges, and provides other benefits + such as scalability to large user populations. + + The tokens defined in SPKM are intended to be used by application + programs according to the GSS API "operational paradigm" (see [RFC- + 1508] for further details): + + The operational paradigm in which GSS-API operates is as follows. + A typical GSS-API caller is itself a communications protocol [or is + an application program which uses a communications protocol], + calling on GSS-API in order to protect its communications with + authentication, integrity, and/or confidentiality security + services. A GSS-API caller accepts tokens provided to it by its + local GSS-API implementation [i.e., its GSS-API mechanism] and + transfers the tokens to a peer on a remote system; that peer passes + the received tokens to its local GSS-API implementation for + processing. + + This document defines two separate GSS-API mechanisms, SPKM-1 and + SPKM-2, whose primary difference is that SPKM-2 requires the + presence of secure timestamps for the purpose of replay detection + during context establishment and SPKM-1 does not. This allows + greater flexibility for applications since secure timestamps cannot + always be guaranteed to be available in a given environment. + + + + + + + + + + + + + + + + + +Adams Standards Track [Page 3] + +RFC 2025 SPKM October 1996 + + +2. Algorithms + + A number of algorithm types are employed in SPKM. Each type, along + with its purpose and a set of specific examples, is described in this + section. In order to ensure at least a minimum level of + interoperability among various implementations of SPKM, one of the + integrity algorithms is specified as MANDATORY; all remaining + examples (and any other algorithms) may optionally be supported by a + given SPKM implementation (note that a GSS-conformant mechanism need + not support confidentiality). Making a confidentiality algorithm + mandatory may preclude exportability of the mechanism implementation; + this document therefore specifies certain algorithms as RECOMMENDED + (that is, interoperability will be enhanced if these algorithms are + included in all SPKM implementations for which exportability is not a + concern). + +2.1 Integrity Algorithm (I-ALG): + + Purpose: + + This algorithm is used to ensure that a message has not been + altered in any way after being constructed by the legitimate + sender. Depending on the algorithm used, the application of + this algorithm may also provide authenticity and support non- + repudiation for the message. + + Examples: + + md5WithRSAEncryption OBJECT IDENTIFIER ::= { + iso(1) member-body(2) US(840) rsadsi(113549) pkcs(1) + pkcs-1(1) 4 -- imported from [PKCS1] + } + + This algorithm (MANDATORY) provides data integrity and + authenticity and supports non-repudiation by computing an + RSA signature on the MD5 hash of that data. This is + essentially equivalent to md5WithRSA {1 3 14 3 2 3}, + which is defined by OIW (the Open Systems Environment + Implementors' Workshop). + + Note that since this is the only integrity/authenticity + algorithm specified to be mandatory at this time, for + interoperability reasons it is also stipulated that + md5WithRSA be the algorithm used to sign all context + establishment tokens which are signed rather than MACed -- + see Section 3.1.1 for details. In future versions of this + document, alternate or additional algorithms may be + specified to be mandatory and so this stipulation on the + + + +Adams Standards Track [Page 4] + +RFC 2025 SPKM October 1996 + + + context establishment tokens may be removed. + + DES-MAC OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) oiw(14) secsig(3) + algorithm(2) 10 -- carries length in bits of the MAC as + } -- an INTEGER parameter, constrained to + -- multiples of eight from 16 to 64 + + This algorithm (RECOMMENDED) provides integrity by computing + a DES MAC (as specified by [FIPS-113]) on that data. + + + md5-DES-CBC OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) dod(6) internet(1) + security(5) integrity(3) md5-DES-CBC(1) + } + + This algorithm provides data integrity by encrypting, using + DES CBC, the "confounded" MD5 hash of that data (see Section + 3.2.2.1 for the definition and purpose of confounding). + This will typically be faster in practice than computing a + DES MAC unless the input data is extremely short (e.g., a + few bytes). Note that without the confounder the strength + of this integrity mechanism is (at most) equal to the + strength of DES under a known-plaintext attack. + + + sum64-DES-CBC OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) dod(6) internet(1) + security(5) integrity(3) sum64-DES-CBC(2) + } + + This algorithm provides data integrity by encrypting, using + DES CBC, the concatenation of the confounded data and the + sum of all the input data blocks (the sum computed using + addition modulo 2**64 - 1). Thus, in this algorithm, + encryption is a requirement for the integrity to be secure. + + For comments regarding the security of this integrity + algorithm, see [Juen84, Davi89]. + + + + + + + + + + + +Adams Standards Track [Page 5] + +RFC 2025 SPKM October 1996 + + +2.2 Confidentiality Algorithm (C-ALG): + + Purpose: + + This symmetric algorithm is used to generate the encrypted + data for gss_seal() / gss_wrap(). + + Example: + + DES-CBC OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) oiw(14) secsig(3) + algorithm(2) 7 -- carries IV (OCTET STRING) as a parameter; + } -- this (optional) parameter is unused in + -- SPKM due to the use of confounding + + This algorithm is RECOMMENDED. + +2.3 Key Establishment Algorithm (K-ALG): + + Purpose: + + This algorithm is used to establish a symmetric key for use + by both the initiator and the target over the established + context. The keys used for C-ALG and any keyed I-ALGs (for + example, DES-MAC) are derived from this context key. As will + be seen in Section 3.1, key establishment is done within the + X.509 authentication exchange and so the resulting shared + symmetric key is authenticated. + + Examples: + + RSAEncryption OBJECT IDENTIFIER ::= { + iso(1) member-body(2) US(840) rsadsi(113549) pkcs(1) + pkcs-1(1) 1 -- imported from [PKCS1] and [RFC-1423] + } + + In this algorithm (MANDATORY), the context key is generated + by the initiator, encrypted with the RSA public key of the + target, and sent to the target. The target need not respond + to the initiator for the key to be established. + + id-rsa-key-transport OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) oiw(14) secsig(3) + algorithm(2) 22 -- imported from [X9.44] + } + + Similar to RSAEncryption, but source authenticating info. + is also encrypted with the target's RSA public key. + + + +Adams Standards Track [Page 6] + +RFC 2025 SPKM October 1996 + + + dhKeyAgreement OBJECT IDENTIFIER ::= { + iso(1) member-body(2) US(840) rsadsi(113549) pkcs(1) + pkcs-3(3) 1 + } + + In this algorithm, the context key is generated jointly by + the initiator and the target using the Diffie-Hellman key + establishment algorithm. The target must therefore respond + to the initiator for the key to be established (so this + K-ALG cannot be used with unilateral authentication in + SPKM-2 (see Section 3.1)). + +2.4 One-Way Function (O-ALG) for Subkey Derivation Algorithm: + + Purpose: + + Having established a context key using the negotiated K-ALG, + both initiator and target must be able to derive a set of + subkeys for the various C-ALGs and keyed I-ALGs supported over + the context. Let the (ordered) list of agreed C-ALGs be + numbered consecutively, so that the first algorithm (the + "default") is numbered "0", the next is numbered "1", and so + on. Let the numbering for the (ordered) list of agreed I-ALGs + be identical. Finally, let the context key be a binary string + of arbitrary length "M", subject to the following constraint: + L <= M <= U (where the lower limit "L" is the bit length of + the longest key needed by any agreed C-ALG or keyed I-ALG, and + the upper limit "U" is the largest bit size which will fit + within the K-ALG parameters). + + For example, if DES and two-key-triple-DES are the negotiated + confidentiality algorithms and DES-MAC is the negotiated keyed + integrity algorithm (note that digital signatures do not use a + context key), then the context key must be at least 112 bits + long. If 512-bit RSAEncryption is the K-ALG in use then the + originator can randomly generate a context key of any greater + length up to 424 bits (the longest allowable RSA input + specified in [PKCS-1]) -- the target can determine the length + which was chosen by removing the padding bytes during the RSA + decryption operation. On the other hand, if dhKeyAgreement is + the K-ALG in use then the context key is the result of the + Diffie-Hellman computation (with the exception of the high- + order byte, which is discarded for security reasons), so that + its length is that of the Diffie-Hellman modulus, p, minus 8 + bits. + + + + + + +Adams Standards Track [Page 7] + +RFC 2025 SPKM October 1996 + + + The derivation algorithm for a k-bit subkey is specified as + follows: + + rightmost_k_bits (OWF(context_key || x || n || s || context_key)) + + where + + - "x" is the ASCII character "C" (0x43) if the subkey is + for a confidentiality algorithm or the ASCII character "I" + (0x49) if the subkey is for a keyed integrity algorithm; + - "n" is the number of the algorithm in the appropriate agreed + list for the context (the ASCII character "0" (0x30), "1" + (0x31), and so on); + - "s" is the "stage" of processing -- always the ASCII + character "0" (0x30), unless "k" is greater than the output + size of OWF, in which case the OWF is computed repeatedly + with increasing ASCII values of "stage" (each OWF output + being concatenated to the end of previous OWF outputs), + until "k" bits have been generated; + - "||" is the concatenation operation; and + - "OWF" is any appropriate One-Way Function. + + Examples: + + MD5 OBJECT IDENTIFIER ::= { + iso(1) member-body(2) US(840) rsadsi(113549) + digestAlgorithm(2) 5 + } + + This algorithm is MANDATORY. + + SHA OBJECT IDENTIFIER ::= { + iso(1) identified-organization(3) oiw(14) secsig(3) + algorithm(2) 18 + } + + It is recognized that existing hash functions may not satisfy + all required properties of OWFs. This is the reason for + allowing negotiation of the O-ALG OWF during the context + establishment process (see Section 2.5), since in this way + future improvements in OWF design can easily be accommodated. + For example, in some environments a preferred OWF technique + might be an encryption algorithm which encrypts the input + specified above using the context_key as the encryption key. + + + + + + + +Adams Standards Track [Page 8] + +RFC 2025 SPKM October 1996 + + +2.5 Negotiation: + + During context establishment in SPKM, the initiator offers a set of + possible confidentiality algorithms and a set of possible integrity + algorithms to the target (note that the term "integrity algorithms" + includes digital signature algorithms). The confidentiality + algorithms selected by the target become ones that may be used for + C-ALG over the established context, and the integrity algorithms + selected by the target become ones that may be used for I-ALG over + the established context (the target "selects" algorithms by + returning, in the same relative order, the subset of each offered + list that it supports). Note that any C-ALG and I-ALG may be used + for any message over the context and that the first confidentiality + algorithm and the first integrity algorithm in the agreed sets become + the default algorithms for that context. + + The agreed confidentiality and integrity algorithms for a specific + context define the valid values of the Quality of Protection (QOP) + parameter used in the gss_getMIC() and gss_wrap() calls -- see + Section 5.2 for further details. If no response is expected from the + target (unilateral authentication in SPKM-2) then the algorithms + offered by the initiator are the ones that may be used over the + context (if this is unacceptable to the target then a delete token + must be sent to the initiator so that the context is never + established). + + Furthermore, in the first context establishment token the initiator + offers a set of possible K-ALGs, along with the key (or key half) + corresponding to the first algorithm in the set (its preferred + algorithm). If this K-ALG is unacceptable to the target then the + target must choose one of the other K-ALGs in the set and send this + choice along with the key (or key half) corresponding to this choice + in its response (otherwise a delete token must be sent so that the + context is never established). If necessary (that is, if the target + chooses a 2-pass K-ALG such as dhKeyAgreement), the initiator will + send its key half in a response to the target. + + Finally, in the first context establishment token the initiator + offers a set of possible O-ALGs (only a single O-ALG if no response + is expected). The (single) O-ALG chosen by the target becomes the + subkey derivation algorithm OWF to be used over the context. + + In future versions of SPKM, other algorithms may be specified for any + or all of I-ALG, C-ALG, K-ALG, and O-ALG. + + + + + + + +Adams Standards Track [Page 9] + +RFC 2025 SPKM October 1996 + + +3. Token Formats + + This section discusses protocol-visible characteristics of the SPKM; + it defines elements of protocol for interoperability and is + independent of language bindings per [RFC-1509]. + + The SPKM GSS-API mechanism will be identified by an Object Identifier + representing "SPKM-1" or "SPKM-2", having the value {spkm spkm-1(1)} + or {spkm spkm-2(2)}, where spkm has the value {iso(1) identified- + organization(3) dod(6) internet(1) security(5) mechanisms(5) + spkm(1)}. SPKM-1 uses random numbers for replay detection during + context establishment and SPKM-2 uses timestamps (note that for both + mechanisms, sequence numbers are used to provide replay and out-of- + sequence detection during the context, if this has been requested by + the application). + + Tokens transferred between GSS-API peers (for security context + management and per-message protection purposes) are defined. + +3.1. Context Establishment Tokens + + Three classes of tokens are defined in this section: "Initiator" + tokens, emitted by calls to gss_init_sec_context() and consumed by + calls to gss_accept_sec_context(); "Target" tokens, emitted by calls + to gss_accept_sec_context() and consumed by calls to + gss_init_sec_context(); and "Error" tokens, potentially emitted by + calls to gss_init_sec_context() or gss_accept_sec_context(), and + potentially consumed by calls to gss_init_sec_context() or + gss_accept_sec_context(). + + Per RFC-1508, Appendix B, the initial context establishment token + will be enclosed within framing as follows: + + InitialContextToken ::= [APPLICATION 0] IMPLICIT SEQUENCE { + thisMech MechType, + -- MechType is OBJECT IDENTIFIER + -- representing "SPKM-1" or "SPKM-2" + innerContextToken ANY DEFINED BY thisMech + } -- contents mechanism-specific + + + + + + + + + + + + +Adams Standards Track [Page 10] + +RFC 2025 SPKM October 1996 + + + When thisMech is SPKM-1 or SPKM-2, innerContextToken is defined as + follows: + + SPKMInnerContextToken ::= CHOICE { + req [0] SPKM-REQ, + rep-ti [1] SPKM-REP-TI, + rep-it [2] SPKM-REP-IT, + error [3] SPKM-ERROR, + mic [4] SPKM-MIC, + wrap [5] SPKM-WRAP, + del [6] SPKM-DEL + } + + The above GSS-API framing shall be applied to all tokens emitted by + the SPKM GSS-API mechanism, including SPKM-REP-TI (the response from + the Target to the Initiator), SPKM-REP-IT (the response from the + Initiator to the Target), SPKM-ERROR, context-deletion, and per- + message tokens, not just to the initial token in a context + establishment exchange. While not required by RFC-1508, this enables + implementations to perform enhanced error-checking. The tag values + provided in SPKMInnerContextToken ("[0]" through "[6]") specify a + token-id for each token; similar information is contained in each + token's tok-id field. While seemingly redundant, the tag value and + tok-id actually perform different tasks: the tag ensures that + InitialContextToken can be properly decoded; tok-id ensures, among + other things, that data associated with the per-message tokens is + cryptographically linked to the intended token type. Every + innerContextToken also includes a context-id field; see Section 6 for + a discussion of both token-id and context-id information and their + use in an SPKM support function). + + The innerContextToken field of context establishment tokens for the + SPKM GSS-API mechanism will contain one of the following messages: + SPKM-REQ; SPKM-REP-TI; SPKM-REP-IT; and SPKM-ERROR. Furthermore, all + innerContextTokens are encoded using ASN.1 BER (constrained, in the + interests of parsing simplicity, to the DER subset defined in + [X.509], clause 8.7). + + The SPKM context establishment tokens are defined according to + [X.509] Section 10 and are compatible with [9798]. SPKM-1 (random + numbers) uses Section 10.3, "Two-way Authentication", when performing + unilateral authentication of the target to the initiator and uses + Section 10.4, "Three-way Authentication", when mutual authentication + is requested by the initiator. SPKM-2 (timestamps) uses Section + 10.2, "One-way Authentication", when performing unilateral + authentication of the initiator to the target and uses Section 10.3, + "Two-way Authentication", when mutual authentication is requested by + the initiator. + + + +Adams Standards Track [Page 11] + +RFC 2025 SPKM October 1996 + + + The implication of the previous paragraph is that for SPKM-2 + unilateral authentication no negotiation of K-ALG can be done (the + target either accepts the K-ALG and context key given by the + initiator or disallows the context). For SPKM-2 mutual or SPKM-1 + unilateral authentication some negotiation is possible, but the + target can only choose among the one-pass K-ALGs offered by the + initiator (or disallow the context). Alternatively, the initiator + can request that the target generate and transmit the context key. + For SPKM-1 mutual authentication the target can choose any one- or + two-pass K-ALG offered by the initiator and, again, can be requested + to generate and transmit the context key. + + It is envisioned that typical use of SPKM-1 or SPKM-2 will involve + mutual authentication. Although unilateral authentication is + available for both mechanisms, its use is not generally recommended. + +3.1.1. Context Establishment Tokens - Initiator (first token) + + In order to accomplish context establishment, it may be necessary + that both the initiator and the target have access to the other + partys public-key certificate(s). In some environments the initiator + may choose to acquire all certificates and send the relevant ones to + the target in the first token. In other environments the initiator + may request that the target send certificate data in its response + token, or each side may individually obtain the certificate data it + needs. In any case, however, the SPKM implementation must have the + ability to obtain certificates which correspond to a supplied Name. + The actual mechanism to be used to achieve this is a local + implementation matter and is therefore outside the scope of this + specification. + + + Relevant SPKM-REQ syntax is as follows (note that imports from other + documents are given in Appendix A): + + SPKM-REQ ::= SEQUENCE { + requestToken REQ-TOKEN, + certif-data [0] CertificationData OPTIONAL, + auth-data [1] AuthorizationData OPTIONAL + -- see [RFC-1510] for a discussion of auth-data + } + + CertificationData ::= SEQUENCE { + certificationPath [0] CertificationPath OPTIONAL, + certificateRevocationList [1] CertificateList OPTIONAL + } -- at least one of the above shall be present + + + + + +Adams Standards Track [Page 12] + +RFC 2025 SPKM October 1996 + + + CertificationPath ::= SEQUENCE { + userKeyId [0] OCTET STRING OPTIONAL, + -- identifier for user's public key + userCertif [1] Certificate OPTIONAL, + -- certificate containing user's public key + verifKeyId [2] OCTET STRING OPTIONAL, + -- identifier for user's public verification key + userVerifCertif [3] Certificate OPTIONAL, + -- certificate containing user's public verification key + theCACertificates [4] SEQUENCE OF CertificatePair OPTIONAL + } -- certification path from target to source + + Having separate verification fields allows different key pairs + (possibly corresponding to different algorithms) to be used for + encryption/decryption and signing/verification. Presence of [0] or + [1] and absence of [2] and [3] implies that the same key pair is to + be used for enc/dec and verif/signing (note that this practice is not + typically recommended). Presence of [2] or [3] implies that a + separate key pair is to be used for verif/signing, and so [0] or [1] + must also be present. Presence of [4] implies that at least one of + [0], [1], [2], and [3] must also be present. + + REQ-TOKEN ::= SEQUENCE { + req-contents Req-contents, + algId AlgorithmIdentifier, + req-integrity Integrity -- "token" is Req-contents + } + + Integrity ::= BIT STRING + -- If corresponding algId specifies a signing algorithm, + -- "Integrity" holds the result of applying the signing procedure + -- specified in algId to the BER-encoded octet string which results + -- from applying the hashing procedure (also specified in algId) to + -- the DER-encoded octets of "token". + -- Alternatively, if corresponding algId specifies a MACing + -- algorithm, "Integrity" holds the result of applying the MACing + -- procedure specified in algId to the DER-encoded octets of + -- "token" (note that for MAC, algId must be one of the integrity + -- algorithms offered by the initiator with the appropriate subkey + -- derived from the context key (see Section 2.4) used as the key + -- input) + + It is envisioned that typical use of the Integrity field for each of + REQ-TOKEN, REP-TI-TOKEN, and REP-IT-TOKEN will be a true digital + signature, providing unilateral or mutual authentication along with + replay protection, as required. However, there are situations in + which the MAC choice will be appropriate. One example is the case in + which the initiator wishes to remain anonymous (so that the first, or + + + +Adams Standards Track [Page 13] + +RFC 2025 SPKM October 1996 + + + first and third, token(s) will be MACed and the second token will be + signed). Another example is the case in which a previously + authenticated, established, and cached context is being re- + established at some later time (here all exchanged tokens will be + MACed). + + The primary advantage of the MAC choice is that it reduces processing + overhead for cases in which either authentication is not required + (e.g., anonymity) or authentication is established by some other + means (e.g., ability to form the correct MAC on a "fresh" token in + context re-establishment). + + Req-contents ::= SEQUENCE { + tok-id INTEGER (256), -- shall contain 0100(hex) + context-id Random-Integer, -- see Section 6.3 + pvno BIT STRING, -- protocol version number + timestamp UTCTime OPTIONAL, -- mandatory for SPKM-2 + randSrc Random-Integer, + targ-name Name, + src-name [0] Name OPTIONAL, + -- must be supplied unless originator is "anonymous" + req-data Context-Data, + validity [1] Validity OPTIONAL, + -- validity interval for key (may be used in the + -- computation of security context lifetime) + key-estb-set Key-Estb-Algs, + -- specifies set of key establishment algorithms + key-estb-req BIT STRING OPTIONAL, + -- key estb. parameter corresponding to first K-ALG in set + -- (not used if initiator is unable or unwilling to + -- generate and securely transmit key material to target). + -- Established key must satisfy the key length constraints + -- specified in Section 2.4. + key-src-bind OCTET STRING OPTIONAL + -- Used to bind the source name to the symmetric key. + -- This field must be present for the case of SPKM-2 + -- unilateral authen. if the K-ALG in use does not provide + -- such a binding (but is optional for all other cases). + -- The octet string holds the result of applying the + -- mandatory hashing procedure MD5 (in MANDATORY I-ALG; + -- see Section 2.1) as follows: MD5(src || context_key), + -- where "src" is the DER-encoded octets of src-name, + -- "context-key" is the symmetric key (i.e., the + -- unprotected version of what is transmitted in + -- key-estb-req), and "||" is the concatenation operation. + } + + + + + +Adams Standards Track [Page 14] + +RFC 2025 SPKM October 1996 + + + -- The protocol version number (pvno) parameter is a BIT STRING which + -- uses as many bits as necessary to specify all the SPKM protocol + -- versions supported by the initiator (one bit per protocol + -- version). The protocol specified by this document is version 0. + -- Bit 0 of pvno is therefore set if this version is supported; + -- similarly, bit 1 is set if version 1 (if defined in the future) is + -- supported, and so on. Note that for unilateral authentication + -- using SPKM-2, no response token is expected during context + -- establishment, so no protocol negotiation can take place; in this + -- case, the initiator must set exactly one bit of pvno. The version + -- of REQ-TOKEN must correspond to the highest bit set in pvno. + -- The "validity" parameter above is the only way within SPKM for + -- the initiator to transmit desired context lifetime to the target. + -- Since it cannot be guaranteed that the initiator and target have + -- synchronized time, the span of time specified by "validity" is to + -- be taken as definitive (rather than the actual times given in this + -- parameter). + + Random-Integer ::= BIT STRING + + -- Each SPKM implementation is responsible for generating a "fresh" + -- random number for the purpose of context establishment; that is, + -- one which (with high probability) has not been used previously. + -- There are no cryptographic requirements on this random number + -- (i.e., it need not be unpredictable, it simply needs to be fresh). + + Context-Data ::= SEQUENCE { + channelId ChannelId OPTIONAL, -- channel bindings + seq-number INTEGER OPTIONAL, -- sequence number + options Options, + conf-alg Conf-Algs, -- confidentiality. algs. + intg-alg Intg-Algs, -- integrity algorithm + owf-alg OWF-Algs -- for subkey derivation + } + + ChannelId ::= OCTET STRING + + Options ::= BIT STRING { + delegation-state (0), + mutual-state (1), + replay-det-state (2), -- used for replay det. during context + sequence-state (3), -- used for sequencing during context + conf-avail (4), + integ-avail (5), + target-certif-data-required (6) + -- used to request targ's certif. data + } + + + + +Adams Standards Track [Page 15] + +RFC 2025 SPKM October 1996 + + + Conf-Algs ::= CHOICE { + algs [0] SEQUENCE OF AlgorithmIdentifier, + null [1] NULL + -- used when conf. is not available over context + } -- for C-ALG (see Section 5.2 for discussion of QOP) + + Intg-Algs ::= SEQUENCE OF AlgorithmIdentifier + -- for I-ALG (see Section 5.2 for discussion of QOP) + + OWF-Algs ::= SEQUENCE OF AlgorithmIdentifier + -- Contains exactly one algorithm in REQ-TOKEN for SPKM-2 + -- unilateral, and contains at least one algorithm otherwise. + -- Always contains exactly one algorithm in REP-TOKEN. + + Key-Estb-Algs ::= SEQUENCE OF AlgorithmIdentifier + -- to allow negotiation of K-ALG + + A context establishment sequence based on the SPKM will perform + unilateral authentication if the mutual-req bit is not set in the + application's call to gss_init_sec_context(). SPKM-2 accomplishes + this using only SPKM-REQ (thereby authenticating the initiator to the + target), while SPKM-1 accomplishes this using both SPKM-REQ and + SPKM-REP-TI (thereby authenticating the target to the initiator). + + Applications requiring authentication of both peers (initiator as + well as target) must request mutual authentication, resulting in + "mutual-state" being set within SPKM-REQ Options. In response to + such a request, the context target will reply to the initiator with + an SPKM-REP-TI token. If mechanism SPKM-2 has been chosen, this + completes the (timestamp-based) mutual authentication context + establishment exchange. If mechanism SPKM-1 has been chosen and + SPKM-REP-TI is sent, the initiator will then reply to the target with + an SPKM-REP-IT token, completing the (random-number-based) mutual + authentication context establishment exchange. + + Other bits in the Options field of Context-Data are explained in + RFC-1508, with the exception of target-certif-data-required, which + the initiator sets to TRUE to request that the target return its + certification data in the SPKM-REP-TI token. For unilateral + authentication in SPKM-2 (in which no SPKM-REP-TI token is + constructed), this option bit is ignored by both initiator and + target. + + + + + + + + + +Adams Standards Track [Page 16] + +RFC 2025 SPKM October 1996 + + +3.1.2. Context Establishment Tokens - Target + + SPKM-REP-TI ::= SEQUENCE { + responseToken REP-TI-TOKEN, + certif-data CertificationData OPTIONAL + -- included if target-certif-data-required option was + -- set to TRUE in SPKM-REQ + } + + + REP-TI-TOKEN ::= SEQUENCE { + rep-ti-contents Rep-ti-contents, + algId AlgorithmIdentifier, + rep-ti-integ Integrity -- "token" is Rep-ti-contents + } + + Rep-ti-contents ::= SEQUENCE { + tok-id INTEGER (512), -- shall contain 0200 (hex) + context-id Random-Integer, -- see Section 6.3 + pvno [0] BIT STRING OPTIONAL, -- prot. version number + timestamp UTCTime OPTIONAL, -- mandatory for SPKM-2 + randTarg Random-Integer, + src-name [1] Name OPTIONAL, + -- must contain whatever value was supplied in REQ-TOKEN + targ-name Name, + randSrc Random-Integer, + rep-data Context-Data, + validity [2] Validity OPTIONAL, + -- validity interval for key (used if the target can only + -- support a shorter context lifetime than was offered in + -- REQ-TOKEN) + key-estb-id AlgorithmIdentifier OPTIONAL, + -- used if target is changing key estb. algorithm (must be + -- a member of initiators key-estb-set) + key-estb-str BIT STRING OPTIONAL + -- contains (1) the response to the initiators + -- key-estb-req (if init. used a 2-pass K-ALG), or (2) the + -- key-estb-req corresponding to the K-ALG supplied in + -- above key-estb-id, or (3) the key-estb-req corresponding + -- to the first K-ALG supplied in initiator's key-estb-id, + -- if initiator's (OPTIONAL) key-estb-req was not used + -- (target's key-estb-str must be present in this case). + -- Established key must satisfy the key length constraints + -- specified in Section 2.4. + } + + + + + + +Adams Standards Track [Page 17] + +RFC 2025 SPKM October 1996 + + + The protocol version number (pvno) parameter is a BIT STRING which + uses as many bits as necessary to specify a single SPKM protocol + version offered by the initiator which is supported by the target + (one bit per protocol version); that is, the target sets exactly one + bit of pvno. If none of the versions offered by the initiator are + supported by the target, a delete token must be returned so that the + context is never established. If the initiator's pvno has only one + bit set and the target happens to support this protocol version, then + this version is used over the context and the pvno parameter of REP- + TOKEN can be omitted. Finally, if the initiator and target do have + one or more versions in common but the version of the REQ-TOKEN + received is not supported by the target, a REP-TOKEN must be sent + with a desired version bit set in pvno (and dummy values used for all + subsequent token fields). The initiator can then respond with a new + REQ-TOKEN of the proper version (essentially starting context + establishment anew). + +3.1.3. Context Establishment Tokens - Initiator (second token) + + Relevant SPKM-REP-IT syntax is as follows: + + SPKM-REP-IT ::= SEQUENCE { + responseToken REP-IT-TOKEN, + algId AlgorithmIdentifier, + rep-it-integ Integrity -- "token" is REP-IT-TOKEN + } + + REP-IT-TOKEN ::= SEQUENCE { + tok-id INTEGER (768), -- shall contain 0300 (hex) + context-id Random-Integer, + randSrc Random-Integer, + randTarg Random-Integer, + targ-name Name, -- the targ-name specified in REP-TI + src-name Name OPTIONAL, + -- must contain whatever value was supplied in REQ-TOKEN + key-estb-rep BIT STRING OPTIONAL + -- contains the response to targets key-estb-str + -- (if target selected a 2-pass K-ALG) + } + +3.1.4. Error Token + + The syntax of SPKM-ERROR is as follows: + + SPKM-ERROR ::= SEQUENCE { + error-token ERROR-TOKEN, + algId AlgorithmIdentifier, + integrity Integrity -- "token" is ERROR-TOKEN + + + +Adams Standards Track [Page 18] + +RFC 2025 SPKM October 1996 + + + } + + ERROR-TOKRN ::= SEQUENCE { + tok-id INTEGER (1024), -- shall contain 0400 (hex) + context-id Random-Integer + } + + The SPKM-ERROR token is used only during the context establishment + process. If an SPKM-REQ or SPKM-REP-TI token is received in error, + the receiving function (either gss_init_sec_context() or + gss_accept_sec_context()) will generate an SPKM-ERROR token to be + sent to the peer (if the peer is still in the context establishment + process) and will return GSS_S_CONTINUE_NEEDED. If, on the other + hand, no context establishment response is expected from the peer + (i.e., the peer has completed context establishment), the function + will return the appropriate major status code (e.g., GSS_S_BAD_SIG) + along with a minor status of GSS_SPKM_S_SG_CONTEXT_ESTB_ABORT and all + context-relevant information will be deleted. The output token will + not be an SPKM-ERROR token but will instead be an SPKM-DEL token + which will be processed by the peer's gss_process_context_token(). + + If gss_init_sec_context() receives an error token (whether valid or + invalid), it will regenerate SPKM-REQ as its output token and return + a major status code of GSS_S_CONTINUE_NEEDED. (Note that if the + peer's gss_accept_sec_context() receives SPKM-REQ token when it is + expecting a SPKM-REP-IT token, it will ignore SPKM-REQ and return a + zero-length output token with a major status of + GSS_S_CONTINUE_NEEDED.) + + Similarly, if gss_accept_sec_context() receives an error token + (whether valid or invalid), it will regenerate SPKM-REP-TI as its + output token and return a major status code of GSS_S_CONTINUE_NEEDED. + + md5WithRsa is currently stipulated for the signing of context + establishment tokens. Discrepancies involving modulus bitlength can + be resolved through judicious use of the SPKM-ERROR token. The + context initiator signs REQ-TOKEN using the strongest RSA it supports + (e.g., 1024 bits). If the target is unable to verify signatures of + this length, it sends SPKM-ERROR signed with the strongest RSA that + it supports (e.g. 512). + + At the completion of this exchange, both sides know what RSA + bitlength the other supports, since the size of the signature is + equal to the size of the modulus. Further exchanges can be made + (using successively smaller supported bitlengths) until either an + agreement is reached or context establishment is aborted because no + agreement is possible. + + + + +Adams Standards Track [Page 19] + +RFC 2025 SPKM October 1996 + + +3.2. Per-Message and Context Deletion Tokens + + Three classes of tokens are defined in this section: "MIC" tokens, + emitted by calls to gss_getMIC() and consumed by calls to + gss_verifyMIC(); "Wrap" tokens, emitted by calls to gss_wrap() and + consumed by calls to gss_unwrap(); and context deletion tokens, + emitted by calls to gss_init_sec_context(), gss_accept_sec_context(), + or gss_delete_sec_context() and consumed by calls to + gss_process_context_token(). + +3.2.1. Per-message Tokens - Sign / MIC + + Use of the gss_sign() / gss_getMIC() call yields a token, separate + from the user data being protected, which can be used to verify the + integrity of that data as received. The token and the data may be + sent separately by the sending application and it is the receiving + application's responsibility to associate the received data with the + received token. + + The SPKM-MIC token has the following format: + + SPKM-MIC ::= SEQUENCE { + mic-header Mic-Header, + int-cksum BIT STRING + -- Checksum over header and data, + -- calculated according to algorithm + -- specified in int-alg field. + } + + Mic-Header ::= SEQUENCE { + tok-id INTEGER (257), + -- shall contain 0101 (hex) + context-id Random-Integer, + int-alg [0] AlgorithmIdentifier OPTIONAL, + -- Integrity algorithm indicator (must + -- be one of the agreed integrity + -- algorithms for this context). + -- field not present = default id. + snd-seq [1] SeqNum OPTIONAL -- sequence number field. + } + + SeqNum ::= SEQUENCE { + num INTEGER, -- the sequence number itself + dir-ind BOOLEAN -- a direction indicator + } + + + + + + +Adams Standards Track [Page 20] + +RFC 2025 SPKM October 1996 + + +3.2.1.1. Checksum + + Checksum calculation procedure (common to all algorithms -- note that + for SPKM the term "checksum" includes digital signatures as well as + hashes and MACs): Checksums are calculated over the data field, + logically prepended by the bytes of the plaintext token header (mic- + header). The result binds the data to the entire plaintext header, + so as to minimize the possibility of malicious splicing. + + For example, if the int-alg specifies the md5WithRSA algorithm, then + the checksum is formed by computing an MD5 [RFC-1321] hash over the + plaintext data (prepended by the header), and then computing an RSA + signature [PKCS1] on the 16-byte MD5 result. The signature is + computed using the RSA private key retrieved from the credentials + structure and the result (whose length is implied by the "modulus" + parameter in the private key) is stored in the int-cksum field. + + If the int-alg specifies a keyed hashing algorithm (for example, + DES-MAC or md5-DES-CBC), then the key to be used is the appropriate + subkey derived from the context key (see Section 2.4). Again, the + result (whose length is implied by int-alg) is stored in the int- + cksum field. + +3.2.1.2. Sequence Number + + It is assumed that the underlying transport layers (of whatever + protocol stack is being used by the application) will provide + adequate communications reliability (that is, non-malicious loss, + re-ordering, etc., of data packets will be handled correctly). + Therefore, sequence numbers are used in SPKM purely for security, as + opposed to reliability, reasons (that is, to avoid malicious loss, + replay, or re-ordering of SPKM tokens) -- it is therefore recommended + that applications request sequencing and replay detection over all + contexts. Note that sequence numbers are used so that there is no + requirement for secure timestamps in the message tokens. The + initiator's initial sequence number for the current context may be + explicitly given in the Context-Data field of SPKM-REQ and the + target's initial sequence number may be explicitly given in the + Context-Data field of SPKM-REP-TI; if either of these is not given + then the default value of 00 is to be used. + + Sequence number field: The sequence number field is formed from the + sender's four-byte sequence number and a Boolean direction-indicator + (FALSE - sender is the context initiator, TRUE - sender is the + context acceptor). After constructing a gss_sign/getMIC() or + gss_seal/wrap() token, the sender's seq. number is incremented by 1. + + + + + +Adams Standards Track [Page 21] + +RFC 2025 SPKM October 1996 + + +3.2.1.3. Sequence Number Processing + + The receiver of the token will verify the sequence number field by + comparing the sequence number with the expected sequence number and + the direction indicator with the expected direction indicator. If + the sequence number in the token is higher than the expected number, + then the expected sequence number is adjusted and GSS_S_GAP_TOKEN is + returned. If the token sequence number is lower than the expected + number, then the expected sequence number is not adjusted and + GSS_S_DUPLICATE_TOKEN, GSS_S_UNSEQ_TOKEN, or GSS_S_OLD_TOKEN is + returned, whichever is appropriate. If the direction indicator is + wrong, then the expected sequence number is not adjusted and + GSS_S_UNSEQ_TOKEN is returned. + + Since the sequence number is used as part of the input to the + integrity checksum, sequence numbers need not be encrypted, and + attempts to splice a checksum and sequence number from different + messages will be detected. The direction indicator will detect + tokens which have been maliciously reflected. + +3.2.2. Per-message Tokens - Seal / Wrap + + Use of the gss_seal() / gss_wrap() call yields a token which + encapsulates the input user data (optionally encrypted) along with + associated integrity check quantities. The token emitted by + gss_seal() / gss_wrap() consists of an integrity header followed by a + body portion that contains either the plaintext data (if conf-alg = + NULL) or encrypted data (using the appropriate subkey specified in + Section 2.4 for one of the agreed C-ALGs for this context). + + The SPKM-WRAP token has the following format: + + SPKM-WRAP ::= SEQUENCE { + wrap-header Wrap-Header, + wrap-body Wrap-Body + } + + Wrap-Header ::= SEQUENCE { + tok-id INTEGER (513), + -- shall contain 0201 (hex) + context-id Random-Integer, + int-alg [0] AlgorithmIdentifier OPTIONAL, + -- Integrity algorithm indicator (must + -- be one of the agreed integrity + -- algorithms for this context). + -- field not present = default id. + + + + + +Adams Standards Track [Page 22] + +RFC 2025 SPKM October 1996 + + + conf-alg [1] Conf-Alg OPTIONAL, + -- Confidentiality algorithm indicator + -- (must be NULL or one of the agreed + -- confidentiality algorithms for this + -- context). + -- field not present = default id. + -- NULL = none (no conf. applied). + snd-seq [2] SeqNum OPTIONAL + -- sequence number field. + } + + + + Wrap-Body ::= SEQUENCE { + int-cksum BIT STRING, + -- Checksum of header and data, + -- calculated according to algorithm + -- specified in int-alg field. + data BIT STRING + -- encrypted or plaintext data. + } + + Conf-Alg ::= CHOICE { + algId [0] AlgorithmIdentifier, + null [1] NULL + } + + +3.2.2.1: Confounding + + As in [KRB5], an 8-byte random confounder is prepended to the data to + compensate for the fact that an IV of zero is used for encryption. + The result is referred to as the "confounded" data field. + +3.2.2.2. Checksum + + Checksum calculation procedure (common to all algorithms): Checksums + are calculated over the plaintext data field, logically prepended by + the bytes of the plaintext token header (wrap-header). As with + gss_sign() / gss_getMIC(), the result binds the data to the entire + plaintext header, so as to minimize the possibility of malicious + splicing. + + The examples for md5WithRSA and DES-MAC are exactly as specified in + 3.2.1.1. + + If int-alg specifies md5-DES-CBC and conf-alg specifies anything + other than DES-CBC, then the checksum is computed according to + + + +Adams Standards Track [Page 23] + +RFC 2025 SPKM October 1996 + + + 3.2.1.1 and the result is stored in int-cksum. However, if conf-alg + specifies DES-CBC then the encryption and the integrity are done as + follows. An MD5 [RFC-1321] hash is computed over the plaintext data + (prepended by the header). This 16-byte value is appended to the + concatenation of the "confounded" data and 1-8 padding bytes (the + padding is as specified in [KRB5] for DES-CBC). The result is then + CBC encrypted using the DES-CBC subkey (see Section 2.4) and placed + in the "data" field of Wrap-Body. The final two blocks of ciphertext + (i.e., the encrypted MD5 hash) are also placed in the int-cksum field + of Wrap-Body as the integrity checksum. + + If int-alg specifies sum64-DES-CBC then conf-alg must specify DES-CBC + (i.e., confidentiality must be requested by the calling application + or SPKM will return an error). Encryption and integrity are done in + a single pass using the DES-CBC subkey as follows. The sum (modulo + 2**64 - 1) of all plaintext data blocks (prepended by the header) is + computed. This 8-byte value is appended to the concatenation of the + "confounded" data and 1-8 padding bytes (the padding is as specified + in [KRB5] for DES-CBC). As above, the result is then CBC encrypted + and placed in the "data" field of Wrap-Body. The final block of + ciphertext (i.e., the encrypted sum) is also placed in the int-cksum + field of Wrap-Body as the integrity checksum. + +3.2.2.3 Sequence Number + + Sequence numbers are computed and processed for gss_wrap() exactly as + specified in 3.2.1.2 and 3.2.1.3. + +3.2.2.4: Data Encryption + + The following procedure is followed unless (a) conf-alg is NULL (no + encryption), or (b) conf-alg is DES-CBC and int-alg is md5-DES-CBC + (encryption as specified in 3.2.2.2), or (c) int-alg is sum64-DES-CBC + (encryption as specified in 3.2.2.2): + + The "confounded" data is padded and encrypted according to the + algorithm specified in the conf-alg field. The data is encrypted + using CBC with an IV of zero. The key used is the appropriate subkey + derived from the established context key using the subkey derivation + algorithm described in Section 2.4 (this ensures that the subkey used + for encryption and the subkey used for a separate, keyed integrity + algorithm -- for example DES-MAC, but not sum64-DES-CBC -- are + different). + +3.2.3. Context deletion token + + The token emitted by gss_delete_sec_context() is based on the format + for tokens emitted by gss_sign() / gss_getMIC(). + + + +Adams Standards Track [Page 24] + +RFC 2025 SPKM October 1996 + + + The SPKM-DEL token has the following format: + + SPKM-DEL ::= SEQUENCE { + del-header Del-Header, + int-cksum BIT STRING + -- Checksum of header, calculated + -- according to algorithm specified + -- in int-alg field. + } + + Del-Header ::= SEQUENCE { + tok-id INTEGER (769), + -- shall contain 0301 (hex) + context-id Random-Integer, + int-alg [0] AlgorithmIdentifier OPTIONAL, + -- Integrity algorithm indicator (must + -- be one of the agreed integrity + -- algorithms for this context). + -- field not present = default id. + snd-seq [1] SeqNum OPTIONAL + -- sequence number field. + } + + The field snd-seq will be calculated as for tokens emitted by + gss_sign() / gss_getMIC(). The field int-cksum will be calculated as + for tokens emitted by gss_sign() / gss_getMIC(), except that the + user-data component of the checksum data will be a zero-length + string. + + If a valid delete token is received, then the SPKM implementation + will delete the context and gss_process_context_token() will return a + major status of GSS_S_COMPLETE and a minor status of + GSS_SPKM_S_SG_CONTEXT_DELETED. If, on the other hand, the delete + token is invalid, the context will not be deleted and + gss_process_context_token() will return the appropriate major status + (GSS_S_BAD_SIG, for example) and a minor status of + GSS_SPKM_S_SG_BAD_DELETE_TOKEN_RECD. The application may wish to + take some action at this point to check the context status (such as + sending a sealed/wrapped test message to its peer and waiting for a + sealed/wrapped response). + +4. Name Types and Object Identifiers + + No mandatory name forms have yet been defined for SPKM. This section + is for further study. + + + + + + +Adams Standards Track [Page 25] + +RFC 2025 SPKM October 1996 + + +4.1. Optional Name Forms + + This section discusses name forms which may optionally be supported + by implementations of the SPKM GSS-API mechanism. It is recognized + that OS-specific functions outside GSS-API are likely to exist in + order to perform translations among these forms, and that GSS-API + implementations supporting these forms may themselves be layered atop + such OS-specific functions. Inclusion of this support within GSS-API + implementations is intended as a convenience to applications. + +4.1.1. User Name Form + + This name form shall be represented by the Object Identifier {iso(1) + member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) + generic(1) user_name(1)}. The recommended symbolic name for this + type is "GSS_SPKM_NT_USER_NAME". + + This name type is used to indicate a named user on a local system. + Its interpretation is OS-specific. This name form is constructed as: + + username + +4.1.2. Machine UID Form + + This name form shall be represented by the Object Identifier {iso(1) + member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) + generic(1) machine_uid_name(2)}. The recommended symbolic name for + this type is "GSS_SPKM_NT_MACHINE_UID_NAME". + + This name type is used to indicate a numeric user identifier + corresponding to a user on a local system. Its interpretation is + OS-specific. The gss_buffer_desc representing a name of this type + should contain a locally-significant uid_t, represented in host byte + order. The gss_import_name() operation resolves this uid into a + username, which is then treated as the User Name Form. + +4.1.3. String UID Form + + This name form shall be represented by the Object Identifier {iso(1) + member-body(2) United States(840) mit(113554) infosys(1) gssapi(2) + generic(1) string_uid_name(3)}. The recommended symbolic name for + this type is "GSS_SPKM_NT_STRING_UID_NAME". + + This name type is used to indicate a string of digits representing + the numeric user identifier of a user on a local system. Its + interpretation is OS-specific. This name type is similar to the + Machine UID Form, except that the buffer contains a string + representing the uid_t. + + + +Adams Standards Track [Page 26] + +RFC 2025 SPKM October 1996 + + +5. Parameter Definitions + + This section defines parameter values used by the SPKM GSS-API + mechanism. It defines interface elements in support of portability. + +5.1. Minor Status Codes + + This section recommends common symbolic names for minor_status values + to be returned by the SPKM GSS-API mechanism. Use of these + definitions will enable independent implementors to enhance + application portability across different implementations of the + mechanism defined in this specification. (In all cases, + implementations of gss_display_status() will enable callers to + convert minor_status indicators to text representations.) Each + implementation must make available, through include files or other + means, a facility to translate these symbolic names into the concrete + values which a particular GSS-API implementation uses to represent + the minor_status values specified in this section. It is recognized + that this list may grow over time, and that the need for additional + minor_status codes specific to particular implementations may arise. + +5.1.1. Non-SPKM-specific codes (Minor Status Code MSB, bit 31, SET) + +5.1.1.1. GSS-Related codes (Minor Status Code bit 30 SET) + + GSS_S_G_VALIDATE_FAILED + /* "Validation error" */ + GSS_S_G_BUFFER_ALLOC + /* "Couldn't allocate gss_buffer_t data" */ + GSS_S_G_BAD_MSG_CTX + /* "Message context invalid" */ + GSS_S_G_WRONG_SIZE + /* "Buffer is the wrong size" */ + GSS_S_G_BAD_USAGE + /* "Credential usage type is unknown" */ + GSS_S_G_UNAVAIL_QOP + /* "Unavailable quality of protection specified" */ + +5.1.1.2. Implementation-Related codes (Minor Status Code bit 30 OFF) + + GSS_S_G_MEMORY_ALLOC + /* "Couldn't perform requested memory allocation" */ + +5.1.2. SPKM-specific-codes (Minor Status Code MSB, bit 31, OFF) + + GSS_SPKM_S_SG_CONTEXT_ESTABLISHED + /* "Context is already fully established" */ + GSS_SPKM_S_SG_BAD_INT_ALG_TYPE + + + +Adams Standards Track [Page 27] + +RFC 2025 SPKM October 1996 + + + /* "Unknown integrity algorithm type in token" */ + GSS_SPKM_S_SG_BAD_CONF_ALG_TYPE + /* "Unknown confidentiality algorithm type in token" */ + GSS_SPKM_S_SG_BAD_KEY_ESTB_ALG_TYPE + /* "Unknown key establishment algorithm type in token" */ + GSS_SPKM_S_SG_CTX_INCOMPLETE + /* "Attempt to use incomplete security context" */ + GSS_SPKM_S_SG_BAD_INT_ALG_SET + /* "No integrity algorithm in common from offered set" */ + GSS_SPKM_S_SG_BAD_CONF_ALG_SET + /* "No confidentiality algorithm in common from offered set" */ + GSS_SPKM_S_SG_BAD_KEY_ESTB_ALG_SET + /* "No key establishment algorithm in common from offered set" */ + GSS_SPKM_S_SG_NO_PVNO_IN_COMMON + /* "No protocol version number in common from offered set" */ + GSS_SPKM_S_SG_INVALID_TOKEN_DATA + /* "Data is improperly formatted: cannot encode into token" */ + GSS_SPKM_S_SG_INVALID_TOKEN_FORMAT + /* "Received token is improperly formatted: cannot decode" */ + GSS_SPKM_S_SG_CONTEXT_DELETED + /* "Context deleted at peer's request" */ + GSS_SPKM_S_SG_BAD_DELETE_TOKEN_RECD + /* "Invalid delete token received -- context not deleted" */ + GSS_SPKM_S_SG_CONTEXT_ESTB_ABORT + /* "Unrecoverable context establishment error. Context deleted" */ + +5.2. Quality of Protection Values + + The Quality of Protection (QOP) parameter is used in the SPKM GSS-API + mechanism as input to gss_sign() and gss_seal() (gss_getMIC() and + gss_wrap()) to select among alternate confidentiality and integrity- + checking algorithms. Once these sets of algorithms have been agreed + upon by the context initiator and target, the QOP parameter simply + selects from these ordered sets. + + More specifically, the SPKM-REQ token sends an ordered sequence of + Alg. IDs specifying integrity-checking algorithms supported by the + initiator and an ordered sequence of Alg. IDs specifying + confidentiality algorithms supported by the initiator. The target + returns the subset of the offered integrity-checking Alg. IDs which + it supports and the subset of the offered confidentiality Alg. IDs + which it supports in the SPKM-REP-TI token (in the same relative + orders as those given by the initiator). Thus, the initiator and + target each know the algorithms which they themselves support and the + algorithms which both sides support (the latter are defined to be + those supported over the established context). The QOP parameter has + meaning and validity with reference to this knowledge. For example, + an application may request integrity algorithm number 3 as defined by + + + +Adams Standards Track [Page 28] + +RFC 2025 SPKM October 1996 + + + the mechanism specification. If this algorithm is supported over + this context then it is used; otherwise, GSS_S_FAILURE and an + appropriate minor status code are returned. + + If the SPKM-REP-TI token is not used (unilateral authentication using + SPKM-2), then the "agreed" sets of Alg. IDs are simply taken to be + the initiator's sets (if this is unacceptable to the target then it + must return an error token so that the context is never established). + Note that, in the interest of interoperability, the initiator is not + required to offer every algorithm it supports; rather, it may offer + only the mandated/recommended SPKM algorithms since these are likely + to be supported by the target. + + The QOP parameter for SPKM is defined to be a 32-bit unsigned integer + (an OM_uint32) with the following bit-field assignments: + + Confidentiality Integrity + 31 (MSB) 16 15 (LSB) 0 +------------------------------------|----------------------------------- +| TS (5) | U(3) | IA (4) | MA (4) | TS (5) | U(3) | IA (4) | MA(4) | +------------------------------------|----------------------------------- + + where + + TS is a 5-bit Type Specifier (a semantic qualifier whose value + specifies the type of algorithm which may be used to protect the + corresponding token -- see below for details); + + U is a 3-bit Unspecified field (available for future + use/expansion); + + IA is a 4-bit field enumerating Implementation-specific + Algorithms; and + + MA is a 4-bit field enumerating Mechanism-defined Algorithms. + + The interpretation of the QOP parameter is as follows (note that the + same procedure is used for both the confidentiality and the integrity + halves of the parameter). The MA field is examined first. If it is + non-zero then the algorithm used to protect the token is the + mechanism-specified algorithm corresponding to that integer value. + + If MA is zero then IA is examined. If this field value is non-zero + then the algorithm used to protect the token is the implementation- + specified algorithm corresponding to that integer value (if this + algorithm is available over the established context). Note that use + of this field may hinder portability since a particular value may + specify one algorithm in one implementation of the mechanism and may + + + +Adams Standards Track [Page 29] + +RFC 2025 SPKM October 1996 + + + not be supported or may specify a completely different algorithm in + another implementation of the mechanism. + + Finally, if both MA and IA are zero then TS is examined. A value of + zero for TS specifies the default algorithm for the established + context, which is defined to be the first algorithm on the + initiator's list of offered algorithms (confidentiality or integrity, + depending on which half of QOP is being examined) which is supported + over the context. A non-zero value for TS corresponds to a + particular algorithm qualifier and selects the first algorithm + supported over the context which satisfies that qualifier. + + The following TS values (i.e., algorithm qualifiers) are specified; + other values may be added in the future. + + For the Confidentiality TS field: + + 00001 (1) = SPKM_SYM_ALG_STRENGTH_STRONG + 00010 (2) = SPKM_SYM_ALG_STRENGTH_MEDIUM + 00011 (3) = SPKM_SYM_ALG_STRENGTH_WEAK + + For the Integrity TS field: + + 00001 (1) = SPKM_INT_ALG_NON_REP_SUPPORT + 00010 (2) = SPKM_INT_ALG_REPUDIABLE + + Clearly, qualifiers such as strong, medium, and weak are debatable + and likely to change with time, but for the purposes of this version + of the specification we define these terms as follows. A + confidentiality algorithm is "weak" if the effective key length of + the cipher is 40 bits or less; it is "medium-strength" if the + effective key length is strictly between 40 and 80 bits; and it is + "strong" if the effective key length is 80 bits or greater. (Note + that "effective key length" describes the computational effort + required to break a cipher using the best-known cryptanalytic attack + against that cipher.) + + A five-bit TS field allows up to 31 qualifiers for each of + confidentiality and integrity (since "0" is reserved for "default"). + This document specifies three for confidentiality and two for + integrity, leaving a lot of room for future specification. + Suggestions of qualifiers such as "fast", "medium-speed", and "slow" + have been made, but such terms are difficult to quantify (and in any + case are platform- and processor-dependent), and so have been left + out of this initial specification. The intention is that the TS + terms be quantitative, environment-independent qualifiers of + algorithms, as much as this is possible. + + + + +Adams Standards Track [Page 30] + +RFC 2025 SPKM October 1996 + + + Use of the QOP structure as defined above is ultimately meant to be + as follows. + + - TS values are specified at the GSS-API level and are therefore + portable across mechanisms. Applications which know nothing about + algorithms are still able to choose "quality" of protection for + their message tokens. + + - MA values are specified at the mechanism level and are therefore + portable across implementations of a mechanism. For example, all + implementations of the Kerberos V5 GSS mechanism must support + + GSS_KRB5_INTEG_C_QOP_MD5 (value: 1) + GSS_KRB5_INTEG_C_QOP_DES_MD5 (value: 2) + GSS_KRB5_INTEG_C_QOP_DES_MAC (value: 3). + + (Note that these Kerberos-specified integrity QOP values do not + conflict with the QOP structure defined above.) + + - IA values are specified at the implementation level (in user + documentation, for example) and are therefore typically non- + portable. An application which is aware of its own mechanism + implementation and the mechanism implementation of its peer, + however, is free to use these values since they will be perfectly + valid and meaningful over that context and between those peers. + + The receiver of a token must pass back to its calling application a + QOP parameter with all relevant fields set. For example, if triple- + DES has been specified by a mechanism as algorithm 8, then a receiver + of a triple-DES-protected token must pass to its application (QOP + Confidentiality TS=1, IA=0, MA=8). In this way, the application is + free to read whatever part of the QOP it understands (TS or IA/MA). + + To aid in implementation and interoperability, the following + stipulation is made. The set of integrity Alg. IDs sent by the + initiator must contain at least one specifying an algorithm which + computes a digital signature supporting non-repudiation, and must + contain at least one specifying any other (repudiable) integrity + algorithm. The subset of integrity Alg. IDs returned by the target + must also contain at least one specifying an algorithm which computes + a digital signature supporting non-repudiation, and at least one + specifying a repudiable integrity algorithm. + + The reason for this stipulation is to ensure that every SPKM + implementation will provide an integrity service which supports non- + repudiation and one which does not support non-repudiation. An + application with no knowledge of underlying algorithms can choose one + or the other by passing (QOP Integrity TS=1, IA=MA=0) or (QOP + + + +Adams Standards Track [Page 31] + +RFC 2025 SPKM October 1996 + + + Integrity TS=2, IA=MA=0). Although an initiator who wishes to remain + anonymous will never actually use the non-repudiable digital + signature, this integrity service must be available over the context + so that the target can use it if desired. + + Finally, in accordance with the MANDATORY and RECOMMENDED algorithms + given in Section 2, the following QOP values are specified for SPKM. + + For the Confidentiality MA field: + + 0001 (1) = DES-CBC + + For the Integrity MA field: + + 0001 (1) = md5WithRSA + 0010 (2) = DES-MAC + +6. Support Functions + + This section describes a mandatory support function for SPKM- + conformant implementations which may, in fact, be of value in all + GSS-API mechanisms. It makes use of the token-id and context-id + information which is included in SPKM context-establishment, error, + context-deletion, and per-message tokens. The function is defined in + the following section. + +6.1. SPKM_Parse_token call + + Inputs: + + o input_token OCTET STRING + + Outputs: + + o major_status INTEGER, + + o minor_status INTEGER, + + o mech_type OBJECT IDENTIFIER, + + o token_type INTEGER, + + o context_handle CONTEXT HANDLE, + + + + + + + + +Adams Standards Track [Page 32] + +RFC 2025 SPKM October 1996 + + + Return major_status codes: + + o GSS_S_COMPLETE indicates that the input_token could be parsed for + all relevant fields. The resulting values are stored in + mech_type, token_type and context_handle, respectively (with NULLs + in any parameters which are not relevant). + + o GSS_S_DEFECTIVE_TOKEN indicates that either the token-id or the + context-id (if it was expected) information could not be parsed. + A non-NULL return value in token_type indicates that the latter + situation occurred. + + o GSS_S_NO_TYPE indicates that the token-id information could be + parsed, but it did not correspond to any valid token_type. + + (Note that this major status code has not been defined for GSS in + RFC-1508. Until such a definition is made (if ever), SPKM + implementations should instead return GSS_S_DEFECTIVE_TOKEN with + both token_type and context_handle set to NULL. This essentially + implies that unrecognized token-id information is considered to be + equivalent to token-id information which could not be parsed.) + + o GSS_S_NO_CONTEXT indicates that the context-id could be parsed, + but it did not correspond to any valid context_handle. + + o GSS_S_FAILURE indicates that the mechanism type could not be + parsed (for example, the token may be corrupted). + + SPKM_Parse_token() is used to return to an application the mechanism + type, token type, and context handle which correspond to a given + input token. Since GSS-API tokens are meant to be opaque to the + calling application, this function allows the application to + determine information about the token without having to violate the + opaqueness intention of GSS. Of primary importance is the token + type, which the application can then use to decide which GSS function + to call in order to have the token processed. + + If all tokens are framed as suggested in RFC-1508, Appendix B + (specified both in the Kerberos V5 GSS mechanism [KRB5] and in this + document), then any mechanism implementation should be able to return + at least the mech_type parameter (the other parameters being NULL) + for any uncorrupted input token. If the mechanism implementation + whose SPKM_Parse_token() function is being called does recognize the + token, it can return token_type so that the application can + subsequently call the correct GSS function. Finally, if the + mechanism provides a context-id field in its tokens (as SPKM does), + then an implementation can map the context-id to a context_handle and + return this to the application. This is necessary for the situation + + + +Adams Standards Track [Page 33] + +RFC 2025 SPKM October 1996 + + + where an application has multiple contexts open simultaneously, all + using the same mechanism. When an incoming token arrives, the + application can use this function to determine not only which GSS + function to call, but also which context_handle to use for the call. + Note that this function does no cryptographic processing to determine + the validity of tokens; it simply attempts to parse the mech_type, + token_type, and context-id fields of any token it is given. Thus, it + is conceivable, for example, that an arbitrary buffer of data might + start with random values which look like a valid mech_type and that + SPKM_Parse_token() would return incorrect information if given this + buffer. While conceivable, however, such a situation is unlikely. + + The SPKM_Parse_token() function is mandatory for SPKM-conformant + implementations, but it is optional for applications. That is, if an + application has only one context open and can guess which GSS + function to call (or is willing to put up with some error codes), + then it need never call SPKM_Parse_token(). Furthermore, if this + function ever migrates up to the GSS-API level, then + SPKM_Parse_token() will be deprecated at that time in favour of + GSS_Parse_token(), or whatever the new name and function + specification might be. Note finally that no minor status return + codes have been defined for this function at this time. + +6.2. The token_type Output Parameter + + The following token types are defined: + + GSS_INIT_TOKEN = 1 + GSS_ACCEPT_TOKEN = 2 + GSS_ERROR_TOKEN = 3 + GSS_SIGN_TOKEN = GSS_GETMIC_TOKEN = 4 + GSS_SEAL_TOKEN = GSS_WRAP_TOKEN = 5 + GSS_DELETE_TOKEN = 6 + + All SPKM mechanisms shall be able to perform the mapping from the + token-id information which is included in every token (through the + tag values in SPKMInnerContextToken or through the tok-id field) to + one of the above token types. Applications should be able to decide, + on the basis of token_type, which GSS function to call (for example, + if the token is a GSS_INIT_TOKEN then the application will call + gss_accept_sec_context(), and if the token is a GSS_WRAP_TOKEN then + the application will call gss_unwrap()). + +6.3. The context_handle Output Parameter + + The SPKM mechanism implementation is responsible for maintaining a + mapping between the context-id value which is included in every token + and a context_handle, thus associating an individual token with its + + + +Adams Standards Track [Page 34] + +RFC 2025 SPKM October 1996 + + + proper context. Clearly the value of context_handle may be locally + determined and may, in fact, be associated with memory containing + sensitive data on the local system, and so having the context-id + actually be set equal to a computed context_handle will not work in + general. Conversely, having the context_handle actually be set equal + to a computed context-id will not work in general either, because + context_handle must be returned to the application by the first call + to gss_init_sec_context() or gss_accept_sec_context(), whereas + uniqueness of the context-id (over all contexts at both ends) may + require that both initiator and target be involved in the + computation. Consequently, context_handle and context-id must be + computed separately and the mechanism implementation must be able to + map from one to the other by the completion of context establishment + at the latest. + + Computation of context-id during context establishment is + accomplished as follows. Each SPKM implementation is responsible for + generating a "fresh" random number; that is, one which (with high + probability) has not been used previously. Note that there are no + cryptographic requirements on this random number (i.e., it need not + be unpredictable, it simply needs to be fresh). The initiator passes + its random number to the target in the context-id field of the SPKM- + REQ token. If no further context establishment tokens are expected + (as for unilateral authentication in SPKM-2), then this value is + taken to be the context-id (if this is unacceptable to the target + then an error token must be generated). Otherwise, the target + generates its random number and concatenates it to the end of the + initiator's random number. This concatenated value is then taken to + be the context-id and is used in SPKM-REP-TI and in all subsequent + tokens over that context. + + Having both peers contribute to the context-id assures each peer of + freshness and therefore precludes replay attacks between contexts + (where a token from an old context between two peers is maliciously + injected into a new context between the same or different peers). + Such assurance is not available to the target in the case of + unilateral authentication using SPKM-2, simply because it has not + contributed to the freshness of the computed context-id (instead, it + must trust the freshness of the initiator's random number, or reject + the context). The key-src-bind field in SPKM-REQ is required to be + present for the case of SPKM-2 unilateral authentication precisely to + assist the target in trusting the freshness of this token (and its + proposed context key). + +7. Security Considerations + + Security issues are discussed throughout this memo. + + + + +Adams Standards Track [Page 35] + +RFC 2025 SPKM October 1996 + + +8. References + + [Davi89]: D. W. Davies and W. L. Price, "Security for Computer + Networks", Second Edition, John Wiley and Sons, New York, 1989. + + [FIPS-113]: National Bureau of Standards, Federal Information + Processing Standard 113, "Computer Data Authentication", May 1985. + + [GSSv2]: Linn, J., "Generic Security Service Application Program + Interface Version 2", Work in Progress. + + [Juen84]: R. R. Jueneman, C. H. Meyer and S. M. Matyas, Message + Authentication with Manipulation Detection Codes, in Proceedings of + the 1983 IEEE Symposium on Security and Privacy, IEEE Computer + Society Press, 1984, pp.33-54. + + [KRB5]: Linn, J., "The Kerberos Version 5 GSS-API Mechanism", + RFC 1964, June 1996. + + [PKCS1]: RSA Encryption Standard, Version 1.5, RSA Data Security, + Inc., Nov. 1993. + + [PKCS3]: Diffie-Hellman Key-Agreement Standard, Version 1.4, RSA + Data Security, Inc., Nov. 1993. + + [RFC-1321]: Rivest, R., "The MD5 Message-Digest Algorithm", RFC 1321. + + [RFC-1422]: Kent, S., "Privacy Enhancement for Internet Electronic + Mail: Part II: Certificate-Based Key Management", RFC 1422. + + [RFC-1423]: Balenson, D., "Privacy Enhancement for Internet + Elecronic Mail: Part III: Algorithms, Modes, and Identifiers", + RFC 1423. + + [RFC-1508]: Linn, J., "Generic Security Service Application Program + Interface", RFC 1508. + + [RFC-1509]: Wray, J., "Generic Security Service Application Program + Interface: C-bindings", RFC 1509. + + [RFC-1510]: Kohl J., and C. Neuman, "The Kerberos Network + Authentication Service (V5)", RFC 1510. + + [9798]: ISO/IEC 9798-3, "Information technology - Security + Techniques - Entity authentication mechanisms - Part 3: Entitiy + authentication using a public key algorithm", ISO/IEC, 1993. + + + + + +Adams Standards Track [Page 36] + +RFC 2025 SPKM October 1996 + + + [X.501]: ISO/IEC 9594-2, "Information Technology - Open Systems + Interconnection - The Directory: Models", CCITT/ITU Recommendation + X.501, 1993. + + [X.509]: ISO/IEC 9594-8, "Information Technology - Open Systems + Interconnection - The Directory: Authentication Framework", + CCITT/ITU Recommendation X.509, 1993. + + [X9.44]: ANSI, "Public Key Cryptography Using Reversible + Algorithms for the Financial Services Industry: Transport of + Symmetric Algorithm Keys Using RSA", X9.44-1993. + +9. Author's Address + + Carlisle Adams + Bell-Northern Research + P.O.Box 3511, Station C + Ottawa, Ontario, CANADA K1Y 4H7 + + Phone: +1 613.763.9008 + EMail: cadams@bnr.ca + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Adams Standards Track [Page 37] + +RFC 2025 SPKM October 1996 + + +Appendix A: ASN.1 Module Definition + +SpkmGssTokens {iso(1) identified-organization(3) dod(6) internet(1) + security(5) mechanisms(5) spkm(1) spkmGssTokens(10)} + + +DEFINITIONS IMPLICIT TAGS ::= +BEGIN + + +-- EXPORTS ALL -- + + +IMPORTS + + Name + FROM InformationFramework {joint-iso-ccitt(2) ds(5) module(1) + informationFramework(1) 2} + + Certificate, CertificateList, CertificatePair, AlgorithmIdentifier, + Validity + FROM AuthenticationFramework {joint-iso-ccitt(2) ds(5) module(1) + authenticationFramework(7) 2} ; + + + +-- types -- + + SPKM-REQ ::= SEQUENCE { + requestToken REQ-TOKEN, + certif-data [0] CertificationData OPTIONAL, + auth-data [1] AuthorizationData OPTIONAL + } + + + CertificationData ::= SEQUENCE { + certificationPath [0] CertificationPath OPTIONAL, + certificateRevocationList [1] CertificateList OPTIONAL + } -- at least one of the above shall be present + + + CertificationPath ::= SEQUENCE { + userKeyId [0] OCTET STRING OPTIONAL, + userCertif [1] Certificate OPTIONAL, + verifKeyId [2] OCTET STRING OPTIONAL, + userVerifCertif [3] Certificate OPTIONAL, + theCACertificates [4] SEQUENCE OF CertificatePair OPTIONAL + } -- Presence of [2] or [3] implies that [0] or [1] must also be + + + +Adams Standards Track [Page 38] + +RFC 2025 SPKM October 1996 + + + -- present. Presence of [4] implies that at least one of [0], [1], + -- [2], and [3] must also be present. + + REQ-TOKEN ::= SEQUENCE { + req-contents Req-contents, + algId AlgorithmIdentifier, + req-integrity Integrity -- "token" is Req-contents + } + + Integrity ::= BIT STRING + -- If corresponding algId specifies a signing algorithm, + -- "Integrity" holds the result of applying the signing procedure + -- specified in algId to the BER-encoded octet string which results + -- from applying the hashing procedure (also specified in algId) to + -- the DER-encoded octets of "token". + -- Alternatively, if corresponding algId specifies a MACing + -- algorithm, "Integrity" holds the result of applying the MACing + -- procedure specified in algId to the DER-encoded octets of + -- "token" + + Req-contents ::= SEQUENCE { + tok-id INTEGER (256), -- shall contain 0100 (hex) + context-id Random-Integer, + pvno BIT STRING, + timestamp UTCTime OPTIONAL, -- mandatory for SPKM-2 + randSrc Random-Integer, + targ-name Name, + src-name [0] Name OPTIONAL, + req-data Context-Data, + validity [1] Validity OPTIONAL, + key-estb-set Key-Estb-Algs, + key-estb-req BIT STRING OPTIONAL, + key-src-bind OCTET STRING OPTIONAL + -- This field must be present for the case of SPKM-2 + -- unilateral authen. if the K-ALG in use does not provide + -- such a binding (but is optional for all other cases). + -- The octet string holds the result of applying the + -- mandatory hashing procedure (in MANDATORY I-ALG; + -- see Section 2.1) as follows: MD5(src || context_key), + -- where "src" is the DER-encoded octets of src-name, + -- "context-key" is the symmetric key (i.e., the + -- unprotected version of what is transmitted in + -- key-estb-req), and "||" is the concatenation operation. + } + + Random-Integer ::= BIT STRING + + + + + +Adams Standards Track [Page 39] + +RFC 2025 SPKM October 1996 + + + Context-Data ::= SEQUENCE { + channelId ChannelId OPTIONAL, + seq-number INTEGER OPTIONAL, + options Options, + conf-alg Conf-Algs, + intg-alg Intg-Algs, + owf-alg OWF-Algs + } + + ChannelId ::= OCTET STRING + + Options ::= BIT STRING { + delegation-state (0), + mutual-state (1), + replay-det-state (2), + sequence-state (3), + conf-avail (4), + integ-avail (5), + target-certif-data-required (6) + } + + Conf-Algs ::= CHOICE { + algs [0] SEQUENCE OF AlgorithmIdentifier, + null [1] NULL + } + + Intg-Algs ::= SEQUENCE OF AlgorithmIdentifier + + OWF-Algs ::= SEQUENCE OF AlgorithmIdentifier + + Key-Estb-Algs ::= SEQUENCE OF AlgorithmIdentifier + + + SPKM-REP-TI ::= SEQUENCE { + responseToken REP-TI-TOKEN, + certif-data CertificationData OPTIONAL + -- present if target-certif-data-required option was + } -- set to TRUE in SPKM-REQ + + REP-TI-TOKEN ::= SEQUENCE { + rep-ti-contents Rep-ti-contents, + algId AlgorithmIdentifier, + rep-ti-integ Integrity -- "token" is Rep-ti-contents + } + + Rep-ti-contents ::= SEQUENCE { + tok-id INTEGER (512), -- shall contain 0200 (hex) + context-id Random-Integer, + + + +Adams Standards Track [Page 40] + +RFC 2025 SPKM October 1996 + + + pvno [0] BIT STRING OPTIONAL, + timestamp UTCTime OPTIONAL, -- mandatory for SPKM-2 + randTarg Random-Integer, + src-name [1] Name OPTIONAL, + targ-name Name, + randSrc Random-Integer, + rep-data Context-Data, + validity [2] Validity OPTIONAL, + key-estb-id AlgorithmIdentifier OPTIONAL, + key-estb-str BIT STRING OPTIONAL + } + + + SPKM-REP-IT ::= SEQUENCE { + responseToken REP-IT-TOKEN, + algId AlgorithmIdentifier, + rep-it-integ Integrity -- "token" is REP-IT-TOKEN + } + + REP-IT-TOKEN ::= SEQUENCE { + tok-id INTEGER (768), -- shall contain 0300 (hex) + context-id Random-Integer, + randSrc Random-Integer, + randTarg Random-Integer, + targ-name Name, + src-name Name OPTIONAL, + key-estb-rep BIT STRING OPTIONAL + } + + SPKM-ERROR ::= SEQUENCE { + errorToken ERROR-TOKEN, + algId AlgorithmIdentifier, + integrity Integrity -- "token" is ERROR-TOKEN + } + + ERROR-TOKEN ::= SEQUENCE { + tok-id INTEGER (1024), -- shall contain 0400 (hex) + context-id Random-Integer + } + + SPKM-MIC ::= SEQUENCE { + mic-header Mic-Header, + int-cksum BIT STRING + } + + Mic-Header ::= SEQUENCE { + tok-id INTEGER (257), -- shall contain 0101 (hex) + context-id Random-Integer, + + + +Adams Standards Track [Page 41] + +RFC 2025 SPKM October 1996 + + + int-alg [0] AlgorithmIdentifier OPTIONAL, + snd-seq [1] SeqNum OPTIONAL + } + + SeqNum ::= SEQUENCE { + num INTEGER, + dir-ind BOOLEAN + } + + SPKM-WRAP ::= SEQUENCE { + wrap-header Wrap-Header, + wrap-body Wrap-Body + } + + Wrap-Header ::= SEQUENCE { + tok-id INTEGER (513), -- shall contain 0201 (hex) + context-id Random-Integer, + int-alg [0] AlgorithmIdentifier OPTIONAL, + conf-alg [1] Conf-Alg OPTIONAL, + snd-seq [2] SeqNum OPTIONAL + } + + Wrap-Body ::= SEQUENCE { + int-cksum BIT STRING, + data BIT STRING + } + + Conf-Alg ::= CHOICE { + algId [0] AlgorithmIdentifier, + null [1] NULL + } + + + SPKM-DEL ::= SEQUENCE { + del-header Del-Header, + int-cksum BIT STRING + } + + Del-Header ::= SEQUENCE { + tok-id INTEGER (769), -- shall contain 0301 (hex) + context-id Random-Integer, + int-alg [0] AlgorithmIdentifier OPTIONAL, + snd-seq [1] SeqNum OPTIONAL + } + + +-- other types -- + + + + +Adams Standards Track [Page 42] + +RFC 2025 SPKM October 1996 + + + -- from [RFC-1508] -- + + MechType ::= OBJECT IDENTIFIER + + InitialContextToken ::= [APPLICATION 0] IMPLICIT SEQUENCE { + thisMech MechType, + innerContextToken SPKMInnerContextToken + } -- when thisMech is SPKM-1 or SPKM-2 + + SPKMInnerContextToken ::= CHOICE { + req [0] SPKM-REQ, + rep-ti [1] SPKM-REP-TI, + rep-it [2] SPKM-REP-IT, + error [3] SPKM-ERROR, + mic [4] SPKM-MIC, + wrap [5] SPKM-WRAP, + del [6] SPKM-DEL + } + + + -- from [RFC-1510] -- + + AuthorizationData ::= SEQUENCE OF SEQUENCE { + ad-type INTEGER, + ad-data OCTET STRING + } + + +-- object identifier assignments -- + + md5-DES-CBC OBJECT IDENTIFIER ::= + {iso(1) identified-organization(3) dod(6) internet(1) security(5) + integrity(3) md5-DES-CBC(1)} + + sum64-DES-CBC OBJECT IDENTIFIER ::= + {iso(1) identified-organization(3) dod(6) internet(1) security(5) + integrity(3) sum64-DES-CBC(2)} + + spkm-1 OBJECT IDENTIFIER ::= + {iso(1) identified-organization(3) dod(6) internet(1) security(5) + mechanisms(5) spkm(1) spkm-1(1)} + + spkm-2 OBJECT IDENTIFIER ::= + {iso(1) identified-organization(3) dod(6) internet(1) security(5) + mechanisms(5) spkm(1) spkm-2(2)} + + +END + + + +Adams Standards Track [Page 43] + +RFC 2025 SPKM October 1996 + + +Appendix B: Imported Types + + This appendix contains, for completeness, the relevant ASN.1 types + imported from InformationFramework (1993), AuthenticationFramework + (1993), and [PKCS3]. + + AttributeType ::= OBJECT IDENTIFIER + AttributeValue ::= ANY + AttributeValueAssertion ::= SEQUENCE {AttributeType,AttributeValue} + RelativeDistinguishedName ::= SET OF AttributeValueAssertion + -- note that the 1993 InformationFramework module uses + -- different syntax for the above constructs + RDNSequence ::= SEQUENCE OF RelativeDistinguishedName + DistinguishedName ::= RDNSequence + Name ::= CHOICE { -- only one for now + rdnSequence RDNSequence + } + + Certificate ::= SEQUENCE { + certContents CertContents, + algID AlgorithmIdentifier, + sig BIT STRING + } -- sig holds the result of applying the signing procedure + -- specified in algId to the BER-encoded octet string which + -- results from applying the hashing procedure (also specified in + -- algId) to the DER-encoded octets of CertContents + + CertContents ::= SEQUENCE { + version [0] Version DEFAULT v1, + serialNumber CertificateSerialNumber, + signature AlgorithmIdentifier, + issuer Name, + validity Validity, + subject Name, + subjectPublicKeyInfo SubjectPublicKeyInfo, + issuerUID [1] IMPLICIT UID OPTIONAL, -- used in v2 only + subjectUID [2] IMPLICIT UID OPTIONAL -- used in v2 only + } + + Version ::= INTEGER {v1(0), v2(1)} + CertificateSerialNumber ::= INTEGER + UID ::= BIT STRING + + Validity ::= SEQUENCE { + notBefore UTCTime, + notAfter UTCTime + } + + + + +Adams Standards Track [Page 44] + +RFC 2025 SPKM October 1996 + + + SubjectPublicKeyInfo ::= SEQUENCE { + algorithm AlgorithmIdentifier, + subjectPublicKey BIT STRING + } + + CertificatePair ::= SEQUENCE { + forward [0] Certificate OPTIONAL, + reverse [1] Certificate OPTIONAL + } -- at least one of the pair shall be present + + CertificateList ::= SEQUENCE { + certListContents CertListContents, + algId AlgorithmIdentifier, + sig BIT STRING + } -- sig holds the result of applying the signing procedure + -- specified in algId to the BER-encoded octet string which + -- results from applying the hashing procedure (also specified in + -- algId) to the DER-encoded octets of CertListContents + + CertListContents ::= SEQUENCE { + signature AlgorithmIdentifier, + issuer Name, + thisUpdate UTCTime, + nextUpdate UTCTime OPTIONAL, + revokedCertificates SEQUENCE OF SEQUENCE { + userCertificate CertificateSerialNumber, + revocationDate UTCTime } OPTIONAL + } + + AlgorithmIdentifier ::= SEQUENCE { + algorithm OBJECT IDENTIFIER, + parameter ANY DEFINED BY algorithm OPTIONAL + } -- note that the 1993 AuthenticationFramework module uses + -- different syntax for this construct + + + + --from [PKCS3] (the parameter to be used with dhKeyAgreement) -- + + DHParameter ::= SEQUENCE { + prime INTEGER, -- p + base INTEGER, -- g + privateValueLength INTEGER OPTIONAL + } + + + + + + + +Adams Standards Track [Page 45] + |