要約
- RFC 3657はCMSにおけるCamelliaのコンテンツ暗号化と鍵ラップに別々の識別子を割り当てた。CBCのコンテンツ暗号化では16オクテットのIVが必須で、鍵ラップのアルゴリズム識別子ではパラメーターを省略する。
- S/MIMEの能力通知には第三の形式があり、パラメーターは
NULLとなる。鍵ラップOIDが示すのは鍵暗号化鍵(KEK)の長さで、ラップされるコンテンツ暗号化鍵(CEK)の長さとは限らない。
同じ名前でも同じ処理ではない
CMSのエンベロープを読むとき、「Camellia」という名前だけでは送信側の処理を特定できない。受信側は、そのアルゴリズムが本文を暗号化したのか、コンテンツ暗号化鍵(CEK)をラップしたのかを見分け、役割に応じて識別子を解釈する必要がある。2004年1月にStandards Trackとして刊行されたRFC 3657は、CamelliaをCMSで使うため、コンテンツCBC暗号化用と鍵ラップ用の二つのOID群を定めた。RFC 3657
違いはパラメーターに表れる。id-camellia128-cbc、id-camellia192-cbc、id-camellia256-cbcでは、AlgorithmIdentifierのパラメーター欄が存在し、16オクテットの初期化ベクトルを含まなければならない。IVはコンテンツ暗号化の記述の一部であり、暗号名から推測するものではない。平文のパディングにはCMSの規則が適用される。RFC 3657 RFC 5652
鍵ラップでは期待が逆になる。Camelliaの三つのラップOIDには鍵長を示す枝がある一方、AlgorithmIdentifierのパラメーター欄は存在してはならない。ラップ処理は内部の初期値の使い方を定義しているため、この欄にIVを入れない。OIDの鍵長が指すのは鍵暗号化鍵(KEK)で、ラップされるCEKの長さまで決めるものではない。実装はKEKとCEKが同じ長さの場合に対応しなければならず、異なる長さもサポートするならKEKはCEK以上の長さでなければならない。したがってRFC 3657が定めたのは符号化と相互運用の境界であり、封筒内のすべての鍵を同じ長さにする規則ではない。RFC 3657 RFC 3394
能力通知には第三の形式がある
RFC 3657は、S/MIMEクライアントがSMIMECapabilitiesでCamellia対応を知らせる方法も定義した。能力OIDにはNULLパラメーターを付ける。鍵ラップ識別子でパラメーターを省くこととは矛盾しない。役割の異なるASN.1構造を使っているからだ。また、伝送上NULLとパラメーターなしは同じ表現ではない。RFCには三つの鍵長についてDER符号化の例もあり、能力値をバイト単位で照合できる。RFC 3657 RFC 2633
能力リストは署名され、優先順に並ぶが、送信側が対応する機能を部分的に示すだけである。送信側の選択には、私的な合意、利用者の希望、法的制約なども関わる。これはその場で行われるネゴシエーションでも、受信側の現在の設定を試す仕組みでも、特定のメッセージでCamelliaが実際に使われた証拠でもない。実際の処理を知るには、過去の能力通知だけでなく、エンベロープ内のコンテンツ暗号化と鍵管理の各フィールドを確認する必要がある。RFC 3657
相互運用性は境界を分けて検査する
相互運用の検査では三つの文脈を別々に照合する。CBCのコンテンツ暗号化では識別子、鍵長、16オクテットのIVを確認する。鍵ラップではパラメーターが省略されているか、また実際のKEKとCEKの長さが実装の対応範囲を満たすかを確かめる。能力通知ではNULLを含む署名済みDER値と優先順位を比較する。同じ暗号に対応すると各機器が宣言していても、これらを混同すれば解析や選択の食い違いが起こりうる。
RFC 3657は、Camelliaの鍵ラップがRFC 3394の方式に従い、AESをCamelliaに置き換えると定めた。両者のブロック長は128ビットである。既定の完全性初期値は定数A6A6A6A6A6A6A6A6であり、アンラップ後にその値が得られなければ、受信側はエラーを返し鍵データを返してはならない。用途固有の完全性範囲に合わせた別の初期値も許される。この検査が対象にするのは規定方式でラップされた鍵データであり、送信者、CMS本文、復号後の利用者権限を認証するものではない。RFC 3657 RFC 3394
ここで行っているのは歴史的な符号化契約の再構成であり、現代の安全性を推奨したり普及度を数えたりするものではない。CMSのアルゴリズム一覧や後続プロファイルは背景にはなるが、どの製品がRFC 3657を実装したか、どれほど使われたかは示さない。教訓はより限定的だ。アルゴリズム識別子は型を持つプロトコルフィールドであり、OID、パラメーターの有無、外側の構造を合わせて読む必要がある。RFC 3370 RFC 8419
出典
- RFC 3657 — Use of the Camellia Encryption Algorithm in CMS
- DatatrackerのRFC 3657記録
- RFC 3657メタデータ
- RFC 3657の誤記一覧
- RFC 3565 — CMSにおけるAES
- RFC 3370 — CMSアルゴリズム
- RFC 5652 — Cryptographic Message Syntax
- RFC 3394 — AES Key Wrap
- RFC 2633 — S/MIME Version 3
- RFC 9709 — CMSのKDFとAlgorithmIdentifierの結び付け
- RFC 8419 — CMSのアルゴリズム識別子
会員向け解説
プロフィールの詳細
適切な会員レベルでログインすると、解説全文と出典メモをご覧いただけます。
Strategic Circle 限定
Strategic Circle
すべての読者に公開されています。参加してログインすると プロフィール解説 を閲覧できます。
Strategic Circle に参加Leadership Alliance 会員限定
Leadership Alliance
対象となる IP 資産の所有者・管理者向けです。ログインすると Leadership Alliance の解説を閲覧できます。
Leadership Alliance に参加
