One document matched: draft-ietf-pkix-cmc-02.txt

Differences from draft-ietf-pkix-cmc-01.txt



PKIX Working Group                              Michael Myers (VeriSign) 
Internet Draft                                        Xiaoyi Liu (Cisco) 
November 11, 1998                                Barbara Fox (Microsoft) 
expires in six months                          Jeff Weinstein (Netscape) 
 
 
                Certificate Management Messages over CMS 
                      <draft-ietf-pkix-cmc-02.txt> 
 
Status of this Memo 
 
This document is an Internet-Draft.  Internet-Drafts are working 
documents of the Internet Engineering Task Force (IETF), its areas, and 
its working groups.  Note that other groups MAY also distribute working 
documents as Internet-Drafts. 
 
Internet-Drafts are draft documents valid for a maximum of six months 
and MAY be updated, replaced, or obsoleted by other documents at any 
time.  It is inappropriate to use Internet-Drafts as reference material 
or to cite them other than as "work in progress." 
 
To learn the current status of any Internet-Draft, please check the 
"1id-abstracts.txt" listing contained in the Internet-Drafts Shadow 
Directories on ftp.is.co.za (Africa), nic.nordu.net (Europe), 
munari.oz.au Pacific Rim), ds.internic.net (US East Coast), or 
ftp.isi.edu (US West Coast). 
 
Abstract 
 
This document defines a Certificate Management protocol using CMS (CMC).  
This protocol addresses two immediate needs within the Internet PKI 
community: 
 
1. The need for an interface to public key certification products and 
   services based on [CMS] and [PKCS10], and  
2. The need in [SMIMEV3] for a certificate enrollment protocol for DSA-
   signed certificates with Diffie-Hellman public keys. 
 
A small number of additional services are defined to supplement the core 
certificate request service. 
 
Throughout this specification the term CMS is used to refer to both 
[CMS] and [PKCS7].  For signedData the two specifications are 
equivalent.  For envelopedData CMS is a superset of the PKCS7. In 
general, the use of PKCS7 in this document is aligned to the 
Cryptographic Message Syntax [CMS] that provides a superset of the PKCS7 
syntax. The term CMC refers to this specification. 
 
The key words 'MUST', 'REQUIRED', 'SHOULD', 'RECOMMENDED', and 'MAY' in 
this document are to be interpreted as described in [RFC 2119]. 
 
1.  Protocol Requirements 
 



Myers, Liu, Fox, Weinstein                                       Page 1


Internet Draft                                           November  1998 


- The protocol is to be based as much as possible on the existing CMS, 
  PKCS#10 and CRMF specifications. 
- The protocol must support the current industry practice of a PKCS#10 
  request followed by a PKCS#7 response as a subset of the protocol. 
- The protocol needs to easily support the multi-key enrollment 
  protocols required by S/MIME and other groups. 
- The protocol must supply a way of doing all operations in a single-
  round trip.  When this is not possible the number of round trips is to 
  be minimized. 
- The protocol needs to support optional key escrow and key archival 
  for encryption keys. 
- The protocol will be designed such that all key generation can occur 
  on the client. 
- The mandatory algorithms must superset the required algorithms for 
  S/MIME. 
- The protocol will contain POP methods. Optional provisions for 
  multiple-round trip POP will be made if necessary.  
- The protocol will support deferred and pending responses to 
  certificate request for cases where external procedures are required 
  to issue a certificate. 
- The protocol needs to support arbitrary chains of local registration 
  agents as intermediaries between certificate requesters and issuers. 
 
2.  Protocol Overview 
 
An enrollment transaction in this specification is generally composed of 
a single round trip of messages.  In the simplest case an enrollment 
request is sent from the client to the server and an enrollment response 
is then returned from the server to the client.  In some more 
complicated cases, such as delayed certificate issuance and polling for 
responses, more than one round trip is required. 
 
This specification supports two different request messages and two 
different response messages.   
 
Public key certification requests are based on the PKCS10 object.  The 
two different request messages are (a) the bare PKCS10 (in the event 
that no other services are needed), and (b) the PKCS10 (or, optionally, 
a CRMF message) wrapped in a CMS encapsulation as part of a PKIData 
object.  
 
Public key certification responses are based on the CMS signedData 
object.  The response may be either (a) a degenerate CMS signedData 
object (in the event no other services are needed), or (b) a 
ResponseBody object wrapped in a CMS signedData object. 
 
No special services are provided for doing either renewal (new 
certificates with the same key) or re-keying (new certificates on new 
keys) of clients.  Instead a renewal/re-key message looks the same as 
any enrollment message, with the identity proof being supplied by 
existing certificates from the CA. 
 
A provision exists for Local Registration Agents (LRAs) to participate 
in the protocol by taking client enrollment messages, wrapping them in a 


Myers, Liu, Fox, Weinstein                                       Page 2


Internet Draft                                           November  1998 


second layer of enrollment message with additional requirements or 
statements from the LRA and then passing this new expanded request on to 
the certification authority. 
 
This specification makes no assumptions about the underlying transport 
mechanism.  The use of CMS is not meant to imply an email-based 
transport. 
 
Optional services available through this specification are transaction 
management, replay detection (through nonces), deferred certificate 
issuance, private key archival, certificate revocation requests and 
certificate/CRL fetching. 
 
2.1  Terminology 
 
There are several different terms used in this document that we define 
here for convenience and consistency of usage: 
 
End-Entity refers to the entity that owns a key pair and for whom a 
     certificate is issued. 
LRA is a Local Registration Agent.  A local registration agent acts as 
     an intermediary between an End-Entity and a Certificate Authority.  
     Multiple LRAs can exist between the End-Entity and the Certificate 
     Authority. 
CA is a Certificate Authority.  A certificate authority is the entity 
     that performs the actual issuance of a certificate. 
Client refers to an entity that creates a PKI request.  In this document 
     both LRAs and End-Entities can be clients. 
Server refers to the entities that process PKI requests and create PKI 
     responses.  CAs and LRAs can be servers in this document. 
 
2.2  Protocol Flow Charts 
 
Figure 1 shows the Simple Enrollment Request and Response messages.  The 
contents of these messages are detailed in Sections 4.1 and 4.3 below. 
 
 
     Simple PKI Request                      Simple PKI Response 
     -------------------------               -------------------------- 
       
     +----------+                            +------------------+ 
     | PKCS #10 |                            | CMS "certs-only" | 
     +----------+--------------+             |     message      | 
     |                         |             +------------------+------+ 
     | Certificate Request     |             |                         | 
     |                         |             | CMS Signed Data,        | 
     | Subject Name            |             |   no signerInfo         | 
     | Subject Public Key Info |             |                         | 
     |   (K_PUB)               |             | signedData contains one | 
     | Attributes              |             | or more certificates in | 
     |                         |             | the "certificates"      | 
     +-----------+-------------+             | portion of the          | 
                 | signed with |             | signedData.             | 
                 | matching    |             |                         | 


Myers, Liu, Fox, Weinstein                                       Page 3


Internet Draft                                           November  1998 


                 | K_PRIV      |             | encapsulatedContentInfo | 
                 +-------------+             | is empty.               | 
                                             |                         | 
                                             +--------------+----------+ 
                                                            | unsigned | 
                                                            +----------+ 
      
     Figure 1: Simple PKI Request and Response Messages 
      
     Full PKI Request                        Full PKI Response 
     -----------------------                 ------------------------ 
      
     +----------------+                      +----------------+ 
     | CMS signedData |                      | CMS signedData | 
     |     object     |                      |     object     | 
     +----------------+--------+             +----------------+--------+ 
     |                         |             |                         | 
     | PKIData object          |             | ResponseBody object     | 
     |                         |             |                         | 
     | Sequence of:            |             | Sequence of:            | 
     | <enrollment attribute>* |             | <enrollment attribute>* | 
     | <certification request>*|             | <CMS object>*           | 
     | <CMS objects>*          |             | <other message>*        | 
     | <other message>*        |             |                         | 
     |                         |             | where * == zero or more | 
     | where * == zero or more |             |                         | 
     |                         |             | All certificates issued | 
     | Cert requests are CRMF  |             | as part of the response | 
     | or PKCS#10 objects.     |             | are included in the     | 
     | Attributes are (OID,    |             | "certificates" portion  | 
     | set of ANY defined by   |             | of the signedData.      | 
     | OID) pairs.             |             |                         | 
     |                         |             +---------+---------------+ 
     +-------+-----------------+                       | signed by the | 
             | signed (keypair |                       | CA or an LRA  | 
             | used may be pre-|                       +---------------+ 
             | existing or     | 
             | identified in   | 
             | the request)    | 
             +-----------------+ 
      

            Figure 2: Full PKI Request and Response Messages 

 
Figure 2 shows the Full Enrollment Request and Response messages.  The 
contents of these messages are detailed in Sections 4.2 and 4.4 below. 
 
3.  Protocol Elements 
 
This section covers each of the different elements that may be used to 
construct enrollment request and enrollment response messages.  Section 
4 will cover how to build the enrollment request and response messages. 
 



Myers, Liu, Fox, Weinstein                                       Page 4


Internet Draft                                           November  1998 


3.1  PKIData Object 
 
The new content object PKIData has been defined for this protocol.  This 
new object is used as the body of the full PKI request message. The new 
body is identified by: 
 
    id-ct-PKIData ::= {id-pkix <TBD>} 
 
The ASN.1 structure corresponding to this new content type is: 
 
    PKIData ::= SEQUENCE { 
          controlSequence    SEQUENCE SIZE(0..MAX) OF TaggedAttribute, 
          reqSequence        SEQUENCE SIZE(0..MAX) OF TaggedRequest, 
          cmsSequence        SEQUENCE SIZE(0..MAX) OF TaggedContentInfo, 
          otherMsgSequence   SEQUENCE SIZE(0..MAX) OF OtherMsg 
    } 
     
    controlSequence consists of a sequence of control attributes.  The 
    control attributes defined in this document are found in section 5.  
    Other parties can define additional control attributes. 
    reqSequence consists of a sequence of certificate requests.  The 
    certificate requests can be either a CertificateRequest (PKCS10 
    request) or a CertReqMsg.  Details on each of these requests types 
    are found in sections Error! Reference source not found. and Error! 
    Reference source not found. respectively. 
    cmsSequence consists of a sequence of [CMS] message objects.  This 
    protocol only uses EnvelopedData, SignedData and EncryptedData.  See 
    section 3.5 for more details. 
    otherMsgSequence allows for other arbitrary items to be placed into 
    the enrollment protocol.  The {OID, any} pair of values allows for 
    arbitrary definition of material.  Data objects are placed here 
    while control objects are placed in the controlSequence field. 
     
