はじめに
米国政府で使用する暗号を2010年までに強固なアルゴリズムに移行することを決定し、政府以外の様々な分野でも同様に暗号の移行の実施が迫られており、これを「暗号の2010年問題」呼んでいます。
タイムスタンプについては、現時点で作成したデータが今後10年といった長いスパンで利用できることが求められるため、他の暗号の応用よりもかなり強固なアルゴリズムに早急に移行する必要があります。国内のタイムスタンプ局事業者では、すでにトークン内の一部分においてSHA2への移行が完了していますが、タイムスタンプトークンは様々な部分で暗号アルゴリズムが使われているので、移行できていない箇所が幾つか存在しています。
タイムビジネス協議会でも、暗号アルゴリズム移行のワーキンググループを立ち上げ、移行計画と移行内容の策定を進めています。
そのような状況の中、セイコーインスツルさんやセイコープレシジョンさんが共同で、開発者なら誰でも無償でRFC 3161デジタルタイムスタンプのSHA2アルゴリズムへの移行を試すことができる体験サイトを公開して頂けるようになりました。 いつもお世話になっているUさんから案内頂き、ようやく時間も取れたのでいろいろ試してみたので、レポートしたいと思います。
体験サイトで試せるSHA2のパターン
RFC 3161タイムスタンプトークンは、ざっくりと以下の場所で暗号アルゴリズムの移行を進めていかなければいけません。
- タイムスタンプトークンの主構造となる暗号メッセージ構文の署名データ(CMS SignedData)でのSHA2、SHA2withRSAの使用。
- タイムスタンプトークン情報(TSTInfo)でのSHA2の利用。
- タイムスタンプトークン内で使われるTSA証明書(=X.509公開鍵証明書)や時刻監査証(=X.509 属性証明書v2)のSHA2withRSAの使用。
体験サイトでのタイムスタンプの取得
体験サイトでは使い方を解説したPDFに記載されているタイムスタンプサービスのURLに対して、認証なしでタイムスタンプ要求を送ることにより取得できます。Adobe AcrobatやMicrosoft Office 2010やその他のCAdESやXAdESなどのタイムスタンプを利用するアプリケーションから利用することも可能です。私は自前開発のJavaベースのクライアントで試してみました。
タイムスタンプ要求でreqPolicyという値をいろいろ切り替えることによりタイムスタンプトークンのどの部分をSHA2対応にしたのか切り替えられるようになっています。reqPolicyと、取得できるタイムスタンプトークンのパターンを示したのが下表になります。
タイムスタンプトークンフォーマットにおける2つの課題
タイムスタンプトークンのフォーマットはRFC 3161で規定されていますが、2つの課題があります。
- 国内の多くのタイムスタンプ局が発行するタイムスタンプトークンには時刻監査証と呼ばれる上流の時計との時間差を示す証明書がX.509属性証明書v2の形式で発行され、これがトークンに含まれます。現行のトークンではv1AttrCertというV1の属性証明書を格納する領域にV2の属性証明書を入れてしまっています。ASN.1を厳密にパースするアプリだとエラーになってしまうケースもあるようです。これを正しくv2AttrCertに格納し、その結果CMS SignedDataのバージョンをv4にしたものが体験サイトで試せるようになっています。
- タイムスタンプトークンでTSA証明書の置換攻撃を防ぐためにESSSigningCertificate(V1)という属性を使いますが、これはSHA1しか使えない仕様になっています。これをSHA2でも使えるようにESSSigningCertificateV2を規定しタイムスタンプでも使えるように新しいRFC(RFC 5816)が公開されました。体験サイトではこれも試せるようになっています。体験サイトで公開されているESSSigningCertificateV2は、ちょっとおかしいような気がするので確認してみます。
おわりに
自前開発のCAdESやXAdESのフル実装では既にSHA2の対応は終わっていて、そのようなテストをするためにパラメーターをいろいろいじれるテスト用タイムスタンプ局を実装したんですが、そのような実装がなくても自分の実装がSHA2タイムスタンプに対応しているのか簡単に確認できるので、このような体験サイトの存在はとてもありがたいんじゃないかと思います。
ちなみに、セイコーさんのタイムスタンプはマイクロ秒単位でトークンが出てくるので、これについてはちょっとハマる実装もあるかもしれませんね。一般的なコンピュータではミリ秒単位までしか時刻を扱えないのと、ASN.1の時刻表現を秒単位までしか扱えないような実装も多いため注意が必要です。














