5 タイムスタンプに関連した実装
5.1 OpenTSA
5.1.2 機能
タイムスタンプ・プロトコルに関する技術調査
ポリシーを複数指定することができる。ここにセットされていないポリシ ーをクライアントが要求してきた場合、statusにrejection(2)、statusString にUTF8Stringで’Requested policy is not supported.'、failInfoに
unacceptedPolicy(15)がセットされたTimeStampRespが返される。
ダイジェストアルゴリズム
TimeStampReqに含まれるMessageImprint中のダイジェストアルゴリズ ムとして許可するアルゴリズムを列挙する。ここにセットされていないアル ゴリズムで作成されたダイジェストが送られてきた場合、statusに
rejection(2)、statusStringにUTF8Stringで'Message digest algorithm is not supported.'、failInfoにbadAlg(0)がセットされたTimeStampRespが返され る。
タイムスタンプ・プロトコルに関する技術調査
5.1.2.3 鍵長
TSAが使用するRSAアルゴリズムの鍵長は[TSP Prof]において、2048ビット をサポートすることが求められている。OpenTSAはこれもサポートしており、
4096ビットの鍵を使用してmod_tsaを稼働させられることを確認した。
5.1.2.4 orderingフラグ
OpenTSAではorderingフラグをサポートしている。しかし、trueがセットさ れても単純にTimeStampRespのorderingにtrueがセットされるだけで動作に は影響を与えない。従って、orderingがtrueであってもgenTimeのみで順序が 確定されるとは限らない。falseにセットすべきである。
5.1.2.5 nonceのサイズ
nonceに使用する値は64ビットなどの大きな整数とすることが求められている。
OpenTSAで生成するTimeStampReqのnonce値を明示的に指定することはでき ないが、自動生成される値は128ビットあり、十分大きなものであるといえる。
5.1.2.6 TimeStampTokenの検証
verifyの結果はOK、FAILDの二値であるため、このままではこのタイムスタ ンプがいつ生成されたのか、という最も重要な部分をみることができない。
TimeStampTokenのgenTimeやaccuracyについては何らかの他のアプリケーシ ョンを利用して参照する必要がある。
5.1.2.7 ライブラリとしてのOpenTSA
mod_tsaがOpenTSAの提供する機能を利用して実装されているのと同様に、
OpenTSAの機能はアプリケーション作成に自由に利用することができる。しかし、
ライブラリという視点からいうとドキュメント等皆無なので実際に作業するのは 困難である。また、ドキュメントが公開されていないということは、次期リリー スで大幅な変更が行われるかもしれない。そのリスクを承知の上であればソース を解析してアプリケーションを作成することは可能である。詳細はソースディレ クトリ中のapps/openssl/ts.hなどを参照のこと。
OpenTSAのライブラリで定義されている構造体は9種類だが、最終的にはその
中のTS_REQからTimeStampReqを、TS_RESPからTimeStampRespを生成 する。
タイムスタンプ・プロトコルに関する技術調査
TimeStampReqの生成においてはTS_REQ_new()で確保したTS_REQに対し、
例えばTS_REQ_set_version(TS_REQ *, int version)や
TS_REQ_set_nonce(TS_REQ *, ASN1_INTEGER *nonce)をコールして値をセッ トしてゆく。
TS_RESPの生成ではまずTS_RESP_CTX_new()でTS_RESP_CTXを作成し、
これにTS_RESP_CTX_set_signer_cert(TS_RESP_CTX * context, X509 *cert)で 署名につかう証明書をセットするなどし、環境を整える。最終的にTS_RESP
*TS_RESP_create_response(TS_RESP_CTX *context, BIO *request)で TS_RESPを取得する。
タイムスタンプ・プロトコルに関する技術調査