3.2  ResponseBody Object 
 
The new content object ResponseBody has been defined for this protocol.  
This new object is used as the body of the full PKI response message.  
The new body is identified by: 
 
     id-ct-enrollResponse ::= {id-pkix <TBD> } 
      
The ASN.1 structure corresponding to this body content type is: 
 
    ResponseBody ::= SEQUENCE { 
        controlSequence   SEQUENCE SIZE(0..MAX) OF TaggedAttribute, 
        cmsSequence       SEQUENCE SIZE(0..MAX) OF TaggedContentInfo, 
        otherMsgSequence  SEQUENCE SIZE(0..MAX) OF OtherMsg 
    } 
     
    controlSequence consists of a sequence of control attributes.  The 
    control attributes defined in this document are found in section 
    3.4.  Other parties can define additional control attributes. 




Myers, Liu, Fox, Weinstein                                       Page 5


Internet Draft                                           November  1998 


    cmsSequence consists of a sequence of [CMS] message objects.  This 
    protocol only uses EnvelopedData, SignedData and EncryptedData.  See 
    section 3.5 for more details. 
    otherMsgSequence allows for other arbitrary items to be placed into 
    the enrollment protocol.  The {OID, any} pair of values allows for 
    arbitrary definition of material.  Data objects are placed here 
    while control objects are placed in the controlSequence field. 
 
 
3.3  Certification Requests (PKCS10/CRMF) 
 
Certification Requests are based on either PKCS10 or CRMF messages.  
Section Error! Reference source not found. specifies mandatory and 
optional requirements for clients and servers dealing with PKCS10 
request messages.  Section Error! Reference source not found. specifies 
mandatory and optional requirements for clients and servers dealing with 
CRMF request messages. 

3.3.1  PKCS10 Request Body 

 
Servers MUST be able to understand and process PKCS10 request bodies.  
Clients MUST produce a PKCS10 request body when using the Simple 
Enrollment Request message. Clients MAY produce a PKCS10 request body 
when using the Full Enrollment Request message. 
 
When producing a PKCS10 request body, clients MUST produce a PKCS10 
message body containing a subject name and public key.  Some 
certification products are operated using a central repository of 
information to assign subject names upon receipt of a public key for 
certification.  To accommodate this mode of operation, the subject name 
in a CertificationRequest MAY be NULL, but MUST be present.  CAs that 
receive a CertificationRequest with a NULL subject name MAY reject such 
requests.  If rejected and a response is returned, the CA MUST respond 
with the failInfo attribute of BADREQUEST. 
 
The client MAY incorporate one or more standard X.509 v3 extensions in 
any PKCS10 request as an ExtensionReq attribute. An ExtensionReq 
attribute is defined as 
 
     ExtensionReq ::= SEQUENCE OF Extension 
 
where Extension is imported from [PKIXCERT] and ExtensionReq is 
identified by {pkcs-9 14}. 
 
Servers are not required to be able to process every v3 X.509 extension 
transmitted using this protocol, nor are they required to be able to 
process other, private extensions. Servers are not required to put all 
client-requested extensions into a certificate.  Servers are permitted 
to modify client-requested extensions. Servers MUST NOT alter an 
extension so as to invalidate the original intent of a client-requested 
extension. (For example change key usage from key exchange to signing.) 
If a certification request is denied due to the inability to handle a 




Myers, Liu, Fox, Weinstein                                       Page 6


Internet Draft                                           November  1998 


requested extension and a response is returned, the server MUST respond 
with the failInfo attribute of UNSUPPORTEDEXT. 

3.3.2  CRMF Request Body 

 
Servers MUST be able to understand and process CRMF request body. 
Clients MAY produce a CRMF message body when using the Full Enrollment 
Request message. 
 
This draft imposes the following additional changes on the construction 
and processing of CRMF messages: 
 
- When CRMF message bodies are used in the Full Enrollment Request 
  message, each CRMF message MUST include both the subject and publicKey 
  fields in the CertTemplate.  As in the case of PKCS10 requests the 
  subject may be encoded as NULL, but MUST be present. 
- The regInfo field MUST NOT be used on a CRMF message.  Equivalent 
  functionality is provided in the regInfo control attribute (section 
  5.14).  
- The indirect method of proving POP is not supported in this protocol.  
  One of the other methods (including the direct method described in 
  this document) MUST used instead if POP is desired.  The value of 
  encrCert in SubsequentMessage MUST NOT be used. 
- Since the subject and publicKeyValues are always present, the 
  POPOSigningKeyInput MUST NOT be used when computing the value for 
  POPSigningKey. 
 
A server is not required to use all of the values suggested by the 
client in the certificate template.  Servers are not required to be able 
to process every V3 X.590 extension transmitted using this protocol, nor 
are they required to be able to process other, private extensions.  
Servers are permitted to modify client-requested extensions.  Servers 
MUST NOT alter an extension so as to invalidate the original intent of a 
client-requested extension. (For example change key usage from key 
exchange to signing.)  If a certificate request is denied due to the 
inability to handle a requested extension, the server MUST respond with 
a failInfo attribute of UNSUPPORTEDEXT. 
 

3.3.3  Production of Diffie-Hellman Public Key Certification Requests 

 
Part of a certification request is a signature over the request; Diffie-
Hellman is a key agreement algorithm and cannot be used to directly 
produce the required signature object.  [DH-SIG] provides a way to 
product necessary signature. 
 
In brief the "self-signature" method requires either the CA publish a D-
H certificate or the client create a temporary D-H key pair.  The client 
then computes an HMAC over the certification content using the key 
agreement as the shared secret.  The details of how this works are found 
in [DH-SIG]. 
 




Myers, Liu, Fox, Weinstein                                       Page 7


Internet Draft                                           November  1998 


Clients and servers producing self-signed D-H certification requests 
MUST support ephemeral D-H signature method. 
  
3.4  Control Attributes 
 
The overall control flow of how a message is processed in this document 
is based on the control attributes.  Each control attribute consists of 
an object identifier and a value based on the object identifier.  
Servers are permitted to fail the processing of an entire PKIData 
message if some object identifiers are not fully understood.  The set of 
control attributes that are defined by this draft are found in section 
5. 
 
3.5  Content Info objects 
 
This specification uses two different wrapping objects from the CMS 
draft.  SignedData is used for authentication purposes as well as a 
general transport wrapper. EnvelopedData is used for encryption 
purposes. 

3.5.1  Signed Data 

 
The signedData object is used in two different locations when 
constructing enrollment messages.  The signedData object is used as a 
wrapper to an EnrollmentBody as part of the enrollment request message.  
The signedData object is also used as the outer part of an enrollment 
response message.   
 
For the enrollment response the signedData wrapper allows the server to 
sign the returning data, if any exists, and to carry the certificates 
and CRLs for the enrollment request.  If no data is being returned 
beyond the certificates, no signerInfo objects are placed on the 
signedData object. 

3.5.2  Enveloped Data 

 
EnvelopedData is the primary method of providing for the protection of 
sensitive in this protocol.  The protocol currently uses EnvelopedData 
in two different areas: The global shrouding of an entire request (see 
section 4.5) and the shrouding of private key material.   
 
The envelopedData object is also used to wrap private key material when 
sent as part of either the enrollment request or enrollment response 
message. Private key archival MAY be supported through the use of the 
CMS envelopedData.  If used, clients generate an encrypted blob and 
include it in the request message.  Senders return this value on later 
enrollment messages if requested to do so.   
 
Servers MUST NOT implement envelopedData according to [PKCS7].  There is 
an ambiguity (about encrypting content types other than id-data) in the 
language that has lead to non-interoperability. 
 




Myers, Liu, Fox, Weinstein                                       Page 8


Internet Draft                                           November  1998 


4.  PKI Messages 
 
This section discusses the details of putting together the different 
enrollment request and response messages. 
 
4.1  Simple Enrollment Request 
 
The simplest form of an enrollment request is a plain PKCS10 message.  
If this form of enrollment request is used, the PKCS10 MUST be self-
signed.  For Diffie-Hellman "self-signed" means that the ephemeral HMAC 
signature algorithm in [DH-SIG] MUST be used. 
 
Servers MUST support the simple enrollment request message. If the 
simple enrollment request message is supported, servers MUST return the 
simple enrollment response message (see Section 3.3) if the enrollment 
request is granted.  If the enrollment request fails, the full 
enrollment response MAY be returned or no response MAY be returned. 
 
Private key archival is not supported by the simple enrollment request 
message. 
 
4.2  Full PKI Request 
 
The Full Enrollment Request provides the most functionality and 
flexibility.  Clients SHOULD use the Full Enrollment Request message 
when doing client enrollment.  Servers MUST support the Full Enrollment 
Request message. 
 
The full enrollment request message consists of an enrollmentBody object 
wrapped in a signedData CMS object. The objects in the enrollmentBody 
are ordered as follows: 
 
1. All Control Attributes, 
2. All certification requests, 
3. All CMS objects, 
4. All other messages. 
 
All bodyPartIDs and certReqIds within a PKIData MUST be unique. 
 
The signedData object wrapping the enrollmentBody may be signed either 
by the private key material of the signature certification request, or 
by a pre-existing signature key and certificate.   If the private key of 
the a signature certification request is being used, the 
issuerAndSerialNumber field of signerInfo MUST be encoded with the 
bodyPartID of the signature certificate request for the serial number 
and a NULL for the issuer name. (This is because no existing issuer and 
serial number are yet known and a standard method of representing this 
is needed.)  If the request key is used for signing, there MUST be only 
one signerInfo object in the signedData object. 
 
When creating a renewal message the following should be taken into 
consideration: 
 



Myers, Liu, Fox, Weinstein                                       Page 9


Internet Draft                                           November  1998 


1. The identification and identificationProof control statements are not 
   required.  The same information is provided by the use of an existing 
   certificate from the CA when signing the enrollment message. 
2. CAs and LRAs may impose additional restrictions on the signing 
   certificate used.  They may require that the most recently issued 
   signing certificate for an entity be used. 
