OpenPGP
RFC 9580 OpenPGP
RFC 6637 (廃止) Elliptic Curve Cryptography (ECC) in OpenPGP RFC 5581 (廃止) The Camellia Cipher in OpenPGP → 9580
RFC 4880 (廃止) OpenPGP Message Format → 9580
RFC 2440 (廃止) OpenPGP Message Format → 4880
PGP 5
RSAオプション
ElGamal
RFC 1991 (廃止)
PGP 2.6 2.7
RSA
RFC 3156 MIME Security with OpenPGP
RFC 9580
1. はじめに
この文書は、OpenPGPが暗号化、復号化、署名、および鍵管理機能を提供するために使用するメッセージ交換パケット形式に関する情報を提供します。これはRFC 4880(「OpenPGPメッセージ形式」)の改訂版であり、これはRFC 2440の改訂版であり、それ自体はRFC 1991(「PGPメッセージ交換形式」)に代わるものです。 この文書は、RFC 4880(OpenPGP)、RFC 5581(OpenPGPにおけるCamellia)、およびRFC 6637(OpenPGPにおける楕円曲線)を廃止するものです。執筆時点では、この文書には未解決の検証済みエラッタがすべて組み込まれており、それらは付録Cに記載されています。 これらの以前の仕様を既に実装しているソフトウェアは、変更点について付録Bを確認することをお勧めします。
1.1. 用語
本文書中のキーワード「MUST(しなければならない)」、「MUST NOT(してはならない)」、「REQUIRED(必須)」、「SHALL(するべき)」、「SHALL NOT(すべきでない)」、「SHOULD(すべきでない)」、「RECOMMENDED(推奨される)」、「NOT RECOMMENDED(推奨されない)」、「MAY(してもよい)」、および「OPTIONAL(任意)」は、ここで示すようにすべて大文字で表記されている場合に限り、BCP 14 RFC2119 RFC8174 の規定に従って解釈されます。 本文書中の名前空間割り当てを説明するために使用されるキーワード「Private Use(私的使用)」、「Specification Required(仕様必須)」、「RFC Required(RFC必須)」は、RFC8126 の規定に従って解釈されます。 本文書で使用されている一部の用語は、OpenPGP仕様の以前のバージョンから改良されています。詳細については、付録B.1を参照してください。
2. 一般的な機能
OpenPGPは、公開鍵暗号および/または対称鍵暗号とデジタル署名を用いることで、メッセージおよびデータファイルの機密性と整合性を確保します。OpenPGPは、暗号化および/または署名されたメッセージのエンコードと転送のためのフォーマットを提供します。さらに、OpenPGPは鍵と証明書のエンコードと転送機能も提供しますが、鍵の保存と管理については本文書の範囲外です。
2.1. 暗号化による機密性
OpenPGPは、対称鍵暗号と(オプションで)公開鍵暗号を組み合わせることで機密性を確保します。公開鍵を使用する場合、まずオブジェクトは対称鍵暗号アルゴリズムを用いて暗号化されます。各対称鍵は、単一のオブジェクトに対して一度だけ使用されます。オブジェクトごとに、新しい「セッション鍵」が乱数として生成されます(「セッション」と呼ばれることもあります)。セッション鍵は一度だけ使用されるため、メッセージに紐付けられ、メッセージと共に送信されます。鍵を保護するため、受信側の公開鍵で暗号化されます。シーケンスは以下のとおりです。
1. 送信者がメッセージを作成します。
2. 送信側のOpenPGP実装は、このメッセージ用のランダムなセッション鍵を生成します。
3. セッション鍵は、各受信者の公開鍵を使用して暗号化されます。
これらの「暗号化されたセッション鍵」がメッセージの先頭となります。
4. 送信側のOpenPGP実装は、必要に応じてメッセージを圧縮し、セッション鍵から導出されたメッセージ鍵を使用して暗号化します。暗号化されたメッセージが、OpenPGPメッセージの残りの部分を構成します。
5. 受信側のOpenPGP実装は、受信者の秘密鍵を使用してセッション鍵を復号します。
6. 受信側のOpenPGP実装は、セッション鍵から導出されたメッセージ鍵を使用してメッセージを復号します。メッセージが圧縮されている場合は、解凍されます。
対称鍵暗号化を使用する場合、上記と同様のプロセスが使用されますが、セッション鍵は共有秘密から導出された対称アルゴリズムを使用して暗号化されます。
デジタル署名と機密保持サービスの両方を、同じメッセージに適用することができます。まず、メッセージに対して署名が生成され、メッセージに添付されます。次に、メッセージと署名は、セッション鍵から導出された対称メッセージ鍵を使用して暗号化されます。最後に、セッション鍵は公開鍵暗号を使用して暗号化され、暗号化されたブロックの先頭に付加されます。