さて1日間が空きましたが第3回は
前回説明したXAdESv141:TimeStampValidationDataと同じくXAdES 1.4.1/1.4.2で新しく追加されたXAdESv141:ArchiveTimeStampについての説明です。名前の通り保管タイムスタンプなのですがXAdES 1.3.2とは互換性がありませんので名前空間で区別して利用する必要があります。
では今回もそもそもなぜ新しい保管タイムスタンプであるXAdESv141:ArchiveTimeStampが必要になるのかと言う話からしましょう。前回XAdESの非署名領域であるUnsignedSignatureProperties要素の下にタイムスタンプ用の検証情報格納場所であるXAdESv141:TimeStampValidationDataが追加された事を説明しました。UnsignedSignatureProperties要素の下にはSchema的には任意の要素の追加が可能なので問題ありません。
一方XAdESv132:ArchiveTimeStampの計算時にはUnsignedSignatureProperties要素の下の決められた要素を順番に取得して連結して行く仕様となっています。この決められた要素とは全てXAdES 1.3.2で定義されたSignatureTimeStamp要素やCertificateValues要素等でありXAdESv141:TimeStampValidationData要素が含まれていません。これではせっかくXAdES 1.4.1/1.4.2で追加したXAdESv141:TimeStampValidationData要素の下が保護出来ない事になってしまいます。そこでArchiveTimeStampの計算方法として「UnsignedSignatureProperties要素の下を全て対象とする」XAdESv141:ArchiveTimeStamp要素を追加して解決したと言う事です。
ただそれだけでは無くもう1点ds:Objectの扱いについても変更がありました。XAdES 1.3.2では「Reference要素で参照されていないds:Object」が対象でしたが、XAdES 1.4.1/1.4.2では「全てのds:Object」が対象となりました。なお正確には「XAdESの要素であるQualifyingPropertiesを持つds:Objectは除外する」と言うルールもありますがこれはXAdES 1.3.2とXAdES 1.4.1/1.4.2の両方に共通しています。
以上をまとめると以下のようになります。
1)XAdES 1.3.2における保管タイムスタンプ仕様(一部)
1:UnsignedSignatureProperties要素の下の決められた要素を連結
2:Reference参照されていない全てのds:Objecctを連結 ※
2)XAdES 1.4.1/1.4.2における保管タイムスタンプ(一部)
1:UnsignedSignatureProperties要素の下の全ての要素を連結
2:Reference参照有無に関係無く全てのds:Objecctを連結 ※
※ ただしXAdESのQualifyingPropertiesを持つds:Objectは除外する。
計算方法が2箇所異なるので、当然計算結果のハッシュ値もXAdES 1.3.2とAdES 1.4.1/1.4.2では異なり一致しません。XAdESv141:TimeStampValidationData要素への対応の為に異なる保管タイムスタンプが生まれてしまいました。
なおXAdES 1.4.1のSchemaではXAdESv141:ArchiveTimeStampV2と書かれていましたがこれは誤りで、V2が無いXAdESv141:ArchiveTimeStampが正しい要素名となります。これはXAdES 1.4.2で訂正されています。
ここまで部分は仕様書に書かれている内容なので問題は無いと思います。個人的に問題と考えるのはXAdES 1.3.2とAdES 1.4.1/1.4.2の保管タイムスタンプがミックスして利用可能かどうかと言う事です。おそらく以下のようになるのでは無いかと考えています。
A)XAdESv141要素をUnsignedSignatureProperties要素の下に含まない
1:XAdESv132:ArchiveTimeStampで保護できる
2:XAdESv141:ArchiveTimeStampで保護できる
B)XAdESv141要素をUnsignedSignatureProperties要素の下に含む
1:XAdESv132:ArchiveTimeStampでは保護できない
2:XAdESv141:ArchiveTimeStampで保護できる
つまり後方互換性はあるのでは無いかと考えています。以下は上記のA:2のQualifyingPropertiesを持つds:Objectの例です。
<ds:Object>
<xa:QualifyingProperties>
<xa:SignedProperties/>
<xa:UnsignedProperties>
<xa:UnsignedSignatureProperties>
<xa:SignatureTimeStamp ID="SigTS" />
<xa:CertificateValues />
<xa:RevocationValues />
<xa:ArchiveTimeStamp ID="ArcTS1" />
<xa141:TimeStampValidationData URI="#ArcTS1">
<xa:CertificateValues />
<xa:RevocationValues />
</xa141:TimeStampValidationData>
<xa141:ArchiveTimeStamp ID="ArcTS2" />
<xa141:TimeStampValidationData URI="#ArcTS2">
<xa:CertificateValues />
<xa:RevocationValues />
</xa141:TimeStampValidationData>
<xa141:ArchiveTimeStamp ID="ArcTS3" />
</xa:UnsignedSignatureProperties>
</xa:UnsignedProperties>
</xa:QualifyingProperties>
</ds:Object>
これが許されるのであればこれまで作成されてきたXAdES 1.3.2の署名ファイルをそのまま保護して行ける事になります。個人的には許されない理由が思いつかないので大丈夫では無いかと考えています。しかしより厳密にはETSI等で確認して行く必要があると考えています。この辺り何か分かればまた本ブログでお知らせします。
以上でXAdES 1.4.1/1.4.2で新しく追加された要素の説明は完了です。次回は最後と言うことで弊社のLe-XAdESライブラリを使って作成したXAdES 1.4.1/1.4.2のES-Aファイルを示してまとめたいと思います。
XAdES 1.4.1/1.4.2:第1回 概要と名前空間 (2012-04-02)
XAdES 1.4.1/1.4.2:第2回 XAdESv141:TimeStampValidationData (2012-04-03)
XAdES 1.4.1/1.4.2:第3回 XAdESv141:ArchiveTimeStamp (2012-04-05)
XAdES 1.4.1/1.4.2:第4回 サンプルファイル他 (2012-04-06)
では次回の最終回をお楽しみに!