3. A renewal message may occur either by creating a new set of keys, or 
   by re-using an existing set of keys.  Some CAs may prevent re-use of 
   keys by policy.  In this case the CA MUST return NOKEYREUSE as the 
   failure code. 
 
 
4.3  Simple Enrollment Response 
 
Servers SHOULD use the simple enrollment response message whenever 
possible.  Clients MUST understand the simple enrollment response 
message.  The simple enrollment response message consists of a 
signedData object with no signerInfo objects on it.  The certificates 
requested are returned in the certificate bag of the signedData object. 
 
Clients MUST NOT assume the certificates are in any order. Servers 
SHOULD include all certificates to form complete chains to the root. The 
server MAY additionally return CRLs in the CRL bag. Servers MAY include 
the root certificates. Clients MUST NOT implicitly trust a self-signed 
certificate merely due to its presence in the certificate bag. In the 
event clients receive a new root certificate from the server, clients 
SHOULD provide a mechanism to enable the user to explicitly trust the 
received root certificate. 
 
 
4.4  Full PKI Response 
 
Servers MUST return full PKI response messages if a) a full PKI request 
message failed or b) additional services other than returning 
certificates are required.  Servers MAY return full PKI responses with 
failure information for simple PKI requests. Following section 4.3 
above, servers returning only certificates and a success status to the 
client SHOULD use the simple PKI response message. 
 
Clients MUST understand the full PKI response message. 
 
The full enrollment response message consists of a signedData object 
wrapped around a responseBody object.  In a responseBody object all 
Control Attributes MUST precede all cms objects.  The certificates 
granted in an enrollment response are returned in the certificates field 
of the immediately encapsulating signedData object. 
 
Clients MUST NOT assume the certificates are in any order. Servers 
SHOULD include all certificates to form complete chains to the root. The 
server MAY additionally return CRLs in the CRL bag. Servers MAY include 
the root certificates. Clients MUST NOT implicitly trust a self-signed 
certificate merely due to its presence in the certificate bag. In the 
event clients receive a new root certificate from the server, clients 



Myers, Liu, Fox, Weinstein                                      Page 10


Internet Draft                                           November  1998 


SHOULD provide a mechanism to enable the user to explicitly trust the 
received root certificate. 
 
 
4.5  Application of Encryption to a PKI Message 
 
There are occasions where a PKI request or response message must be 
encrypted in order to prevent any information about the enrollment.  
This section describes the means used to encrypt a PKI message.  This 
section is not applicable to a simple enrollment message. 
 
Shrouding is obtained by wrapping the PKI message (a signedData object) 
in a CMS EnvelopedData object.  The nested content type in the 
EnvelopedData is id-signedData.  Note that this is different from S/MIME 
where there is a MIME layer placed between the encrypted and signed data 
objects.  It is recommended that if an enveloped data layer is applied 
to a PKI message, a second signing layer be placed outside of the 
enveloped data layer.  The following figure shows how this nesting would 
be done: 
 
     Normal              Option 1                  Option 2 
     ------              --------                  -------- 
     SignedData            EnvelopedData             SignedData 
       PKIData               SignedData                EnvelopedData 
                               PKIData                   SignedData 
                                                           PKIData 
 
Options 1 and 2 provide the benefit of preventing leakage of sensitive 
data by encrypting the information.  LRAs may remove the enveloped data 
wrapping, and replace or forward without further processing. 
 
PKI Messages MAY be encrypted or transmitted in the clear.  Servers MUST 
provided support for all three versions. 
 
Alternatively, an authenticated, secure channel could exist between the 
parties requiring encryption.  Clients and servers MAYuse such channels 
instead of the shrouding technique described above to provide secure, 
private communication of PKI request and response messages. 
 
5.  Control Attributes 
 
Control attributes are carried as part of both PKI requests and 
responses.  
 
Each control attribute is encoded as a unique Object Identifier followed 
by that data for the control attribute.  The encoding of the data is 
based on the control attribute object identifier. Processing systems 
would first detect the OID and process the corresponding attribute value 
prior to processing the message body. 
 
The following table lists the names, OID and syntactic structure for 
each of the control attributes documented in this draft. 
 
Control Attribute      OID             Syntax 


Myers, Liu, Fox, Weinstein                                      Page 11


Internet Draft                                           November  1998 


-----------------    ----------      -------------- 
cMCStatusInfo        pkix-cmc 1      CMCStatusInfo 
identification       pkix-cmc 2      UTF8String 
identityProof        pkix-cmc 3      OCTET STRING 
dataReturn           pkix-cmc 4      OCTET STRING 
transactionId        pkix-cmc 5      INTEGER 
senderNonce          pkix-cmc 6      OCTET STRING 
recipientNonce       pkix-cmc 7      OCTET STRING 
addExtensions        pkix-cmc 8      AddExtensions 
encryptedPOP         pkix-cmc 9      EncryptedPOP 
decryptedPOP         pkix-cmc 10     DecryptedPOP 
lraPOPWitness        pkix-cmc 11     LraPOPWitness 
keyArchival          pkix-cmc 12     KeyArchival 
keyRecoveryReq       pkix-cmc 13     KeyRecoveryReq 
keyRecoveryRsp       pkix-cmc 14     KeyRecoveryRsp 
getCert              pkix-cmc 15     GetCert 
getCRL               pkix-cmc 16     GetCRL 
revokeRequest        pkix-cmc 17     RevokeRequest 
regInfo              pkix-cmc 18     OCTET STRING 
responseInfo         pkix-cmc 19     OCTET STRING 
privateKey           pkix-cmc 20     PrivateKeyInfo 
QueryPending         pkix-cmc 21     INTEGER 
 
NOTE: It is expected that the number assignments will change in a later 
draft to group items together according to usage and protocols. 
 
5.1  CMC Status Info Control Attribute 
 
The CMC status info control is used in full PKI Response messages to 
return information on a client request.  This statement uses the 
following ASN.1 definition: 
 
     CMCStatusInfo ::= SEQUENCE { 
          cMCStatus           CMCStatus, 
          bodyList            SEQUENCE SIZE (1..MAX) OF INTEGER, 
          statusString        UTF8String OPTIONAL, 
          otherInfo           CHOICE { 
            failInfo            CMCFailInfo, 
            pendInfo            PendInfo } OPTIONAL 
     } 
      
     PendInfo ::= SEQUENCE { 
          pendToken           INTEGER, 
          pendTime            GENERALIZEDTIME 
     } 
 
     cMCStatus is described in section 5.2 
     bodyList contains the list of body parts to which this status 
     information applies. 
     statusString contains a string with additional description 
     information.  This string is human readable. 
     failInfo is described in section 5.3. It provides a detailed error 
     on what the failure was.  This choice is present only if cMCStatus 
     is failed. 


Myers, Liu, Fox, Weinstein                                      Page 12


Internet Draft                                           November  1998 


     pendToken is the token to be used in the queryPending control 
     attribute. 
     pendTime contains the suggested time the server wants to be queried 
     about the status of the request. 
 
If the cMCStatus field is success, the CMC Status Info Control MAY be 
omitted unless the cMCStatus is the only item in the response message.  
If no status exists for a certificate request or other item requiring 
processing, then the value of success is to be assumed. 
 
5.2   CMCStatus values 
 
CMCStatus is a field in the CMCStatusInfo structure.  This field 
contains a code representing the success or failure of a specific 
operation.  CMCStatus has the ASN.1 structure of: 
 
     CMCStatus ::= INTEGER {  
           success                (0),  
           -- you got exactly what you asked for  
           failed                 (2),  
           -- you don't get it, more information elsewhere in the 
     message 
           pending                (3),  
           -- the request body part has not yet been processed,  
           -- requester is responsible to poll back on this 
           -- pending may only be return for certificate request 
     operations. 
           noSupport              (4), 
           -- the requested operation is not supported 
     } 
 
5.3   CMCFailInfo 
 
CMCFailInfo conveys information relevant to the interpretation of a 
failure condition. The CMCFailInfo has the following ASN.1 structure: 
 
     CMCFailInfo ::= INTEGER {  
          badAlg            (0)   
          -- Unrecognized or unsupported algorithm 
          badMessageCheck   (1)   
          -- integrity check failed 
          badRequest        (2)   
          -- transaction not permitted or supported 
          badTime           (3)   
          -- Message time field was not sufficiently close to the system

     time 
          badCertId         (4) 
          -- No certificate could be identified matching the provided 
     criteria 
          unsuportedExt     (5)   
          -- A requested X.509 extension is not supported by the 
     recipient CA. 
          mustArchiveKeys   (6)   
          -
           -- Private key material must be supplied 


Myers, Liu, Fox, Weinstein                                      Page 13


Internet Draft                                           November  1998 


          badIdentity       (7)   
          -- Identification Attribute failed to verify 
          popRequired       (8)   
          -- Server requires a POP proof before issuing certificate 
          popFailed         (9) 
          -- Server failed to get an acceptable POP for the request 
          noKeyReuse        (10) 
          -- Server policy does not allow key re-use 
          internalCAError   (11) 
          tryLater          (12) 
     } 
 
Additional failure reasons MAY be defined for closed environments with a 
need. 
 
5.4  Identification and Identity-Proof Control Attributes 
 
Some CAs and LRAs require that a proof of identity be included in a 
certification request.  Many different ways of doing this exist with 
different degrees of security and reliability.  Most people are familiar 
with the request of a bank to provide your mother's maiden name as a 
form of identity proof. 
 
CMC provides one method of proving the client's identity based on a 
shared secret between the certificate requestor and the verifying 
authority.  If clients support full request messages, clients MUST 
implement this method of identity proof.  Servers SHOULD provide this 
method or have a bilateral method of similar strength available. 
 
The CMC method starts with an out-of-band transfer of a token (the 
shared secret).  The distribution of this token is beyond the scope of 
this document.  The client then uses this token for an identity proof as 
follows: 
 
1. The reqSequence fields of the PKIData object is the value to be 
   validated. 
2. A SHA1 hash of the token is computed. 
3. An HMAC-SHA1 value is then computed over the stream produced in Step 
   1, as described in [HMAC], using the hash of the token from Step 2 as 
   the shared secret value. 
4. The 160-bit HMAC-SHA1 result from Step 3 is then encoded as the value 
   of the identity-proof attribute. 
 
