≪前回(第一回)|次回(第3回)≫

前回は、XAdESにおいては識別名の一致確認に問題があるという紹介をしたところまででした。

今回は、XAdESの仕様はどうなっているのかを見ていきましょう。

XAdESにおける検証情報中の発行者名一致確認の要件



ETSI TS 101 903 XAdES v1.3.2では、Annex G (informative): Details on XAdES signatures validationに検証続きが説明されており、CompleteCertificateRefsの証明書参照情報の検証方法については以下のように規定されています。
(注:厳密には規定でないことは後述)

G.2.2.12 Checking CompleteCertificateRefs and AttributeCertificateRefs (p92)

2) Check that for each certificate in the aforementioned set, the property contains its corresponding reference. For doing this the values of the IssuerSerial, ds:DigestMethod and ds:DigestValue should be checked as indicated in clause G.2.2.5 steps 1 and 3.
2) 前述の集合中の個々の証明書に対し、プロパティがその証明書に関連した参照情報を持っているか確認する。これを行うために IssuerSerial、ds:DigestMethodおよびdsDigestValueが G.2.2.5 節のステップ1および3で示したように確認しなければならない。


IssuerSerialの具体例はこんな感じ、、、

<IssuerSerial>
 <ds:X509IssuerName>CN=Root CA,O=Entrust,C=JP</ds:X509IssuerName>
 <ds:X509SerialNumber>123</ds:X509SerialNumber>
</IssuerSerial>


この参照先になっているG.2.2.5が以下のSigningCertificateの検証方法の記述です。

G.2.2.5 Checking SigningCertificate (p90)

1) Compare the name of the issuer and the serial number of the certificate with those indicated in the IssuerSerial element. For doing this, the application must follow the indications given in XMLDSIG clause 4.4.4 on how to generate the string corresponding to the issuer's distinguished name. If not, take the next reference and re-start again in 1. If they match, continue with 2.
1) 証明書中の発行者名とシリアル番号とIssuerSerial要素で示されたものとを比較する。これを行うためにアプリケーションは発行者識別名に相当する文字列の生成方法について、W3C XMLDSIG仕様の4.4.4節で与えられた指示に従わなければならない。一致しない場合、次の参照を用いステップ1を再実行する。一致した場合、ステップ2に続く。


つまりXAdESの証明書、CRL、OCSP応答の発行者名の文字列を得るにはXMLDSIG 4.4.4節を見ろということです。

XMLDSIG 4.4.4節に深く入りこむのは別の機会にして、簡単にはXMLDSIG 4.4.4節では証明書中の識別名をRFC 2253 Lightweight Directory Access Protocol (v3): UTF-8 String Representation of Distinguished Names(LDAPv3: 識別名のUTF-8文字列表現)により文字列表現にすることを言っています。

証明書・CRL・OCSP応答から発行者名を取り出し、これをRFC 2253で文字列表現にし、XAdESのプロパティと比較して一致していなければならないわけです。

但し、XAdES(およびCAdES)では参照情報だけでなくタイムスタンプなど全ての検証方法は全てInformative(=参考情報)でありNormative(=規定)ではないのです。私がETSIに対しAnnex Gに書かれた検証方法について意見したり細かいコメントをするとETSIのエディタは「いやぁ〜〜、それはあくまでInformative(=参考情報)だからねぇ、、、、」と逃げる人がいます(^^;検証方法を規定しないフォーマットなんか意味無いっつ〜〜〜の!!!(すみません、語気が荒くて)

例えばX.509やRFC 3280などでは証明書の検証方法を、RFC 3852ではCMSの検証方法を規定しています。検証方法がInformativeというのは「仏作って魂入れず」というか有り得ない話です。(この辺りも改訂を内々にお願いしている最中ですが、ETSIに理解されているかどうか、、、、)

今日は深くなりすぎたのでこれぐらいにしたいと思います。

次回は核心に進む前に、CAdESやXMLDSigだってIssuerSerialみたいなのを参照情報として使っているのに何で問題にならないのか、少し寄り道して説明しようと思います。

ではでは



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の改訂