鷹翔宇空

          學習和生活

          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 閱讀(1214) 評論(0)  編輯  收藏 所屬分類: 技術文摘
          主站蜘蛛池模板: 彭州市| 三门县| 钦州市| 利津县| 家居| 封开县| 万宁市| 灵台县| 南投市| 天镇县| 哈密市| 无极县| 乐都县| 延川县| 安陆市| 磴口县| 沐川县| 黑河市| 湖南省| 来安县| 临泽县| 苏尼特右旗| 永善县| 综艺| 龙游县| 贵阳市| 襄垣县| 潍坊市| 秭归县| 比如县| 海原县| 沙田区| 南开区| 博客| 英超| 民和| 延庆县| 健康| 西安市| 德江县| 孟州市|