When the server verifies the identity-proof attribute, it computes the 
HMAC-SHA1 value in the same way and compares it to the identity-proof 
attribute contained in the enrollment request. 
 
If a server fails the verification of an identity-proof attribute and 
the server returns a response message, the failInfo attribute MUST be 
present in the response and MUST have a value of BADIDENTITY. 
 
Optionally, servers may require the inclusion of the unprotected 
identification attribution with an identity-proof attribute.  The 
identification attribute is intended to contain either a text string or 


Myers, Liu, Fox, Weinstein                                      Page 14


Internet Draft                                           November  1998 


a numeric quantity, such as a random number, which assists the server in 
locating the shared secret needed to validate the contents of the 
identity-proof attribute.  Numeric values MUST be converted to text 
string representations prior to encoding as UTF8-STRINGs in this 
attribute.  If the identity field is included in the message, the 
derivation of the shared secret in step 2 is altered so that the hash of 
the concatenation of the token and the identity value are hashed rather 
than just the token. 
 
To facilitate one pass processing of a PKIData object, the identity 
attribute SHOULD proceed the identity-proof attribute. 

5.5  Data Return Control Attribute 
 
The data return control attribute allows clients to send arbitrary data 
(usually some type of internal state information) to the server and to 
have the data returned as part of the enrollment response message.  Data 
placed in a data return statement is considered to be opaque to the 
server.  The same control is used for both requests and responses.  If 
the data return statement appears in an enrollment message, the server 
MUST return it as part of the enrollment response message. 
 
In the event that the information in the data return statement needs to 
be confidential, it is expected that the client would apply some type of 
encryption to the contained data. 
 
An example of using this statement is for a client to place an 
identifier marking the exact source of the private key material.  This 
might be the identifier of a hardware device containing the private key. 
 
5.6  Add Extensions Control Attribute 
 
The Add Extensions control attribute is used by LRAs in order to specify 
additional extensions that are to be placed on certificates.  This 
attribute uses the following ASN.1 definition: 
 
    AddExtensions ::= SEQUENCE { 
        pkiDataReference             INTEGER 
        certReferences               SEQUENCE OF INTEGER, 
        extensions                   SEQUENCE OF Extension 
    } 
 
The certReferences field is a list of references to one or more of the 
payloads contained within a PKIData.  Each element of the certReferences 
sequence MUST be equal to either the bodyPartID of a 
TaggedCertificationRequest or the certReqId of the CertRequest within a 
CertReqMsg.   By definition, the listed extensions are to be applied to 
every element referenced in the certReferences sequence. 
Servers are not required to be able to process every v3 X.509 extension 
transmitted using this protocol, nor are they required to be able to 
process other, private extensions.  Servers are not required to put all 
LRA-requested extensions into a certificate.  Servers are permitted to 
modify LRA-requested extensions.  Servers MUST NOT alter an extension so 
as to reverse the meaning of a client-requested extension. If a 


Myers, Liu, Fox, Weinstein                                      Page 15


Internet Draft                                           November  1998 


certification request is denied due to the inability to handle a 
requested extension and a response is returned, the server MUST return a 
failInfo attribute with the value of UNSUPPORTEDEXT. 
 
If multiple Add Extensions statements exist in an enrollment message, 
the exact behavior is left up to the certificate issuer policy.  However 
it is recommended that the following policy be used on an extension by 
extension basis: 
 
1. If the conflict is within a single EnrollmentBody object, the 
   certificate request would be rejected with and error of BADREQUEST. 
2. If the conflict is between different EnrollmentBody objects, the 
   outermost version of the extension would be used. 
 
5.7  Transaction Management Control Attributes 
 
Transaction management attributes are an optional portion of CMC.  A 
server does not need to implement this section to be compliant with CMC. 
  
Transactions MAY be identified and tracked using a transaction 
identifier.  If used, clients generate transaction identifiers and 
retain their value until the server responds with a message that 
completes the transaction. Servers correspondingly include received 
transaction identifiers in the response. 
 
The transactionId attribute identifies a given transaction.  It is used 
between client and server to manage the state of an operation. It MAY be 
included in service request messages.  If included, responses MUST 
included the transmitted value.  A server MUST use only transactionIds 
in the outermost PKIdata object. TransactionIds on inner PKIdata objects 
are for intermediate entities. 
 
Replay protection MAY be supported through the use of sender and 
recipient nonces.  If used, clients generate a nonce value and include 
it in the request as a sender nonce.  Servers return this value as 
recipient nonce along their own value for sender nonce. A server MUST 
use only nonces in the outermost PKIdata object. Nonces on inner PKIdata 
objects are for intermediate entities. 
 
The senderNonce and recipientNonce attribute can be used to provide 
application-level replay prevention. They MAY be included in service 
request messages.  Originating messages include only a value for 
senderNonce. If included, responses MUST include the transmitted value 
of the previously received senderNonce as recipientNonce and include a 
value for senderNonce. 
 
If nonces are used, in the first message of a transaction, no 
recipientNonce is transmitted; a senderNonce is instantiated by the 
message originator and retained for later reference.  The recipient of a 
sender nonce reflects this value back to the originator as a 
recipientNonce and includes it's own senderNonce.  Upon receipt by the 
transaction originator of this message, the originator compares the 
value of recipientNonce to its retained value.  If the values match, the 
message can be accepted for further security processing.  The received 


Myers, Liu, Fox, Weinstein                                      Page 16


Internet Draft                                           November  1998 


value for senderNonce is also retained for inclusion in the next message 
associated with the same transaction. 
 
If a transaction originator includes a value for the senderNonce 
attribute, responses MUST include this value as a value for recipient-
Nonce AND include a value for the SenderNonce attribute. 
 
If a transaction originator includes a value for the transaction-id 
attribute in a service request, responses MUST include this value as a 
value for transaction-id attribute. 
 
5.8  Proof-of-possession (POP) for encryption-only keys 
 
Everything described in this section is optional to implement. Servers 
MAY require this POP be used only if another POP method is unavailable. 
Servers MAY reject all requests contained within a PKIData if any 
required POP is missing for any element within the PKIData. 
 
Many servers require proof that an entity requesting a certificate on a 
public key actually possesses the corresponding private component of the 
key pair.  For keys that may be used as signature keys, signing the 
certification request with the private key may serve as a POP on that 
key pair.  With keys that can only be used for encryption operations, 
POP MUST be performed by forcing the client to decrypt a value.  See 
Section 5 of [CRMF] for a detailed discussion of POP. 
 
By necessity, POP for encryption-only keys cannot be done in one round-
trip, since there are four distinct phases: 
1. Client tells the server about the public component of a new 
   encryption key pair. 
2. Server sends the client a POP challenge, encrypted with the presented 
   public encryption key, which the client must decrypt. 
3. Client decrypts the POP challenge and sends it back to the server. 
4. Server validates the decrypted POP challenge and continues processing 
   the certificate request. 
 
CMC defines two different attributes.  The first deals with the 
encrypted challenge sent from the server to the user in step 2.  The 
second deals with the decrypted challenge sent from the client to the 
server in step 3. 
 
The encryptedPOP attribute is used to send the encrypted challenge from 
the server to the client.  As such, it is encoded as a tagged attribute 
within the controlSequence of a ResponseBody.  (Note that we assume that 
the message sent in Step 1 above is an enrollment request and that the 
response in step 2 is a Full Enrollment Response including a failureInfo 
specifying that a POP is explicitly required, and providing the POP 
challenge in the encryptedPOP attribute.)   
 
     EncryptedPOP ::= SEQUENCE { 
          bodyPartID     INTEGER, 
          cms            contentInfo, 
          thePOPAlgID    AlgorithmIdentifier, 
          witnessAlgID   AlgorithmIdentifier, 


Myers, Liu, Fox, Weinstein                                      Page 17


Internet Draft                                           November  1998 


          witness        OCTET STRING 
     } 
      
     DecryptedPOP ::= SEQUENCE { 
          bodyPartID     INTEGER, 
          thePOPAlgID    AlgorithmIdentifier, 
          thePOP         OCTET STRING 
     } 
 
 
The encrypted POP algorithm works as follows: 
 
1. The server generates a random value y and associates it with the 
   request. 
2. The server returns the encrypted pop with the following fields set: 
   a. bodyPartID refers to the certificate request in the original 
      request message, 
   b. cms is an EnvelopedData object, the content type being id-data and 
      the content begin the value y.  If the certificate request 
      contains a subject key identifier (SKI) extension, then the 
      recipient identifier SHOULD be the SKI.  If the 
      issuerAndSerialNumber form is used, the IsserName MUST be encoded 
      as NULL and the SerialNumber as the bodyPartId of the certificate 
      request, 
   c. thePOPAlgID contains the algorithm to be used in computing the 
      return POP value, 
   d. witnessAlgID contains the hash algorithm used on y to create the 
      field witness, 
   e. witness contains the hashed value of y. 
3. The client decrypts the cms field to obtain the value y.  The client 
   computes H(y) using the witnessAlgID and compares to the value of 
   witness.  If the values do not compare or the decryption is not 
   successful, the client MUST abort the enrollment process. 
4. The client creates the decryptedPOP as part of a new PKIData message.  
   The fields in the decryptedPOP are: 
   a. bodyPartID contains the certificate request in the new enrollment 
      message, 
   b. thePOPAlgID is copied from the encryptedPOP, 
   c. thePOP contains the possession proof.  This value is computed by 
      thePOPAlgID using the value y and request referenced in (4a). 
5. The server then re-computes the value of thePOP from its cached value 
   of y and the request and compares to the value of thePOP.  If the 
   values do not match, the server MUST NOT issue the certificate.  The 
   server MAY re-issue a new challenge or MAY fail the request 
   altogether. 
 
When defining the algorithms for thePOPAlgID and witnessAlgID care must 
be taken to ensure that the result of witnessAlgID is not a useful value 
to shortcut the computation with thePOPAlgID.  Clients MUST implement 
SHA-1 for witnessAlgID.  Clients MUST implement HMAC-SHA1 for 
thePOPAlgID.  The value of y is used as the secret value in the HMAC 
algorithm.  If y is greater than 64 bytes, only the first 64 bytes of y 
are used as the secret. 
 


Myers, Liu, Fox, Weinstein                                      Page 18


Internet Draft                                           November  1998 


