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

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7. Network Working Group                                           M. Myers
  8. Request for Comments: 2511                                      VeriSign
  9. Category: Standards Track                                       C. Adams
  10.                                                     Entrust Technologies
  11.                                                                  D. Solo
  12.                                                                 Citicorp
  13.                                                                  D. Kemp
  14.                                                                      DoD
  15.                                                               March 1999
  16.  
  17.  
  18.            Internet X.509 Certificate Request Message Format
  19.  
  20. Status of this Memo
  21.  
  22.    This document specifies an Internet standards track protocol for the
  23.    Internet community, and requests discussion and suggestions for
  24.    improvements.  Please refer to the current edition of the "Internet
  25.    Official Protocol Standards" (STD 1) for the standardization state
  26.    and status of this protocol.  Distribution of this memo is unlimited.
  27.  
  28. Copyright Notice
  29.  
  30.    Copyright (C) The Internet Society (1999).  All Rights Reserved.
  31.  
  32. 1.  Abstract
  33.  
  34.    This document describes the Certificate Request Message Format
  35.    (CRMF).  This syntax is used to convey a request for a certificate to
  36.    a Certification Authority (CA) (possibly via a Registration Authority
  37.    (RA)) for the purposes of X.509 certificate production.  The request
  38.    will typically include a public key and associated registration
  39.    information.
  40.  
  41.    The key words "MUST", "REQUIRED", "SHOULD", "RECOMMENDED", and "MAY"
  42.    in this document (in uppercase, as shown) are to be interpreted as
  43.    described in RFC 2119.
  44.  
  45. 2.  Overview
  46.  
  47.    Construction of a certification request involves the following steps:
  48.  
  49.    a)  A CertRequest value is constructed.  This value may include the
  50.        public key, all or a portion of the end-entity's (EE's) name,
  51.        other requested certificate fields, and additional control
  52.        information related to the registration process.
  53.  
  54.  
  55.  
  56.  
  57.  
  58. Myers, et. al.              Standards Track                     [Page 1]
  59.  
  60. RFC 2511                  Internet X.509 CRMF                 March 1999
  61.  
  62.  
  63.    b)  A proof of possession (of the private key corresponding to the
  64.        public key for which a certificate is being requested) value may
  65.        be calculated across the CertRequest value.
  66.  
  67.    c)  Additional registration information may be combined with the
  68.        proof of possession value and the CertRequest structure to form a
  69.        CertReqMessage.
  70.  
  71.    d)  The CertReqMessage is securely communicated to a CA. Specific
  72.        means of secure transport are beyond the scope of this
  73.        specification.
  74.  
  75. 3. CertReqMessage Syntax
  76.  
  77.    A certificate request message is composed of the certificate request,
  78.    an optional proof of possession field and an optional registration
  79.    information field.
  80.  
  81. CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg
  82.  
  83. CertReqMsg ::= SEQUENCE {
  84.     certReq   CertRequest,
  85.     pop       ProofOfPossession  OPTIONAL,
  86.     -- content depends upon key type
  87.     regInfo   SEQUENCE SIZE(1..MAX) of AttributeTypeAndValue OPTIONAL }
  88.  
  89.    The proof of possession field is used to demonstrate that the entity
  90.    to be associated with the certificate is actually in possession of
  91.    the corresponding private key.  This field may be calculated across
  92.    the contents of the certReq field and varies in structure and content
  93.    by public key algorithm type and operational mode.
  94.  
  95.    The regInfo field SHOULD only contain supplementary information
  96.    related to the context of the certification request when such
  97.    information is required to fulfill a certification request.  This
  98.    information MAY include subscriber contact information, billing
  99.    information or other ancillary information useful to fulfillment of
  100.    the certification request.
  101.  
  102.    Information directly related to certificate content SHOULD be
  103.    included in the certReq content.  However, inclusion of additional
  104.    certReq content by RAs may invalidate the pop field.  Data therefore
  105.    intended for certificate content MAY be provided in regInfo.
  106.  
  107.    See Section 8 and Appendix B for example regInfo contents.
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114. Myers, et. al.              Standards Track                     [Page 2]
  115.  
  116. RFC 2511                  Internet X.509 CRMF                 March 1999
  117.  
  118.  
  119. 4. Proof of Possession (POP)
  120.  
  121.    In order to prevent certain attacks and to allow a CA/RA to properly
  122.    check the validity of the binding between an end entity and a key
  123.    pair, the PKI management operations specified here make it possible
  124.    for an end entity to prove that it has possession of (i.e., is able
  125.    to use) the private key corresponding to the public key for which a
  126.    certificate is requested.  A given CA/RA is free to choose how to
  127.    enforce POP (e.g., out-of-band procedural means versus the CRMF in-
  128.    band message) in its certification exchanges (i.e., this may be a
  129.    policy issue).  However, it is MANDATED that CAs/RAs MUST enforce POP
  130.    by some means because there are currently many non-PKIX operational
  131.    protocols in use (various electronic mail protocols are one example)
  132.    that do not explicitly check the binding between the end entity and
  133.    the private key.  Until operational protocols that do verify the
  134.    binding (for signature, encryption, and key agreement key pairs)
  135.    exist, and are ubiquitous, this binding can only be assumed to have
  136.    been verified by the CA/RA. Therefore, if the binding is not verified
  137.    by the CA/RA, certificates in the Internet Public-Key Infrastructure
  138.    end up being somewhat less meaningful.
  139.  
  140.    POP is accomplished in different ways depending on the type of key
  141.    for which a certificate is requested. If a key can be used for
  142.    multiple purposes (e.g., an RSA key) then any of the methods MAY be
  143.    used.
  144.  
  145.    This specification allows for cases where POP is validated by the CA,
  146.    the RA, or both.  Some policies may require the CA to verify POP
  147.    during certification, in which case the RA MUST forward the end
  148.    entity's CertRequest and ProofOfPossession fields unaltered to the
  149.    CA, and as an option MAY also verify POP.  If the CA is not required
  150.    by policy to verify POP, then the RA SHOULD forward the end entity's
  151.    request and proof unaltered to the CA as above.  If this is not
  152.    possible (for example because the RA verifies POP by an out-of-band
  153.    method), then the RA MAY attest to the CA that the required proof has
  154.    been validated. If the CA uses an out-of-band method to verify POP
  155.    (such as physical delivery of CA-generated private keys), then the
  156.    ProofOfPossession field is not used.
  157.  
  158. 4.1 Signature Keys
  159.  
  160.    For signature keys, the end entity can sign a value to prove
  161.    possession of the private key.
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170. Myers, et. al.              Standards Track                     [Page 3]
  171.  
  172. RFC 2511                  Internet X.509 CRMF                 March 1999
  173.  
  174.  
  175. 4.2 Key Encipherment Keys
  176.  
  177.    For key encipherment keys, the end entity can provide the private key
  178.    to the CA/RA, or can be required to decrypt a value in order to prove
  179.    possession of the private key. Decrypting a value can be achieved
  180.    either directly or indirectly.
  181.  
  182.    The direct method is for the RA/CA to issue a random challenge to
  183.    which an immediate response by the end entity is required.
  184.  
  185.    The indirect method is to issue a certificate which is encrypted for
  186.    the end entity (and have the end entity demonstrate its ability to
  187.    decrypt this certificate in a confirmation message). This allows a CA
  188.    to issue a certificate in a form which can only be used by the
  189.    intended end entity.
  190.  
  191. 4.3 Key Agreement Keys
  192.  
  193.    For key agreement keys, the end entity can use any of the three
  194.    methods given in Section 5.2 for encryption keys.  For the direct and
  195.    indirect methods, the end entity and the PKI management entity (i.e.,
  196.    CA or RA) must establish a shared secret key in order to prove that
  197.    the end entity has possession of the private key (i.e., in order to
  198.    decrypt the encrypted certificate or to construct the response to the
  199.    issued challenge).  Note that this need not impose any restrictions
  200.    on the keys that can be certified by a given CA -- in particular, for
  201.    Diffie-Hellman keys the end entity may freely choose its algorithm
  202.    parameters -- provided that the CA can generate a short-term (or
  203.    one-time) key pair with the appropriate parameters when necessary.
  204.  
  205.    The end entity may also MAC the certificate request (using a shared
  206.    secret key derived from a Diffie-Hellman computation) as a fourth
  207.    alternative for demonstrating POP.  This option may be used only if
  208.    the CA already has a DH certificate that is known to the end entity
  209.    and if the EE is willing to use the CA's DH parameters.
  210.  
  211. 4.4 Proof of Possession Syntax
  212.  
  213.    ProofOfPossession ::= CHOICE {
  214.        raVerified        [0] NULL,
  215.        -- used if the RA has already verified that the requester is in
  216.        -- possession of the private key
  217.        signature         [1] POPOSigningKey,
  218.        keyEncipherment   [2] POPOPrivKey,
  219.        keyAgreement      [3] POPOPrivKey }
  220.  
  221.    POPOSigningKey ::= SEQUENCE {
  222.        poposkInput         [0] POPOSigningKeyInput OPTIONAL,
  223.  
  224.  
  225.  
  226. Myers, et. al.              Standards Track                     [Page 4]
  227.  
  228. RFC 2511                  Internet X.509 CRMF                 March 1999
  229.  
  230.  
  231.        algorithmIdentifier     AlgorithmIdentifier,
  232.        signature               BIT STRING }
  233.        -- The signature (using "algorithmIdentifier") is on the
  234.        -- DER-encoded value of poposkInput.  NOTE: If the CertReqMsg
  235.        -- certReq CertTemplate contains the subject and publicKey values,
  236.        -- then poposkInput MUST be omitted and the signature MUST be
  237.        -- computed on the DER-encoded value of CertReqMsg certReq.  If
  238.        -- the CertReqMsg certReq CertTemplate does not contain the public
  239.        -- key and subject values, then poposkInput MUST be present and
  240.        -- MUST be signed.  This strategy ensures that the public key is
  241.        -- not present in both the poposkInput and CertReqMsg certReq
  242.        -- CertTemplate fields.
  243.  
  244.    POPOSigningKeyInput ::= SEQUENCE {
  245.        authInfo            CHOICE {
  246.            sender              [0] GeneralName,
  247.            -- used only if an authenticated identity has been
  248.            -- established for the sender (e.g., a DN from a
  249.            -- previously-issued and currently-valid certificate)
  250.            publicKeyMAC        PKMACValue },
  251.            -- used if no authenticated GeneralName currently exists for
  252.            -- the sender; publicKeyMAC contains a password-based MAC
  253.            -- on the DER-encoded value of publicKey
  254.        publicKey           SubjectPublicKeyInfo }  -- from CertTemplate
  255.  
  256.    PKMACValue ::= SEQUENCE {
  257.       algId  AlgorithmIdentifier,
  258.       -- the algorithm value shall be PasswordBasedMac
  259.       --     {1 2 840 113533 7 66 13}
  260.       -- the parameter value is PBMParameter
  261.       value  BIT STRING }
  262.  
  263.    POPOPrivKey ::= CHOICE {
  264.        thisMessage       [0] BIT STRING,
  265.        -- posession is proven in this message (which contains the private
  266.        -- key itself (encrypted for the CA))
  267.        subsequentMessage [1] SubsequentMessage,
  268.        -- possession will be proven in a subsequent message
  269.        dhMAC             [2] BIT STRING }
  270.        -- for keyAgreement (only), possession is proven in this message
  271.        -- (which contains a MAC (over the DER-encoded value of the
  272.        -- certReq parameter in CertReqMsg, which must include both subject
  273.        -- and publicKey) based on a key derived from the end entity's
  274.        -- private DH key and the CA's public DH key);
  275.        -- the dhMAC value MUST be calculated as per the directions given
  276.        -- in Appendix A.
  277.  
  278.    SubsequentMessage ::= INTEGER {
  279.  
  280.  
  281.  
  282. Myers, et. al.              Standards Track                     [Page 5]
  283.  
  284. RFC 2511                  Internet X.509 CRMF                 March 1999
  285.  
  286.  
  287.        encrCert (0),
  288.        -- requests that resulting certificate be encrypted for the
  289.        -- end entity (following which, POP will be proven in a
  290.        -- confirmation message)
  291.        challengeResp (1) }
  292.        -- requests that CA/RA engage in challenge-response exchange with
  293.        -- end entity in order to prove private key possession
  294.  
  295.    It is expected that protocols which incorporate this specification
  296.    will include the confirmation and challenge-response messages
  297.    necessary to a complete protocol.
  298.  
  299. 4.4.1  Use of Password-Based MAC
  300.  
  301.    The following algorithm SHALL be used when publicKeyMAC is used in
  302.    POPOSigningKeyInput to prove the authenticity of a request.
  303.  
  304.    PBMParameter ::= SEQUENCE {
  305.          salt                OCTET STRING,
  306.          owf                 AlgorithmIdentifier,
  307.          -- AlgId for a One-Way Function (SHA-1 recommended)
  308.          iterationCount      INTEGER,
  309.          -- number of times the OWF is applied
  310.          mac                 AlgorithmIdentifier
  311.          -- the MAC AlgId (e.g., DES-MAC, Triple-DES-MAC [PKCS11],
  312.    }   -- or HMAC [RFC2104, RFC2202])
  313.  
  314.    The process of using PBMParameter to compute publicKeyMAC and so
  315.    authenticate the origin of a public key certification request
  316.    consists of two stages. The first stage uses shared secret
  317.    information to produce a MAC key. The second stage MACs the public
  318.    key in question using this MAC key to produce an authenticated value.
  319.  
  320.    Initialization of the first stage of algorithm assumes the existence
  321.    of a shared secret distributed in a trusted fashion between CA/RA and
  322.    end-entity.  The salt value is appended to the shared secret and the
  323.    one way function (owf) is applied iterationCount times, where the
  324.    salted secret is the input to the first iteration and, for each
  325.    successive iteration, the input is set to be the output of the
  326.    previous iteration, yielding a key K.
  327.  
  328.    In the second stage, K and the public key are inputs to HMAC as
  329.    documented in [HMAC] to produce a value for publicKeyMAC as follows:
  330.  
  331.    publicKeyMAC = Hash( K XOR opad, Hash( K XOR ipad, public key) )
  332.  
  333.    where ipad and opad are defined in [RFC2104].
  334.  
  335.  
  336.  
  337.  
  338. Myers, et. al.              Standards Track                     [Page 6]
  339.  
  340. RFC 2511                  Internet X.509 CRMF                 March 1999
  341.  
  342.  
  343.    The AlgorithmIdentifier for owf SHALL be SHA-1 {1 3 14 3 2 26} and
  344.    for mac SHALL be HMAC-SHA1 {1 3 6 1 5 5 8 1 2}.
  345.  
  346. 5.  CertRequest syntax
  347.  
  348.    The CertRequest syntax consists of a request identifier, a template
  349.    of certificate content, and an optional sequence of control
  350.    information.
  351.  
  352. CertRequest ::= SEQUENCE {
  353.     certReqId     INTEGER,          -- ID for matching request and reply
  354.     certTemplate  CertTemplate,  -- Selected fields of cert to be issued
  355.     controls      Controls OPTIONAL }   -- Attributes affecting issuance
  356.  
  357. CertTemplate ::= SEQUENCE {
  358.     version      [0] Version               OPTIONAL,
  359.     serialNumber [1] INTEGER               OPTIONAL,
  360.     signingAlg   [2] AlgorithmIdentifier   OPTIONAL,
  361.     issuer       [3] Name                  OPTIONAL,
  362.     validity     [4] OptionalValidity      OPTIONAL,
  363.     subject      [5] Name                  OPTIONAL,
  364.     publicKey    [6] SubjectPublicKeyInfo  OPTIONAL,
  365.     issuerUID    [7] UniqueIdentifier      OPTIONAL,
  366.     subjectUID   [8] UniqueIdentifier      OPTIONAL,
  367.     extensions   [9] Extensions            OPTIONAL }
  368.  
  369.   OptionalValidity ::= SEQUENCE {
  370.       notBefore  [0] Time OPTIONAL,
  371.       notAfter   [1] Time OPTIONAL } --at least one must be present
  372.  
  373.   Time ::= CHOICE {
  374.       utcTime        UTCTime,
  375.       generalTime    GeneralizedTime }
  376.  
  377. 6. Controls Syntax
  378.  
  379.    The generator of a CertRequest may include one or more control values
  380.    pertaining to the processing of the request.
  381.  
  382.    Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue
  383.  
  384.    The following controls are defined (it is recognized that this list
  385.    may expand over time):  regToken; authenticator; pkiPublicationInfo;
  386.    pkiArchiveOptions; oldCertID; protocolEncrKey.
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394. Myers, et. al.              Standards Track                     [Page 7]
  395.  
  396. RFC 2511                  Internet X.509 CRMF                 March 1999
  397.  
  398.  
  399. 6.1 Registration Token Control
  400.  
  401.    A regToken control contains one-time information (either based on a
  402.    secret value or on knowledge) intended to be used by the CA to verify
  403.    the identity of the subject prior to issuing a certificate.  Upon
  404.    receipt of a certification request containing a value for regToken,
  405.    the receiving CA verifies the information in order to confirm the
  406.    identity claimed in the certification request.
  407.  
  408.    The value for regToken may be generated by the CA and provided out of
  409.    band to the subscriber, or may otherwise be available to both the CA
  410.    and the subscriber.  The security of any out-of-band exchange should
  411.    be commensurate with the risk of the CA accepting an intercepted
  412.    value from someone other than the intended subscriber.
  413.  
  414.    The regToken control would typically be used only for initialization
  415.    of an end entity into the PKI, whereas the authenticator control (see
  416.    Section 7.2) would typically be used for initial as well as
  417.    subsequent certification requests.
  418.  
  419.    In some instances of use the value for regToken could be a text
  420.    string or a numeric quantity such as a random number.  The value in
  421.    the latter case could be encoded either as a binary quantity or as a
  422.    text string representation of the binary quantity.  To ensure a
  423.    uniform encoding of values regardless of the nature of the quantity,
  424.    the encoding of regToken SHALL be UTF8.
  425.  
  426. 6.2 Authenticator Control.
  427.  
  428.    An authenticator control contains information used in an ongoing
  429.    basis to establish a non-cryptographic check of identity in
  430.    communication with the CA.  Examples include:  mother's maiden name,
  431.    last four digits of social security number, or other knowledge-based
  432.    information shared with the subscriber's CA; a hash of such
  433.    information; or other information produced for this purpose.  The
  434.    value for an authenticator control may be generated by the subscriber
  435.    or by the CA.
  436.  
  437.    In some instances of use the value for regToken could be a text
  438.    string or a numeric quantity such as a random number.  The value in
  439.    the latter case could be encoded either as a binary quantity or as a
  440.    text string representation of the binary quantity.  To ensure a
  441.    uniform encoding of values regardless of the nature of the quantity,
  442.    the encoding of authenticator SHALL be UTF8.
  443.  
  444.  
  445.  
  446.  
  447.  
  448.  
  449.  
  450. Myers, et. al.              Standards Track                     [Page 8]
  451.  
  452. RFC 2511                  Internet X.509 CRMF                 March 1999
  453.  
  454.  
  455. 6.3 Publication Information Control
  456.  
  457.    The pkiPublicationInfo control enables subscribers to control the
  458.    CA's publication of the certificate.  It is defined by the following
  459.    syntax:
  460.  
  461.    PKIPublicationInfo ::= SEQUENCE {
  462.         action     INTEGER {
  463.                      dontPublish (0),
  464.                      pleasePublish (1) },
  465.         pubInfos  SEQUENCE SIZE (1..MAX) OF SinglePubInfo OPTIONAL }
  466.  
  467.  
  468.           -- pubInfos MUST NOT be present if action is "dontPublish"
  469.           -- (if action is "pleasePublish" and pubInfos is omitted,
  470.           -- "dontCare" is assumed)
  471.  
  472.    SinglePubInfo ::= SEQUENCE {
  473.          pubMethod    INTEGER {
  474.              dontCare    (0),
  475.              x500        (1),
  476.              web         (2),
  477.              ldap        (3) },
  478.          pubLocation  GeneralName OPTIONAL }
  479.  
  480.    If the dontPublish option is chosen, the requester indicates that the
  481.    PKI should not publish the certificate (this may indicate that the
  482.    requester intends to publish the certificate him/herself).
  483.  
  484.    If the dontCare method is chosen, or if the PKIPublicationInfo
  485.    control is omitted from the request, the requester indicates that the
  486.    PKI MAY publish the certificate using whatever means it chooses.
  487.  
  488.    If the requester wishes the certificate to appear in at least some
  489.    locations but wishes to enable the CA to make the certificate
  490.    available in other repositories, set two values of SinglePubInfo for
  491.    pubInfos: one with x500, web or ldap value and one with dontCare.
  492.  
  493.    The pubLocation field, if supplied, indicates where the requester
  494.    would like the certificate to be found (note that the CHOICE within
  495.    GeneralName includes a URL and an IP address, for example).
  496.  
  497. 6.4  Archive Options Control
  498.  
  499.    The pkiArchiveOptions control enables subscribers to supply
  500.    information needed to establish an archive of the private key
  501.    corresponding to the public key of the certification request.  It is
  502.    defined by the following syntax:
  503.  
  504.  
  505.  
  506. Myers, et. al.              Standards Track                     [Page 9]
  507.  
  508. RFC 2511                  Internet X.509 CRMF                 March 1999
  509.  
  510.  
  511. PKIArchiveOptions ::= CHOICE {
  512.       encryptedPrivKey     [0] EncryptedKey,
  513.       -- the actual value of the private key
  514.       keyGenParameters     [1] KeyGenParameters,
  515.       -- parameters which allow the private key to be re-generated
  516.       archiveRemGenPrivKey [2] BOOLEAN }
  517.       -- set to TRUE if sender wishes receiver to archive the private
  518.       -- key of a key pair which the receiver generates in response to
  519.       -- this request; set to FALSE if no archival is desired.
  520.  
  521. EncryptedKey ::= CHOICE {
  522.       encryptedValue        EncryptedValue,
  523.       envelopedData     [0] EnvelopedData }
  524.       -- The encrypted private key MUST be placed in the envelopedData
  525.       -- encryptedContentInfo encryptedContent OCTET STRING.
  526.  
  527. EncryptedValue ::= SEQUENCE {
  528.       intendedAlg   [0] AlgorithmIdentifier  OPTIONAL,
  529.       -- the intended algorithm for which the value will be used
  530.       symmAlg       [1] AlgorithmIdentifier  OPTIONAL,
  531.       -- the symmetric algorithm used to encrypt the value
  532.       encSymmKey    [2] BIT STRING           OPTIONAL,
  533.       -- the (encrypted) symmetric key used to encrypt the value
  534.       keyAlg        [3] AlgorithmIdentifier  OPTIONAL,
  535.       -- algorithm used to encrypt the symmetric key
  536.       valueHint     [4] OCTET STRING         OPTIONAL,
  537.       -- a brief description or identifier of the encValue content
  538.       -- (may be meaningful only to the sending entity, and used only
  539.       -- if EncryptedValue might be re-examined by the sending entity
  540.       -- in the future)
  541.         encValue       BIT STRING }
  542.  
  543. KeyGenParameters ::= OCTET STRING
  544.  
  545.    An alternative to sending the key is to send the information about
  546.    how to re-generate the key using the KeyGenParameters choice (e.g.,
  547.    for many RSA implementations one could send the first random numbers
  548.    tested for primality). The actual syntax for this parameter may be
  549.    defined in a subsequent version of this document or in another
  550.    standard.
  551.  
  552.  
  553.  
  554.  
  555.  
  556.  
  557.  
  558.  
  559.  
  560.  
  561.  
  562. Myers, et. al.              Standards Track                    [Page 10]
  563.  
  564. RFC 2511                  Internet X.509 CRMF                 March 1999
  565.  
  566.  
  567. 6.5  OldCert ID Control
  568.  
  569.    If present, the OldCertID control specifies the certificate to be
  570.    updated by the current certification request.  The syntax of its
  571.    value is:
  572.  
  573.    CertId ::= SEQUENCE {
  574.          issuer           GeneralName,
  575.          serialNumber     INTEGER
  576.      }
  577.  
  578. 6.6  Protocol Encryption Key Control
  579.  
  580.    If present, the protocolEncrKey control specifies a key the CA is to
  581.    use in encrypting a response to CertReqMessages.
  582.  
  583.    This control can be used when a CA has information to send to the
  584.    subscriber that needs to be encrypted.  Such information includes a
  585.    private key generated by the CA for use by the subscriber.
  586.  
  587.    The encoding of protocolEncrKey SHALL be SubjectPublicKeyInfo.
  588.  
  589. 7.  Object Identifiers
  590.  
  591.    The OID id-pkix has the value
  592.  
  593.    id-pkix  OBJECT IDENTIFIER  ::= { iso(1) identified-organization(3)
  594.    dod(6) internet(1) security(5) mechanisms(5) pkix(7) }
  595.  
  596.    -- arc for Internet X.509 PKI protocols and their components
  597.    id-pkip  OBJECT IDENTIFIER :: { id-pkix pkip(5) }
  598.  
  599.    -- Registration Controls in CRMF
  600.    id-regCtrl  OBJECT IDENTIFIER ::= { id-pkip regCtrl(1) }
  601.    id-regCtrl-regToken            OBJECT IDENTIFIER ::= { id-regCtrl 1 }
  602.    id-regCtrl-authenticator       OBJECT IDENTIFIER ::= { id-regCtrl 2 }
  603.    id-regCtrl-pkiPublicationInfo  OBJECT IDENTIFIER ::= { id-regCtrl 3 }
  604.    id-regCtrl-pkiArchiveOptions   OBJECT IDENTIFIER ::= { id-regCtrl 4 }
  605.    id-regCtrl-oldCertID           OBJECT IDENTIFIER ::= { id-regCtrl 5 }
  606.    id-regCtrl-protocolEncrKey     OBJECT IDENTIFIER ::= { id-regCtrl 6 }
  607.  
  608.    -- Registration Info in CRMF
  609.    id-regInfo       OBJECT IDENTIFIER ::= { id-pkip id-regInfo(2) }
  610.    id-regInfo-asciiPairs    OBJECT IDENTIFIER ::= { id-regInfo 1 }
  611.    --with syntax OCTET STRING
  612.    id-regInfo-certReq       OBJECT IDENTIFIER ::= { id-regInfo 2 }
  613.    --with syntax CertRequest
  614.  
  615.  
  616.  
  617.  
  618. Myers, et. al.              Standards Track                    [Page 11]
  619.  
  620. RFC 2511                  Internet X.509 CRMF                 March 1999
  621.  
  622.  
  623. 8.  Security Considerations
  624.  
  625.    The security of CRMF delivery is reliant upon the security mechanisms
  626.    of the protocol or process used to communicate with CAs.  Such
  627.    protocol or process needs to ensure the integrity, data origin
  628.    authenticity, and privacy of the message.  Encryption of a CRMF is
  629.    strongly recommended if it contains subscriber-sensitive information
  630.    and if the CA has an encryption certificate that is known to the end
  631.    entity.
  632.  
  633. 9. References
  634.  
  635.    [HMAC] Krawczyk, H., Bellare, M. and R. Canetti, "HMAC:  Keyed-
  636.           Hashing for Message Authentication", RFC 2104, February 1997.
  637.  
  638. 10. Acknowledgments
  639.  
  640.    The authors gratefully acknowledge the contributions of Barbara Fox,
  641.    Warwick Ford, Russ Housley and John Pawling, whose review and
  642.    comments significantly clarified and improved the utility of this
  643.    specification.
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.  
  669.  
  670.  
  671.  
  672.  
  673.  
  674. Myers, et. al.              Standards Track                    [Page 12]
  675.  
  676. RFC 2511                  Internet X.509 CRMF                 March 1999
  677.  
  678.  
  679. 11. Authors' Addresses
  680.  
  681.    Michael Myers
  682.    VeriSign, Inc.
  683.    1390 Shorebird Way
  684.    Mountain View, CA  94019
  685.  
  686.    EMail: mmyers@verisign.com
  687.  
  688.  
  689.    Carlisle Adams
  690.    Entrust Technologies
  691.    750 Heron Road, Suite E08
  692.    Ottawa, Canada, K1V 1A7
  693.  
  694.    EMail: cadams@entrust.com
  695.  
  696.  
  697.    Dave Solo
  698.    Citicorp
  699.    666 Fifth Ave, 3rd Floor
  700.    New York, Ny 10103
  701.  
  702.    EMail: david.solo@citicorp.com
  703.  
  704.  
  705.    David Kemp
  706.    National Security Agency
  707.    Suite 6734
  708.    9800 Savage Road
  709.    Fort Meade, MD 20755
  710.  
  711.    EMail: dpkemp@missi.ncsc.mil
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730. Myers, et. al.              Standards Track                    [Page 13]
  731.  
  732. RFC 2511                  Internet X.509 CRMF                 March 1999
  733.  
  734.  
  735. Appendix A. Constructing "dhMAC"
  736.  
  737.    This Appendix describes the method for computing the bit string
  738.    "dhMAC" in the proof-of-possession POPOPrivKey structure for Diffie-
  739.    Hellman certificate requests.
  740.  
  741.    1. The entity generates a DH public/private key-pair.
  742.  
  743.        The DH parameters used to calculate the public SHOULD be those
  744.        specified in the CA's DH certificate.
  745.  
  746.        From CA's DH certificate:
  747.           CApub = g^x mod p   (where g and p are the established DH
  748.                                parameters and x is the CA's private
  749.                                DH component)
  750.        For entity E:
  751.           DH private value = y
  752.           Epub = DH public value = g^y mod p
  753.  
  754.    2. The MACing process will then consist of the following steps.
  755.  
  756.    a) The value of the certReq field is DER encoded, yielding a binary
  757.       string. This will be the 'text' referred to in [HMAC], the data to
  758.       which HMAC-SHA1 is applied.
  759.  
  760.    b) A shared DH secret is computed, as follows,
  761.                       shared secret = Kec = g^xy mod p
  762.  
  763.       [This is done by the entity E as CApub^y and by the CA as Epub^x,
  764.       where CApub is retrieved from the CA's DH certificate and Epub is
  765.       retrieved from the actual certification request.]
  766.  
  767.    c)  A key K is derived from the shared secret Kec and the subject and
  768.       issuer names in the CA's certificate as follows:
  769.  
  770.       K = SHA1(DER-encoded-subjectName | Kec | DER-encoded-issuerName)
  771.  
  772.       where "|" means concatenation.  If subjectName in the CA
  773.       certificate is an empty SEQUENCE then DER-encoded-subjectAltName
  774.       should be used instead; similarly, if issuerName is an empty
  775.       SEQUENCE then DER-encoded-issuerAltName should be used instead.
  776.  
  777.    d) Compute HMAC-SHA1 over the data 'text' as per [RFC2104] as:
  778.          SHA1(K XOR opad, SHA1(K XOR ipad, text))
  779.  
  780.  
  781.  
  782.  
  783.  
  784.  
  785.  
  786. Myers, et. al.              Standards Track                    [Page 14]
  787.  
  788. RFC 2511                  Internet X.509 CRMF                 March 1999
  789.  
  790.  
  791.       where,
  792.          opad (outer pad) = the byte 0x36 repeated 64 times
  793.       and
  794.          ipad (inner pad) = the byte 0x5C repeated 64 times.
  795.  
  796.  
  797.       Namely,
  798.  
  799.          (1) Append zeros to the end of K to create a 64 byte string
  800.              (e.g., if K is of length 16 bytes it will be appended with
  801.              48 zero bytes 0x00).
  802.          (2) XOR (bitwise exclusive-OR) the 64 byte string computed in
  803.              step (1) with ipad.
  804.          (3) Append the data stream 'text' to the 64 byte string
  805.              resulting from step (2).
  806.          (4) Apply SHA1 to the stream generated in step (3).
  807.          (5) XOR (bitwise exclusive-OR) the 64 byte string computed in
  808.              step (1) with opad.
  809.          (6) Append the SHA1 result from step (4) to the 64 byte string
  810.              resulting from step (5).
  811.          (7) Apply SHA1 to the stream generated in step (6) and output
  812.              the result.
  813.  
  814.           Sample code is also provided in [RFC2104, RFC2202].
  815.  
  816.    e) The output of (d) is encoded as a BIT STRING (the value "dhMAC").
  817.  
  818.    3. The proof-of-possession process requires the CA to carry out
  819.       steps (a) through (d) and then simply compare the result of step
  820.       (d) with what it received as the "dhMAC" value. If they match then
  821.       the following can be concluded.
  822.  
  823.        1) The Entity possesses the private key corresponding to the
  824.           public key in the certification request (because it needed the
  825.           private key to calculate the shared secret).
  826.  
  827.        2) Only the intended CA can actually verify the request (because
  828.           the CA requires its own private key to compute the same shared
  829.           secret).  This helps to protect from rogue CAs.
  830.  
  831. References
  832.  
  833.    [RFC2104] Krawczyk, H., Bellare, M. and R. Canetti, "HMAC:  Keyed
  834.              Hashing for Message Authentication", RFC 2104, February
  835.              1997.
  836.  
  837.    [RFC2202] Cheng, P. and R. Glenn, "Test Cases for HMAC-MD5 and HMAC-
  838.              SHA-1", RFC 2202, September 1997.
  839.  
  840.  
  841.  
  842. Myers, et. al.              Standards Track                    [Page 15]
  843.  
  844. RFC 2511                  Internet X.509 CRMF                 March 1999
  845.  
  846.  
  847. Acknowledgements
  848.  
  849.    The details of this Appendix were provided by Hemma Prafullchandra.
  850.  
  851.    Appendix B. Use of RegInfo for Name-Value Pairs
  852.  
  853.    The "value" field of the id-regInfo-utf8Pairs OCTET STRING (with
  854.    "tag" field equal to 12 and appropriate "length" field) will contain
  855.    a series of UTF8 name/value pairs.
  856.  
  857.    This Appendix lists some common examples of such pairs for the
  858.    purpose of promoting interoperability among independent
  859.    implementations of this specification.  It is recognized that this
  860.    list is not exhaustive and will grow with time and implementation
  861.    experience.
  862.  
  863. B.1. Example Name/Value Pairs
  864.  
  865.    When regInfo is used to convey one or more name-value pairs (via id-
  866.    regInfo-utf8Pairs), the first and subsequent pairs SHALL be
  867.    structured as follows:
  868.  
  869.       [name?value][%name?value]*%
  870.  
  871.    This string is then encoded into an OCTET STRING and placed into the
  872.    regInfo SEQUENCE.
  873.  
  874.    Reserved characters are encoded using the %xx mechanism of [RFC1738],
  875.    unless they are used for their reserved purposes.
  876.  
  877.    The following table defines a recommended set of named elements.
  878.    The value in the column "Name Value" is the exact text string that
  879.    will appear in the regInfo.
  880.  
  881.       Name Value
  882.       ----------
  883.       version            -- version of this variation of regInfo use
  884.       corp_company       -- company affiliation of subscriber
  885.       org_unit           -- organizational unit
  886.       mail_firstName     -- personal name component
  887.       mail_middleName    -- personal name component
  888.       mail_lastName      -- personal name component
  889.       mail_email         -- subscriber's email address
  890.       jobTitle           -- job title of subscriber
  891.       employeeID         -- employee identification number or string
  892.  
  893.    mailStop           -- mail stop
  894.       issuerName         -- name of CA
  895.  
  896.  
  897.  
  898. Myers, et. al.              Standards Track                    [Page 16]
  899.  
  900. RFC 2511                  Internet X.509 CRMF                 March 1999
  901.  
  902.  
  903.       subjectName        -- name of Subject
  904.       validity           -- validity interval
  905.  
  906.    For example:
  907.  
  908.       version?1%corp_company?Acme, Inc.%org_unit?Engineering%
  909.       mail_firstName?John%mail_lastName?Smith%jobTitle?Team Leader%
  910.       mail_email?john@acme.com%
  911.  
  912. B.1.1. IssuerName, SubjectName and Validity Value Encoding
  913.  
  914.    When they appear in id-regInfo-utf8Pairs syntax as named elements,
  915.    the encoding of values for issuerName, subjectName and validity SHALL
  916.    use the following syntax.  The characters [] indicate an optional
  917.    field, ::= and | have their usual BNF meanings, and all other symbols
  918.    (except spaces which are insignificant) outside non-terminal names
  919.    are terminals.  Alphabetics are case-sensitive.
  920.  
  921.       issuerName  ::= <names>
  922.       subjectName ::= <names>
  923.       <names>     ::= <name> | <names>:<name>
  924.  
  925.       <validity>  ::= validity ? [<notbefore>]-[<notafter>]
  926.       <notbefore> ::= <time>
  927.       <notafter>  ::= <time>
  928.  
  929.    Where <time> is UTC time in the form YYYYMMDD[HH[MM[SS]]].  HH, MM,
  930.    and SS default to 00 and are omitted if at the and of value 00.
  931.  
  932.    Example validity encoding:
  933.  
  934.       validity?-19991231%
  935.  
  936.    is a validity interval with no value for notBefore and a value of
  937.    December 31, 1999 for notAfter.
  938.  
  939.    Each name comprises a single character name form identifier followed
  940.    by a name value of one or UTF8 characters. Within a name value, when
  941.    it is necessary to disambiguate a character which has formatting
  942.    significance at an outer level, the escape sequence %xx SHALL be
  943.    used, where xx represents the hex value for the encoding concerned.
  944.    The percent symbol is represented by %%.
  945.  
  946.       <name> ::= X<xname>|O<oname>|E<ename>|D<dname>|U<uname>|I<iname>
  947.  
  948.    Name forms and value formats are as follows:
  949.  
  950.    X.500 directory name form (identifier "X"):
  951.  
  952.  
  953.  
  954. Myers, et. al.              Standards Track                    [Page 17]
  955.  
  956. RFC 2511                  Internet X.509 CRMF                 March 1999
  957.  
  958.  
  959.    <xname> ::= <rdns>
  960.       <rdns>  ::= <rdn> | <rdns> , <rdn>
  961.       <rdn>   ::= <avas>
  962.       <avas>  ::= <ava> | <avas> + <ava>
  963.       <ava>   ::= <attyp> = <avalue>
  964.       <attyp> ::= OID.<oid> | <stdat>
  965.  
  966.    Standard attribute type <stdat> is an alphabetic attribute type
  967.    identifier from the following set:
  968.  
  969.       C      (country)
  970.       L      (locality)
  971.       ST     (state or province)
  972.       O      (organization)
  973.       OU     (organizational unit)
  974.       CN     (common name)
  975.       STREET (street address)
  976.       E      (E-mail address).
  977.  
  978.    <avalue> is a name component in the form of a UTF8 character string
  979.    of 1 to 64 characters, with the restriction that in the IA5 subset of
  980.    UTF8 only the characters of ASN.1 PrintableString may be used.
  981.  
  982.    Other name form (identifier "O"):
  983.       <oname> ::= <oid> , <utf8string>
  984.  
  985.    E-mail address (rfc822name) name form (identifier "E"):
  986.       <ename> ::= <ia5string>
  987.  
  988.    DNS name form (identifier "D"):
  989.       <dname> ::= <ia5string>
  990.  
  991.    URI name form (identifier "U"):
  992.       <uname> ::= <ia5string>
  993.  
  994.    IP address (identifier "I"):
  995.       <iname> ::= <oid>
  996.  
  997.    For example:
  998.  
  999.       issuerName?XOU=Our CA,O=Acme,C=US%
  1000.       subjectName?XCN=John Smith, O=Acme, C=US, E=john@acme.com%
  1001.  
  1002. References
  1003.  
  1004.    [RFC1738]  Berners-Lee, T., Masinter, L. and M.  McCahill,
  1005.              "Uniform Resource Locators (URL)", RFC 1738, December 1994.
  1006.  
  1007.  
  1008.  
  1009.  
  1010. Myers, et. al.              Standards Track                    [Page 18]
  1011.  
  1012. RFC 2511                  Internet X.509 CRMF                 March 1999
  1013.  
  1014.  
  1015. Appendix C. ASN.1 Structures and OIDs
  1016.  
  1017. PKIXCRMF {iso(1) identified-organization(3) dod(6) internet(1)
  1018.    security(5) mechanisms(5) pkix(7) id-mod(0) id-mod-crmf(5)}
  1019.  
  1020. CRMF DEFINITIONS IMPLICIT TAGS ::=
  1021. BEGIN
  1022.  
  1023. IMPORTS
  1024.      -- Directory Authentication Framework (X.509)
  1025.         Version, AlgorithmIdentifier, Name, Time,
  1026.         SubjectPublicKeyInfo, Extensions, UniqueIdentifier
  1027.            FROM PKIX1Explicit88 {iso(1) identified-organization(3) dod(6)
  1028.                internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)
  1029.                id-pkix1-explicit-88(1)}
  1030.  
  1031.      -- Certificate Extensions (X.509)
  1032.         GeneralName
  1033.            FROM PKIX1Implicit88 {iso(1) identified-organization(3) dod(6)
  1034.                   internet(1) security(5) mechanisms(5) pkix(7) id-mod(0)
  1035.                   id-pkix1-implicit-88(2)}
  1036.  
  1037.      -- Cryptographic Message Syntax
  1038.         EnvelopedData
  1039.            FROM CryptographicMessageSyntax { iso(1) member-body(2)
  1040.                 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16)
  1041.                 modules(0) cms(1) };
  1042.  
  1043. CertReqMessages ::= SEQUENCE SIZE (1..MAX) OF CertReqMsg
  1044.  
  1045. CertReqMsg ::= SEQUENCE {
  1046.     certReq   CertRequest,
  1047.     pop       ProofOfPossession  OPTIONAL,
  1048.     -- content depends upon key type
  1049.     regInfo   SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue OPTIONAL }
  1050.  
  1051. CertRequest ::= SEQUENCE {
  1052.     certReqId     INTEGER,          -- ID for matching request and reply
  1053.     certTemplate  CertTemplate,  -- Selected fields of cert to be issued
  1054.     controls      Controls OPTIONAL }   -- Attributes affecting issuance
  1055.  
  1056. CertTemplate ::= SEQUENCE {
  1057.     version      [0] Version               OPTIONAL,
  1058.     serialNumber [1] INTEGER               OPTIONAL,
  1059.     signingAlg   [2] AlgorithmIdentifier   OPTIONAL,
  1060.     issuer       [3] Name                  OPTIONAL,
  1061.     validity     [4] OptionalValidity      OPTIONAL,
  1062.     subject      [5] Name                  OPTIONAL,
  1063.  
  1064.  
  1065.  
  1066. Myers, et. al.              Standards Track                    [Page 19]
  1067.  
  1068. RFC 2511                  Internet X.509 CRMF                 March 1999
  1069.  
  1070.  
  1071.     publicKey    [6] SubjectPublicKeyInfo  OPTIONAL,
  1072.     issuerUID    [7] UniqueIdentifier      OPTIONAL,
  1073.     subjectUID   [8] UniqueIdentifier      OPTIONAL,
  1074.     extensions   [9] Extensions            OPTIONAL }
  1075.  
  1076. OptionalValidity ::= SEQUENCE {
  1077.     notBefore  [0] Time OPTIONAL,
  1078.     notAfter   [1] Time OPTIONAL } --at least one MUST be present
  1079.  
  1080. Controls  ::= SEQUENCE SIZE(1..MAX) OF AttributeTypeAndValue
  1081.  
  1082. AttributeTypeAndValue ::= SEQUENCE {
  1083.     type         OBJECT IDENTIFIER,
  1084.     value        ANY DEFINED BY type }
  1085.  
  1086. ProofOfPossession ::= CHOICE {
  1087.     raVerified        [0] NULL,
  1088.     -- used if the RA has already verified that the requester is in
  1089.     -- possession of the private key
  1090.     signature         [1] POPOSigningKey,
  1091.     keyEncipherment   [2] POPOPrivKey,
  1092.     keyAgreement      [3] POPOPrivKey }
  1093.  
  1094. POPOSigningKey ::= SEQUENCE {
  1095.     poposkInput           [0] POPOSigningKeyInput OPTIONAL,
  1096.     algorithmIdentifier   AlgorithmIdentifier,
  1097.     signature             BIT STRING }
  1098.     -- The signature (using "algorithmIdentifier") is on the
  1099.     -- DER-encoded value of poposkInput.  NOTE: If the CertReqMsg
  1100.     -- certReq CertTemplate contains the subject and publicKey values,
  1101.     -- then poposkInput MUST be omitted and the signature MUST be
  1102.     -- computed on the DER-encoded value of CertReqMsg certReq.  If
  1103.     -- the CertReqMsg certReq CertTemplate does not contain the public
  1104.     -- key and subject values, then poposkInput MUST be present and
  1105.     -- MUST be signed.  This strategy ensures that the public key is
  1106.     -- not present in both the poposkInput and CertReqMsg certReq
  1107.     -- CertTemplate fields.
  1108.  
  1109. POPOSigningKeyInput ::= SEQUENCE {
  1110.     authInfo            CHOICE {
  1111.         sender              [0] GeneralName,
  1112.         -- used only if an authenticated identity has been
  1113.         -- established for the sender (e.g., a DN from a
  1114.         -- previously-issued and currently-valid certificate
  1115.         publicKeyMAC        PKMACValue },
  1116.         -- used if no authenticated GeneralName currently exists for
  1117.         -- the sender; publicKeyMAC contains a password-based MAC
  1118.         -- on the DER-encoded value of publicKey
  1119.  
  1120.  
  1121.  
  1122. Myers, et. al.              Standards Track                    [Page 20]
  1123.  
  1124. RFC 2511                  Internet X.509 CRMF                 March 1999
  1125.  
  1126.  
  1127.     publicKey           SubjectPublicKeyInfo }  -- from CertTemplate
  1128.  
  1129. PKMACValue ::= SEQUENCE {
  1130.    algId  AlgorithmIdentifier,
  1131.    -- algorithm value shall be PasswordBasedMac {1 2 840 113533 7 66 13}
  1132.    -- parameter value is PBMParameter
  1133.    value  BIT STRING }
  1134.  
  1135. PBMParameter ::= SEQUENCE {
  1136.       salt                OCTET STRING,
  1137.       owf                 AlgorithmIdentifier,
  1138.       -- AlgId for a One-Way Function (SHA-1 recommended)
  1139.       iterationCount      INTEGER,
  1140.       -- number of times the OWF is applied
  1141.       mac                 AlgorithmIdentifier
  1142.       -- the MAC AlgId (e.g., DES-MAC, Triple-DES-MAC [PKCS11],
  1143. }   -- or HMAC [RFC2104, RFC2202])
  1144.  
  1145. POPOPrivKey ::= CHOICE {
  1146.     thisMessage       [0] BIT STRING,
  1147.     -- posession is proven in this message (which contains the private
  1148.     -- key itself (encrypted for the CA))
  1149.     subsequentMessage [1] SubsequentMessage,
  1150.     -- possession will be proven in a subsequent message
  1151.     dhMAC             [2] BIT STRING }
  1152.     -- for keyAgreement (only), possession is proven in this message
  1153.     -- (which contains a MAC (over the DER-encoded value of the
  1154.     -- certReq parameter in CertReqMsg, which MUST include both subject
  1155.     -- and publicKey) based on a key derived from the end entity's
  1156.     -- private DH key and the CA's public DH key);
  1157.     -- the dhMAC value MUST be calculated as per the directions given
  1158.     -- in Appendix A.
  1159.  
  1160. SubsequentMessage ::= INTEGER {
  1161.     encrCert (0),
  1162.     -- requests that resulting certificate be encrypted for the
  1163.     -- end entity (following which, POP will be proven in a
  1164.     -- confirmation message)
  1165.     challengeResp (1) }
  1166.     -- requests that CA engage in challenge-response exchange with
  1167.     -- end entity in order to prove private key possession
  1168.  
  1169. -- Object identifier assignments --
  1170.  
  1171. id-pkix  OBJECT IDENTIFIER  ::= { iso(1) identified-organization(3)
  1172. dod(6) internet(1) security(5) mechanisms(5) 7 }
  1173.  
  1174. -- arc for Internet X.509 PKI protocols and their components
  1175.  
  1176.  
  1177.  
  1178. Myers, et. al.              Standards Track                    [Page 21]
  1179.  
  1180. RFC 2511                  Internet X.509 CRMF                 March 1999
  1181.  
  1182.  
  1183. id-pkip  OBJECT IDENTIFIER ::= { id-pkix 5 }
  1184.  
  1185. -- Registration Controls in CRMF
  1186. id-regCtrl OBJECT IDENTIFIER ::= { id-pkip 1 }
  1187.  
  1188. -- The following definition may be uncommented for use with
  1189. -- ASN.1 compilers which do not understand UTF8String.
  1190.  
  1191. -- UTF8String ::= [UNIVERSAL 12] IMPLICIT OCTET STRING
  1192.  
  1193. id-regCtrl-regToken OBJECT IDENTIFIER ::= { id-regCtrl 1 }
  1194. --with syntax:
  1195. RegToken ::= UTF8String
  1196.  
  1197. id-regCtrl-authenticator OBJECT IDENTIFIER ::= { id-regCtrl 2 }
  1198. --with syntax:
  1199. Authenticator ::= UTF8String
  1200.  
  1201. id-regCtrl-pkiPublicationInfo OBJECT IDENTIFIER ::= { id-regCtrl 3 }
  1202. --with syntax:
  1203.  
  1204. PKIPublicationInfo ::= SEQUENCE {
  1205.    action     INTEGER {
  1206.                 dontPublish (0),
  1207.                 pleasePublish (1) },
  1208.    pubInfos  SEQUENCE SIZE (1..MAX) OF SinglePubInfo OPTIONAL }
  1209.      -- pubInfos MUST NOT be present if action is "dontPublish"
  1210.      -- (if action is "pleasePublish" and pubInfos is omitted,
  1211.      -- "dontCare" is assumed)
  1212.  
  1213. SinglePubInfo ::= SEQUENCE {
  1214.     pubMethod    INTEGER {
  1215.         dontCare    (0),
  1216.         x500        (1),
  1217.         web         (2),
  1218.         ldap        (3) },
  1219.     pubLocation  GeneralName OPTIONAL }
  1220.  
  1221. id-regCtrl-pkiArchiveOptions     OBJECT IDENTIFIER ::= { id-regCtrl 4 }
  1222. --with syntax:
  1223. PKIArchiveOptions ::= CHOICE {
  1224.     encryptedPrivKey     [0] EncryptedKey,
  1225.     -- the actual value of the private key
  1226.     keyGenParameters     [1] KeyGenParameters,
  1227.     -- parameters which allow the private key to be re-generated
  1228.     archiveRemGenPrivKey [2] BOOLEAN }
  1229.     -- set to TRUE if sender wishes receiver to archive the private
  1230.     -- key of a key pair which the receiver generates in response to
  1231.  
  1232.  
  1233.  
  1234. Myers, et. al.              Standards Track                    [Page 22]
  1235.  
  1236. RFC 2511                  Internet X.509 CRMF                 March 1999
  1237.  
  1238.  
  1239.     -- this request; set to FALSE if no archival is desired.
  1240.  
  1241. EncryptedKey ::= CHOICE {
  1242.     encryptedValue        EncryptedValue,
  1243.     envelopedData     [0] EnvelopedData }
  1244.     -- The encrypted private key MUST be placed in the envelopedData
  1245.     -- encryptedContentInfo encryptedContent OCTET STRING.
  1246.  
  1247.  
  1248. EncryptedValue ::= SEQUENCE {
  1249.     intendedAlg   [0] AlgorithmIdentifier  OPTIONAL,
  1250.     -- the intended algorithm for which the value will be used
  1251.     symmAlg       [1] AlgorithmIdentifier  OPTIONAL,
  1252.     -- the symmetric algorithm used to encrypt the value
  1253.     encSymmKey    [2] BIT STRING           OPTIONAL,
  1254.     -- the (encrypted) symmetric key used to encrypt the value
  1255.     keyAlg        [3] AlgorithmIdentifier  OPTIONAL,
  1256.     -- algorithm used to encrypt the symmetric key
  1257.     valueHint     [4] OCTET STRING         OPTIONAL,
  1258.     -- a brief description or identifier of the encValue content
  1259.     -- (may be meaningful only to the sending entity, and used only
  1260.     -- if EncryptedValue might be re-examined by the sending entity
  1261.     -- in the future)
  1262.     encValue       BIT STRING }
  1263.     -- the encrypted value itself
  1264.  
  1265. KeyGenParameters ::= OCTET STRING
  1266.  
  1267. id-regCtrl-oldCertID          OBJECT IDENTIFIER ::= { id-regCtrl 5 }
  1268. --with syntax:
  1269. OldCertId ::= CertId
  1270.  
  1271. CertId ::= SEQUENCE {
  1272.     issuer           GeneralName,
  1273.     serialNumber     INTEGER }
  1274.  
  1275. id-regCtrl-protocolEncrKey    OBJECT IDENTIFIER ::= { id-regCtrl 6 }
  1276. --with syntax:
  1277. ProtocolEncrKey ::= SubjectPublicKeyInfo
  1278.  
  1279. -- Registration Info in CRMF
  1280. id-regInfo OBJECT IDENTIFIER ::= { id-pkip 2 }
  1281.  
  1282. id-regInfo-utf8Pairs    OBJECT IDENTIFIER ::= { id-regInfo 1 }
  1283. --with syntax
  1284. UTF8Pairs ::= UTF8String
  1285.  
  1286. id-regInfo-certReq       OBJECT IDENTIFIER ::= { id-regInfo 2 }
  1287.  
  1288.  
  1289.  
  1290. Myers, et. al.              Standards Track                    [Page 23]
  1291.  
  1292. RFC 2511                  Internet X.509 CRMF                 March 1999
  1293.  
  1294.  
  1295. --with syntax
  1296. CertReq ::= CertRequest
  1297.  
  1298. END
  1299.  
  1300.  
  1301.  
  1302.  
  1303.  
  1304.  
  1305.  
  1306.  
  1307.  
  1308.  
  1309.  
  1310.  
  1311.  
  1312.  
  1313.  
  1314.  
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.  
  1325.  
  1326.  
  1327.  
  1328.  
  1329.  
  1330.  
  1331.  
  1332.  
  1333.  
  1334.  
  1335.  
  1336.  
  1337.  
  1338.  
  1339.  
  1340.  
  1341.  
  1342.  
  1343.  
  1344.  
  1345.  
  1346. Myers, et. al.              Standards Track                    [Page 24]
  1347.  
  1348. RFC 2511                  Internet X.509 CRMF                 March 1999
  1349.  
  1350.  
  1351. Full Copyright Statement
  1352.  
  1353.    Copyright (C) The Internet Society (1999).  All Rights Reserved.
  1354.  
  1355.    This document and translations of it may be copied and furnished to
  1356.    others, and derivative works that comment on or otherwise explain it
  1357.    or assist in its implementation may be prepared, copied, published
  1358.    and distributed, in whole or in part, without restriction of any
  1359.    kind, provided that the above copyright notice and this paragraph are
  1360.    included on all such copies and derivative works.  However, this
  1361.    document itself may not be modified in any way, such as by removing
  1362.    the copyright notice or references to the Internet Society or other
  1363.    Internet organizations, except as needed for the purpose of
  1364.    developing Internet standards in which case the procedures for
  1365.    copyrights defined in the Internet Standards process must be
  1366.    followed, or as required to translate it into languages other than
  1367.    English.
  1368.  
  1369.    The limited permissions granted above are perpetual and will not be
  1370.    revoked by the Internet Society or its successors or assigns.
  1371.  
  1372.    This document and the information contained herein is provided on an
  1373.    "AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
  1374.    TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
  1375.    BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
  1376.    HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
  1377.    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  
  1392.  
  1393.  
  1394.  
  1395.  
  1396.  
  1397.  
  1398.  
  1399.  
  1400.  
  1401.  
  1402. Myers, et. al.              Standards Track                    [Page 25]
  1403.  
  1404.