PKCS#7やCMSなどの一般的な署名フォーマットと互換性を持ちながら、署名者の特定を厳密に行い長期に保存することが可能なバイナリ形式の署名フォーマットETSI TS 101 733 CAdES(CMS Advanced Electronic Signature)の仕様が2009年11月に改訂されていたようです。(全く気づきませんでした。おかしいなぁ、、、実際に公開されたのは1月に入ってじゃないのかなぁ、、、クリスマス休暇だしなぁ、、、)
前のバージョンはv1.7.4からv1.8.1へとなったわけですが、あまり重要な更新も無いのでv1.7.5でもよかったんじゃないかなと、思えるような更新です。
改訂作業は欧州通信規格協会(ETSI)の技術専門家タスクフォース(STF)で行われるので、個別の変更点は漏れ聞こえてきますが、改訂レビューの期間もすごく短くて何が変更されるのかETSIの電子署名基盤技術委員会(TC ESI)でも報告されるわけではないので、改訂の全体像っていうのがわかりにくいんですよね。
どの辺りが改訂されているのか少し調べてみました。
ワードで差分の抽出
差分を目で追うのも大変なので、Acrobat 9 Standardで比較しようとおもったら、比較機能はProだけなんですね。仕方なくMicrosoft Wordの比較機能を使いました。
(1) Microsoft Word 2003でv1.8.1を開く。
(2) メニューのツール>文書の比較と反映を選ぶ。
(3) ファイル選択ダイアログでv1.7.4を選択する。
設定はデフォルトのままでモードは「反映」でよいようだ。
これで、変更部分が青字で表示されるようになります。
変更点のまとめの記述
「Annex L.2 Changes between 1.7.4 and 1.8.1」には変更点がまとめられています。ドラフトでは変更点は過去と一緒くたになっていたので、1.7.4と1.8.1の差分を明記して欲しいとMLやESI会議でお願いして、その場ではドラフト最終段階だから分けないという結論だったんですが、結局は分けてくれたようです。よかった。
主要な変更点次のようなんだそうです。
- (a) ContentTimeStampの計算方法の明確化
- 具体的な計算方法の記述を無くし、CMSの計算方法を参照するように修正されました。
- (b) タイムスタンプのハッシュアルゴリズム危殆化に関する記述
- RFC 3161のタイムスタンプトークンのTSA証明書を特定するためにESSCertID(v1)とSHA2も使えるRFC 5035 ESSCertIDv2をサポートするものとする(shall)とされた。CAdESのRFC 3161タイムスタンプトークンはETS TS 101 861のプロファイルに準拠しなければならないそうだ。(見落としてた)
- 署名者証明書の特定にSHA256をデフォルトとするRFC 5035の「ESSCertIDv2もサポートする(shall)」という記述が加わった。
- (c) OCSPを使う場合のCompleteCertificateRefsの利用ガイド
- ocspRefHashは後方互換性のためオプションのままだが、置換攻撃に対応するために、これを含めることを強く推奨(strongly recommended)するとされた。
- (d) CAdES-BES/EPESでなく一般的なCMSに対するCAdES属性の利用ガイド
- (e) タイムスタンプのハッシュ計算についての追記
- (f) CAdES-AでのB.3節の記述がオプションになるよう修正
- (e) タイムスタンプのハッシュ計算についての追記
(a) ContentTimeStampの計算方法の明確化について
ContentTimeStampは画像や文書などの署名対象データに対して署名を行う前に直接付与されるタイムスタンプです。v1.7.4までは、ContentTimeStampのmessageImprintの計算方法をencapContentInfoを使って具体的に記述していましたが、変に具体的だったため・encapContentInfoのeContentがASN.1 BERやDERで違うときどうするのか
・内包署名(eContentに署名対象がある)や分離署名(署名対象データを署名フォーマットに入れない)の場合に計算はどうするのか
という問い合わせや議論が頻繁に起こっていたので、「CMSのmessage digestの計算方法と同じ方法を使う」という記述に変更されたようです。参照の仕方が大まかなので、かえって混乱するような気がします。「ContentTimeStampのmessageImprintのハッシュ値の計算方法はCMSのmessage digestの計算方法と同じで、eContentの構造に依存せず署名対象データそのものに対してハッシュ計算をする」というように何らかの補足は必要だったのかなと思います。
(d)一般的なCMSに対するCAdES属性の利用ガイドについて
CAdESのタイムスタンプ等を含まない基本的なフォーマットであるCAdES-BES、CAdES-EPESでは必須要件として署名者証明書を特定するためのESSSigningCertificateV1/V2属性を必須としていました。しかしながら、一般的なPKCS#7やCMS、PDF署名など、これら属性を最初から含まない署名データが数多く存在し、これらを長期保存するよう移行することができずに困っていました。
そこで、SigningCertificate属性を含まないものをCMS-BES/EPES/T/C/X/XL/Aと呼ぶことにより、CAdESの属性を使ってもよこととし、PKCS#7やCMSを長期保存できるようにしました。
欧州電子署名指令では高度電子署名(AdES)の要件として「署名者が特定できること」を挙げており、SigingCertificate属性は署名者証明書を特定でき置換攻撃ができないようにするための重要な要素なので、この属性もしくはこれと同等の機能を含まないものをAdESとは呼ばず、CMS-*としたことはとても意義があることだと思います。(この問題でPAdESについては言いたいことがあるんですが、また別の機会に、、、)
(f) CAdES-AでのB.3節の記述がオプションになるような修正について
v1.7.4のAnnex B.3 の CAdES-A の説明では、「少なくとも一つのTimestampedCertsCRLsかCAdES-C TimeStampが必須である」という記述だったんですが、元々過去のバージョン(v1.5.1以前?)ではオプションでした。ESI会議でこの点を日本とトルコが指摘し無事修正されることとなりました。
タイムスタンプのハッシュ計算についての追記について
v1.8.1 Annex Kに(informative)Time-stamp hash calculationという章が追加され、タイムスタンプトークンのmessageImprintの計算方法について表を用いた解説が追加されました。
個人的にはこの表の追加には反対だったし、そのようにコメントもしました。そもそも表自体がわかり辛いし、仕様本体(normative)と齟齬があるように誤解され得る箇所があり、一貫性を持ちながらこの表を今後メンテナンスしいく事が難しいように思えたからです。
全体的には仕様が緩められた
細かい所は説明しませんが、全体的にmustやshallと記述されていたところが緩い表現に変更されているのがわかります。現実の実装に則した仕様に近づいたかなと思います。
ArchiveTimeStampの計算方法について
ArchiveTimeStampの計算方法については、v1.5.1以降、曖昧な点があり続け、これを明確化するように日本からもコメントをし続けてきましたが、v1.7.4からv1.8.1への変更では大きく変更されることはありませんでした。依然としてASN.1 BERとDERのエンコーディングの違いによる問題は残されたままになっています。
署名対象のデータ表現について
CAdESや元のCMS(PKCS#7)で使われる署名対象のデータを署名フォーマットのeContentフィールドの中に格納することができるんですが、恐らくCAdES v1.6.3あたりから「こっそり」以下のような記述が追加されていました。
引用 ETSI TS 101 733 v1.8.1 5.2 Data Content Typeコンテントがid-dataで示されるデータの場合には、S/MIMEのオペイク署名のようにMIMEでエンコードすることを推奨(recommended)するという記述が加わっています。個人的にはCAdESで制限する必要の無い事だと思っています。
NOTE: If the content type is id- data, it is recommended that the content be encoded using MIME, and that the MIME type is used to identify the presentation format of the data. See clause F.1 for an example of using MIME to identify the encoding type.
おわりに
以上、少し時間が取れたので2009年11月に公開されたCAdES v1.8.1の改訂について解説してみました。この先、署名やPKI関係の仕事ができなそうな気もしているので、時間がとれ次第ため込んでいることを書き残していきたいと思っています。
ではでは