One potential problem with the algorithm above is the amount of state 
that a CA needs to keep in order to verify the returned POP value.  This 
describes one of many possible ways of addressing the problem by 
reducing the amount of state kept on the CA to a single (or small set) 
of values.  
 
1. Server generates random seed x, constant across all requests. (The 
   value of x would normally be altered on a regular basis and kept for 
   a short time afterwards.) 
2. For request on public encryption key PK, server computes y = F(x,PK).  
   F can be, for example, HMAC-SHA1(x,PK).  All that's important for 
   statelessness is that y be consistently computable with only known 
   state constant x and function F, other inputs coming from the cert 
   request structure.  y should not be predictable based on knowledge of 
   PK, thus the use of a OWF like HMAC-SHA1. 
 
5.9  LRA POP Witnesses Control Attribute 
 
If an out-of-band POP is required for a certificate enrollment, an LRA 
can be the entity that does the out-of-band POP rather than the CA.  In 
this case the LRA needs a way to inform the CA it has done the POP.  
This control attribute has been created to address this issue.   
 
The ASN.1 structure for the LRA POP witness is as follows: 
 
     LraPopWitness ::= SEQUENCE { 
         pkiDataBodyid   INTEGER, 
         bodyIds         SEQUENCE of INTEGER 
     } 
 
The attribute contains a list of certificate requests for which the LRA 
has performed an out-of-band authentication.  The method of 
authentication could be archival of private key material, challenge-
response or other means. 
 
If a certificate server does not allow for an LRA to do the POP 
verification, it returns an error of POPFAILURE.  The CA MUST NOT start 
a challenge-response to re-verify the POP itself. 
 
5.10 Key Archival and Recovery 
 
Everything described in this section is optional to implement.  Servers 
MAY require key archival of encryption keys as a condition of issuing a 
certificate for that encryption key pair. Servers MAY reject all 
requests contained within a PKIData if any required key archival message 
is missing for any element within the PKIData. 
 
There are four objects involved in key archival and recovery scenarios: 
 
1. The Key Archival control attribute, 
2. The Key Recovery Request control attribute, 
3. The Key Recovery Response control attribute, 
4. A ContentInfo containing private key material. 
 


Myers, Liu, Fox, Weinstein                                      Page 19


Internet Draft                                           November  1998 


It is assumed that a key recovery operation will only return previously-
archive material.  (That is, if an archival and recovery operation 
happen simultaneously, the newly archived key material is not returned 
as part of the recovery response.) 
 
The Key Recover Response control can also be used to implment off-client 
generation of encryption keys. A control statement containing the 
required fields for key generation is generated on the client as part of 
the enrollment request message.  This is then sent up to the server and 
the server responds with a Key Recovery Response containing the newly 
generated key.  The details of the request control statement not covered 
in this document and would be done on a bilateral basis. 

5.10.1  Key Archival Control Attribute 

 
The key archival control attribute has the following ASN.1 syntax: 
 
     KeyArchival ::= SEQUENCE { 
          reqBodyPartID       INTEGER, 
          cmsBodyPartID       INTEGER, 
          selectionCriteria   OCTET STRING OPTIONAL 
     } 
 
The reqBodyPartID is a reference to the payload within the enclosing 
PKIData that contains the certification request for the public key 
component of the encryption key pair.  If multiple certification 
requests for the same public key are included in the PKIData, 
reqBodyPartID may point to any one of them. 
 
The cmsBodyPartID is a reference to the payload within the enclosing 
PKIData that contains the private key to be archived.  The private key 
MUST be the private component corresponding to the public key referenced 
by reqBodyPartID. 
 
The selectionCriteria is optional information to be associated with the 
archived key material to facilitate key recovery of subsections of the 
archive database.  

5.10.2  Key Recovery Request Control Attribute 

 
The key recovery request control attribute has the following ASN.1 
syntax: 
 
     KeyRecoveryReq ::= SEQUENCE { 
          shroudIdentification     ShroudIdentification, 
          bulkEncryptionAlgID      AlgorithmIdentifier, 
          selectionCriterial       OCTET STRING OPTIONAL 
     } 
 
     ShroudIdentification ::= CHOICE { 
          subjectPublicKeyInfo     [0] SubjectPublicKeyInfo, 
          encryptionToken          [1] AlgorithmIdentifier 
     } 



Myers, Liu, Fox, Weinstein                                      Page 20


Internet Draft                                           November  1998 


 
The shroudIdentification structure defines the encryption method and key 
material that MUST be used in the recovery reply to encrypt the 
recovered private key material.  Two methods of identification are 
currently defined.  In the first, the public key component of an 
encryption key pair is explicitly included in the request.  The second 
method derives a key from a known secret shared between client and 
server, such as an out-of-band token.  This method is defined as an 
AlgorithmIdentifier as it must identify (a) the source of the key 
material, (b) any public/salt information, and (c) the method of 
deriving an encryption key using the request data, source key material 
and salt. Clients and servers MUST support the subject public key 
method.  Clients and servers support of other methods is based on a 
bilateral agreement. 
 
The bulkEncryptionAlgID identifies the bulk encryption algorithm that 
MUST be used by the server to encrypt the key material. 
 
The selectionCriteria is optional information to be associated with the 
archived key material to facilitate key recovery of subsections of the 
archive database. If selectionCriteria is absent, all archived keys 
associated with the enrolling identity MUST be returned. 
 
Notice that the recovery request does not include an entity identifier.  
Determination of the identity comes from other locations: The name in a 
certificate request, the name in an identity proof, the name in the 
shrouding certificate or the name in the signing certificate on the 
containing SignedInfo structure.  Servers need to establish a policy to 
be used by that server for identifying the entity doing the request 
operation. 
 

5.10.3  Key Recovery Response Control Attribute 

 
The key recovery response control attribute has the following ASN.1 
syntax: 
 
     KeyRecoveryRsp ::= SEQUENCE { 
          bodyPartID               INTEGER, 
          selectionCriteria        OCTET STRING OPTIONAL 
     } 
 
The bodyPartID identifies a TaggedContentInfo contained within the 
enclosing PKIData.  The ContentInfo contains the requested private key 
material. 
 
The selectionCriteria is the optional information that was used to 
retrieve a subset of the keys archived in the archive database. 
 

5.10.4  Private Key Info Attribute 

 




Myers, Liu, Fox, Weinstein                                      Page 21


Internet Draft                                           November  1998 


The private key info attribute is imported from [PKCS8].  The encrypted 
private key info object is not imported as the only difference between 
it and an EncryptedData object is the inclusion of a version number in 
the ASN.1 structure. 
 
Private key information is tagged by the private key info attribute.  
This attribute has the ASN.1 structure: 
 
     PrivateKeyInfo ::= SEQUENCE { 
         version                   INTEGER, 
         privateKeyAlgorithm       AlgorithmIdentifier, 
         privateKey                OCTET STRING, 
         attributes                [0] IMPLICIT Attributes OPTIONAL 
     } 
      
     Attributes ::= SET OF Attribute 
 
     version MUST be the value 0 
     privateKeyAlgorithm contains the identifier for the private key 
     object 
     privateKey is an octet string whose contents is the private key and 
     whose format is defined by the value of privateKeyAlgorithm. 
     attributes is a set of attributes.  These are extended information 
     that is part of the private key information. 
 
We are defining the structures here to be used for two algorithms. 

5.10.4.1  D-H Private Keys 

 
When creating a PrivateKeyInfo for a D-H key, the following rules apply: 
1. The privateKeyAlgorithm MUST be set to id-dh-private-number. The 
   parameter for id-dh-private-number is DomainParameters (imported from 
   [PKIXCERT]).  
2. The ASN structure for privateKey MUST be 
      
     DH-PrivateKey ::= INTEGER 
      
3. attributes MUST be omitted. 

5.10.4.2  RSA Private Keys 

 
When creating a PrivateKeyInfo for an RSA key, the following rules 
apply: 
1. The privateKeyAlgorithm MUST be set to rsaEncryption. 
2. The ASN structure for privateKey MUST be RSAPrivateKey (defined in 
   [PKCS1]) 
3. Attributes MUST be omitted. 

5.10.5  ContentInfo Objects for Private Key Material 

 
ContentInfo object that contain private key material MUST be one of 
EnvelopedData, EncryptedData or Data.  Private key material placed in a 




Myers, Liu, Fox, Weinstein                                      Page 22


Internet Draft                                           November  1998 


Data ContentInfo MUST be encrypted through some other mechanism; it is 
beyond the scope of this document to specify that mechanism.   
 
The inner content of the EnvelopedData or EncryptedData is a 
ResponseBody.  The private keys are then encoded as private key info 
control attributes. 

5.10.6 Control Flow 

 
Control flow for Key Archival is assumed to proceed as follows: 
1. Client retrieves an encryption certificate for the archiving server, 
   so that key material to be archived may be encrypted to it. 
2. Client generates an encryption key pair. 
3. Client submits an enrollment request for the key pair.  As part of 
   the PKIData, the client includes: 
   a. A certificate request (PKCS10 or CRMF) for the key pair, which 
      include the public key component and a message identifier (either 
      bodyPartID or certReqId), 
   b. A Key Archival control attribute, which includes two message 
      identifier references: 
      i.   The identifier of the certification request in (3a), and  
      ii.  The identifier of the ContentInfo in (3c). 
   c. A ContentInfo containing inside it the private key material 
      corresponding to the public key contained in the request in (3a) 
      and encrypted using the public key from the certificate obtained 
      in (1). 
4. Server receives the request, archives the key material, and issues 
   certificates as appropriate.  Server responds with an enrollment 
   response containing the issued certificates. 
It is assumed that whatever mechanisms are used to identify the entity 
requesting certification also serve to identify the archiving party. 
 
Control flow for Key Recovery is assumed to proceed as follows: 
1. Client sends a Full Enrollment Request message containing the Key 
   Recovery Request control attribute to the server.  (The PKIData need 
   contain only the Key Recovery Request attribute.) 
2. Server performs policy-based operations to determine whether the 
   recovery request is valid. 
3. Assuming the request is indeed valid, the server sends back to the 
   client a Full Enrollment Response containing: 
   a. One or more Key Recovery Response control attributes. 
   b. One or more Private Key attributes containing private key material 
      as defined in section 5.10.4 above. 
