≪第8回
今回で最終回となります。これまで、XML形式の長期署名フォーマットXAdESの識別名一致確認において以下の事柄を紹介してきました。
もし、署名者、タイムスタンプ局の認証局を選ぶことができるならば以下の点に注意すると良いと思います。逆にこれから認証局を構築するなら同様の点に注意してください。
アプリケーション側が認証局選べるハッピーなケースなんてほとんど無いんですけどね、、、(^^;
生成も検証も同じアプリを使う場合には気にしなくていいですが、他の会社の文書交換とか署名生成と検証とが違うアプリケーションの場合には、選んでしまった認証局の種類、アプリケーションの種類によって「生成、検証の双方のドメインで」以下のような注意をすると良いのではないかと思います。
現在、ETSIで行われた実証実験の結果を受けてETSI TS 101 903 v1.3.2 XAdESの改訂の項目洗い出しやディスカッションがETSI TC ESIで行われています。
今回のXAdESの名前比較は、CAdESと同等の置換攻撃に対する耐性を持たせるためにはきちんとやらなければいけないはずですが、識別名文字列の生成結果が一意にならないために、一致検証を行っていなかったりする実装がほとんどであり、XAdES v1.3.2の仕様の検証要件自体が形骸化しています。
できもしないような現状の一致検証の要件は取り下げてもらい、必要性を感じているなら、識別名オクテットのハッシュ値を比較し、文字列としては比較しないなどの別の方法による識別名の一致確認を行うべきであると考えており、これをETSI TC ESIや仕様のエディタに継続的に訴えかけていくつもりでいます。
ETSIのプラグテストの設計の際、今回ご紹介した問題を仕様のエディタ兼プラグテストの取りまとめの方に説明し、「名前比較はXAdESでは真面目にやろうとすると難しいし、現状ではあまり意味がないのでテスト項目から外しましょう」という事で納得してもらいましたので、概ねこの問題については理解してもらっているものと思っています。
以上、全9回に分けてXAdESにおける識別名の名前比較の問題について説明してきました。いかがでしたか?細かい部分が理解いただけなかったとしても、それは私の説明の仕方に問題があるんだと思います(^^;なんとな〜〜く「XAdESの名前比較は面倒臭い、、、」という事だけ知って頂ければ幸いです。
ではでは、、、
<追記>
以前書いたBER/DERの問題は、ちょっとウソを書いてしまっているので近いうちに直します、、、、m(_ _)m
XAdESの証明書識別名の比較問題 (もくじ)
・第1回 はじめに
・第2回 XAdESにおける名前比較の要件
・第3回 なぜCAdESやXMLDSigでは問題とならないのか
・第4回 RFC 2253による識別名バイナリの文字列化
・第5回 RFC 2253識別名文字列を比較する際の相互運用性阻害要因
・第6回 RFC 2253識別名文字列を生成する実装の紹介とテストの概要
・第7回 RFC 2253識別名文字列を生成する実装の標準準拠性テスト結果
・第8回 XMLDSig Second Editionでも参照されるRFC 2253の改訂版RFC 4514との差異
・第9回(最終回) まとめと今後のXAdESの改訂
今回で最終回となります。これまで、XML形式の長期署名フォーマットXAdESの識別名一致確認において以下の事柄を紹介してきました。
- XAdESの仕様ではSigningCertificate、CompleteCertificateRefsおよびCompleteRevocationRefsに記載された証明書識別名が証明書、CRL、OCSP応答データと一致することを確認しなければならない。
- XAdESにおいて証明書識別名はRFC 2253により生成されるが、これは正規化形式ではないので生成側、検証側の実装が異なれば一致確認を行うのは難しい。
- 実際にテストを行いRFC 2253識別名文字列の生成を行ってみると実装により違いがあることがわかった。
- 現在存在するXAdESの多くの実装では規定された識別名との一致確認を行っていないために問題とならなかったようだ。
- 識別名の一致確認を容易かつ厳密に行えるCAdESと比較して、XAdESの実装では識別名の確認を行っていないか不十分であるため、XAdESの方が検証情報の真正性のレベルは低くなる。
XAdESのための認証局・証明書選び
もし、署名者、タイムスタンプ局の認証局を選ぶことができるならば以下の点に注意すると良いと思います。逆にこれから認証局を構築するなら同様の点に注意してください。
- 全ての認証局の識別名の属性タイプは(CN,OU,O,L,C)のみが使われているものを選ぶ(例:CN=Root CA,O=Hoge,C=JP)
- 全ての認証局の識別名の属性タイプに(emailAddress,stateOrProvince)が使われていないことを確認する
- 全ての認証局の識別名のDirectoryString TypeはPrintableStringかUTF8Stringのみを用いる
- 鬼門となりそうなASCIIの記号文字(',', ';', '<', '>', '=', '#', '\', '"', など)は極力識別名には使わない
アプリケーション側が認証局選べるハッピーなケースなんてほとんど無いんですけどね、、、(^^;
XAdES相互運用性のアプリケーション側の注意点
生成も検証も同じアプリを使う場合には気にしなくていいですが、他の会社の文書交換とか署名生成と検証とが違うアプリケーションの場合には、選んでしまった認証局の種類、アプリケーションの種類によって「生成、検証の双方のドメインで」以下のような注意をすると良いのではないかと思います。
- 詳細なテストの前に検証側実装が識別名名の一致確認を厳密に実装しているか確認してみる。実装していないなら問題は生じない
- 一方がMicrosoft系の実装であれば慎重に動作確認を行う
- 使用される全てのCA証明書で主体者名の属性タイプにemailAddress、stateOrProvinceが含まれていればXAdES参照情報の一致確認に問題が生じないか確認しておく
- CA証明書主体者名のDirectoryString TypeがPrintableString、UTF8String以外であれば慎重に動作確認する
- CA証明書主体者名の属性値にASCIIの記号文字(',', ';', '<', '>', '=', '#', '\', '"', など)が含まれている場合には慎重に動作確認する
- 使用される全てのCA証明書で主体者名の属性タイプがCN,OU,O,L,Cであれば問題は少ないが一応動作確認をしておく
- 検証時に名前が一致しなかったとしても、エラーとはせず警告程度に留めておいた方がよい
XAdESの改定に向けて
現在、ETSIで行われた実証実験の結果を受けてETSI TS 101 903 v1.3.2 XAdESの改訂の項目洗い出しやディスカッションがETSI TC ESIで行われています。
今回のXAdESの名前比較は、CAdESと同等の置換攻撃に対する耐性を持たせるためにはきちんとやらなければいけないはずですが、識別名文字列の生成結果が一意にならないために、一致検証を行っていなかったりする実装がほとんどであり、XAdES v1.3.2の仕様の検証要件自体が形骸化しています。
できもしないような現状の一致検証の要件は取り下げてもらい、必要性を感じているなら、識別名オクテットのハッシュ値を比較し、文字列としては比較しないなどの別の方法による識別名の一致確認を行うべきであると考えており、これをETSI TC ESIや仕様のエディタに継続的に訴えかけていくつもりでいます。
ETSIのプラグテストの設計の際、今回ご紹介した問題を仕様のエディタ兼プラグテストの取りまとめの方に説明し、「名前比較はXAdESでは真面目にやろうとすると難しいし、現状ではあまり意味がないのでテスト項目から外しましょう」という事で納得してもらいましたので、概ねこの問題については理解してもらっているものと思っています。
以上、全9回に分けてXAdESにおける識別名の名前比較の問題について説明してきました。いかがでしたか?細かい部分が理解いただけなかったとしても、それは私の説明の仕方に問題があるんだと思います(^^;なんとな〜〜く「XAdESの名前比較は面倒臭い、、、」という事だけ知って頂ければ幸いです。
ではでは、、、
<追記>
以前書いたBER/DERの問題は、ちょっとウソを書いてしまっているので近いうちに直します、、、、m(_ _)m
XAdESの証明書識別名の比較問題 (もくじ)
・第1回 はじめに
・第2回 XAdESにおける名前比較の要件
・第3回 なぜCAdESやXMLDSigでは問題とならないのか
・第4回 RFC 2253による識別名バイナリの文字列化
・第5回 RFC 2253識別名文字列を比較する際の相互運用性阻害要因
・第6回 RFC 2253識別名文字列を生成する実装の紹介とテストの概要
・第7回 RFC 2253識別名文字列を生成する実装の標準準拠性テスト結果
・第8回 XMLDSig Second Editionでも参照されるRFC 2253の改訂版RFC 4514との差異
・第9回(最終回) まとめと今後のXAdESの改訂