5 タイムスタンプに関連した実装
5.3 IAIK
5.3.1 概要
ここではIAIK TSP Toolkitのクラスライブラリの構成や各クラスの大まかな機 能を解説する。
IAIK TSPクラスライブラリはTSPの基本的な実装パッケージ(iaik.tsa.asn1) と、それを組み合わせてTSPクライアント、TSPサーバーを実装したパッケージ (iaik.tsa.connections, iaik.tsa.request, iaik.tsa.responseなど)から構成される。
TSPクライアントやTSPサーバーを実装したパッケージに含まれるクラスはそれ だけでほぼ完成したアプリケーションである。
しかし、IAIK TSPに関してはドキュメントがあまり整備されておらず、すぐに
見つかるバグもあるなどまだ開発途中という感が強い。
5.3.1.1 主なクラス
TimeStampClientManager
TimeStampReqの生成を行う。通信を担当するTsaHttpClientや
TsaTcpipClientクラスと連携してTSPクライアントを実現する。サンプルコ ードを参照。
TimeStampServerManager
TimeStampReqを受け取り、TimeStampRespを生成する。通信を担当す るTsaTcpipServerクラスと連携してTSPサーバー(TSA)を実現する。
TsaHttpClient
タイムスタンプ・プロトコルに関する技術調査
TSP over HTTPクライアントの実装。TimeStampClientManagerからコ ールされる、
byte[] sendAndReceiveData(byte[] data)
というメソッドのみのクラス。引数のdataにはDER形式の
TimeStampReqをセットする。returnのbyte[]はこれも、DER形式の
TimeStampRespが返される。サンプルコードを参照。
TsaHttpServerServlet
TSP over HTTPの実装。このクラス単体で完成したサーブレットである。
TsaTcpipClient
TSP over TCPクライアント側実装。TimeStampClientManagerと連携し てTSPクライアントを実現する。
TsaTcpipServer
TSP over TCPサーバー側実装。TimeStampServerManagerと連携して TSP Server(TSA)を実現する。
iaik.tsa.asn1パッケージに含まれるクラス
Accuracy, MessgeImprint, PKIFailureInfo, PKIFreeText, PKIStatus, PKIStatusInfo, TimeStampReq, TimeStamResp, TimeStampToken,
TSTInfo。RFC 3161に規定される各データの実装。ここに含まれるクラスは
RFC 3161の内容を忠実に再現している。
これらを組み合わせて実際のサービスに使うプログラムを作成することに なる。
タイムスタンプ・プロトコルに関する技術調査
iaik.tsa.connectio ns.tcpip TsaTcpIpCli
ent TsaTcpIpSer
ver
iaik.tsa.connectio ns.http TsaHttpClie
nt TsaHttpServ
erServlet iaik.tsa.request
TimeStampCl ientManager
iaik.tsa.response TimeStampSe rverManager
iaik.tsa.asn1
Accuracy TimeStampTo
ken TimeStampRe
sp
MessageImpr int TimeStampRe
q TSTInfo
図 5.3-1パッケージの関連図
5.3.1.2 ダイジェストアルゴリズム
ダイジェストアルゴリズムはiaik.security.mdパッケージに実装されており、
MD2、MD5、RIPEMD128、RIPEMD160、SHA、SHA256、SHA384、SHA512 の実装が提供されている。
5.3.1.3 serialNumberのサイズ
iaik.tsa.asn1.TSTInfo.getSerialNumber()はBigIntegerを返すので、十分な大 きさがある。しかし
iaik.tsa.response.TimeStampServerManager.serial_number_counter_がintで 定義されている。
5.3.1.4 orderingフラグ
iaik.tsa.asn1.TSTInfo.setOrdering(boolean ordering)がある。ドキュメントに このフラグがサーバーの動作に影響を与えるような記述はないので、おそらく何 ら影響は与えないものと思われる。
タイムスタンプ・プロトコルに関する技術調査
5.3.1.5 nonceのサイズ
64bitまでのサイズのnonceを生成し、TimeStampReqに含められることを確 認した。
5.3.1.6 TimeStampTokenの検証
iaik.tsa.utils.TsaUtilクラスに検証用staticメソッドが定義されている。
verfiySignedDataAgainstCertificates、verifySignerInfos、verifyTimeStampReq、 verifyTimeStampResp、verifyTSTInfoメソッドがあり、それぞれSignedData、 SignerInfo、TimeStampReq、TimeStamResp、TSTInfoの検証を行う。
5.3.1.7 サーバー側ポリシーID
TSAサーバーは複数のPolicy IDを保持する必要がある。サーバーをセットア ップするためのプロパティを表現するクラスがiaik.tsa.utils.TsaPropertiesに定 義されているが、このクラスのサーバー側PolicyIDを表すフィールド、
SERVER_POLICY_IDがStringとして定義してある。従って複数のポリシーを 設定することができない。これに関連して、
iaik.tsa.response.TimeStampServerManager.policy_info_も配列ではないため、
複数のポリシーを保持することができない。