タイムスタンプ

**タイムスタンプ**（）とはある出来事が発生した日時・日付・時刻などを示す文字列。狭義には郵便物の発送日時等を示すために押される郵便印のことを指す（画像を参照のこと）。現在ではコンピュータにおける「タイムスタンプ」がよく知られている。

## デジタル・タイムスタンプ
コンピュータやデジタルカメラ等の電子機器にて記録されるタイムスタンプ（他との区別のため「デジタル・タイムスタンプ」 とも呼ばれる。）は出来事（イベント）が発生した時刻そのものを指すのではなく、コンピュータにイベントが記録された時刻を指す。多くの場合、その違いは重要ではない。ただ、タイムスタンプによりイベントが記録された時刻（例: ログ書き込み時刻）と記録されたイベントの発生時刻の差が開きすぎると整合性に乖離が生じるおそれがあるため、その差は極めて0に近づくべきである。

場合によっては、タイムスタンプは単なるイベントの順序付けである可能性もあるが、その際プログラミングにおいて、タイムスタンプを格納する関数、メソッド（例: date_timeフォーマット）等の利用が常に必要となるわけではない。

このデータは通常、一貫性をもったフォーマットで表現され、これにより2つの異なる記録を容易に比較できるようになり、また、時間経過と共に変化するイベントの進行状況を追跡することが可能となる。このような実データに沿って一貫性をもったタイムスタンプを記録する手法を**タイムスタンピング**（、タイムスタンプ処理）という。

ただし、いくら一貫性を持った記録を行っても、後から改竄することが可能ならば、その信頼性は失われる。不特定多数からのアクセスを許可しているデータログは容易に改竄できる。このためタイムスタンプを含めたデータログを保管するシステム、サーバには物理的なセキュリティ（例: データセンター等安全な場所への機器保管）・論理的なセキュリティ（オペレーティングシステム（OS）レベルでのセキュリティ、ファイルパーミッションや強制アクセス制御など）を施すべきである。

タイムスタンプは一般にイベントのロギングのため、または、時系列（"sequence of events", SOE）の評価を行うため利用される。両ケースにおいて、タイムスタンプはイベントのマーキングのために使われる。ファイルシステムにおいては、タイムスタンプはファイルの作成・更新日時を指す場合もある。多くのOSのファイルシステムではファイルの作成日時（UNIXならびにUnix系OSではctimeという。以下同じ）、更新日時（mtime）、アクセス日時（atime）がタイムスタンプとして記録されている。これらのデータがシステムコールで取り出せるOSも存在する（UNIXでは）。

### 例
タイムスタンプの例を挙げる。
*2005-10-30 T 10:45 UTC
*2007-11-09 T 11:20 UTC
*Sat Jul 23 02:16:57 2005
*1256953732（UNIX時間）
*(1969-07-21 T 02:56 UTC) - 月への第一歩。"*That's one small step for [a] man, one giant leap for mankind*"（「*これは一人の人間にとっては小さな一歩だが、人類にとっては偉大な飛躍である。*」）, Neil Alden Armstrong.

### 標準化
ISO 8601は日時表現の標準化である。これらの標準化表現は、しばしばタイムスタンプの値を生成する際に利用される。

### その他の意味
**タイムスタンプ**は次の意味でも使われる。
* タイムコード（ネットワークまたはビデオ技術）
* UNIX時間。1970年1月1日00:00:00 UTCからの経過秒数。プログラミングにおいてはこちらをさすことが多い。http://www.phpbook.jp/func/date/index3.html
* 
* 以下は前述したよく知られるタイムスタンプ。
** （digitally signed timestamp）。このタイムスタンプに署名した者は、ある時刻に署名した文書やコンテンツの存在を、デジタル署名の一部として与えられた時刻から。
** コンピュータのファイルシステムやデータベース上に存在するファイル、ディレクトリまたはデータベースの更新もしくはアクセス時刻。

この項目では、デジタル署名が持つ課題と、その解決策としてのタイムスタンプの仕組みについて説明する。

## タイムスタンプによる文章の改ざんの検証

デジタル署名は、第三者による文書の改ざんを検知することはできるが、署名者本人による文書の改変を防ぐことはできない。具体例として、文書の作成者が一度署名した文書の内容を後から変更し、再度デジタル署名をし直すことが可能である。これでは、その文書が最初に作成された時点から変更されていないことを保証できない。この問題点を解決するために、RFC3161 が考案されている。これはPKIを利用するタイムスタンプ認証プロトコルであり、信頼できる"Time Stamping Authority"（TSA）と呼ばれる認証局がクライアントから送信されるデータのハッシュを元に"Time-stamp token"を作成、これをクライアントへ応答として返す一連の手続きである。これによりクライアントは"Time-stamp token"（タイムスタンプトークン）から対象データの「信頼できるタイムスタンプ」を取得できる。電子文書に対して**「その時刻に文書が存在していたこと（存在証明）」**と**「その時刻以降、内容が変更されていないこと（非改ざん証明）」**を保証する仕組みであり、「電子署名法」やでは必須とされている。

### タイムスタンプの仕組み

#### タイムスタンプの取得フロー
# **ハッシュ値の送信 -** 利用者は、電子文書からハッシュ値（文書の要約データ）を生成し、TSAに送信する。
# **トークンの生成** **-** TSAは、受け取ったハッシュ値に正確な時刻情報を加え、TSAの秘密鍵で暗号化して「タイムスタンプトークン」を生成する。
# **トークンの返却** **-** TSAは、生成したタイムスタンプトークンを利用者に返す。
# **保管** **-** 利用者は、元の文書とタイムスタンプトークンを一緒に保管する。

##### タイムスタンプの検証フロー
# **ハッシュ値の生成** **-** 検証したい文書から、再度ハッシュ値を生成する。
# **比較・検証 -** タイムスタンプトークンをTSAの公開鍵で復号し、中に記録されている元のハッシュ値を取り出す。上記で生成したハッシュ値と、トークンから取り出したハッシュ値が一致すれば、文書が改ざんされていないことが証明される。
# **存在証明** **-** トークンに含まれる時刻情報により、その時刻に文書が存在していたことも同時に証明される。
## 脚注

### 注釈

### 出典

## 関連項目
* 時刻認証局 - その時刻に文章が存在し、その時刻以降に変更や改ざんが行われれていないことを証明する。
* 電子署名
* デジタル署名
* 
* システム時刻
* （Time Stamp Counter, TSC） - Pentium以降に搭載されたx86（80x86, x86-64）CPUのレジスタ。起動時からクロック周波数に合わせてカウントアップする。RDTSC（Read time stamp counter）命令を用いて呼び出すことが可能（アセンブリ言語、インラインアセンブラ）。
* データログ
** syslog - Unix系OSのログ取得デーモン。
**  - Microsoft Windowsのログ読み取りツール。
* 確定日付
* タイムレコーダー (打刻機)