RFC 7292 Personal Information Exchange Syntax v1.1
RFC 9879 Use of Password-Based Message Authentication Code 1 (PBMAC1) in PKCS #12 Syntax BMPString から UTF8String に変更
RFC 9579 Use of Password-Based Message Authentication Code 1 (PBMAC1) in PKCS #12 Syntax → 9879 RFC 8018 PBKDF2
秘密鍵、公開鍵証明書の交換形式
交換モード
プライバシーモード privacy mode 暗号の有無 公開から保護
公開鍵プライバシーモード
パスワードプライバシーモード
整合性モード integrity mode 署名の有無 改竄から保護
公開鍵整合性モード
パスワード整合性モード
署名(暗号(中身)) の組み合わせが可能
AuthenticatedSafe 暗号化の外側構造 公開鍵またはパスワードMAC
ContentInfo 中身
秘密鍵
CRL
その他データ型 SafeContents型?
関連
パスワードはUTF-16BE NULL終端を使用する
"Beavis" は 00 42 00 65 00 61 00 76 00 69 00 73 00 00 (Hex)
RFC 7292
概要
PKCS #12 v1.1 は、秘密鍵、証明書、その他の秘密情報、および拡張機能を含む個人識別情報の転送構文を規定しています。この標準をサポートするマシン、アプリケーション、ブラウザ、インターネットキオスクなどでは、ユーザーは単一の個人識別情報セットをインポート、エクスポート、および使用できます。この標準は、複数のプライバシーおよび整合性モードの下で個人情報の直接転送をサポートします。 この文書は、RSA Laboratories の公開鍵暗号標準 (PKCS) シリーズの PKCS #12 v1.1 を再発行したものです。この RFC の発行により、変更管理は IETF に移管されます。 IESG注記
IESGは、変更管理をIETFに移譲してくださったRSA Laboratoriesに感謝申し上げます。本仕様の後方互換性を維持しつつ強化された内容は、今後のIETF標準化委員会の文書で公開される予定です。
このメモのステータス
この文書はインターネット標準化過程の仕様ではなく、情報提供を目的として公開されています。
この文書は、インターネット技術タスクフォース(IETF)の成果物です。IETFコミュニティの合意を反映しています。公開レビューを受け、インターネット技術運営グループ(IESG)による公開が承認されています。IESGによって承認されたすべての文書が、インターネット標準の候補となるわけではありません。RFC 5741のセクション2を参照してください。
著作権表示
Copyright (c) 2014 IETF Trustおよび本書の著者として特定されている人物。All rights reserved.
本文書は、BCP 78およびIETF TrustのIETF文書に関する法的規定(http://trustee.ietf.org/license-info )の対象となります。これらの規定には、本文書に関するお客様の権利と制限が記載されているため、これらの規定をよくお読みください。本文書から抽出されたコードコンポーネントには、Trustの法的規定のセクション4.eに記載されているSimplified BSD Licenseのテキストが含まれている必要があり、Simplified BSD Licenseに記載されているように、保証なしで提供されます。 目次
(略)
1. はじめに
本文書は、RSA Laboratories の公開鍵暗号標準 (PKCS) シリーズから PKCS #12 v1.1 を再発行したものです。本 RFC の発行により、変更管理は IETF に移管されます。RSA とその親会社である EMC は、PKCS #12 v1.1 およびその先行規格の発行および配布を継続する権利を留保します。 本文書の本文は、「セキュリティに関する考慮事項」セクションを除き、PKCS #12 v1.1 仕様から直接引用されています。参考文献リストおよびインライン引用は、PKCS #12 v1.1 の初版発行時点の文書に加えて、最新の文書を引用するために、必要に応じて更新または追加されています。 本標準は、秘密鍵、証明書、その他の秘密情報、および拡張機能を含む個人識別情報の転送構文を規定しています。この標準規格をサポートするマシン、アプリケーション、ブラウザ、インターネットキオスクなどでは、ユーザーは単一の個人識別情報セットをインポート、エクスポート、および使用できます。
この標準規格は、複数のプライバシーおよび整合性モードの下での個人情報の直接転送をサポートします。最も安全なプライバシーおよび整合性モードでは、送信元プラットフォームと送信先プラットフォームが、それぞれデジタル署名と暗号化に使用可能な信頼できる公開鍵/秘密鍵ペアを備えている必要があります。また、信頼できる公開鍵/秘密鍵ペアが利用できない場合に備えて、セキュリティの低いパスワードベースのプライバシーおよび整合性モードもサポートしています。
この標準規格は、ソフトウェア実装とハードウェア実装の両方に対応します。ハードウェア実装では、スマートカードやPersonal Computer Memory Card International Association (PCMCIA) デバイスなどの耐タンパー性トークンによって物理的なセキュリティが提供されます。
この標準規格は、秘密鍵に加えて必須だが補助的な識別情報を含み、公開鍵のプライバシーおよび整合性モードを通じてより高いセキュリティを確立することで、PKCS #8 15 24 を基盤として構築されていると見なすことができます。 1.1. PKCS #12 バージョン1からの変更点 本文書は、PKCS #12 16 をIETFに移行し、本提案のために著者らが行ったいくつかの小さな変更を含んでいます。 ハッシュアルゴリズムの追加。
ASN.1構文にいくつかの小さな修正を加えた技術正誤表 #1 の組み込み。 反復回数の例として1024を(ASN.1構文から)削除。
付録Bの手法を特定のモード(パスワードプライバシーモード)で使用せず、代わりにPKCS#5 バージョン2.1の手法を使用するという推奨事項の追加。
付録CのASN.1モジュールへのコメントの追加と小さな修正。
以前の付録Dにおける輸出規制に関する記述の削除。
「知的財産に関する考慮事項」において、RSAをEMCに置き換え。
参考文献に多数の変更と追加を行いました。
パスワードの整合性(辞書攻撃耐性の一部)のための反復回数値の選択に関する推奨事項について、NIST SP 800-132 への参照を追加しました。
PFX の略語展開に関するコメントを追加しました。この略語は、Personal Information Exchange と展開されることがあります。
付録 B において、以下の文の「もはや推奨されない」という表現を「推奨されない」に変更しました。これは、質問への回答として、この方法が推奨されないことを明確にするためです。「パスワードプライバシーモードにおけるこの方法は、もはや推奨されないことにご注意ください。」
2. 定義と表記法
属性(Attribute): 属性型(オブジェクト識別子によって)および関連する属性値を識別するASN.1型。ASN.1の属性型は7で定義されています。 証明書(Certificate): 公開鍵と識別情報を結び付けたデジタル署名付きデータ単位。識別証明書の具体的な形式は8で定義されています。別の形式は17で説明されています。 証明書失効リスト (CRL: Certifiacte Revocation List): 発行者または上位機関によって失効された、もはや有効ではない証明書のデジタル署名付きリスト。CRLのフォーマットの一例は8で定義されている。 ContentInfo: 暗号的に保護されている可能性のあるデータを保持するために使用されるASN.1型。この型は21および14で定義されている。 DER: Distinguished Encoding Rules(識別符号化規則)。6で定義されている。 宛先プラットフォーム(Destination platform): 送信元プラットフォームから発信された個人情報の最終的な宛先プラットフォーム。特定の情報は宛先プラットフォームから送信元プラットフォームに転送される可能性があるが、個人情報の最終的な宛先は常に宛先プラットフォームと呼ばれる。
DigestInfo: メッセージダイジェストを保持するために使用されるASN.1型。この型は21および14で定義されている。 暗号化鍵ペア (DestEncK: Encryption Key Pair): この標準の公開鍵プライバシーモードで使用される公開鍵/秘密鍵ペア。公開鍵はPDestEncK(公開鍵が「信頼できる」ことを強調する場合はTPDestEncK)と呼ばれ、秘密鍵はVDestEncKと呼ばれます。
エクスポート時(Export time):ユーザーがソースプラットフォームから個人情報を読み取り、相互運用可能な安全なプロトコルデータユニット(PDU)に変換する時間。
インポート時(Import time):ユーザーがSafe PDUから宛先プラットフォームに個人情報を書き込む時間。
メッセージ認証コード(MAC: Message Authentication Code):メッセージと秘密鍵を組み合わせた、衝突耐性があり「予測不可能」な関数の一種。MACはデータ認証に使用され、多くの点で秘密鍵デジタル署名に類似しています。
オブジェクト識別子(Object Identifier):命名機関の階層によって管理されるグローバル名前空間内で、関連するデータオブジェクトを一意に識別する整数列。これはASN.1におけるプリミティブデータ型です。
PFX:この標準で定義されている最上位レベルの交換PDU。この頭字語はPersonal Information Exchange(個人情報交換)と略されることもあります。
プラットフォーム(Platform):ユーザーが個人のアイデンティティを行使するマシン、オペレーティングシステム、およびアプリケーションソフトウェアの組み合わせ。ここで言うアプリケーションとは、個人情報を利用するソフトウェアを指します。2つのプラットフォームは、マシンの種類またはアプリケーションソフトウェアが異なる場合に異なります。マルチユーザーシステムでは、ユーザーごとに少なくとも1つのプラットフォームが存在します。
プロトコルデータユニット(PDU: Protocol Data Unit):プロトコル内のメッセージを構成する、マシン非依存形式のビット列。
シュラウディング(Shrouding):秘密鍵に適用される暗号化。鍵の平文が特定の明確に定義されたインターフェース以外からは参照できないようにするポリシーと併用される場合もあります。
署名鍵ペア(SrcSigK: Signature Key Pair):この標準の公開鍵整合性モードで使用される、プラットフォーム固有の署名鍵ペア。公開鍵はPSrcSigK(公開鍵が「信頼できる」ことを強調する場合はTPSrcSigK)と呼ばれ、秘密鍵はVSrcSigKと呼ばれます。
ソースプラットフォーム(Source platform):個人情報が最終的に宛先プラットフォームに送信される元のプラットフォーム。特定の情報が宛先プラットフォームからソース プラットフォームに転送される場合もありますが、個人情報の元となるプラットフォームは常にソース プラットフォームと呼ばれます。
3. 概要 Overview
3.1. 交換モード Exchange Modes
プライバシーモードと整合性モードには4つの組み合わせがあります。プライバシーモードは暗号化を用いて個人情報の漏洩を防ぎ、整合性モードは個人情報の改ざんを防ぎます。改ざん防止がなければ、攻撃者はユーザーに気付かれることなく、ユーザーの個人情報を不正な情報に置き換える可能性があります。
プライバシーモードには以下のものがあります。
公開鍵プライバシーモード:個人情報は、送信元プラットフォームで、既知の宛先プラットフォームの信頼できる暗号化公開鍵(セクション3.3参照)を用いてエンベロープ化されます。エンベロープは対応する秘密鍵で開封されます。
パスワードプライバシーモード:個人情報は、22および13と同様に、ユーザー名とプライバシーパスワードから導出された対称鍵を用いて暗号化されます。パスワード整合性モードも併用する場合、プライバシーパスワードと整合性パスワードは同じであっても異なっていても構いません。 整合性モードには以下のものがあります。
公開鍵整合性モード:整合性は、PFX PDUの内容に対するデジタル署名によって保証されます。デジタル署名は、送信元プラットフォームの秘密署名鍵を用いて生成されます。署名は、送信先プラットフォームで対応する公開鍵を用いて検証されます(3.4節参照)。
パスワード整合性モード:整合性は、秘密の整合性パスワードから導出されたメッセージ認証コード(MAC)によって保証されます。パスワードプライバシーモードも併用する場合、プライバシーパスワードと整合性パスワードは同じであっても異なっていても構いません。
3.2. モード選択ポリシー Mode Choice Policies
本規格では、プライバシーモードと整合性モードのあらゆる組み合わせが許可されています。もちろん、適切なセキュリティポリシーでは、特定の方法を避けることが推奨されます。例えば、パスワードプライバシーモードを使用する場合、または弱い対称暗号化で公開鍵プライバシーモードを使用する場合、物理的な保護なしに秘密鍵を輸送することは賢明ではありません。
一般的に、プライバシーと整合性の両方において、公開鍵モードはパスワードモードよりも推奨されます(セキュリティの観点から)。ただし、公開鍵モードが常に使用できるとは限りません。例えば、輸出時に宛先プラットフォームが不明な場合があります。このような場合、公開鍵プライバシーモードの使用は禁止されます。
3.3. 信頼された公開鍵 Trusted Public Keys
本規格では、非対称鍵ペアは公開鍵プライバシーモードと公開鍵整合性モードの2つの方法で使用できます。公開鍵プライバシーモードでは暗号化鍵ペアが必要であり、公開鍵整合性モードでは署名鍵ペアが必要です。
このセクションで説明する鍵は、ユーザーの個人情報を転送するためだけにプラットフォーム固有の鍵であるのが適切である場合もあります。ただし、そうであるかどうかにかかわらず、ここで説明する鍵は、ユーザーがプラットフォーム間で転送しようとするユーザーの個人鍵と混同しないでください。(後者の鍵はPDU内に保存されます。)
公開鍵プライバシーモードでは、暗号化鍵ペアの秘密鍵は転送先プラットフォームに保存され、最終的に秘密エンベロープを開くために使用されます。対応する信頼された公開鍵はTPDestEncKと呼ばれます。
公開鍵整合性モードでは、署名鍵ペアの秘密鍵は転送元プラットフォームに保存され、そこで個人情報に署名するために使用されます。対応する信頼された公開鍵はTPSrcSigKと呼ばれます。
公開鍵/秘密鍵ペアのどちらの用途においても、鍵ペアの公開鍵は、正しいプラットフォームで生成されたことが信頼できるように、他のプラットフォームに転送される必要があります。この意味で公開鍵が信頼できるかどうかを判断するのは、最終的にはユーザーに委ねられます。公開鍵が信頼できることを確認する方法は様々です。
鍵に信頼を付与するプロセスと鍵の信頼性を検証するプロセスについては、このドキュメントではこれ以上説明しません。以下で非対称鍵について議論する場合は、公開鍵が信頼されているものと仮定します。
3.4. AuthenticatedSafe
各準拠プラットフォームは、PFX PDU でラップされた AuthenticatedSafe PDU をインポートおよびエクスポートできるものとします。
整合性を確保するため、AuthenticatedSafe は署名(公開鍵整合性モードを使用する場合)または MAC 暗号化(パスワード整合性モードを使用する場合)され、PFX PDU が生成されます。AuthenticatedSafe が署名されている場合、ソースプラットフォームで信頼された公開署名鍵 TPSrcSigK に対応する秘密署名鍵 VSrcSigK を使用して生成されたデジタル署名が添付されます。TPSrcSigK は、PFX と共に宛先プラットフォームに送付され、ユーザーは鍵の信頼性を検証し、AuthenticatedSafe の署名を検証できます。AuthenticatedSafe が MAC 暗号化されている場合、秘密の整合性パスワード、ソルトビット、反復回数、および AuthenticatedSafe の内容から計算された MAC が添付されます。
AuthenticatedSafe 自体は、ContentInfo 値のシーケンスで構成されます。これらの値の一部はプレーンテキスト(データ)で構成され、その他の値はエンベロープ化(公開鍵プライバシーモード使用時)または暗号化(パスワードプライバシーモード使用時)されます。コンテンツがエンベロープ化されている場合、コンテンツは新しく生成された鍵を用いた対称暗号で暗号化され、その鍵は RSA 非対称暗号で暗号化されます。対称鍵の暗号化に使用される RSA 公開鍵は TPDestEncK と呼ばれ、宛先プラットフォーム上の RSA 秘密鍵 VDestEncK に対応します。TPDestEncK は、エクスポート時に使用される際にユーザーが信頼する必要があります。コンテンツが暗号化されている場合、秘密のプライバシーパスワード、ソルトビット、および反復カウンタから生成された鍵を用いた対称暗号で暗号化されます。
各ContentInfoには、ユーザーの裁量により、任意の秘密鍵、PKCS #8 で保護された秘密鍵、証明書、CRL、または不透明データオブジェクトのコレクションがSafeContents型の値に格納されます。 暗号化されていないオプションが存在する理由は、一部の政府が特定の暗号の使用を制限しているためです。AuthenticatedSafeに複数の部分を持つことで、実装者の選択肢が広がります。例えば、強力な暗号を使用してPKCS #8 で保護された鍵を作成できる場合、これらの保護された鍵をさらに暗号化すべきではありません。なぜなら、スーパー暗号化は製品の輸出可能性を制限する可能性があるからです。AuthenticatedSafeのマルチパート設計は、このような可能性を可能にします。 AuthenticatedSafeの周囲には、整合性モードのラッパーがあり、AuthenticatedSafeの内容全体(暗号化されていない部分が存在する場合はそれも含む)を保護します。これは、プライバシーが最も外側の保護である多くのプロトコルにおけるラッピング順序とは逆です。この後者のより一般的なラッピング順序により、特定の状況では望ましくない暗号化されたデータへの署名が回避されます。ただし、これらの状況はこのドキュメントには当てはまらないため、可能な限り多くの情報の整合性を保護することが望ましいです。
4. PFX PDU構文
このフォーマットは、上記のデータモデルに対応し、プライバシーと整合性のためのラッパーを備えています。このセクションでは、PKCS #7 14 21 を参照しますが、読者は同文書で定義されている用語を理解していることを前提としています。 すべての直接交換モードで同じPDUフォーマットが使用されます。ASN.1とBERエンコーディングにより、プラットフォーム非依存が保証されます。
この規格には、ASN.1エクスポートであるPFXが1つあります。これは、外側の整合性ラッパーです。PFXのインスタンスには以下のものが含まれます。
1. バージョンインジケータ。この文書のこのバージョンでは、バージョンはv3とします。
2. PKCS #7 ContentInfo。contentTypeは、公開鍵整合性モードではsignedData、パスワード整合性モードではdataです。 3. MacDataのオプションインスタンス。パスワード整合性モードでのみ存在します。このオブジェクトが存在する場合、MAC値、macSalt、およびiterationCountを保持するPKCS #7 DigestInfoが含まれます。付録Bで説明されているように、MAC鍵はパスワード、macSalt、およびiterationCountから導出されます。セクション5で説明されているように、MACはauthSafe値とMAC鍵からHMAC 11 20を介して計算されます。パスワードとMAC鍵は実際にはPFXのどこにも存在しません。saltと(ある程度)iteration countは、整合性パスワードに対する辞書攻撃を阻止します。iteration countの適切な値の選択方法については、NIST Special Publication 800-132 12を参照してください。 code:PFX
PFX ::= SEQUENCE {
version INTEGER {v3(3)}(v3,...),
authSafe ContentInfo,
macData MacData OPTIONAL
}
MacData ::= SEQUENCE {
mac DigestInfo,
macSalt OCTET STRING,
iterations INTEGER DEFAULT 1
-- Note: The default is for historical reasons and its
-- use is deprecated.
}
4.1. AuthenticatedSafe 型
前述の通り、authSafe の contentType フィールドは data 型または signedData 型でなければなりません。authSafe の content フィールドには、直接的(data の場合)または間接的(signedData の場合)に、AuthenticatedSafe 型の BER エンコードされた値が格納されます。
code:AuthenticatedSafe
AuthenticatedSafe ::= SEQUENCE OF ContentInfo
-- 暗号化されていない場合は Data
-- パスワードで暗号化されている場合は EncryptedData
-- 公開鍵で暗号化されている場合は EnvelopedData
AuthenticatedSafe には、ContentInfo 値のシーケンスが格納されます。これらの ContentInfo 値の content フィールドには、平文、暗号化、またはエンベロープされたデータが格納されます。暗号化またはエンベロープされたデータの場合、データの平文には SafeContents インスタンスの BER エンコードが保持されます。このドキュメントのセクション 5.1 では、AuthenticatedSafe 型の値の構築について詳しく説明します。
4.2. SafeBag型
SafeContents型はSafeBagで構成されています。各SafeBagは、オブジェクト識別子によって識別される情報(鍵、証明書など)を1つ保持します。
code:SafeBag
SafeContents ::= SEQUENCE OF SafeBag
SafeBag ::= SEQUENCE {
bagId BAG-TYPE.&id ({PKCS12BagSet})
bagValue 0 EXPLICIT BAG-TYPE.&Type({PKCS12BagSet}{@bagId}), bagAttributes SET OF PKCS12Attribute OPTIONAL
}
PKCS12Attribute ::= SEQUENCE {
attrId ATTRIBUTE.&id ({PKCS12AttrSet}),
attrValues SET OF ATTRIBUTE.&Type ({PKCS12AttrSet}{@attrId})
} -- This type is compatible with the X.500 type 'Attribute'
PKCS12AttrSet ATTRIBUTE ::= {
friendlyName | -- from PKCS #9 23 localKeyId, -- from PKCS #9 ... -- Other attributes are allowed
}
オプションの bagAttributes フィールドを使用すると、ユーザーはキーなどにニックネームや識別子を割り当てることができます。また、ビジュアルツールでユーザーにとって意味のある文字列を表示することもできます。
このドキュメントのこのバージョンでは、6種類の SafeBag が定義されています。
code:SafeBag
bagtypes OBJECT IDENTIFIER ::= {pkcs-12 10 1}
BAG-TYPE ::= TYPE-IDENTIFIER
keyBag BAG-TYPE ::=
{KeyBag IDENTIFIED BY {bagtypes 1}}
pkcs8ShroudedKeyBag BAG-TYPE ::=
{PKCS8ShroudedKeyBag IDENTIFIED BY {bagtypes 2}}
certBag BAG-TYPE ::=
{CertBag IDENTIFIED BY {bagtypes 3}}
crlBag BAG-TYPE ::=
{CRLBag IDENTIFIED BY {bagtypes 4}}
secretBag BAG-TYPE ::=
{SecretBag IDENTIFIED BY {bagtypes 5}}
safeContentsBag BAG-TYPE ::=
{SafeContents IDENTIFIED BY {bagtypes 6}}
PKCS12BagSet BAG-TYPE ::= {
keyBag |
pkcs8ShroudedKeyBag |
certBag |
crlBag |
secretBag |
safeContentsBag,
... -- For future extensions
}
この標準の将来のバージョンで新しいバッグ タイプが認識されるようになると、PKCS12BagSet が拡張される可能性があります。
4.2.1. KeyBag 型
KeyBag ::= PrivateKeyInfo
4.2.2. PKCS8ShroudedKeyBag 型
PKCS8ShroudedKeyBag は、PKCS #8 に従って覆われた秘密鍵を保持します。PKCS8ShroudedKeyBag には、覆われた秘密鍵が 1 つだけ格納されることに注意してください。 PKCS8ShroudedKeyBag ::= EncryptedPrivateKeyInfo