4. Client processes the response and extracts private key material from 
   the ContentInfo(s). 
 
The above control flow for key recovery assumes that the client 
possesses at least a previously-certified signature key, which is used 
to sign the Full Enrollment Request message.  In the event of a 
catastrophic failure on the client resulting in loss of all client keys, 
generation and certification of a new signature key may occur 
simultaneously to a request for recovery of private encryption keys.  




Myers, Liu, Fox, Weinstein                                      Page 23


Internet Draft                                           November  1998 


Control flow for recovering from catastrophic failure may proceed as 
follows: 
1. Client generates a new signature key pair and creates a certification 
   request for the public component of the new signature key. 
2. Client creates a Full Enrollment Request message containing: 
   a. The certificate request from Step 1, 
   b. A Key Recovery Request control attribute. 
   The Full Enrollment Request message is signed using the private 
   signature key generated as part of Step 1.  Following Section 4.2, 
   the signerInfo field of the signed message will contain a NULL issuer 
   name an a serial number corresponding to the bodyPartID of the 
   certificate request within the PKIData.  Notice that as it is not 
   possible for the client to prove identity within the PKI (because all 
   certified key pairs have been lost), another form of proof-of-
   identity is required (such as use of the identification and 
   identificationProof control attributes). 
3. Client sends the Full Enrollment Request to the server. 
4. Server performs policy-based operations on the request message to 
   determine: 
   a. Whether the certification request on the new signature key should 
      be granted, and 
   b. Whether the recovery request is valid. 
5. Assuming that both requests are valid, the server sends back to the 
   client a Full Enrollment Response containing: 
   a. A certificate for the signature key, corresponding to the 
      certification request generated by the client.  
   b. One or more Key Recovery Response control attributes. 
   c. One or more Private Key attributes containing private key material 
      as defined in section 3.4.8.4. 
6. Client processes the response and extracts private key material and 
   certificates. 
 
5.11 Get Certificate Control Attribute 
 
The get certificate control attribute is used to retrieve previously 
issued certificates from a repository of certificates.  A certificate 
server, an LRA or an independent service may provide this repository. 
The clients expected to use this facility are those operating in a 
resource-constrained environment.  (An example of a resource-constrained 
client would be a low-end IP router that does not retain it's 
certificate in non-volatile memory.) 
 
CAs do not need to implement this control attribute to be compliant with 
CMC. 
 
The get certificate control attribute has the following ASN.1 structure: 
 
     GetCert ::= SEQUENCE { 
         issuerName    GeneralName, 
         serialNumber  INTEGER } 
 
The service responding to the request will place the requested 
certificate in the certificates field of a SignedData object.  If the 



Myers, Liu, Fox, Weinstein                                      Page 24


Internet Draft                                           November  1998 


get certificate attribute is the only control in a full enrollment 
message, the response would be a simple enrollment response. 
 
5.12 Get CRL Control Attribute 
 
The get CRL control attribute is used to retrieve CRLs from a repository 
of CRLs.  A certificate server, an LRA or an independent service may 
provide this repository.  The clients expected to use this facility are 
those where a fully deployed directory is either infeasible or 
undesirable.  
 
CAs do not need to implement this control attribute to be compliant with 
this specification. 
 
The get CRL control attribute has the following ASN.1 structure: 
 
     GetCRL ::= SEQUENCE { 
         issuerName    Name, 
         cRLName       GeneralName OPTIONAL, 
         time          GeneralizedTime OPTIONAL, 
         reasons       ReasonFlags OPTIONAL } 
 
The fields in a GetCRL have the following meanings: 
 
     issuerName is the value of the Issuer DN in the subject 
     certificate. 
      
     cRLName may be the value of CRLDistributionPoints in the subject 
     certificate or equivalent value in the event the certificate does 
     not contain such a value.   
      
     time is used by the client to specify from among potentially 
     several issues of CRL that one whose thisUpdate value is less than 
     but nearest to the specified time.  In the absence of a time 
     component, the CA always returns with the most recent CRL. 
      
     reasons is used to specify from among CRLs partitioned by 
     revocation reason.  Implementors should bear in mind that while a 
     specific revocation request has a single CRLReason code--and 
     consequently entries in the CRL would have a single CRLReason code 
     value--a single CRL can aggregate information for one or more 
     reasonFlags. 
 
A service responding to the request will place the requested CRL in the 
crls field of a SignedData object.  If the get CRL attribute is the only 
control in a full enrollment message, the response would be a simple 
enrollment response. 
 
5.13 Revocation Request Control Attribute 
 
The revocation request control attribute is used to request that a 
certificate be revoked. 
 
The revocation request control attribute has the following ASN.1 syntax: 


Myers, Liu, Fox, Weinstein                                      Page 25


Internet Draft                                           November  1998 


 
     RevRequest ::= SEQUENCE { 
         issuerName Name, 
         serialNumber  INTEGER, 
         reason        CRLReason, 
         sharedSecret  OCTET STRING OPTIONAL, 
         comment       UTF8string OPTIONAL } 
 
For a revocation request to become a reliable object in the event of a 
dispute, a strong proof of originator authenticity is required. A 
Registration Authority's digital signature on the request can provide 
this proof for certificates within the scope of the LRA's revocation 
authority.  The means by which an LRA is delegated this authority is a 
matter of operational policy. 
 
However, in the instance when an end-entity has lost use of their 
signature private key, it is impossible to produce a reliable digital 
signature. The RevRequest provides for the optional transmission from 
the end-entity to the CA of a shared secret that may be used as an 
alternative authenticator in the instance of loss of use. The 
acceptability of this practice is a matter of local security policy. 
 
Clients MUST provide the capability to produce a digitally signed 
revocation request control attribute.  Clients SHOULD provide the 
capability produce an unsigned revocation request containing the end-
entity's shared secret.  If a client provides shared secret based self-
revocation, the client MUST be capable of producing a revocation request 
containing the shared secret. 
 
The structure of an unsigned, shared secret based revocation request is 
a matter of local implementation.  The shared secret does not need to be 
shrouded when sent in a revocation request.  The shared secret has a one 
time use, that of causing the certificate to be revoked, and public 
knowledge of the shared secret after the certificate has been revoked is 
not a problem.  Clients need to inform users that the same shared secret 
SHOULD NOT be used for multiple certificates.  
A full response message MUST be returned for a revocation request. 
 
5.14 Registration and Response Information Control Attributes 
 
The registration information control attribute is for clients and LRAs 
to pass additional information as part a PKI request.  The registration 
information control attribute uses the ASN.1 structure: 
 
    RegInfo ::= OCTET STRING 
 
The content of this data is based on bilateral agreement between the 
client and server. 
 
If a server (or LRA) needs to return information back to a requestor in 
response to registration info, then that data is returned as a response 
information control attribute.  The content of the OCTET STRING for a 
response information is based on bilateral agreement between the client 
and server. 


Myers, Liu, Fox, Weinstein                                      Page 26


Internet Draft                                           November  1998 


 
5.15 Query Pending Control Attribute 
 
In some environments, process requirements for manual intervention or 
other identity checking can cause a delay in returning the certificate 
related to a certificate request. The query pending attribute allows for 
a client to query a server about the state of a pending certificate 
request.  The server returns a token as part of the CMCStatusInfo 
attribute (in the otherInfo field).  The client puts the token into the 
query pending attribute to identify the correct request to the server.  
 
The ASN.1 structure used by the query pending control attribute is: 
 
    QueryPending ::= INTEGER 
     
If a server returns a pending state (the transaction is still pending), 
the otherInfo MAY be omitted.  If it is not omitted then the same value 
MUST be returned (the token MUST NOT change during the request). 
 
6.  Local Registration Agents 
 
This specification permits the use of Local Registration Agents (LRAs).  
An LRA sits between the client and the certification authority.  From 
the client the LRA appears to be the certification authority and from 
the server the LRA appears to be a client.  LRAs receive the enrollment 
messages, perform local processing and then forward onto certificate 
authorities. Some of the types of local processing that an LRA can 
perform include: 
 
- batching multiple enrollment messages together, 
- challenge/response POP proofs, 
- addition of private or standardized certificate extensions to all 
  requests, 
- archival of private key material, 
- routing of requests to different CAs. 
 
