<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    鷹翔宇空

    學習和生活

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks

    本文引自: http://www.infosecurity.org.cn/article/pki/standard/23547.html

    ?

    此備忘錄的狀況
    此文檔為因特網社區詳細描述了一個因特網標準途徑 協議 ,并且請求改善的討論和建
    議。為了確保此 協議 的標準化狀態,請參考當前版本的因特網官方 協議 標準( STD1 )。本備
    忘錄的發布是不受限制的。

    版權通知
    版權所屬因特網社會( 1999 ),保留全部權力。
    目錄
    1
    摘要 2
    2
    略讀
    2
    3
    證書請求信息 (CertReqMessage) 的語法
    2
    4
    擁有私鑰的證明
    (POP) 3
    4
    1 簽名密鑰
    3
    4
    2 加密密鑰
    3
    4
    3協議 密鑰
    4
    4
    4POP 語法
    4
    5CertRequest
    語法
    6
    6Controls
    語法
    7
    6
    1 注冊號( RegistrationToken )控制
    7
    6
    2 鑒定者( Authenticator )控制
    7
    6
    4 文檔選項( ArchiveOptions )控制
    8
    6
    5 舊證書 ID OldCertID )控制
    9
    6
    6協議 加密密鑰( ProtocolEncryptionKey )控制
    9
    7
    對象標識符( ObjectIdentifiers
    10
    8
    對于安全的考慮
    10
    9
    參考
    10
    10
    謝辭
    11
    附錄 A .構造
    dhMAC 11
    AppendixB.UseofRegInfoforName-ValuePairs 12
    AppendixC.ASN.1StructuresandOIDs 15
    FullCopyrightStatement 21

    1
    摘要

    本文描述了證書請求消息格式 (CRMF) 。它被用來向 CA 傳遞一個產生 X.509 證書請求
    (
    可能通過 RA) 。請求消息一般包括公鑰和有關的登記信息。

    2
    略讀
    證書請求構成的步驟如下:
    1)
    產生 CertRequest 值,其值包括:公鑰,所有或部分的終端實體( EE )的名字,其他所
    要求的證書值域,以及與登記過程相連系的控制信息。
    2)
    可以通過計算 CertRequest 的值來證明擁有與所請求的證書的公鑰相連系的私鑰,即可
    計算出 POP proofofpossession ,擁有私鑰的證明)的值。
    3)
    以上兩項所需要的其他登記信息,這些信息和 POP 值, CertRequest 結構組成證書請求
    信息。
    4)
    證書請求信息被秘密傳遞給 CA ,傳遞的方法不是本文敘述的范圍。

    3
    證書請求信息 (CertReqMessage) 的語法
    證書請求信息由證書請求,一個可選的檢驗項,以及一個可選的登記信息項。

    CertReqMessages::=SEQUENCESIZE(1..MAX)OFCertReqMsg

    CertReqMsg::=SEQUENCE{
    certReqCertRequest,
    popProofOfPossessionOPTIONAL,
    --
    其內容依賴于密鑰類型
    regInfoSEQUENCESIZE(1..MAX)ofAttributeTypeAndValueOPTIONAL}

    POP
    用來證明證書請求者確實擁有所對應的私鑰。此項可由 certReq 計算出來,其內容和結
    構隨公鑰算法的類型和運作模式的改變而改變。 regInfo 項僅包括與證書請求有關的補充信
    息。它還可包括請求者的聯系信息,布告信息,或對證書請求有用的輔助信息。直接與證書
    內容有關的信息應該包括在 certReq 中。然而若 RA 包含另外的 certReq 內容,這可以使 pop
    項無效。因此其余證書想要的數據可以由 regInfo 提供。


    4
    擁有私鑰的證明 (POP)
    為了防止某些攻擊以及允許 CA/RA 檢驗終端實體和密鑰對之間對應的有效性, PKI

    理操作使終端實體有能力證明擁有 ( 也就是說能用 ) 與證書公鑰所對應的私鑰。 CA/RA 在證書
    交換中可自由選擇如何實施 POP (例如帶外的方法或 CRMF 的帶內的方法),也就是說這可
    以是一個策略問題。然而,因為現在有許多非 PKIX 的操作 協議 在使用(例如許多電子郵件
    協議
    ),它們并不檢驗終端實體和私鑰之間的對應性,這要求 CA/RA 必須通過一些方法來實
    POP 。這種對應性僅能被 CA/RA 假設為已證實,直到普遍存在可操作的 協議 (如簽名,
    加密, 協議 密鑰對),這樣才能證明對應性的存在。因此若 CA/RA 沒有證實對應性,在英特
    PKI 中的證書將沒有意義。
    依照證書所要求的密鑰類型, POP 可用不同方法實現。若密鑰可用于多種目的(如 RSA
    密鑰),那么 POP 可用任何一種方式實現。

    本文考慮到 POP CA RA 或兩者都驗證的情況。一些策略可能要求 CA 在認證過程
    中檢驗 POP 。在此過程中, RA 必須提交 CertRequest POP CA ,并且作為一種選擇也
    可以檢驗 POP 。若策略不要求 CA 檢驗 POP ,那么 RA 應該提交終端實體的請求和證明給
    CA
    。如果這不可能的話(例如, RA 用帶外的方法檢驗 POP ),那么 RA 可以向 CA 證明所
    要求的證明已經被驗證。若 CA 使用帶外的方法證明 POP (例如人工傳遞 CA 所生成私鑰),
    那么 POP 項不會被用。

    4
    1 簽名密鑰
    對簽名密鑰來說,終端實體用簽名來證明擁有私鑰。

    4
    2 加密密鑰
    對加密密鑰來說,終端實體提供私鑰給 CA/RA ,或為了證明擁有私鑰被要求解密。解
    密通過直接或間接來完成。直接的方法是 RA/CA 發布一個隨機測試,終端實體被要求立即
    做出回答。間接的方法是發布一個被加密的證書,讓終端實體來證明它有能力對證書解密。
    CA
    發布的證書使用一種僅能被指定終端實體使用的格式。

    4
    3協議 密鑰
    協議 密鑰來說,終端實體使用 4.2 節中的 3 種方法來加密密鑰。對于直接和間接的方
    法,為了證明終端實體擁有私鑰(也就是對加密的證書解密或對發布的測試做出回答),終
    端實體和 PKI 管理機構(即 CA/RA )必須建立一個共享的密鑰。注意:這并不需要任何限
    制強加在被 CA 鑒定的密鑰上,特別是對于 Diffie-Hellman 密鑰,終端實體可自由選擇它的
    算法參數,例如必要時 CA 能產生一個帶有正確參數的短期密鑰對(如一次性密鑰對)。
    終端實體也可以 MAC (與密鑰有關的單向散列函數稱為 MAC ,即消息鑒別碼)證書請
    求(使用共享的由 Diffie-Hellman 算法計算出的密鑰)作為第四個可選擇的事物來證明 POP
    只要 CA 已經有了 DH 證書,這個證書已經被終端實體知道,并且終端實體愿意使用 CA
    DH
    參數,這個選項就可以使用。

    4
    4POP 語法
    ProofOfPossession::=CHOICE{
    raVerified[0]NULL,
    --
    用于是否 RA 已經證明請求者擁有私鑰
    signature[1]POPOSigningKey,
    keyEncipherment[2]POPOPrivKey,
    keyAgreement[3]POPOPrivKey}
    這個選項可以使用
    POPOSigningKey::=SEQUENCE{
    poposkInput[0]POPOSigningKeyInputOPTIONAL,
    algorithmIdentifierAlgorithmIdentifier,
    signatureBITSTRING}
    --
    簽名 signature (使用 algorithmIdentifier 所指的算法)是基于 poposkInput DER
    編碼值。

    --
    注意:如果 certReq 中的 CertTemplate 結構包含主體和公鑰值,那么
    --poposkInput
    必須省略掉,并且 signature 必須通過 certReq DER 編碼值計算出來。
    --
    如果 certReq 中的 CertTemplate 結構沒有包含主體和公鑰值, poposkInput 必須存在
    --
    并被簽名。
    --
    這種策略保證了公鑰不會同時存在于 poposkInput certReq 中的 CertTemplate
    構。

    POPOSigningKeyInput::=SEQUENCE{
    authInfoCHOICE{
    sender[0]GeneralName,
    --
    用于當存在一個被證實的 sender 的標識符時(例如一個來自于以前頒發并且
    現在
    --
    仍有效的證書的 DN (可辨認名))
    publicKeyMACPKMACValue},
    --
    用于當現在不存在一個被證實的 sender GeneralName 時;
    --publicKeyMAC
    包括一個基于密碼的消息鑒別碼( MAC ),
    --
    它是基于 publicKey DER 編碼值。
    publicKeySubjectPublicKeyInfo}

    PKMACValue::=SEQUENCE{
    algIdAlgorithmIdentifier,
    --
    算法是基于密碼的 MAC{1284011353376613} ,參數為 PBMParameter
    valueBITSTRING}

    POPOPrivKey::=CHOICE{
    thisMessage[0]BITSTRING,
    --
    此項含有擁有私鑰的證明,并且此項包括私鑰本身(被加密)。
    subsequentMessage[1]SubsequentMessage,
    dhMAC[2]BITSTRING}
    --
    僅用于 協議 密鑰,在此項中證明擁有私鑰,此項包括一個基于來自終端實體的私
    有的
    --DH
    鑰和 CA 的公共的 DH 鑰的密鑰的 MAC (基于 certReq 的參數的 DER 編碼值,

    --
    必須都包括 subject 和公鑰); dhMAC 必須根據附錄 A 中的說明計算出來。

    SubsequentMessage::=INTEGER{
    encrCert(0),
    --
    要求結果證書為了終端實體被加密,接著 POP 將被一個確認消息所證實
    challengeResp(1)}
    --
    要求為了證明擁有私鑰, CA/RA 參與進和終端實體之間的回答挑戰的交流。
    含有此規格的 協議 若要成為一個完整的 協議 將包括確認和回答挑戰的消息。

    4
    4 1 基于密碼的 MAC 的使用
    publicKeyMAC 被用于 POPOSigningKeyInput 中來證明請求的真實性,下述的算法將
    被使用。

    PBMParameter::=SEQUENCE{
    saltOCTETSTRING,
    owfAlgorithmIdentifier,
    --
    使用單向函數的算法標識符(建議使用 SHA-1 算法 )
    iterationCountINTEGER,
    --OWF
    被應用的次數

    macAlgorithmIdentifier
    --MAC
    的算法標識符 ( 例如 DES-MAC,Triple-DES-MAC[PKCS11],
    }--
    HMAC[RFC2104,RFC2202])

    使用 PBMParameter 來計算 publicKeyMAC ,由此來證明公鑰證書請求來源的過程可以

    由兩部分組成。第一部分使用共享的秘密信息來生成一個 MAC 密鑰。第二部分散列公鑰,
    并用 MAC 密鑰來產生一個確認值。
    第一部分算法的初始化假設存在一個共享的分布在一個可信任的位于 CA/RA 和終端實
    體之間的方式的秘密。 salt 值被加之與此共享的秘密,并使用 iterationCount 次單向散列函
    數。這樣,此共享的秘密作為第一次輸入,接下來每一次重復計算中,上一次的輸出作為這
    一次的輸入,最后產生密鑰 K
    在第二部分中, K 和公鑰作為輸入來產生 publicKeyMAC ,如下所示:
    publicKeyMAC=Hash(KXORopad,Hash(KXORipad,publickey))
    opad ipad 定義于
    RFC2104

    單向散列函數的算法標識符是 SHA-1{13143226} MAC 的算法標識符是
    HMAC-SHA1{136155812}


    5CertRequest
    語法
    CertRequest
    由請求標識符、證書內容模板和一組可選的控制信息組成。

    CertRequest::=SEQUENCE{
    certReqIdINTEGER,--
    使請求和回答相匹配的標識符
    certTemplateCertTemplate,--
    所發布證書的選擇域
    controlsControlsOPTIONAL}--
    有關證書發布的屬性信息


    CertTemplate::=SEQUENCE{
    version[0]VersionOPTIONAL,
    serialNumber[1]INTEGEROPTIONAL,
    signingAlg[2]AlgorithmIdentifierOPTIONAL,
    issuer[3]NameOPTIONAL,
    validity[4]OptionalValidityOPTIONAL,
    subject[5]NameOPTIONAL,
    publicKey[6]SubjectPublicKeyInfoOPTIONAL,
    issuerUID[7]UniqueIdentifierOPTIONAL,
    subjectUID[8]UniqueIdentifierOPTIONAL,
    extensions[9]ExtensionsOPTIONAL}

    OptionalValidity::=SEQUENCE{
    notBefore[0]TimeOPTIONAL,
    notAfter[1]TimeOPTIONAL}--
    至少存在一個

    Time::=CHOICE{
    utcTimeUTCTime,
    generalTimeGeneralizedTime}

    6Controls
    語法
    證書請求的產生可以包括一個或多個有關請求過程的控制值。

    Controls::=SEQUENCESIZE(1..MAX)OFAttributeTypeAndValue

    以下的控制被定義為: regToken authenticator pkiPublicationInfo pkiArchiveOptions
    oldCertID
    protocolEncrKey (這些項被認為可以超時擴展)。

    6
    1 注冊號( RegistrationToken )控制
    regToken
    控制包含以前的信息(或是基于秘密的評估或是基于了解的信息),這些信息
    往往被 CA 用于在頒發證書前驗證請求者身份。一收到包含 regToken 的證書請求, CA 就驗
    證這些信息,以便確認在證書請求中的聲稱的身份。
    RegToken
    可以被 CA 生成,并在帶外提供給訂戶,或者對 CA 和訂戶都可用。任何帶
    外的交換的安全性應該足夠應付如 CA 接受了某人的干擾信息而沒有接受原本訂戶的信息
    這樣的冒險。
    RegToken
    控制將典型的僅被用于終端實體進入 PKI 的初始化上,而 authenticator 控制
    (見 6 2 節)將不僅用于初始化,而且將用于接下來的證書請求上。
    在一些使用例子中, regToken 可能是一個文本字符串或是一個數,如隨機數。這個值接
    下來能被作為二進制數或是一個二進制數的字符串表示來編碼。不管數的屬性,為了確保值
    的統一的編碼, regToken 的編碼將用 UTF8

    6
    2 鑒定者( Authenticator )控制
    Authenticator
    控制包含一些用于行為基礎的信息,這些信息用來在和 CA 交流中產生非
    密碼的身份檢查。例子有:母親未婚時的名字,社會安全號的最后 4 個數字,或其他和訂戶
    CA 共享的 知識 信息;這些信息的散列;或其他用于該目的的信息。 Authenticator 控制值
    可由 CA 或訂戶生成。
    在一些使用例子中, Authenticator 可能是一個文本字符串或是一個數,如隨機數。這個
    值接下來能被作為二進制數或是一個二進制數的字符串表示來編碼。不管數的屬性,為了確
    保值的統一的編碼, Authenticator 的編碼將用 UTF8

    6
    3 頒發信息( PublicationInformation )控制
    pkiPublicationInfo
    控制使訂戶可以控制 CA 證書的發布。它被定義為如下語法:

    PKIPublicationInfo::=SEQUENCE{
    actionINTEGER{
    dontPublish(0),
    pleasePublish(1)},
    pubInfosSEQUENCESIZE(1..MAX)OFSinglePubInfoOPTIONAL}

    --
    如果 action "dontPublish" pubInfos 必須不存在。
    --(
    如果 action "pleasePublish" ,并且 pubInfos 被刪除,
    --action
    被設為 "dontCare" 。)

    SinglePubInfo::=SEQUENCE{
    pubMethodINTEGER{
    dontCare(0),
    x500(1),
    web(2),
    ldap(3)},
    pubLocationGeneralNameOPTIONAL}
    如果選擇 dontPublish 項,請求者指示 PKI 不要發布證書(這表示請求者要自己發布證
    書)。
    如果選擇 dontCare 項,或者如果 PKIPublicationInfo 控制被從請求中刪除,請求者指示
    PKI
    可以用任何它選擇的方法發布證書。
    如果請求者除了希望 CA 能夠在其他存放處使證書有效,還希望證書至少出現在一些地
    方,那就要為 pubInfos 設置兩個 SinglePubInfo 值,一個是 x500 web ldap ,另一個是
    dontCare

    如果 pubLocation 被用的話,此項表示請求者愿意證書在這些地方被發現(注意,
    GeneralName
    可包括例如 URL IP 地址等)。

    6
    4 文檔選項( ArchiveOptions )控制
    pkiArchiveOptions
    控制使訂戶能夠應用這樣的信息,這些信息用于建立一個對應于證書
    請求公鑰的私鑰的文檔。它的語法定義如下:

    PKIArchiveOptions::=CHOICE{
    encryptedPrivKey[0]EncryptedKey,
    --
    私鑰的實際值
    keyGenParameters[1]KeyGenParameters,
    --
    使私鑰能夠重新生成的參數
    archiveRemGenPrivKey[2]BOOLEAN}
    --
    如果 sender 希望 receiver 保存 receiver 對應請求所生成的密鑰對中的私鑰,則設為
    真。
    --
    如果不要被保存,則設為假。


    EncryptedKey::=CHOICE{
    encryptedValueEncryptedValue,
    envelopedData[0]EnvelopedData}
    --
    加密私鑰必須被放在 envelopedData


    EncryptedValue::=SEQUENCE{
    intendedAlg[0]AlgorithmIdentifierOPTIONAL,
    --
    被加密的值被使用的意指的算法
    symmAlg[1]AlgorithmIdentifierOPTIONAL,
    --
    用于加密值的對稱算法
    encSymmKey[2]BITSTRINGOPTIONAL,
    --
    用于加密值的對稱密鑰(已加密)
    keyAlg[3]AlgorithmIdentifierOPTIONAL,
    --
    用于加密對稱密鑰的算法
    valueHint[4]OCTETSTRINGOPTIONAL,
    --
    一個有關 encValue 內容的簡單的描述或標識符(它可能只對發送終端有意義,
    --
    并且只有 EncryptedValue 以后可以被發送終端重新檢驗,它才可以用)
    encValueBITSTRING}


    KeyGenParameters::=OCTETSTRING

    一種發送密鑰的選擇是發送有關如何使用 KeyGenParameters 選項重新產生密鑰的信息
    (例如,對許多 RSA 實行來說,可以發送第一個最初測試的隨機數)。對于這個參數的實際
    的語法可以定義在這個文檔的接下來版本中,或定義在另一個標準中。

    6
    5 舊證書 ID OldCertID )控制
    如此項存在,則 OldCertID 詳述了被當前證書請求所更新的證書。其語法為:

    CertId::=SEQUENCE{
    issuerGeneralName,
    serialNumberINTEGER
    }

    6
    6協議 加密密鑰( ProtocolEncryptionKey )控制
    如此項存在,則 protocolEncrKey 詳述了一個 CA 用于加密對 CertReqMessages 的回答的
    密鑰。此項能被用于當 CA 有發送給訂戶的需要加密的信息。這些信息中包括一個由 CA
    成的讓訂戶使用的私鑰。 protocolEncrKey 的編碼應為 SubjectPublicKeyInfo

    7
    對象標識符( ObjectIdentifiers
    id-pkix
    的對象標識符為:
    id-pkixOBJECTIDENTIFIER::={iso(1)identified-organization(3)
    dod(6)internet(1)security(5)mechanisms(5)pkix(7)}

    --
    用于 InternetX.509PKI協議 及其組件的部分
    id-pkipOBJECTIDENTIFIER::{id-pkixpkip(5)}

    --
    CRMF 中的注冊登記控制( RegistrationControls
    id-regCtrlOBJECTIDENTIFIER::={id-pkipregCtrl(1)}
    id-regCtrl-regTokenOBJECTIDENTIFIER::={id-regCtrl1}
    id-regCtrl-authenticatorOBJECTIDENTIFIER::={id-regCtrl2}
    id-regCtrl-pkiPublicationInfoOBJECTIDENTIFIER::={id-regCtrl3}
    id-regCtrl-pkiArchiveOptionsOBJECTIDENTIFIER::={id-regCtrl4}
    id-regCtrl-oldCertIDOBJECTIDENTIFIER::={id-regCtrl5}
    id-regCtrl-protocolEncrKeyOBJECTIDENTIFIER::={id-regCtrl6}

    --CRMF
    中的注冊信息( RegistrationInfo
    id-regInfoOBJECTIDENTIFIER::={id-pkipid-regInfo(2)}
    id-regInfo-asciiPairsOBJECTIDENTIFIER::={id-regInfo1}
    --
    使用 OCTETSTRING
    id-regInfo-certReqOBJECTIDENTIFIER::={id-regInfo2}
    --
    使用
    CertRequest

    8
    對于安全的考慮

    CRMF
    傳送的安全性是基于 協議 或用于和 CA 通信的進程的安全結構。這些 協議 或進程
    需要確保完整性,數據來源的真實性和信息的隱私。如果一個 CRMF 包括敏感的訂戶信息,
    并且 CA 有一個終端實體所知的加密證書,那么強烈建議使用 CRMF 加密。

    9
    參考
    [HMAC]Krawczyk
    H. Bellare M. R.Canetti "HMAC:Keyed-HashingforMessage
    Authentication"
    “HMAC :為了保證信息真實性的密鑰 Hash 散列 ), RFC2104,1997.2


    10
    謝辭
    作者非常感謝 BarbaraFox WarwickFord RussHousley JohnPawling 所做的貢獻。
    他們的復審和建議進一步闡明和改善了本篇的實用功能。



    附錄 A .構造 dhMAC
    本附錄描述了計算 Diffie-Hellman 證書請求的 POPOPrivKey 結構中的 dhMAC 位串的方

    法。

    1
    終端產生一個 DH / 私鑰對
    用于計算公鑰的 DH 參數被詳述在 CA DH 證書中。
    CA DH 證書中, CApub=g^xmodp ,這里 g p 是已有的 DH 參數,而 x
    CA
    私有的 DH 組件。
    對終端 E 來說, DHprivatevalue=y Epub=DHpublicvalue=g^ymodp

    2MAC
    進程有以下步驟組成
    a
    certReq 項的值用 DER 編碼,產生一個二進制串。這就是在 [HMAC] 中提
    到的 ‘text’ ,它是 HMAC-SHA1 算法所應用的數據。
    b
    計算共享的 DHsecret ,如下所示: sharedsecret=Kec=g^xymodp 。終端 E
    計算 CApub^y CApub 是來自于 CA DH 證書; CA 計算 Epub^x Epub 是來自

    于證書請求。
    c
    密鑰 K 來自于 Kec ,證書請求者名稱,證書頒發者名稱。如下所示: K=
    SHA1(DER-encoded-subjectName|Kec|DER-encoded-issuerName)
    ,這里 ‘|’ 的意

    思是級連。如果在 CA 證書中 subjectName 為空,則替代使用
    DER-encoded-subjectAltName
    。如果 CA 證書中 issuerName 為空,則替代使用
    DER-encoded-issuerAltName

    d
    按照 RFC2104 來用數據 'text' 計算 HMAC-SHA1 SHA1(KXORopad,SHA1(K
    ORipad,text))
    ,此處 opad=0x36 重復 64 次, ipad=0x5C 重復 64 次。也就是

    說,
    1 K 的末端填充 0 ,來生成一個 64 字節的串(例如,若 K 16 字節長,
    就要填充 48 0 字節)。
    2 XOR (異或)第 1 步生成的 64 字節 K ipad
    3 ‘text’ 加到第 2 步生成的 64 字節串上。
    4 對第 3 步生成的字節串應用 SHA1 算法。
    5 XOR 1 步生成的 64 字節 K opad
    6 把第 4 步中 SHA1 生成的結果加到第 5 步生成的 64 字節串上。
    7 使用 SHA1 算法計算第 6 步中的產生值,最后輸出結果。
    例子代碼在 RFC2104,RFC2202 中有。
    e
    d )的輸出被編碼為位串( "dhMAC")

    3
    驗證擁有私鑰( proof-of-possession )的進程需要 CA 執行
    執行從 a )到 d ),然后比較 d )步的結果和 CA 收到的 "dhMAC" 值。如果它們匹配,則
    有如下結論:
    1
    終端擁有與證書請求中的公鑰對應的私鑰(因為終端需要私鑰來計算 sharedsecret )。
    2
    只有 CA 能驗證請求( CA 需要自己的私鑰來計算同樣的 sharedsecret )。這有助于防止
    CA
    受騙。

    參考文獻

    [RFC2104]Krawczyk,H.,Bellare,M.andR.Canetti,"HMAC:Keyed
    HashingforMessageAuthentication",RFC2104,February
    1997.

    [RFC2202]Cheng,P.andR.Glenn,"TestCasesforHMAC-MD5andHMAC-
    SHA-1",RFC2202,September1997.

    謝詞
    此附錄的細節由 HemmaPrafullchandra 所提供

    AppendixB.UseofRegInfoforName-ValuePairs

    The"value"fieldoftheid-regInfo-utf8PairsOCTETSTRING(with
    "tag"fieldequalto12andappropriate"length"field)willcontain
    aseriesofUTF8name/valuepairs.

    ThisAppendixlistssomecommonexamplesofsuchpairsforthe
    purposeofpromotinginteroperabilityamongindependent
    implementationsofthisspecification.Itisrecognizedthatthis
    listisnotexhaustiveandwillgrowwithtimeandimplementation
    experience.

    B.1.ExampleName/ValuePairs

    WhenregInfoisusedtoconveyoneormorename-valuepairs(viaid-
    regInfo-utf8Pairs),thefirstandsubsequentpairsSHALLbe
    structuredasfollows:

    [name?value][%name?value]*%

    ThisstringisthenencodedintoanOCTETSTRINGandplacedintothe
    regInfoSEQUENCE.

    Reservedcharactersareencodedusingthe%xxmechanismof[RFC1738],
    unlesstheyareusedfortheirreservedpurposes.

    Thefollowingtabledefinesarecommendedsetofnamedelements.
    Thevalueinthecolumn"NameValue"istheexacttextstringthat
    willappearintheregInfo.

    NameValue
    ----------
    version--versionofthisvariationofregInfouse
    corp_company--companyaffiliationofsubscriber
    org_unit--organizationalunit
    mail_firstName--personalnamecomponent
    mail_middleName--personalnamecomponent
    mail_lastName--personalnamecomponent
    mail_email--subscriber'semailaddress
    jobTitle--jobtitleofsubscriber
    employeeID--employeeidentificationnumberorstring

    mailStop--mailstop
    issuerName--nameofCA

    subjectName--nameofSubject
    validity--validityinterval

    Forexample:

    version?1%corp_company?Acme,Inc.%org_unit?Engineering%
    mail_firstName?John%mail_lastName?Smith%jobTitle?TeamLeader%
    mail_email?john@acme.com%

    B.1.1.IssuerName,SubjectNameandValidityValueEncoding

    Whentheyappearinid-regInfo-utf8Pairssyntaxasnamedelements,
    theencodingofvaluesforissuerName,subjectNameandvaliditySHALL
    usethefollowingsyntax.Thecharacters[]indicateanoptional
    field,::=and|havetheirusualBNFmeanings,andallothersymbols
    (exceptspaceswhichareinsignificant)outsidenon-terminalnames
    areterminals.Alphabeticsarecase-sensitive.

    issuerName::=<names>
    subjectName::=<names>
    <names>::=<name>|<names>:<name>

    <validity>::=validity?[<notbefore>]-[<notafter>]
    <notbefore>::=<time>
    <notafter>::=<time>

    Where<time>isUTCtimeintheformYYYYMMDD[HH[MM[SS>].HH,MM,
    andSSdefaultto00andareomittedifattheandofvalue00.

    Examplevalidityencoding:

    validity?-19991231%

    isavalidityintervalwithnovaluefornotBeforeandavalueof
    December31,1999fornotAfter.

    Eachnamecomprisesasinglecharacternameformidentifierfollowed
    byanamevalueofoneorUTF8characters.Withinanamevalue,when
    itisnecessarytodisambiguateacharacterwhichhasformatting
    significanceatanouterlevel,theescapesequence%xxSHALLbe
    used,wherexxrepresentsthehexvaluefortheencodingconcerned.
    Thepercentsymbolisrepresentedby%%.

    <name>::=X<xname>|O<oname>|E<ename>|D<dname>|U<uname>|I<iname>

    Nameformsandvalueformatsareasfollows:

    X.500directorynameform(identifier"X"):

    <xname>::=<rdns>
    <rdns>::=<rdn>|<rdns>,<rdn>
    <rdn>::=<avas>
    <avas>::=<ava>|<avas>+<ava>
    <ava>::=<attyp>=<avalue>
    <attyp>::=OID.<oid>|<stdat>

    Standardattributetype<stdat>isanalphabeticattributetype
    identifierfromthefollowingset:

    C(country)
    L(locality)
    ST(stateorprovince)
    O(organization)
    OU(organizationalunit)
    CN(commonname)
    STREET(streetaddress)
    E(E-mailaddress).

    <avalue>isanamecomponentintheformofaUTF8characterstring
    of1to64characters,withtherestrictionthatintheIA5subsetof
    UTF8onlythecharactersofASN.1PrintableStringmaybeused.

    Othernameform(identifier"O"):
    <oname>::=<oid>,<utf8string>

    E-mailaddress(rfc822name)nameform(identifier"E"):
    <ename>::=<ia5string>

    DNSnameform(identifier"D"):
    <dname>::=<ia5string>

    URInameform(identifier"U"):
    <uname>::=<ia5string>

    IPaddress(identifier"I"):
    <iname>::=<oid>

    Forexample:

    issuerName?XOU=OurCA,O=Acme,C=US%
    subjectName?XCN=JohnSmith,O=Acme,C=US,E=john@acme.com%

    References

    [RFC1738]Berners-Lee,T.,Masinter,L.andM.McCahill,
    "UniformResourceLocators(URL)",RFC1738,December1994.

    AppendixC.ASN.1StructuresandOIDs

    PKIXCRMF{iso(1)identified-organization(3)dod(6)internet(1)
    security(5)mechanisms(5)pkix(7)id-mod(0)id-mod-crmf(5)}

    CRMFDEFINITIONSIMPLICITTAGS::=
    BEGIN

    IMPORTS
    --DirectoryAuthenticationFramework(X.509)
    Version,AlgorithmIdentifier,Name,Time,
    SubjectPublicKeyInfo,Extensions,UniqueIdentifier
    FROMPKIX1Explicit88{iso(1)identified-organization(3)dod(6)
    internet(1)security(5)mechanisms(5)pkix(7)id-mod(0)
    id-pkix1-explicit-88(1)}

    --CertificateExtensions(X.509)
    GeneralName
    FROMPKIX1Implicit88{iso(1)identified-organization(3)dod(6)
    internet(1)security(5)mechanisms(5)pkix(7)id-mod(0)
    id-pkix1-implicit-88(2)}

    --CryptographicMessageSyntax
    EnvelopedData
    FROMCryptographicMessageSyntax{iso(1)member-body(2)
    us(840)rsadsi(113549)pkcs(1)pkcs-9(9)smime(16)
    modules(0)cms(1)};

    CertReqMessages::=SEQUENCESIZE(1..MAX)OFCertReqMsg

    CertReqMsg::=SEQUENCE{
    certReqCertRequest,
    popProofOfPossessionOPTIONAL,
    --contentdependsuponkeytype
    regInfoSEQUENCESIZE(1..MAX)OFAttributeTypeAndValueOPTIONAL}

    CertRequest::=SEQUENCE{
    certReqIdINTEGER,--IDformatchingrequestandreply
    certTemplateCertTemplate,--Selectedfieldsofcerttobeissued
    controlsControlsOPTIONAL}--Attributesaffectingissuance

    CertTemplate::=SEQUENCE{
    version[0]VersionOPTIONAL,
    serialNumber[1]INTEGEROPTIONAL,
    signingAlg[2]AlgorithmIdentifierOPTIONAL,
    issuer[3]NameOPTIONAL,
    validity[4]OptionalValidityOPTIONAL,
    subject[5]NameOPTIONAL,

    publicKey[6]SubjectPublicKeyInfoOPTIONAL,
    issuerUID[7]UniqueIdentifierOPTIONAL,
    subjectUID[8]UniqueIdentifierOPTIONAL,
    extensions[9]ExtensionsOPTIONAL}

    OptionalValidity::=SEQUENCE{
    notBefore[0]TimeOPTIONAL,
    notAfter[1]TimeOPTIONAL}--atleastoneMUSTbepresent

    Controls::=SEQUENCESIZE(1..MAX)OFAttributeTypeAndValue

    AttributeTypeAndValue::=SEQUENCE{
    typeOBJECTIDENTIFIER,
    valueANYDEFINEDBYtype}

    ProofOfPossession::=CHOICE{
    raVerified[0]NULL,
    --usediftheRAhasalreadyverifiedthattherequesterisin
    --possessionoftheprivatekey
    signature[1]POPOSigningKey,
    keyEncipherment[2]POPOPrivKey,
    keyAgreement[3]POPOPrivKey}

    POPOSigningKey::=SEQUENCE{
    poposkInput[0]POPOSigningKeyInputOPTIONAL,
    algorithmIdentifierAlgorithmIdentifier,
    signatureBITSTRING}
    --Thesignature(using"algorithmIdentifier")isonthe
    --DER-encodedvalueofpoposkInput.NOTE:IftheCertReqMsg
    --certReqCertTemplatecontainsthesubjectandpublicKeyvalues,
    --thenpoposkInputMUSTbeomittedandthesignatureMUSTbe
    --computedontheDER-encodedvalueofCertReqMsgcertReq.If
    --theCertReqMsgcertReqCertTemplatedoesnotcontainthepublic
    --keyandsubjectvalues,thenpoposkInputMUSTbepresentand
    --MUSTbesigned.Thisstrategyensuresthatthepublickeyis
    --notpresentinboththepoposkInputandCertReqMsgcertReq
    --CertTemplatefields.

    POPOSigningKeyInput::=SEQUENCE{
    authInfoCHOICE{
    sender[0]GeneralName,
    --usedonlyifanauthenticatedidentityhasbeen
    --establishedforthesender(e.g.,aDNfroma
    --previously-issuedandcurrently-validcertificate
    publicKeyMACPKMACValue},
    --usedifnoauthenticatedGeneralNamecurrentlyexistsfor
    --thesender;publicKeyMACcontainsapassword-basedMAC
    --ontheDER-encodedvalueofpublicKey

    publicKeySubjectPublicKeyInfo}--fromCertTemplate

    PKMACValue::=SEQUENCE{
    algIdAlgorithmIdentifier,
    --algorithmvalueshallbePasswordBasedMac{1284011353376613}
    --parametervalueisPBMParameter
    valueBITSTRING}

    PBMParameter::=SEQUENCE{
    saltOCTETSTRING,
    owfAlgorithmIdentifier,
    --AlgIdforaOne-WayFunction(SHA-1recommended)
    iterationCountINTEGER,
    --numberoftimestheOWFisapplied
    macAlgorithmIdentifier
    --theMACAlgId(e.g.,DES-MAC,Triple-DES-MAC[PKCS11],
    }--orHMAC[RFC2104,RFC2202])

    POPOPrivKey::=CHOICE{
    thisMessage[0]BITSTRING,
    --posessionisproveninthismessage(whichcontainstheprivate
    --keyitself(encryptedfortheCA))
    subsequentMessage[1]SubsequentMessage,
    --possessionwillbeproveninasubsequentmessage
    dhMAC[2]BITSTRING}
    --forkeyAgreement(only),possessionisproveninthismessage
    --(whichcontainsaMAC(overtheDER-encodedvalueofthe
    --certReqparameterinCertReqMsg,whichMUSTincludebothsubject
    --andpublicKey)basedonakeyderivedfromtheendentity's
    --privateDHkeyandtheCA'spublicDHkey);
    --thedhMACvalueMUSTbecalculatedasperthedirectionsgiven
    --inAppendixA.

    SubsequentMessage::=INTEGER{
    encrCert(0),
    --requeststhatresultingcertificatebeencryptedforthe
    --endentity(followingwhich,POPwillbeprovenina
    --confirmationmessage)
    challengeResp(1)}
    --requeststhatCAengageinchallenge-responseexchangewith
    --endentityinordertoproveprivatekeypossession

    --Objectidentifierassignments--

    id-pkixOBJECTIDENTIFIER::={iso(1)identified-organization(3)
    dod(6)internet(1)security(5)mechanisms(5)7}

    --arcforInternetX.509PKIprotocolsandtheircomponents

    id-pkipOBJECTIDENTIFIER::={id-pkix5}

    --RegistrationControlsinCRMF
    id-regCtrlOBJECTIDENTIFIER::={id-pkip1}

    --Thefollowingdefinitionmaybeuncommentedforusewith
    --ASN.1compilerswhichdonotunderstandUTF8String.

    --UTF8String::=[UNIVERSAL12]IMPLICITOCTETSTRING

    id-regCtrl-regTokenOBJECTIDENTIFIER::={id-regCtrl1}
    --withsyntax:
    RegToken::=UTF8String

    id-regCtrl-authenticatorOBJECTIDENTIFIER::={id-regCtrl2}
    --withsyntax:
    Authenticator::=UTF8String

    id-regCtrl-pkiPublicationInfoOBJECTIDENTIFIER::={id-regCtrl3}
    --withsyntax:

    PKIPublicationInfo::=SEQUENCE{
    actionINTEGER{
    dontPublish(0),
    pleasePublish(1)},
    pubInfosSEQUENCESIZE(1..MAX)OFSinglePubInfoOPTIONAL}
    --pubInfosMUSTNOTbepresentifactionis"dontPublish"
    --(ifactionis"pleasePublish"andpubInfosisomitted,
    --"dontCare"isassumed)

    SinglePubInfo::=SEQUENCE{
    pubMethodINTEGER{
    dontCare(0),
    x500(1),
    web(2),
    ldap(3)},
    pubLocationGeneralNameOPTIONAL}

    id-regCtrl-pkiArchiveOptionsOBJECTIDENTIFIER::={id-regCtrl4}
    --withsyntax:
    PKIArchiveOptions::=CHOICE{
    encryptedPrivKey[0]EncryptedKey,
    --theactualvalueoftheprivatekey
    keyGenParameters[1]KeyGenParameters,
    --parameterswhichallowtheprivatekeytobere-generated
    archiveRemGenPrivKey[2]BOOLEAN}
    --settoTRUEifsenderwishesreceivertoarchivetheprivate
    --keyofakeypairwhichthereceivergeneratesinresponseto

    --thisrequest;settoFALSEifnoarchivalisdesired.

    EncryptedKey::=CHOICE{
    encryptedValueEncryptedValue,
    envelopedData[0]EnvelopedData}
    --TheencryptedprivatekeyMUSTbeplacedintheenvelopedData
    --encryptedContentInfoencryptedContentOCTETSTRING.

    EncryptedValue::=SEQUENCE{
    intendedAlg[0]AlgorithmIdentifierOPTIONAL,
    --theintendedalgorithmforwhichthevaluewillbeused
    symmAlg[1]AlgorithmIdentifierOPTIONAL,
    --thesymmetricalgorithmusedtoencryptthevalue
    encSymmKey[2]BITSTRINGOPTIONAL,
    --the(encrypted)symmetrickeyusedtoencryptthevalue
    keyAlg[3]AlgorithmIdentifierOPTIONAL,
    --algorithmusedtoencryptthesymmetrickey
    valueHint[4]OCTETSTRINGOPTIONAL,
    --abriefdescriptionoridentifieroftheencValuecontent
    --(maybemeaningfulonlytothesendingentity,andusedonly
    --ifEncryptedValuemightbere-examinedbythesendingentity
    --inthefuture)
    encValueBITSTRING}
    --theencryptedvalueitself

    KeyGenParameters::=OCTETSTRING

    id-regCtrl-oldCertIDOBJECTIDENTIFIER::={id-regCtrl5}
    --withsyntax:
    OldCertId::=CertId

    CertId::=SEQUENCE{
    issuerGeneralName,
    serialNumberINTEGER}

    id-regCtrl-protocolEncrKeyOBJECTIDENTIFIER::={id-regCtrl6}
    --withsyntax:
    ProtocolEncrKey::=SubjectPublicKeyInfo

    --RegistrationInfoinCRMF
    id-regInfoOBJECTIDENTIFIER::={id-pkip2}

    id-regInfo-utf8PairsOBJECTIDENTIFIER::={id-regInfo1}
    --withsyntax
    UTF8Pairs::=UTF8String

    id-regInfo-certReqOBJECTIDENTIFIER::={id-regInfo2}

    --withsyntax
    CertReq::=CertRequest

    ?

    ?

    posted on 2006-03-19 19:34 TrampEagle 閱讀(1213) 評論(0)  編輯  收藏 所屬分類: 技術文摘
    主站蜘蛛池模板: 亚洲高清乱码午夜电影网| 在线观看无码AV网站永久免费| 亚洲国产精品综合福利专区| 亚洲午夜福利精品久久| 性色av免费观看| 亚洲视频免费一区| 精品一卡2卡三卡4卡免费视频| 青草青草视频2免费观看| 亚洲色大18成人网站WWW在线播放| 久久久久亚洲AV成人片| 亚洲av永久无码精品秋霞电影影院| 亚洲精品97久久中文字幕无码| 国产精品国产免费无码专区不卡 | 久久WWW免费人成人片| 亚欧免费一级毛片| a级毛片在线免费| 美女无遮挡拍拍拍免费视频| 精品亚洲成a人在线观看| 亚洲国产精品无码中文lv| 久久精品国产99国产精品亚洲| 亚洲精品午夜在线观看| 亚洲午夜视频在线观看| 亚洲av色影在线| 久久精品亚洲综合| 亚洲AV永久精品爱情岛论坛| 亚洲中文字幕久久精品无码喷水| 亚洲中文字幕无码爆乳av中文| 国产人成免费视频| 又大又黄又粗又爽的免费视频 | 亚洲伊人久久大香线蕉AV| 亚洲国产成人精品激情| 亚洲伦理中文字幕| 国产精品亚洲综合久久| 亚洲精品伊人久久久久| 亚洲高清中文字幕免费| 亚洲午夜无码久久| 亚洲av无码有乱码在线观看| 久久精品国产亚洲AV天海翼| 国产成人综合亚洲一区| 一区免费在线观看| 免费萌白酱国产一区二区三区|