• 検索結果がありません。

5 タイムスタンプに関連した実装

5.2 OpenEvidence

5.2.3 サーバープログラム

サーバープログラムには以下のプログラムが含まれている。

tspd

RFC 3161のTSP via TCPをサポートしたTSA。 tsextd

Cybernetica社のプロトコル仕様に基づくTSA。 tslinkd

Cybernetica社のプロトコル仕様に基づくTSA。 oets.cgi

tsextdおよびtslinkdのHTTPフロントエンド。

CGIとして稼動する。

oets_mod.py

tsextdおよびtslinkdのHTTPフロントエンド。

apacheのモジュールとして稼動する。

cgidemo(ソースファイル名 ccpd+cpd_server.c) DVCS[DVCS]およびTSA[TSP]。

CGIとして稼動する。

tsextdやtslinkdはCybernetica社のプロトコル仕様に基づいているが、この仕 様については5.2.6節で述べる。

ここではRFC 3161、RFC 3029に基づいたtspd、cgidemoを中心に説明する。

5.2.3.1 tspd

tspdはRFC 3161のTSP over TCPをサポートしたTSAである。

tspdを起動するためには、以下のものが必要である。

・ TSAの署名鍵および公開鍵証明書

・  設定ファイル(tspd.conf)

TSAの公開鍵証明書のextendKeyUsageにはid-kp-timeStampingが指定され、

keyUsageにはdigitalSignatureとnonRepudiationの両方またはいずれかが指定 されていなければならない。tspdは起動時にこれらのフィールドのチェックを行 い、適切な値がなければエラーとなり終了する。

設定ファイル(tspd.conf)は、tspdの”-f”オプションでファイル名を直接指定する か、または、デフォルトの配置場所34に置く。設定ファイルの例を以下に示す。

##############################

#   設定ファイル tspd.confの例 #

##############################

## TSAIPアドレスとポート番号 TSAAddress = 192.168.1.1:318;

## TSTのアーカイブ用ディレクトリ

Archive = /usr/local/tsa/var/data/tspdArchive;

## TSAの署名鍵(DER or PEM)の指定

TSAKey = /usr/local/tsa/etc/tsaPrivKey.der;

## TSAの証明書(DER or PEM)の指定

TSACert = /usr/local/tsa/etc/tsaSignCert.der;

## TSAの証明書からトラストポイントまでのチェーンの指定

Certs = /usr/local/tsa/etc/certs;

## TSAの証明書が有効であるとみなされる期間。

## この時間を経過するとレスポンスはrevocationNotificationとなる。

TSACertValidity = 1314000; # 365 days

## この時間を経過するとrevocationWarningをレスポンスする。

TSACertThreshold = 1296000; # 360 days

## TSTInfoCMS signatureで利用するハッシュアルゴリズム

## sha1,md5,ripemd160が選択可能 DigestAlgorithm = sha1;

##Orderingの指定 Ordering = false;

##PolicyIDの指定 PolicyID = 1.2.3.4.5

##syslogdefault facility (LOG_LOCAL1LOG_LOCAL7を指定);

LogFacility = LOG_LOCAL7;

表 5.2-1tspdの設定ファイル TSQおよびTSRに関する調査結果を以下の表に記す。

項目 調査結果

version tspdTSQに含まれるversion1以外のものは受け付けない。この動作はRFC 3161には明記されていないが、RFC 3161時点でのバージョンが1であることを 考えると、正しい動作といえる。TSRにはversionとして1が指定される。

certReq TSQcertReqtrueがセットされているかどうかに関わらず、tspdTSRTSA 証明書を含める。ソースコード上ではTSQ中のcertReqの値を参照して、証明書 の付与の判断を行っているように見受けられる。バグにより正常動作していな いと思われる。

reqPolicy TSQで指定されたポリシーとtspdがサポートしているポリシーが一致しない場 合にはエラーのTSRを返却する。RFC 3161上、正しい動作といえる。tspdのサ ポートするポリシーは設定ファイルで指定されたポリシー(PolicyID)である。

nonce サポートしていない。TSQnonceを指定しても、TSRにはnonceは含まれない ため、RFC 3161に反する。

accuracy サポートしていない。設定ファイルでは設定項目があるもかかわらず、実際の

TSRにはこの項目は含まれない。

項目 調査結果

ordering サポートしていない。設定ファイルでは設定項目があるにもかかわらず、実際

TSRにはこの項目は含まれない。accuracynonceと同様、OPTIONALな項目 は全て無視しているようである。

CMS TimeStampTokenは設定ファイルで指定された署名鍵(TSAKey)を用いて署名さ れる。

TSA証明書の有効性は次のように行っている。

1. 現時刻がTSA証明書のvalidityの期間内にあることを確認する。

2. さらに、TSA証明書のファイル作成時刻から現時刻までの経過時間と設定フ ァイルで指定された時刻(TSACertValidityとTSACertThreshold)を比較す る。経過時間がTSACertThresholdを超えていた場合には、

revocationWarningのレスポンスを、TSACertValidityを超えていた場合に は、revocationNotificationのレスポンスを返却する。

5.2.3.2 cgidemo (ccpd+cpd_server.c)

cgidemoはTSA[TSP]およびDVCS[DVCS]のサービスを提供するCGIである。