When an LRA receives an enrollment message, it may either add its own 
layer of wrapping to produce a nested message or strip off the 
SignedData objects and produce a new non-nested message.  LRAs SHOULD 
use nested messages rather than non-nested messages when possible.  LRAs 
SHOULD NOT remove a signedData object wrapping layer if it was added by 
the original requesting entity. LRAs MUST NOT alter a certificate 
request body (PKCS #10 or CRMF) as any alteration invalidates the 
signature on the body and thus the POP for the private key. 
 
6.1  Nested Messages 
 
The expected procedure for an LRA to add information to an end entities 
certificate request message is to take the request and place it into a 
new PKIData object. The request is placed in the cmsSequence if it is a 
full pki message and the reqSequence field for a simple enrollment 
message. Control attributes, such as the add extension attribute, are 
then added to the controlSequence field of the PKIData object.  An LRA 



Myers, Liu, Fox, Weinstein                                      Page 27


Internet Draft                                           November  1998 


can combine multiple messages into a single new PKIData object by 
placing more than one item in the sequence. 
 
An example of how this would look is illustrated by the following 
figure: 
 
   SignedData (by LRA) 
     PKIData 
       controlSequence 
               LRA added control statements 
       reqSequence 
               Zero or more Simple CertificationRequests from clients 
       cmsSequence 
               Zero or more Full PKI messages from clients 
                  SignedData (by client) 
                      PKIData 
 
6.2  Non-Nested Messages 
 
LRAs occasionally need to strip off the SignedData portion of a PKIData 
message.  In this case it is necessary for the LRA to correctly merge 
the control statements in the submitted full PKI message with the 
changes to be made by this LRA. 
 
6.3  Multiple LRA Operation 
 
In some instances there may be more than one LRA in the validation path, 
in this case the second LRA in the sequence has two options for adding 
new control statements.  The LRA may either add a new layer of wrapping 
(resulting in three levels of nested signedData objects) or it may strip 
the previous LRA's signature and create a new signedData object.  In 
this case the LRA is responsible for merging together any control 
statements that the previous LRA may have added. 
 
 
7.  Transport Wrapping 
 
Depending on the transport mechanism that is being used to deliver the 
enrollment request and responses different types of wrapping is 
required.  We document for use three different wrapping items here.  
Mime wrapping is for transports that are natively mime based such as 
HTTP and E-mail.  A binary file transport is defined since floppy disk 
transport is still very common.  File transport can be done either bare 
(section 7.2) or MIME wrapped (section 7.1). 
 
7.1  MIME Wrapping 
 
MIME wrapping is defined for those environments that are MIME native.  
These include E-Mail based protocols as well as HTTP. 
 
The basic mime wrapping in this section is taken from [SMIMEV2] and 
[SMIMEV3].  Simple enrollment requests are encoded using the 
application/pkcs10 content type.  A file name MUST be included either in 



Myers, Liu, Fox, Weinstein                                      Page 28


Internet Draft                                           November  1998 


a content type or content disposition statement.  The extension for the 
file MUST be ".p10". 
 
Simple enrollment response messages MUST be encoded as content-type 
application/pkcs7-mime.  An smime-type parameter MUST be on the content-
type statement with a value of "certs-only." A file name with the ".p7c" 
extension MUST be specified as part of the content-type or content-
disposition. 
 
Full enrollment request messages MUST be encoded as content-type 
application/pkcs7-mime.  The smime-type parameter MUST be included with 
a value of "CMC-enroll".  A file name with the ".p7m" extension MUST be 
specified as part of the content-type or content-disposition statement. 
 
Full enrollment response messages MUST be encoded as content-type 
application/pkcs7-mime.  The smime-type parameter MUST be included with 
a value of "CMC-response."  A file name with the ".p7m" extensions MUST 
be specified as part of the content-type or content-disposition. 
 
MIME TYPE                         File Extension          SMIME-TYPE 
 
application/pkcs10                  .p10                    N/A 
(simple PKI request) 
 
application/pkcs7-mime              .p7m                    CMC-request 
(full PKI request) 
 
application/pkcs7-mime              .p7c                    certs-only 
(simple PKI response) 
 
applicication/pkcs7-mime            .p7m                    CMC-response 
(full PKI response) 
 
7.2  File-Based Transport 
 
Enrollment messages and responses may also be transferred between 
clients and servers using file system-based mechanisms, such as when 
enrollment is performed for an off-line client.  When files are used to 
transport binary, BER-encoded Full Enrollment Request and Repsonse 
messages, the following file type extensions SHOULD be used: 
 
Message Type                   File Extension           
 
Full PKI Request                 .crq                     
 
Full PKI Response                .crp                    
 
7.3  Socket-Based Transport 
 
When enrollment messages and responses are sent over sockets, no 
wrapping is required.  Messages SHOULD be sent in their binary, BER-
encoded form.   
 
 


Myers, Liu, Fox, Weinstein                                      Page 29


Internet Draft                                           November  1998 


8.  Interoperability 
 
8.1  Mandatory and Optional Algorithms 
 
CMC clients and servers MUST be capable of producing and processing 
message signatures using the Digital Signature Algorithm [DSA].  DSA 
signatures MUST be indicated by the DSA AlgorithmIdentifier value 
specified in section 7.2.2 of PKIXCERT.  PKI clients and servers SHOULD 
also be capable of producing and processing RSA signatures as specified 
in section 7.2.1 of PKIXCERT. 
 
CMC clients and servers MUST be capable of protecting and accessing 
message encryption keys using the Diffie-Hellman (D-H) key exchange 
algorithm.  D-H/3DES protection MUST be indicated by the D-H 
AlgorithmIdentifier value specified in CMS.  PKI clients and servers 
SHOULD also be capable of producing and processing RSA key transport.  
When used for PKI messages, RSA key transport MUST be indicated as 
specified in section 7.2.1 of PKIXCERT. 
 
9.  Security Considerations 
 
Initiation of a secure communications channel between an end-entity and 
a CA necessarily requires an out-of-band trust initiation mechanism. For 
example, a secure channel may be constructed between the end-entity and 
the CA via IPSEC or TLS. Many such schemes exist and the choice of any 
particular scheme for trust initiation is outside the scope of this 
document.  Implementers of this protocol are strongly encouraged to 
consider generally accepted principles of secure key management when 
integrating this capability within an overall security architecture. 
 
Mechanisms for thwarting replay attacks may be required in particular 
implementations of this protocol depending on the operational 
environment. In cases where the CA maintains significant state 
information, replay attacks may be detectable without the inclusion of 
the optional nonce mechanisms. Implementers of this protocol need to 
carefully consider environmental conditions before choosing whether or 
not to implement the senderNonce and recipientNonce attributes described 
in section 5.7.  Developers of state-constrained PKI clients are 
strongly encouraged to incorporate the use of these attributes. 
 
Under no circumstances should a signing key be archived.  Doing so 
allows the archiving entity to potentially use the key for forging 
signatures. 
 
Due care must be taken prior to archiving keys.  Once a key is given to 
an archiving entity, the archiving entity could use the keys in a way 
not conducive to the archiving entity.  Users should be made especially 
aware that proper verification is made of the certificate used to 
encrypt the private key material. 
 
Clients and servers need to do some checks on cryptographic parameters 
prior to issuing certificates to make sure that weak parameters are not 
used. 
 


Myers, Liu, Fox, Weinstein                                      Page 30


Internet Draft                                           November  1998 


Small Group Attack 
 
10. Open Issues 
 
There appears to be a need to add one or more control statements to 
acknowledge the fact that key archival has been completed. (In fact, 
there may be a need for a general mechanism for an LRA to communicate 
certain process-related information to the next upstream LRA/CA.)  
  
11. Acknowledgments 
 
The authors would like to thank Jim Schaad and Brian LaMacchia for their 
work in developing and writing up many of the concepts presented in this 
document.  The authors would also like to thank Alex Deacon for his 
contributions. 
 
12. References 
 
[CMS]    R. Housley, "Cryptographic Message Syntax",  
         draft-ietf-smime-cms-06.txt, June 1998 
 
[CRMF]   M. Myers, C. Adams, D. Solo, D. Kemp, "Internet X.509  
         Certificate Request Message Format", 
         draft-ietf-pkix-crmf-01.txt, May 1998 
 
[DH]     B. Kaliski, "PKCS 3: Diffie-Hellman Key Agreement v1.4" 
 
[DH-SIG] H. Prafullchandra, J. Schaad, "Diffie-Hellman Signing  
         Algorithm", draft-schaad-dhsign-00.txt, November 1998 
 
[PKCS7]  B. Kaliski, "PKCS #7: Cryptographic Message Syntax v1.5", 
         RFC 2315, October 1997 
 
[PKCS10] B. Kaliski, "PKCS #10: Certification Request Syntax v1.5", 
         RFC 2314, October 1997 
 
[PKIXCERT] R. Housley, W. Ford, W. Polk, D. Solo "Internet Public 
         Key Infrastructure X.509 Certificate and CRL Profile", 
         draft-ietf-pkix-ipki-part1-11.txt, September 1998 
 
[RFC 2119] "Key words for use in RFCs to Indicate Requirement 
         Levels", RFC 2119 
 
[SMIMEV2] S. Dusse, P. Hoffman, B. Ramsdell, L. Lundblade, L. Repka, 
         "S/MIME Version 2 Message Specification", RFC 2311, March 1998 
  
[SMIMEV3] B. Ramsdell, "S/MIME Version 3 Message Specification", 
         draft-ietf-smime-msg-05.txt, August 1998 
 
13. Author's Addresses 
 
Michael Myers 
VeriSign Inc. 
1390 Shorebird Way 


Myers, Liu, Fox, Weinstein                                      Page 31


Internet Draft                                           November  1998 


Mountain View, CA, 94019 
(650) 429-3402 
mmyers@verisign.com 
 
Xiaoyi Liu 
Cisco Systems 
170 West Tasman Drive 
San Jose, CA 95134 
(480) 526-7430 
xliu@cisco.com 
 
Barbara Fox 
Microsoft Corporation 
One Microsoft Way 
Redmond, WA  98052 
(425) 936-9542 
bfox@microsoft.com 
 
Jeff Weinstein 
Netscape Communications Corporation 
501 Middlefield Road 
Mountain View, CA 94043 
jsw@netscape.com 
 
 
 
Appendix A  ASN.1 Module 
 
EnrollmentMessageSyntax 
   { iso(1) identified-organization(3) dod(4) internet(1) 
   security(5) mechansims(5) pkix(7) id-mod(0) TBD } 
 
   DEFINITIONS IMPLICIT TAGS ::= 
   BEGIN 
 
   -- EXPORTS All -- 
   -- The types and values defined in this module are exported for use 
   -- in the other ASN.1 modules.  Other applications may use them for 
   -- their own purposes. 
 
   IMPORTS 
 
     -- Information Directory Framework (X.501) 
           Name 
              FROM InformationFramework { joint-iso-itu-t ds(5) 
                   modules(1) informationFramework(1) 3 } 
 
     -- Directory Authentication Framework (X.509) 
           AlgorithmIdentifier, AttributeCertificate, Certificate, 
           CertificateList, CertificateSerialNumber 
              FROM AuthenticationFramework { joint-iso-itu-t ds(5) 
                   module(1) authenticationFramework(7) 3 } 
 
     -- PKIX Part 1 - Implicit 


Myers, Liu, Fox, Weinstein                                      Page 32


Internet Draft                                           November  1998 


        GeneralName, CRLReason, ReasonFlags 
        FROM PKIX1Implicit88 {iso(1) identified-organization(3) dod(6)  
                internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) 
                id-pkix1-implicit-88(2)} 
 
     -- PKIX Part 1 - Explicit 
        SubjectPublicKeyInfo, Extension 
        FROM PKIX1Explicit88 {iso(1) identified-organization(3) dod(6)  
                internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)  
                id-pkix1-explicit-88(1)} 
 
     -- Cryptographic Message Syntax 
        ContentInfo, Attribute 
          FROM CryptographicMessageSyntax { 1 2 840 113549 1 9 16 0 1} 
 
     -- CRMF 
        CertReqMsg 
        FROM CRMF { <TBD> }; 
 
 
    id-pkix OBJECT IDENTIFIER  ::= { iso(1) identified-organization(3) 
        dod(6) internet(1) security(5) mechanisms(5) pkix(7) } 
 
    id-pkix-cmc OBJECT IDENTIFIER ::= {id-pkix <TBD>} 
 
    id-dh-private-number OBJECT IDENTIFIER ::= {<TBD>} 
 
    id-identification OBJECT IDENTIFIER ::= {id-pkix-cmc 2} 
    id-identityProof OBJECT IDENTIFIER ::= {id-pkix-cmc 3} 
    id-dataReturn OBJECT IDENTIFIER ::= {id-pkix-cmc 4} 
    id-transactionId OBJECT IDENTIFIER ::= {id-pkix-cmc 5} 
    id-senderNonce OBJECT IDENTIFIER ::= {id-pkix-cmc 6} 
    id-recipientNonce OBJECT IDENTIFIER ::= {id-pkix-cmc 7} 
    id-regInfo OBJECT IDENTIFIER ::= {id-pkix-cmc 18} 
    id-responseInfo OBJECT IDENTIFIER ::= {id-pkix-cmc 19} 
    id-queryPending OBJECT IDENTIFIER ::= {id-pkix-cmc 21} 
 
    -- This is the content type used for a request message in the 
