3 タイムスタンプ・プロトコル (RFC 161)
3.1 RFC 3161
3.1.2 リクエストおよびレスポンスフォーマット
RFC 3161の「2章 TSA」では、クライアント(タイムスタンプ要求者)がTSA とタイムスタンプ・トークンをやりとりするためのメッセージフォーマットを定 義している。
3.1.2.1 リクエストフォーマット
TimeStampReq TimeStampReqはタイムスタンプ要求者が生成しTSAに送られる。
VERSION タイムスタンプ・リクエストのバージョン(現在は
1)。
MessageImprint タイムスタンプが押されるデータ(ハッシュ値)。
ReqPolicy OPTIONAL 要求するTSAポリシー。
Nonce OPTIONAL 信頼できるローカルクロックがない場合に、適時
性検証のために使われる乱数。タイムスタンプ要 求者によって生成される。
CertReq タイムスタンプ・レスポンス(TimeStampResp)に、
TSAの公開鍵証明書を含めることを要求するフラ グ。TRUEの場合は、CMS SignedDataのcertificates にTSA証明書が含まれなければならない。省略あ るいはFLASEの場合、certificatesにTSA証明書が含 まれてはならない。
Extensions OPTIONAL 追加情報のためのフィールド。現在は定義されて
いない。
-- 2.4.1
TimeStampReq ::= SEQUENCE {
version INTEGER { v1(1) }, messageImprint MessageImprint,
--a hash algorithm OID and the hash value of the data to be --time-stamped
reqPolicy TSAPolicyId OPTIONAL, nonce INTEGER OPTIONAL, certReq BOOLEAN DEFAULT FALSE, extensions [0] IMPLICIT Extensions OPTIONAL } TSAPolicyId ::= OBJECT IDENTIFIER
MessageImprint
タイムスタンプすることが要求されたデータのハッシュ値、あるいはタイ ムスタンプされたデータを含んでいる。ハッシュに使用されるアルゴリズ ムは十分な耐衝突性をもつものでなければならない。ハッシュ値の長さは 使用されたアルゴリズムが予期する長さと一致しなければならない。
HashAlgorithm ハッシュに使用されたアルゴリズム
HashedMessage ハッシュ値
MessageImprint ::= SEQUENCE {
hashAlgorithm AlgorithmIdentifier, hashedMessage OCTET STRING }
3.1.2.2 レスポンスフォーマット
TimeStampResp TimeStampReq に対するレスポンスとしてTSAによって生成される。タイム スタンプ・リクエストが受け入れられタイムスタンプ・トークンが発行さ れた場合は、タイムスタンプ・トークンをCMSでカプセル化したものがタ イムスタンプ・レスポンスに含まれる。
TimeStampToken OPTIONAL CMSでカプセル化されたタイムスタンプ・ト ークン。Statusが0か1の場合は存在し、それ 以外の場合は存在してはならない。
Status タイムスタンプ・リクエストの処理ステータ
スを示す。
StatusString OPTIONAL 理由のテキストデータを含む。
FailInfo OPTIONAL タイムスタンプ・トークンがタイムスタン
プ・レスポンスに含まれない場合に、タイム スタンプ・リクエストが棄却された理由を示 す。
-- 2.4.2
TimeStampResp ::= SEQUENCE {
status PKIStatusInfo,
timeStampToken TimeStampToken OPTIONAL } -- The status is based on the definition of status -- in section 3.2.3 of [RFC2510]
PKIStatusInfo ::= SEQUENCE { status PKIStatus,
statusString PKIFreeText OPTIONAL, failInfo PKIFailureInfo OPTIONAL }
PKIStatus ::= INTEGER { granted (0),
-- when the PKIStatus contains the value zero a TimeStampToken, as requested, is present.
grantedWithMods (1),
-- when the PKIStatus contains the value one a TimeStampToken, with modifications, is present.
rejection (2), waiting (3), revocationWarning (4),
-- this message contains a warning that a revocation is -- imminent
revocationNotification (5)
-- notification that a revocation has occurred } -- When the TimeStampToken is not present
-- failInfo indicates the reason why the -- time-stamp request was rejected and -- may be one of the following values.
PKIFailureInfo ::= BIT STRING {
badAlg (0), -- unrecognized or unsupported Algorithm Identifier badRequest (2), -- transaction not permitted or supported
badDataFormat (5), -- the data submitted has the wrong format timeNotAvailable (14), -- the TSA's time source is not available
unacceptedPolicy (15), -- the requested TSA policy is not supported by the TSA.
unacceptedExtension (16), -- the requested extension is not supported by the TSA.
addInfoNotAvailable (17) -- the additional information requested could not be understood
-- or is not available
systemFailure (25) -- the request cannot be handled due to system failure }
from RFC2510:
PKIFreeText ::= SEQUENCE SIZE (1..MAX) OF UTF8String
-- text encoded as UTF-8 String (note: each UTF8String SHOULD -- include an RFC 1766 language tag to indicate the language -- of the contained text)
TimeStampToken
TimeStampReq が妥当でTSAに受け入れられた場合、TSAによって発行され る。TimeStampToken は contntInfo 形式であり、その content に CMS SignedData としてカプセル化されなければならない。
TimeStampToken ::= ContentInfo
-- contentType is id-signedData as defined in [CMS]
-- content is SignedData as defined in([CMS]) -- eContentType within SignedData is id-ct-TSTInfo -- eContent within SignedData is TSTInfo
CMS SignedData
タイムスタンプ・トークンは、CMS SignedData 型のデータであり、contentInfo にカプセル化される。
CMS SignedData(s, t ) データTを、署名者Sが CMS SignedData 形式で署名 を行う。
・ singedData.eContentType はid-ct-TSTInfoがセット される。
・ TSTInfo は DER9エンコードされて eContentに含 められる(SHALL)。
・ TimeStampReq の certReq フィールドが TRUEの 場合、TSA証明書が signedData.certificatesフィール ドに含まれなければならない(MUST)。その場合、
cerificatesフィールドにはその他の証明書が含まれ るかもしれない(may)。
・ certReqフィールドが存在しないか、FALSEの場合、
certificatesフィールドは存在してはならない (MUST not)。
・ signedData.signerInfo にはTSAの署名以外は含めて はならない(MUST NOT)。
・ signerInfo.signedAttrs に signingCertificate として ESSCertID(TSA証明書識別子)を含めなければなら ない(MUST)。
TSTInfo
Version タイムスタンプ・トークンのバージョン(現在は1)。
Policy タイムスタンプ・トークンが発行されたTSAポリシ
ー。タイムスタンプ・リクエストの中に同様のフィ ールドがある場合は、それと同じ値でなければなら ない。
MessageImprint タイムスタンプされたデータ。タイムスタンプ・リ
クエストに含まれている同様のフィールドと同じ 値を含まなければならない。
9 Distiguished Encoding Rule. [X.690]において定義されているASN.1のエンコーディング規則
の一種。エンコードされたバイナリデータの一意性を実現できるため、デジタル署名のエンコー ディング規則としてよく用いられる。
SerialNumber TSAによってタイムスタンプ・トークンに割り振ら れた一意な番号。
GenTime タイムスタンプ・トークンが生成された時間。ロー
カルな時間値でなくUTC時間を使用しなければな らない。
Accuracy OPTIONAL GenTimeからの誤差。
Ordering GenTime を用いてタイムスタンプ・トークンがソ
ート可能かどうかを示す。
Nonce OPTIONAL タイムスタンプ要求者がタイムスタンプ・レスポン
スの適時性を検証するために使用する。タイムスタ ンプ・リクエストに同様のフィールドが含まれてい る場合は、その値と同じものが含まれなければなら ない。
Tsa OPTIONAL TSAの名前を識別するための情報。存在する場合
は、TSA公開鍵証明書中の subject 情報のいずれか と一致しなければならない。
Extensions OPTIONAL 追加の情報のための拡張フィールド。現在は定義さ
れていない。
TSTInfo ::= SEQUENCE {
version INTEGER { v1(1) }, policy TSAPolicyId,
messageImprint MessageImprint,
-- MUST have the same value as the similar field in -- TimeStampReq
serialNumber INTEGER,
-- Time-Stamping users MUST be ready to accommodate integers -- up to 160 bits.
genTime GeneralizedTime,
accuracy Accuracy OPTIONAL, ordering BOOLEAN DEFAULT FALSE, nonce INTEGER OPTIONAL, -- MUST be present if the similar field was present
-- in TimeStampReq. In that case it MUST have the same value.
tsa [0] GeneralName OPTIONAL, extensions [1] IMPLICIT Extensions OPTIONAL }
GenTime
タイムスタンプ・トークンがTSAによって生成された時間である。ローカル時間 をつかうことによる混乱を避けるためUTC時間(協定世界時)で表現される。
GenTime GeneralizedTime
秒未満の精度の端数を含めることができる。
秒の値はふくめられなければならない。
秒以下の精度が必要とされない場合、’Z’ で終わらなけ ればならない。
端数が存在する場合は ‘.’ でポイントされなければな らない。
端数エレメントの後尾の0は省略されなければならな い。
端数エレメントが0を表す場合は、’.’ も省略されなけ ればならない。
Accuracy
Accuracy は、GeneralizedTime で表される GenTime と実際のタイムスタンプ・
トークンの生成時刻との間の誤差を表す。GenTime にAccuracyの値を加えること によってタイムスタンプ・トークン生成時間の上限(最遅時刻)、GenTimeから Accuracyの値を引くことによって下限(最早時刻)を得ることができる。
Accuracy ::= SEQUENCE {
seconds INTEGER OPTIONAL, millis [0] INTEGER (1..999) OPTIONAL, micros [1] INTEGER (1..999) OPTIONAL }
Ordering
同じTSAが生成したタイムスタンプ・トークンを、GenTimeによって並べること ができるかどうかが示される。このフィールドが無いか、FALSE がセットされ ている場合は、GenTimeはTSAによってタイムスタンプ・トークンが生成された 時間のみを示し、その値によっておのおののタイムスタンプ・トークンが正しく 並べられることを保証しない。このフィールドが存在しTRUEがセットされるな ら、おなじTSAからのすべてのタイムスタンプ・トークンはGenTimeをもとに正 しく並べることができる。