RFC 3161とRFC 3029のHTTPトランスポートをサポートしている。

このプログラムはその名が示すとおり、RFC 3161やRFC 3029のデモンストレ ーションを目的としたサンプルプログラムであり、実運用には適していない。

TSAとDVCSのどちらのサービスを提供するかは、起動時に設定された公開鍵 証明書のextendKeyUsageに基づき決定される。extendedKeyUsageが

id-kp-timeStampingの場合にはTSA、id-kp-dvcsの場合にはDVCSとして稼動 する。

cgidemoの設定は環境変数を与えることで行う。以下の環境変数が必要である。

環境変数名 説明

OE_ADMIN_TIA サーバー(TSA,DVCS)のプライベート鍵と公開鍵証明書が含

まれるPKCS#12ファイルへのパス

OE_ADMIN_TIAPASS OE_ADMIN_TIAで指定したPKCS#12ファイルに対するパスフ レーズ

OE_DEFAULT_POLICY サポートするポリシーID

OE_TSA_EXTERNAL DVCSとして稼動する場合のみ有効な設定。

TimeStampTokenを得るための外部TSAURIで指定する。外部 TSARFC 3161TSP over HTTPをサポートする必要がある。

なお、cgidemoTSP over HTTPをサポートしているTSAなの で、外部TSAとして利用することができる。

外部TSA設定はバグにより正しく動作しない。後述する調査結 果を参照のこと。

cgidemoは、サーバーのPKCS#12ファイルにfriendlyNameが指定されていな ければ、きちんと動作しないため注意が必要である。

cgidemoはCGIであるため、上記の環境変数はWebサーバーを介して与えなけ ればならない。WebサーバーにApacheを使用した場合の設定例を以下に示す。

### httpd.confの設定 ###

#以下を追加する。

LoadModule env_module modules/mod_env.so

SetEnv OE_ADMIN_TIA “/usr/local/tsa/etc/tsaCert.p12”

SetEnv OE_ADMIN_TIAPASS “****” #****はパスフレーズを指定 SetEnv OE_DEFAULT_POLICY “1.3.6.1.4.1.5309.1.2.3”

SetEnv OE_TSA_EXTERNAL “http://192.168.1.2/cgi-bin/cgidemo”

cgidemo(TSA)におけるTSPの処理はtspdとは別の実装になっている。

cgidemo(TSA)の調査結果を次の表に示す。

項目 調査結果

certReq TSQ中のcertReqを参照していない。certReqの有無にかかわらずTSR 証明書を付与する。RFC 3161に反する。

reqPolicy TSQ中のreqPolicyは参照していない。reqPolicyの値にかかわらず、タイ ムスタンプ・トークンを発行し、その中のpolicyには前述の環境変数で 設定されたポリシーIDがセットされる。RFC 3161に反する。

accuracy TSRにこれらの項目は含まれない。

項目 調査結果 ordering

tsa

nonce TSQで指定されたnonceTSRに含められる。RFC 3161上、正しい動作 である。

証明書の有効性 TSAの公開鍵証明書の有効性は確認していない。

cgidemo(DVCS)についての調査結果を述べる。

項目 説明結果

サービス ccpd (Certification of Claim of Possession of Data)cpd(Certification of Possession of Data)に対応。

vsd(Validation of Digitally Signed Document)vpkc(Validation of Public Key Certificates)には未対応。

ccpdcpdの違いは、cpdcgidemo の内部でメッセージのハッシュ値を 生成する点が異なっている。

dvReqInfo DVCSレスポンス(DVCSCertInfo)dvReqInfoにはDVCSリクエストと 同一の内容がコピーされる。RFC 3029上、正しい動作といえる。

requestPolicy DVCSリクエスト中のrequestPolicyは参照していない。requestPolicyの値 にかかわらず、DVCを発行し、その中のpolicyには前述の環境変数で設 定されたポリシーIDがセットされる。

responseTime genTimeまたはTimeStampTokenがセットされるようにコードが組まれ ているが、TimeStampTokenはバグにより正しくセットされない(後述)

cgidemo(DVCS)は外部TSAを利用する場合、DVCSリクエストのメッセージ全 体のハッシュをとり、その値に対するTimeStampTokenの発行を要求する。正し いTimeStampTokenを取得した場合には、そのTimeStampTokenを

responseTimeにセットする。正しくないTimeStampTokenを取得した場合には、

ローカル時刻をresponseTimeにセットする。

TimeStampTokenの正しさは、タイムスタンプ・リクエストに含めたハッシュ

値とTimeStampTokenに含まれるハッシュ値の比較により検証しているが、この

処理にバグがあり、必ずローカル時刻がセットされてしまう35。 5.2.3.3 その他のサーバープログラム

tslinkdおよびtsextdはCybernetica社仕様のTSAである。tslinkdはリンキン グ・プロトコルをサポートし、tspexdはタイムスタンプの寿命の延長を行う。

tslinkdとtsextdはOpenEvidence付属のサーバーライブラリ(libserver)を用いて 記述されている。このサーバーライブラリではクライアントとの通信にソケット ファイルを使用しているため、これら単体ではリモート接続に対応していない。

リモート接続をサポートするためには、oets.cgiやoets_mod.pyといったHTTP フロントエンドをあわせて使用する。