protocol 
 
    id-ct-PKIData OBJECT IDENTIFIER ::= { id-pkix <TBD> } 
 
 
    PKIData ::= SEQUENCE { 
        controlSequence    SEQUENCE SIZE(0..MAX) OF TaggedAttribute, 
        reqSequence        SEQUENCE SIZE(0..MAX) OF TaggedRequest, 
        cmsSequence        SEQUENCE SIZE(0..MAX) OF TaggedContentInfo, 
        otherMsgSequence   SEQUENCE SIZE(0..MAX) OF OtherMsg 
    } 
 
    TaggedAttribute ::= SEQUENCE { 
        bodyPartID         INTEGER, 
        attrType           OBJECT IDENTIFIER, 
        attrValues         SET OF AttributeValue 


Myers, Liu, Fox, Weinstein                                      Page 33


Internet Draft                                           November  1998 


    } 
 
    AttributeValue ::= ANY 
 
    TaggedRequest ::= CHOICE { 
        tcr               [0] TaggedCertificationRequest, 
        crm               [1] CertReqMsg 
    } 
 
    TaggedCertificationRequest ::= SEQUENCE { 
        bodyPartID            INTEGER, 
        certificationRequest  CertificationRequest 
    } 
 
    CertificationRequest ::= SEQUENCE { 
      certificationRequestInfo  SEQUENCE { 
        version                   INTEGER, 
        subject                   Name, 
        subjectPublicKeyInfo      SEQUENCE { 
          algorithm                 AlgorithmIdentifier, 
          subjectPublicKey          BIT STRING }, 
        attributes                [0] IMPLICIT SET OF Attribute }, 
      signatureAlgorithm        AlgorithmIdentifier,  
      signature                 BIT STRING 
    } 
 
    TaggedContentInfo ::= SEQUENCE { 
        bodyPartID              INTEGER, 
        contentInfo             ContentInfo 
    } 
 
    OtherMsg ::= SEQUENCE { 
        bodyPartID        INTEGER, 
        otherMsgType      OBJECT IDENTIFIER, 
        otherMsgValue     ANY DEFINED BY otherMsgType } 
 
    --  This defines the response message in the protocol 
    id-ct-enrollResponse OBJECT IDENTIFIER ::= {id-pkix <TBD> } 
 
    ResponseBody ::= SEQUENCE { 
        controlSequence   SEQUENCE SIZE(0..MAX) OF TaggedAttribute, 
        cmsSequence       SEQUENCE SIZE(0..MAX) OF TaggedContentInfo, 
        otherMsgSequence  SEQUENCE SIZE(0..MAX) OF OtherMsg 
    } 
 
    -- Used to return status state in a response 
     
    id-cMCStatusInfo OBJECT IDENTIFIER ::= {id-pkix-cmc 1} 
     
    CMCStatusInfo ::= SEQUENCE { 
        cMCStatus       CMCStatus, 
        bodyList        SEQUENCE SIZE (1..MAX) OF INTEGER, 
        statusString    UTF8String OPTIONAL, 
        otherInfo        CHOICE { 


Myers, Liu, Fox, Weinstein                                      Page 34


Internet Draft                                           November  1998 


          failInfo         CMCFailInfo, 
          pendInfo         PendInfo } OPTIONAL 
    } 
 
    PendInfo ::= SEQUENCE { 
        pendToken        INTEGER, 
        pendTime         GENERALIZEDTIME 
    } 
     
    CMCStatus ::= INTEGER {  
        success         (0),  
        -- you got exactly what you asked for  
        failed          (2),  
        -- you don't get it, more information elsewhere in the message 
        pending         (3),  
        -- the request body part has not yet been processed,  
        -- requester is responsible to poll back on this 
        noSupport       (4) 
        -- the requested operation is not supported 
    } 
     
    CMCFailInfo ::= INTEGER {  
        badAlg          (0), 
        -- Unrecognized or unsupported algorithm 
        badMessageCheck (1),  
        -- integrity check failed 
        badRequest      (2),  
        -- transaction not permitted or supported 
        badTime         (3),  
        -- Message time field was not sufficiently close to the system 
time 
        badCertId       (4), 
        -- No certificate could be identified matching the provided 
criteria 
        unsuportedExt   (5), 
        -- A requested X.509 extension is not supported by the recipient 
CA. 
        mustArchiveKeys (6),  
        -- Private key material must be supplied 
        badIdentity     (7),  
        -- Identification Attribute failed to verify 
        popRequired     (8), 
        -- Server requires a POP proof before issuing certificate 
        popFailed       (9), 
        -- Server failed to get an acceptable POP for the request 
        noKeyReuse      (10) 
        -- Server policy does not allow key re-use 
        internalCAError (11) 
        tryLater        (12) 
    } 
     
    -- Used for LRAs to add extensions to certificate requests 
    id-addExtensions OBJECT IDENTIFIER ::= {id-pkix-cmc 8} 
 


Myers, Liu, Fox, Weinstein                                      Page 35


Internet Draft                                           November  1998 


    AddExtensions ::= SEQUENCE { 
        pkiDataReference    INTEGER, 
        certReferences      SEQUENCE OF INTEGER, 
        extensions          SEQUENCE OF Extension 
    } 
 
    id-encryptedPOP OBJECT IDENTIFIER ::= {id-pkix-cmc 9} 
    id-decryptedPOP OBJECT IDENTIFIER ::= {id-pkix-cmc 10} 
     
    EncryptedPOP ::= SEQUENCE { 
        bodyPartID      INTEGER, 
        cms             ContentInfo, 
        thePOPAlgID     AlgorithmIdentifier, 
        witnessAlgID    AlgorithmIdentifier, 
        witness         OCTET STRING 
    } 
     
    DecryptedPOP ::= SEQUENCE { 
        bodyPartID      INTEGER, 
        thePOPAlgID     AlgorithmIdentifier, 
        thePOP          OCTET STRING 
    } 
     
    id-lraPOPWitness OBJECT IDENTIFIER ::= {id-pkix-cmc 11} 
     
    LraPopWitness ::= SEQUENCE { 
        pkiDataBodyid   INTEGER, 
        bodyIds         SEQUENCE OF INTEGER 
    } 
     
    id-keyArchival OBJECT IDENTIFIER ::= {id-pkix-cmc 12} 
    id-keyRecoveryReq OBJECT IDENTIFIER ::= {id-pkix-cmc 13} 
    id-keyRecoveryRsp OBJECT IDENTIFIER ::= {id-pkix-cmc 14} 
     
    KeyArchival ::= SEQUENCE { 
        reqBodyPartID           INTEGER, 
        cmsBodyPartID           INTEGER, 
        selectionCriteria       OCTET STRING OPTIONAL 
    } 
     
    KeyRecoveryReq ::= SEQUENCE { 
        shroudIdentification    ShroudIdentification, 
        bulkEncryptionAlgID     AlgorithmIdentifier, 
        selectionCriterial      OCTET STRING OPTIONAL 
    } 
     
    ShroudIdentification ::= CHOICE { 
        subjectPublicKeyInfo    [0] SubjectPublicKeyInfo, 
        encryptionToken   [1] AlgorithmIdentifier 
    } 
     
    KeyRecoveryRsp ::= SEQUENCE { 
        bodyPartID              INTEGER, 
        selectionCriteria       OCTET STRING OPTIONAL 


Myers, Liu, Fox, Weinstein                                      Page 36


Internet Draft                                           November  1998 


    } 
     
    id-privateKey OBJECT IDENTIFIER ::= {id-pkix-cmc 20} 
     
    PrivateKeyInfo ::= SEQUENCE { 
        version                 INTEGER, 
        privateKeyAlgorithm     AlgorithmIdentifier, 
        privateKey              OCTET STRING, 
        attributes              [0] IMPLICIT Attributes OPTIONAL 
    } 
     
    Attributes ::= SET OF Attribute 
     
    DH-PrivateKey ::= INTEGER 
     
    -- 
    id-getCert OBJECT IDENTIFIER ::= {id-pkix-cmc 15} 
     
    GetCert ::= SEQUENCE { 
        issuerName      GeneralName, 
        serialNumber    INTEGER } 
     
     
    id-getCRL OBJECT IDENTIFIER ::= {id-pkix-cmc 16} 
     
    GetCRL ::= SEQUENCE { 
        issuerName    Name, 
        cRLName       GeneralName OPTIONAL, 
        time          GeneralizedTime OPTIONAL, 
        reasons       ReasonFlags OPTIONAL } 
     
    id-revokeRequest OBJECT IDENTIFIER ::= {id-pkix-cmc 17} 
     
    RevRequest ::= SEQUENCE { 
        issuerName    Name, 
        serialNumber  INTEGER, 
        reason        CRLReason, 
        passphrase    OCTET STRING OPTIONAL, 
        comment       UTF8String OPTIONAL } 
     
   -- The following is used to request V3 extensions be added to a 
certificate 
     
   id-ExtensionReq OBJECT IDENTIFIER ::= {iso(1) member-body(2) us(840)  
        rsadsi(113549) pkcs(1) pkcs-9(9) 14} 
     
   ExtensionReq ::= SEQUENCE OF Extension 
     
END 
 
 





Myers, Liu, Fox, Weinstein                                      Page 37

PAFTECH AB 2003-20262026-04-23 11:26:19