IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 大日本印刷株式会社の特許一覧

特開2024-58371セキュアコンポーネント、デバイス及び現在時刻推定方法
<>
  • 特開-セキュアコンポーネント、デバイス及び現在時刻推定方法 図1
  • 特開-セキュアコンポーネント、デバイス及び現在時刻推定方法 図2
  • 特開-セキュアコンポーネント、デバイス及び現在時刻推定方法 図3
  • 特開-セキュアコンポーネント、デバイス及び現在時刻推定方法 図4
  • 特開-セキュアコンポーネント、デバイス及び現在時刻推定方法 図5
  • 特開-セキュアコンポーネント、デバイス及び現在時刻推定方法 図6
  • 特開-セキュアコンポーネント、デバイス及び現在時刻推定方法 図7
  • 特開-セキュアコンポーネント、デバイス及び現在時刻推定方法 図8
  • 特開-セキュアコンポーネント、デバイス及び現在時刻推定方法 図9
  • 特開-セキュアコンポーネント、デバイス及び現在時刻推定方法 図10
  • 特開-セキュアコンポーネント、デバイス及び現在時刻推定方法 図11
  • 特開-セキュアコンポーネント、デバイス及び現在時刻推定方法 図12
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024058371
(43)【公開日】2024-04-25
(54)【発明の名称】セキュアコンポーネント、デバイス及び現在時刻推定方法
(51)【国際特許分類】
   H04L 9/32 20060101AFI20240418BHJP
   G06F 1/14 20060101ALI20240418BHJP
【FI】
H04L9/32 200B
H04L9/32 200E
G06F1/14 510
【審査請求】未請求
【請求項の数】13
【出願形態】OL
(21)【出願番号】P 2022165684
(22)【出願日】2022-10-14
(71)【出願人】
【識別番号】000002897
【氏名又は名称】大日本印刷株式会社
(74)【代理人】
【識別番号】100114557
【弁理士】
【氏名又は名称】河野 英仁
(74)【代理人】
【識別番号】100078868
【弁理士】
【氏名又は名称】河野 登夫
(72)【発明者】
【氏名】浅野 正徳
(57)【要約】
【課題】デバイスやデバイスが処理又は生成するデータに対するタイムスタンプサービスを実現できるセキュアコンポーネント、デバイス及び現在時刻推定方法を提供する。
【解決手段】セキュアコンポーネントは、制御部を備え、制御部は、秘匿通信路経由で時刻源から時刻情報を取得し、取得した時刻情報をセキュアメモリに保持し、内部クロックのパルスを計数する計数部の計数値をリセットするとともに計数を開始し、外部から現在時刻を要求された場合、セキュアメモリに保持した時刻情報及び計数部の計数値に基づいて現在時刻を推定する。
【選択図】図1
【特許請求の範囲】
【請求項1】
制御部を備え、
前記制御部は、
秘匿通信路経由で時刻源から時刻情報を取得し、
取得した時刻情報をセキュアメモリに保持し、
内部クロックのパルスを計数する計数部の計数値をリセットするとともに計数を開始し、
外部から現在時刻を要求された場合、前記セキュアメモリに保持した時刻情報及び前記計数部の計数値に基づいて現在時刻を推定する、
セキュアコンポーネント。
【請求項2】
前記制御部は、
推定した現在時刻を外部へ出力する、
請求項1に記載のセキュアコンポーネント。
【請求項3】
秘密鍵を含む非対称鍵ペアをセキュアメモリに保持しておき、
前記制御部は、
外部から対象データ及び前記対象データの時刻証明要求を取得した場合、前記時刻情報及び前記計数部の計数値に基づいて現在時刻を推定し、
前記対象データ、推定した現在時刻及び前記秘密鍵に基づいて署名を生成し、
生成した署名及び推定した現在時刻を含むタイムスタンプを外部へ返送する、
請求項1に記載のセキュアコンポーネント。
【請求項4】
前記制御部は、
現在時刻を推定した際の前記計数部の計数値に基づいて前記現在時刻の信頼度を判定し、
判定した信頼度を外部へ返送する、
請求項1から請求項3のいずれか一項に記載のセキュアコンポーネント。
【請求項5】
前記制御部は、
現在時刻を推定した際の前記計数部の計数値を外部へ返送する、
請求項1から請求項3のいずれか一項に記載のセキュアコンポーネント。
【請求項6】
前記制御部は、
前記時刻源の時刻情報の受信時点、並びに前記時刻源の時刻情報の要求時点及び前記時刻源の時刻情報のセキュアメモリへの保持時点の少なくとも一つの時点における前記計数部の計数値に基づいて、推定した現在時刻と時刻情報との間の遅延時間を算出する、
請求項1から請求項3のいずれか一項に記載のセキュアコンポーネント。
【請求項7】
前記制御部は、
前記遅延時間に基づいて現在時刻を補正する、
請求項6に記載のセキュアコンポーネント。
【請求項8】
前記制御部は、
秘密鍵及び公開鍵を含む非対称鍵ペアを生成する、
請求項1から請求項3のいずれか一項に記載のセキュアコンポーネント。
【請求項9】
前記制御部は、
認証局サーバに対する前記公開鍵の署名要求に基づく公開鍵証明書を取得し、
セキュアメモリに保持した公開鍵証明書を、取得した公開鍵証明書で更新する、
請求項8に記載のセキュアコンポーネント。
【請求項10】
前記制御部は、
予め保持した認証局公開鍵証明書に基づいて、取得した公開鍵証明書を検証し、
検証が成功した場合、セキュアメモリに保持した公開鍵証明書を、取得した公開鍵証明書で更新する、
請求項9に記載のセキュアコンポーネント。
【請求項11】
セキュアエレメント、トラステッド・プラットフォーム・モジュール又はトラステッド実行環境のいずれかにより構成される、
請求項1から請求項3のいずれか一項に記載のセキュアコンポーネント。
【請求項12】
請求項1から請求項3のいずれか一項に記載のセキュアコンポーネントを備える、
デバイス。
【請求項13】
秘匿通信路経由で時刻源から時刻情報を取得し、
取得した時刻情報をセキュアメモリに保持し、
内部クロックのパルスを計数する計数部の計数値をリセットするとともに計数を開始し、
外部から現在時刻を要求された場合、前記セキュアメモリに保持した時刻情報及び前記計数部の計数値に基づいて現在時刻を推定する、
現在時刻推定方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、セキュアコンポーネント、デバイス及び現在時刻推定方法に関する。
【背景技術】
【0002】
サイバー空間と実空間の一体化が進展し、社会全体のデジタル化が進む中、トラストサービスに対する注目度が世界的に高まっている。トラストサービスとは、デジタル空間上の存在や活動を証明するためのサービスであり、例えば、ある時刻におけるデータの存在を証明するタイムスタンプサービスなどが含まれる。
【0003】
このようなタイムスタンプは、人間が作り出した文書等のデータの改ざん防止の仕組みとして広く用いられてきたが、昨今のSociety 5.0時代においては、デバイスやデバイスが処理するデータに対しても信頼性(時刻の証明など)が問われる。特許文献1には、通信ネットワークを通じてクライアント装置から送信される要求及びタイムスタンプ処理対象のデータを含む情報を受信して、ポリシーに従ってタイムスタンプを作成してクライアント装置へ送信するタイムスタンプサービスシステムが開示されている。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2007-82043号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
現在広く活用されているトラストサービスは、特許文献1のように、主としてサーバ、クライアントなど、ネットワーク資源によって実装されているが、エッジデバイスのようなデバイスやデバイスが処理するデータに対する信頼性を如何に付与するかは考慮されていない。特に、エッジデバイスの数が爆発的に増加した場合のネットワーク資源の枯渇、ネットワーク通信遅延の補償、ネットワーク接続切断などの問題発生時において、ネットワーク資源のみによって実装されたトラストサービスは信頼性を失い得る。
【0006】
自動運転などに代表される、生命や財産に大きく関わるシステムにおいては、事故が発生した際にデバイスが保持していたデータが原因究明等に重要であり、事故に関する利害関係人であるデバイス製造者とは独立して客観的に証明可能なデータでなければならない。このため、デバイスやデバイスが処理するデータに対するタイムスタンプなどの信頼性付与が強く求められる。
【0007】
本発明は、斯かる事情に鑑みてなされたものであり、デバイスやデバイスが処理又は生成するデータに対するタイムスタンプサービスを実現できるセキュアコンポーネント、デバイス及び現在時刻推定方法を提供することを目的とする。
【課題を解決するための手段】
【0008】
本願は上記課題を解決する手段を複数含んでいるが、その一例を挙げるならば、セキュアコンポーネントは、制御部を備え、前記制御部は、秘匿通信路経由で時刻源から時刻情報を取得し、取得した時刻情報をセキュアメモリに保持し、内部クロックのパルスを計数する計数部の計数値をリセットするとともに計数を開始し、外部から現在時刻を要求された場合、前記セキュアメモリに保持した時刻情報及び前記計数部の計数値に基づいて現在時刻を推定する。
【発明の効果】
【0009】
本発明によれば、デバイスやデバイスが処理又は生成するデータに対するタイムスタンプサービスを実現できる。
【図面の簡単な説明】
【0010】
図1】本実施形態のタイムスタンプシステムの構成の一例を示す図である。
図2】時刻同期要求の生成の一例を示す図である。
図3】時刻同期情報の授受の一例を示す図である。
図4】時刻応答の処理の一例を示す図である。
図5】同期した時刻に基づくタイムスタンプの生成の一例を示す図である。
図6】処理時間情報の蓄積の一例を示す図である。
図7】SC側クロックカウンタのカウンタ値と時刻同期処理との関係を示す図である。
図8】2回目以降の時刻同期(TSAサーバ側クロックの収集)の一例を示す図である。
図9】クロックカウンタ情報の蓄積の一例を示す図である。
図10】クロックドリフトの推定の一例を示す図である。
図11】クロックドリフトの推定と補正の一例を示す図である。
図12】TSA鍵ペア及び証明書の更新の一例を示す図である。
【発明を実施するための形態】
【0011】
以下、本発明をその実施の形態を示す図面に基づいて説明する。図1は本実施形態のタイムスタンプシステムの構成の一例を示す図である。タイムスタンプシステムは、デバイス100、及びTSAサーバ200を備える。タイムスタンプシステムは、CA(Certificate Authority:認証局)300を備えてもよい。デバイス100は、例えば、IoTデバイスであり、セキュアコンポーネント50を搭載し、セキュアコンポーネント50からデバイス100自身に対して、及びデバイス100が処理又は生成するデータに対してタイムスタンプ(ローカルタイムスタンプ)の発行を受ける。デバイス100は、エッジデバイス、エッジサーバとも称する。すなわち、デバイス100は、エッジサーバの機能を備えてもよい。TSAサーバ200は、時刻認証局(Time Stamping Authority)などのタイムスタンプ事業者が運営するサーバであり、デバイス100内のセキュアコンポーネント50との時刻同期を行う。CA300は、タイムスタンプ事業者の公開鍵(TSA公開鍵証明書)に署名をした主体が運営するサーバである。
【0012】
デバイス100は、セキュアコンポーネント50の他に、ネットワークI/F10、及びSCI/F20を備える。ネットワークI/F10は、ネットワーク経由でTSAサーバ200との通信を行うためのインタフェースである。SCI/F20は、セキュアコンポーネント50とコマンドの授受を行うためのインタフェースである。
【0013】
セキュアコンポーネント50は、タイムスタンプ(ローカルタイムスタンプ)を生成することを目的に接続された耐タンパ性を有するコンポーネントである。セキュアコンポーネント50は、ハードウェア実装(例えば、セキュアエレメント、TPM:トラステッド・プラットフォーム・モジュール)でもソフトウェア実装(例えば、トラステッド実行環境)のいずれの形態で実装されていてもよい。
【0014】
セキュアコンポーネント50は、署名生成部51、コマンド処理部52、秘匿通信部53、時刻計算部54、SC側クロックカウンタ55、内部発振クロック56、及び時刻情報テーブル57を備える。セキュアコンポーネント50は、内部のセキュアメモリ内にTSA公開鍵証明書、TSA秘密鍵、及び秘匿通信路鍵などを保持する。署名生成部51、コマンド処理部52、秘匿通信部53、及び時刻計算部54を纏めて制御部とも称する。
【0015】
署名生成部51は、現在時刻及び受信データをもとに、秘密鍵署名を行い、タイムスタンプを外部に出力するための機能である。
【0016】
コマンド処理部52は、SCI/F20から受信したコマンドを他の機能に割り振り、SCI/F20にレスポンスを返す機能である。
【0017】
秘匿通信部53は、セキュアコンポーネント50がTSAサーバ200と直接秘匿通信を行うための機能である。
【0018】
時刻計算部54は、時刻情報テーブル57に記録された同期時刻(時刻情報)、及びSC側クロックカウンタ55のカウンタ値に基づいて現在時刻を計算する機能である。
【0019】
時刻情報テーブル57は、TSAサーバ200から受信した時刻情報を同期時刻として記録するとともに、時刻要求生成完了、時刻応答受信及び時刻応答処理完了などの一定のタイミングでのSC側クロックカウンタ55のカウンタ値、後述のTSA側クロックカウンタ240のカウンタ値を記録する領域である。
【0020】
内部発振クロック56は、セキュアコンポーネント50の内部で独立して発振するクロック源である。内部発振クロック56の周波数は、セキュアコンポーネント50の内部のクロック周波数領域に記憶される。本実施形態では、クロック周波数を1MHzとしているが、これに限定されない。クロック周波数は、本実施形態で規定する計時方法上十分な精度を有していればよい。クロック周波数の設定方法は、例えば、製造時に予め決定されていてもよく、あるいは内部発振開始時に動的に決定してもよい。
【0021】
SC側クロックカウンタ55は、計数部としての機能を有し、内部発振クロック56のクロックパルスを計数する。SC側クロックカウンタ55は、所要の時点からの内部発振クロック56の発振数を記録することができる。
【0022】
TSA秘密鍵は、セキュアコンポーネント50がタイムスタンプを生成する際に使用する秘密鍵である。
【0023】
TSA公開鍵証明書は、TSA秘密鍵に対応する公開鍵であり、CA300によって署名された公開鍵証明書が付されている。
【0024】
秘匿通信路鍵は、セキュアコンポーネント50とTSAサーバ200とが通信する際に、秘匿通信路を開設するための鍵である。
【0025】
TSAサーバ200は、ネットワークI/F210、秘匿通信部220、時刻計算部230、TSA側クロックカウンタ240、TSA側クロック250、及び時刻源260を備える。TSAサーバ200は、秘匿通信路鍵を保持する。
【0026】
ネットワークI/F210は、ネットワーク経由でデバイス100と通信を行うためのインタフェースである。
【0027】
秘匿通信部220は、セキュアコンポーネント50と直接秘匿通信を行うための機能である。
【0028】
時刻計算部230は、セキュアコンポーネント50側の時刻情報を補正するための計算を行う機能であり、時刻源260及びTSA側クロック250と連動して動作する。
【0029】
時刻源260は、TSAが管理し、正確な時刻情報を出力する。
【0030】
TSA側クロック250は、TSAサーバ200の内部で発振させるクロックであり、セキュアコンポーネント50内の内部発振クロック56と比較して精度が高く、ドリフトはほぼ発生しない。TSA側クロック250の周波数は、TSAサーバ200の内部のクロック周波数領域に記憶される。本実施形態では、セキュアコンポーネント50と同一のクロック周波数としている。
【0031】
TSA側クロックカウンタ240は、所要の時点からのTSA側クロック250の発振数を記録する。
【0032】
秘匿通信路鍵は、セキュアコンポーネント50とTSAサーバ200とが通信する際に、秘匿通信路を開設するための鍵である。秘匿通信路鍵の種類は対称鍵でもよく、非対称鍵でもよい。本実施形態では対称鍵として説明する。
【0033】
CA300は、CA秘密鍵及びCA公開鍵証明書を保持する。CA秘密鍵は、TSA公開鍵証明書に署名を行うためのCAの秘密鍵である。CA公開鍵証明書は、CA秘密鍵に対応する公開鍵であり、TSA公開鍵証明書の正当性を検証するために用いられる。
【0034】
タイムスタンプの正当性確認は、TSA公開鍵証明書自身の有効性と、TSA公開鍵証明書とCA公開鍵証明書のトラストチェーンにより行われる。すなわち、以下の3条件が全て満たされる場合、タイムスタンプは、検証済みの鍵(信頼できる鍵)によって生成されたものとみなすことができる。条件(1)TSA公開鍵証明書が(有効期限、または失効処理により)失効していないこと、条件(2)TSA公開鍵証明書によりタイムスタンプの検証に成功すること、条件(3)CA公開鍵証明書により、条件2で使用したTSA公開鍵証明書の検証に成功すること。
【0035】
タイムスタンプシステムの基本的なユースケースとして、(1)セキュアコンポーネント50とTSAサーバ200との通信による時刻同期、(2)同期した時刻に基づくタイムスタンプの生成、の順に説明する。セキュアコンポーネント50とTSAサーバ200との通信による時刻同期については、(1)時刻同期要求の生成、(2)時刻同期情報の授受、及び(3)時刻応答の処理、の3つの段階を経て行われる。当該3つの段階について、以下順番に説明する。
【0036】
図2は時刻同期要求の生成の一例を示す図である。以下、図中の各処理を#1~#7として説明する。
【0037】
#1(コマンドの受信):デバイス100は、セキュアコンポーネント50のタイムスタンプ機能動作に先立って、所定のコマンドを送信する。所定のコマンドは、任意のコマンドでよく、例えば、初期化コマンド、時刻同期専用のコマンドでもよい。
【0038】
#2(時刻情報の要求):セキュアコンポーネント50のコマンド処理部52は、デバイス100からコマンドを受信する。コマンド処理部52は、時刻計算部54に対して現在の時刻管理状況を問い合わせる。
【0039】
#3(時刻同期要求生成と暗号化):時刻計算部54は、クロック周波数記憶領域から、内部発振に使用するクロック周波数を取得する。時刻計算部54は、取得したクロック周波数を含む時刻同期要求を生成し、生成した時刻同期要求を秘匿通信部53に送り、暗号化する。
【0040】
#4(クロックカウント開始):時刻計算部54は、時刻同期要求生成と同一のタイミングで、内部発振クロック56を発振させ、SC側クロックカウンタ55のカウントを開始する。
【0041】
#5(時刻同期要求の返送):秘匿通信部53は、暗号化された時刻同期要求をデバイス100に返送する。
【0042】
#6(クロックカウンタ記録要求):コマンド処理部52は、時刻同期要求をデバイス100に返送したタイミングで、時刻計算部54に対して、現在のSC側クロックカウンタ55のカウンタ値を時刻要求生成完了時点として時刻情報テーブル57に記録するように指示する。
【0043】
#7(クロックカウンタ記録):時刻計算部54は、現在(時刻同期要求をデバイス100に返送したタイミング)のSC側クロックカウンタ55のカウンタ値を時刻要求生成完了時点として時刻情報テーブル57に記録する。図2の例では、カウンタ値「00005 38743」が記録されている。
【0044】
図3は時刻同期情報の授受の一例を示す図である。以下、図中の各処理を#1~#13として説明する。
【0045】
#1(ネットワークI/Fへの転送):デバイス100は、SCI/F20で受け付けた時刻同期要求の返信をネットワークI/F10に転送する。
【0046】
#2(ネットワーク間通信):ネットワークI/F10は、時刻同期要求をネットワーク経由でTSAサーバ200に送信する。
【0047】
#3(時刻同期要求の復号):TSAサーバ200は、ネットワークI/F210を介して時刻同期要求を受信すると、受信した時刻同期要求を秘匿通信部220に送り、時刻同期要求を復号する。
【0048】
#4(時刻源への時刻要求):秘匿通信部220は、復号した時刻同期要求を時刻計算部230に送信する。
【0049】
#5(時刻源からの時刻情報取得):時刻計算部230は、時刻源260から現在(時刻計算部230が時刻同期要求を受信したタイミング)の時刻情報を取得する。
【0050】
#6(TSA側クロックカウンタ発振開始):時刻計算部230は、受信した時刻同期要求に含まれる、セキュアコンポーネント50内のクロック周波数をクロック周波数設定領域に設定し、時刻源260から時刻情報を取得したタイミングと同一のタイミングで、TSA側クロックカウンタ240のカウンタ値を0に初期化(リセット)し、TSA側クロック250の発振を開始する。
【0051】
#7(時刻同期応答生成と暗号化):時刻計算部230は、時刻源260から取得した時刻情報を元に時刻同期応答を生成する。時刻計算部230は、生成した時刻同期応答を秘匿通信部220に送り、暗号化する。
【0052】
#8(ネットワークI/Fへの転送):秘匿通信部220は、暗号化した時刻同期応答をネットワークI/F210へ転送する。
【0053】
#9(ネットワーク間通信):ネットワークI/F210は、時刻同期応答をネットワーク経由でデバイス100に送信する。
【0054】
#10(SCI/Fへの転送):デバイス100は、ネットワークI/F10を介して時刻同期応答を受信すると、受信した時刻同期応答をSCI/F20へ転送する。
【0055】
#11(時刻同期応答の送信):SCI/F20は、時刻同期応答をセキュアコンポーネント50に送信する。
【0056】
#12(クロックカウンタ記録要求):コマンド処理部52は、時刻計算部54に対して、時刻同期応答を受信したタイミングで、現在のSC側クロックカウンタ55のカウンタ値を時刻応答受信時点として時刻情報テーブル57に記録するように指示する。
【0057】
#13(クロックカウンタ記録):時刻計算部54は、現在(時刻同期応答を受信したタイミング)のSC側クロックカウンタ55のカウンタ値を時刻応答受信時点として時刻情報テーブル57に記録する。図3の例では、カウンタ値「00017 74276」が記録されている。
【0058】
図4は時刻応答の処理の一例を示す図である。以下、図中の各処理を#1~#5として説明する。
【0059】
#1(時刻同期応答の復号):セキュアコンポーネント50は、時刻同期応答を受信すると、受信した時刻同期応答を秘匿通信部53に送り、復号して時刻情報を取得する。
【0060】
#2(時刻情報の転送):秘匿通信部53は、復号した時刻情報を時刻計算部54に転送する。
【0061】
#3(クロックカウンタ記録):時刻計算部54は、現在(時刻情報が転送されたタイミング、すなわち取得したタイミング)のSC側クロックカウンタ55のカウンタ値を時刻応答処理完了時点として時刻情報テーブル57に記録する。図4の例では、カウンタ値「00023 13071」が記録されている。
【0062】
#4(時刻情報の設定):時刻計算部54は、取得した時刻情報を同期時刻として時刻情報テーブル57に記録する。図4の例では、同期時刻「2022/2/15 6:30:00」が記録されている。
【0063】
#5(SC側クロックカウンタの初期化):時刻計算部54は、時刻情報を同期時刻として時刻情報テーブル57に記録したタイミングと同一のタイミングでSC側クロックカウンタ55のカウンタ値を0に初期化し、カウントを続ける。
【0064】
上述の図2図4に示す手順により、時刻情報テーブル57には、時刻要求生成完了時点、時刻応答受信時点、及び時刻応答処理完了時点の各タイミングでのSC側クロックカウンタ55のカウンタ値が記録される。また、セキュアコンポーネント50は、TSAサーバ200から取得した時刻情報が時刻情報テーブル57に設定され、かつSC側クロックカウンタ55のカウンタ値が0に初期化され、カウントが開始される。
【0065】
図5は同期した時刻に基づくタイムスタンプの生成の一例を示す図である。時刻情報の時刻情報テーブル57への設定、及びSC側クロックカウンタ55のカウンタ値の初期化とカウントの開始により、セキュアコンポーネント50は、時刻情報及びSC側クロックカウンタ55のカウンタ値をもとに現在時刻を生成し、タイムスタンプを生成できる。以下、図中の各処理を#1~#7として説明する。
【0066】
#1(タイムスタンプ生成要求コマンドの実行):デバイス100は、データに対するタイムスタンプの付与が必要になったタイミングで、セキュアコンポーネント50に対して、付与対象となるデータ(図5の例では「AABBCC…FF」)と共にタイムスタンプ生成要求コマンドを実行する。
【0067】
#2(時刻計算部への時刻要求):セキュアコンポーネント50は、タイムスタンプ生成要求コマンドを受信すると、時刻計算部54に対して時刻を要求する。
【0068】
#3(時刻情報の取得):時刻計算部54は、時刻情報テーブル57に記録された同期時刻を取り出す。
【0069】
#4(カウンタによる経過時間の加算):時刻計算部54は、現時点でのSC側クロックカウンタ55のカウンタ値、クロック周波数記憶領域に記憶したクロック周波数に基づいて、カウンタ計測開始(カウンタ初期化)からの経過時間を計算し、計算した経過時間を、時刻情報テーブル57から取り出した同期時刻に加算して現在時刻を計算する。図5の例では、現時点でのSC側クロックカウンタ55のカウンタ値は、「33683 75301」としている。
【0070】
#5(加算結果の送信):時刻計算部54は、計算した現在時刻を署名生成部51に送信する。
【0071】
#6(タイムスタンプ生成):署名生成部51は、デバイス100から受信したデータと、時刻計算部54から受信した現在時刻とをもとに、TSA秘密鍵を使用して署名を行い、タイムスタンプを生成する。なお、タイムスタンプの生成アルゴリズムは、適宜決定することができるが、例えば、RFC(Request for Comments)3161等の既知のアルゴリズムを適用してよい。
【0072】
#7(タイムスタンプの出力):セキュアコンポーネント50は、署名生成部51が生成したタイムスタンプをデバイス100に返送する。
【0073】
図5の例において、経過時間は、以下のようにして算出できる。クロック周波数が1MHzにおいて、カウンタ値は「33683 75301」である。よって、経過時間は、3368375301÷1000000=3368.375301(秒)≒56(分)8(秒)となる。時刻情報テーブル57に記録された同期時刻「2022/2/15 6:30:00」に経過時間を加算すると、現在時刻は「2022/2/15 7:26:08」となる。仮に、デバイス100、TSAサーバ200、ネットワーク、及びセキュアコンポーネント50で生じるタイムラグ、並びに内部発振クロック56のクロックドリフトなどが無視できる程度であるとすると、計算された現在時刻は、TSAサーバ200の時刻源260の時刻「2022/2/15 6:30:00」と一致する。
【0074】
以上のように、セキュアコンポーネント50は、TSAサーバ200から秘匿通信路経由で受信した時刻情報を基準として、SC側クロックカウンタ55のカウンタ値を経過時間に換算して加算することで現在時刻を推定できる。セキュアコンポーネント50は、推定した現在時刻を基にタイムスタンプを生成できる。
【0075】
上述のように、セキュアコンポーネント50の制御部(署名生成部51、コマンド処理部52、秘匿通信部53、及び時刻計算部54など)は、秘匿通信路経由で時刻源260から時刻情報を取得し、取得した時刻情報を時刻情報テーブル57(セキュアメモリ)に保持し、内部発振クロック56(内部クロック)のパルスを計数するSC側クロックカウンタ55(計数部)のカウンタ値(計数値)をリセットするとともに計数を開始する。制御部は、外部から現在時刻を要求された場合、時刻情報テーブル57に保持した時刻情報及びSC側クロックカウンタ55のカウンタ値に基づいて現在時刻を推定することができる。
【0076】
時刻源260の正確な時刻情報に基づいて現在時刻を推定できるので、デバイス100やデバイス100が処理するデータに対するタイムスタンプサービスを実現することが可能となる。また、SC側クロックカウンタ55のカウンタ値を用いることにより、TSAサーバ200から受信した時刻情報をセキュアコンポーネント50に反映するまでの処理時間誤差を排除できる。
【0077】
また、制御部は、推定した現在時刻を外部へ出力してもよい。セキュアコンポーネント50内の内部発振クロック56と、秘匿通信路経由で取得した、時刻源260の時刻情報との同期のみで現在時刻を推定して提供することができる。時刻情報は秘匿通信路経由で取得するので、時刻源の時刻情報を保護できる。このように、接続先のデバイス100や通信経路上での時刻情報改ざんに強い時刻情報をRoot of Trustから直接提供できる。
【0078】
また、セキュアコンポーネント50は、TSA秘密鍵(秘密鍵)を含む非対称鍵ペアをセキュアメモリに保持し、制御部は、外部から対象データ及び対象データの時刻証明要求を取得した場合、時刻情報テーブル57に保持した時刻情報及びSC側クロックカウンタ55のカウンタ値に基づいて現在時刻を推定し、対象データ、推定した現在時刻及びTSA秘密鍵に基づいて署名を生成し、生成した署名及び推定した現在時刻を含むタイムスタンプをデバイス100(外部)へ返送してもよい。このように、タイムスタンプサービス用鍵(TSA秘密鍵)をセキュアコンポーネント50内(例えば、セキュアメモリなど)に保持し、セキュアコンポーネント50自身がタイムスタンプ(ローカルタイムスタンプ)を提供する。すなわち、ローカルタイムスタンプは秘密鍵により保護されている。これにより、タイムスタンプサービスのための通信を行うことなくタイムスタンプサービスからローカルに信頼できるタイムスタンプを生成して提供できる。
【0079】
デバイス100、TSAサーバ200、ネットワーク、及びセキュアコンポーネント50で生じるタイムラグなどが無視できない場合、TSAサーバ200が時刻源260から正確な時刻情報を取得してから、セキュアコンポーネント50に時刻情報を設定するまでにタイムラグが発生する。具体的なタイムラグの内訳は、(1)TSAサーバ200由来:時刻情報の取得からネットワークI/F210送信開始までの時間、(2)ネットワーク由来:TSAサーバ200とデバイス100との間の通信時間、(3)デバイス100側:ネットワークI/F10受信からSCI/F20によるコマンド送信までの時間、(4)セキュアコンポーネント50側:コマンド処理部52によるコマンド受信から時刻情報の復号までの時間、等を含む。
【0080】
また、セキュアコンポーネント50自身が安価な組込みデバイスなどの場合には、内部発振クロック56のクロックドリフトが無視できない。クロックドリフトは、クロックが計時する時間間隔にわずかなズレが発生する現象である。例えば、本来1MHzで動作するクロックの場合、1000000回発振した時点での時間は定義上1(秒)になるはずであるが、実際にはクロック周期が長くなる、あるいは短くなるなどの理由により、1秒よりも長くなる場合や短くなる場合がある(計時誤差が発生する)。
【0081】
正確な時刻計時のためには、このようなクロックドリフトを補償する必要があるが、ローカルのデバイス100単体で補償することは難しい。上述した時刻同期の手法の場合、時刻同期が発生したタイミングでSC側クロックカウンタ55のカウンタ値を0に初期化するので、クロックドリフトの累積的な影響は時刻同期の都度、破棄される。しかし、長期に亘って時刻同期が困難な場合、ローカルのデバイス100にはクロックドリフトの影響が蓄積される。なお、デバイス100の近傍に設けられた他のデバイスからクロックを補償させることも技術的には可能であるが、補償時に不正なクロックを入力することで、セキュアコンポーネント50側の時刻を改ざんすることも可能となるため、時刻情報のセキュリティリスクとなる。
【0082】
上述のような時間的な遅延に対して、セキュアコンポーネント50側では特段対処せずに、セキュアコンポーネント50が出力(提供)するタイムスタンプの解釈を外部に委任するという解決手段も取り得る。具体的には、制御部は、現在時刻を推定した際のSC側クロックカウンタ55のカウンタ値(計数値)に基づいて、タイムスタンプに含まれる現在時刻の信頼度を判定し、判定した信頼度をタイムスタンプとともに外部へ返送してもよい。
【0083】
SC側クロックカウンタ55のカウンタ値は、直近(最終)の時刻同期時点からの経過時間を表す。すなわち、カウンタ値が大きければ大きいほど、クロックドリフトの影響が累積されているとみなせるので、現在時刻の信頼度は低下しているとみなせる。信頼度は、カウンタ値の大小に応じて、例えば、信頼度:高、信頼度:中、信頼度:低の如く区分してもよく、あるいは5段階、10段階等に区分してもよい。タイムスタンプの利用用途にとっては、現在時刻の信頼度に応じてタイムスタンプの信頼度合いを低下させるという運用を行ってもよい。
【0084】
また、制御部は、現在時刻を推定した際のSC側クロックカウンタ55のカウンタ値(計数値)を外部へ返送してもよい。カウンタ値が大きければ大きいほど、クロックドリフトの影響が累積されているとみなせる。このため、タイムスタンプの利用用途にとっては、カウンタ値の大きさに応じてタイムスタンプの信頼度合いを低下させるという運用を行ってもよい。
【0085】
次に、セキュアコンポーネント50側での時刻の正確な補正について説明する。
【0086】
図6は処理時間情報の蓄積の一例を示す図である。図4に例示した時刻同期処理を複数回繰り返すと、セキュアコンポーネント50内の時刻同期データベースに、図6に示すような、同期した時刻情報に加えて時刻同期を行った際の各処理(時刻要求生成完了、時刻応答受信、時刻応答処理完了)の時点でのSC側クロックカウンタ55のカウンタ値が蓄積される。時刻同期データベースの情報に基づいて、時刻の補正を行うことができる。
【0087】
図7はSC側クロックカウンタ55のカウンタ値と時刻同期処理との関係を示す図である。図7に示すように、時刻計算部54がコマンド処理部52から時刻要求生成開始(現在の時刻管理状況の問い合わせ)を受信し、時刻同期要求を秘匿通信部53に送信した時点で、SC側クロックカウンタ55の計数を開始する。ここで、SC側クロックカウンタ55のカウント値は一旦0にセットされる。
【0088】
次に、コマンド処理部52が時刻同期要求をデバイス100に返送した時点で、時刻計算部54は、SC側クロックカウンタ55のカウンタ値を時刻要求生成完了時点として記録する。
【0089】
次に、コマンド処理部52が時刻同期応答を受信したタイミングで、時刻計算部54は、SC側クロックカウンタ55のカウンタ値を時刻応答受信時点として記録する。
【0090】
次に、秘匿通信部53が復号した時刻情報を時刻計算部54に送出したタイミングで、時刻計算部54は、SC側クロックカウンタ55のカウンタ値を時刻応答処理完了時点として記録する。
【0091】
次に、(1)通信遅延の類推、(2)セキュアコンポーネント50内のオーバーヘッド、(3)通信遅延とオーバーヘッドを加味したカウンタ値のリセット、(4)TSAサーバ200とセキュアコンポーネント50のクロック同期について順に説明する。
【0092】
(1)通信遅延の類推について:
TSAサーバ200の通信遅延時間として考慮すべきは、TSAサーバ200が時刻を生成してから、時刻同期応答をセキュアコンポーネント50で受信するまでの時間である。当該時間は、厳密にはSC側クロックカウンタ55のカウンタ値から直接求めることはできないが、通信の対称性(上りと下りの通信時間がほぼ同じ)を仮定すると、時刻要求生成完了から時刻応答受信までの経過時間を2分することでTSAサーバ200の通信遅延時間を推定できる。すなわち、通信遅延時間={(時刻応答受信-時刻要求生成完了)/2}という式で通信遅延時間を算出できる。
【0093】
上述のように、制御部は、時刻源260の時刻情報の要求時点、時刻源260の時刻情報の受信時点それぞれにおけるSC側クロックカウンタ55のカウンタ値に基づいて、推定した現在時刻と時刻情報との間の遅延時間を算出してもよい。
【0094】
これにより、TSAサーバ200との時刻同期遅延時間を把握し、TSAサーバ200から受信した時刻情報をセキュアコンポーネント50に反映する際の補正情報として用いることができる。また、TSAサーバ200とのクロック同期を行う際の補正用情報として用いることができる。
【0095】
(2)セキュアコンポーネント50内のオーバーヘッドについて:
セキュアコンポーネント50が時刻同期応答を受信してから、復号処理が発生するため、セキュアコンポーネント50内のオーバーヘッドを考慮する必要がある。このオーバーヘッドは、時刻応答受信から時刻応答処理完了までの処理時間をそのまま利用できる。すなわち、セキュアコンポーネント50内のオーバーヘッド=(時刻応答処理完了-時刻応答受信)という式でオーバーヘッドを算出できる。
【0096】
上述のように、制御部は、さらに、時刻源260の時刻情報のセキュアメモリへの保持時点におけるSC側クロックカウンタ55のカウンタ値に基づいて、推定した現在時刻と時刻情報との間の遅延時間を算出してもよい。すなわち、制御部は、時刻源260の時刻情報の受信時点、並びに時刻源260の時刻情報の要求時点及び時刻源260の時刻情報のセキュアメモリへの保持時点の少なくとも一つの時点におけるSC側クロックカウンタ55のカウンタ値に基づいて、推定した現在時刻と時刻情報との間の遅延時間を算出してもよい。
【0097】
これにより、TSAサーバ200との時刻同期遅延時間を把握し、TSAサーバ200から受信した時刻情報をセキュアコンポーネント50に反映する際の補正情報として用いることができる。また、TSAサーバ200とのクロック同期を行う際の補正用情報として用いることができる。
【0098】
(3)通信遅延とオーバーヘッドを加味したカウンタ値のリセットについて:
以上を考慮すると、時刻同期時に発生する遅延時間をSC側クロックカウンタ55のカウンタ値で表すことができる。すなわち、遅延時間カウンタ値=(通信遅延時間+セキュアコンポーネント50内のオーバーヘッド)={(時刻応答受信-時刻要求生成完了)/2}+(時刻応答処理完了-時刻応答受信)という式で遅延時間カウンタ値を算出できる。
【0099】
例えば、図6の2回目の時刻同期(2022/2/15 7:26:18)を行う際には、遅延時間カウンタ値は、遅延時間カウンタ値=(1774276-538743)/2+(2313071-1774276)=617766+538795=1156561となる。
【0100】
時刻同期を行う際に、SC側クロックカウンタ55のカウンタ値をただ0にするのではなく、遅延時間カウンタ値を設定して補正(クロック周波数が1MHzの場合、約1.16秒の遅延補正)することができる。これにより、通信時間や処理時間に由来する遅延を最小限化することができる。
【0101】
(4)TSAサーバ200とセキュアコンポーネント50のクロック同期について:
前述のように、通信遅延時間とセキュアコンポーネント50内のオーバーヘッドを加味してSC側クロックカウンタ55のカウンタ値を計算すると、TSAサーバ200が時刻源260から時刻情報を取得した時点でのSC側クロックカウンタ55のカウンタ値を類推できる。これは特に2回目以降の時刻同期において、TSAサーバ200側のTSA側クロックカウンタ240のカウンタ値と比較することで、セキュアコンポーネント50側の内部発振クロック56のクロックドリフトの傾向を把握する上で有用である。
【0102】
図8は2回目以降の時刻同期(TSAサーバ200側クロックの収集)の一例を示す図である。以下、図中の各処理を#1~#19として説明する。
【0103】
#1(ネットワークI/F10への転送):デバイス100は、SCI/F20で受け付けた時刻同期要求の返信をネットワークI/F10に転送する。なお、時刻情報テーブル57には、時刻要求生成完了時点として、SC側クロックカウンタ55のカウンタ値「35331 24579」が記録されているとする。
【0104】
#2(ネットワーク間通信):ネットワークI/F10は、時刻同期要求をネットワーク経由でTSAサーバ200に送信する。
【0105】
#3(時刻同期要求の復号):TSAサーバ200は、ネットワークI/F210を介して時刻同期要求を受信すると、受信した時刻同期要求を秘匿通信部220に送り、時刻同期要求を復号する。
【0106】
#4(時刻源への時刻要求):秘匿通信部220は、復号した時刻同期要求を時刻計算部230に送信する。
【0107】
#5(時刻源からの時刻情報取得):時刻計算部230は、時刻源260から現在(時刻計算部230が時刻同期要求を受信したタイミング)の時刻情報を取得する。
【0108】
#6(TSA側クロックカウンタ値取得):時刻計算部230は、時刻源260から現在の時刻情報を取得したタイミングと同一のタイミングで、現在のTSA側クロックカウンタ240のカウンタ値を取得する。
【0109】
#7(TSA側クロックカウンタ発振開始):時刻計算部230は、時刻源260から現在の時刻情報を取得したタイミングと同一のタイミングで、TSA側クロックカウンタ240のカウンタ値を0に初期化(リセット)する。
【0110】
#8(時刻同期応答生成と暗号化):時刻計算部230は、時刻源260から取得した時刻情報及びTSA側クロックカウンタ240のカウンタ値を含む時刻同期応答を生成する。時刻計算部230は、生成した時刻同期応答を秘匿通信部220に送り、暗号化する。
【0111】
#9(ネットワークI/Fへの転送):秘匿通信部220は、暗号化した時刻同期応答をネットワークI/F210へ転送する。
【0112】
#10(ネットワーク間通信):ネットワークI/F210は、時刻同期応答をネットワーク経由でデバイス100に送信する。
【0113】
#11(SCI/Fへの転送):デバイス100は、ネットワークI/F10を介して時刻同期応答を受信すると、受信した時刻同期応答をSCI/F20へ転送する。
【0114】
#12(時刻同期応答の送信):SCI/F20は、時刻同期応答をセキュアコンポーネント50に送信する。
【0115】
#13(クロックカウンタ記録要求):コマンド処理部52は、時刻計算部54に対して、時刻同期応答を受信したタイミングで、現在のSC側クロックカウンタ55のカウンタ値を時刻応答受信時点として時刻情報テーブル57に記録するように指示する。
【0116】
#14(クロックカウンタ記録):時刻計算部54は、現在(時刻同期応答を受信したタイミング)のSC側クロックカウンタ55のカウンタ値を時刻応答受信時点として時刻情報テーブル57に記録する。図8の例では、カウンタ値「35347 41855」が記録されている。
【0117】
#15(時刻同期応答の復号):セキュアコンポーネント50は、時刻同期応答を受信すると、受信した時刻同期応答を秘匿通信部53に送り、復号して時刻情報及びTSA側クロックカウンタ240のカウンタ値を取得する。
【0118】
#16(時刻情報の転送):秘匿通信部53は、復号した時刻情報及びTSA側クロックカウンタ240のカウンタ値を時刻計算部54に転送する。
【0119】
#17(時刻情報の設定):時刻計算部54は、取得した時刻情報及びTSA側クロックカウンタ240のカウンタ値を、TSAカウンタとして時刻情報テーブル57に記録する。TSAカウンタのカウンタ値は、TSAサーバ200が時刻源260から時刻情報を取得した時点でのTSA側クロックカウンタ240のカウンタ値である。
【0120】
#18(クロックカウンタ記録):時刻計算部54は、現在(時刻情報が転送されたタイミング、すなわち取得したタイミング)のSC側クロックカウンタ55のカウンタ値を時刻応答処理完了時点として時刻情報テーブル57に記録する。図8の例では、カウンタ値「35352 82261」が記録されている。さらに、時刻計算部54は、現在のSC側クロックカウンタ55のカウンタ値から遅延時間カウンタ値を減算した値を、SCカウンタとして記録する。SCカウンタのカウンタ値は、TSAサーバ200が時刻源260から時刻情報を取得した時点でのSC側クロックカウンタ55のカウンタ値を表す。図8の例では、SCカウンタのカウンタ値「35339 33217」が記録されている。
【0121】
#19(SC側クロックカウンタの初期化):時刻計算部54は、時刻情報を同期時刻として時刻情報テーブル57に記録したタイミングと同一のタイミングでSC側クロックカウンタ55のカウンタ値を0に初期化し、カウントを続ける。
【0122】
手順#18における減算は、TSAサーバ200が時刻源260から時刻情報を取得した時点におけるSC側クロックカウンタ55のカウンタ値(すなわち、SCカウンタのカウンタ値)を推定するためのものである。遅延時間カウンタ値={(時刻応答受信-時刻要求生成完了)/2}+(時刻応答処理完了-時刻応答受信)という式に図8の数値を当てはめると、遅延時間カウンタ値=(3534741855-3533124579)/2+(3535282261-3534741855)=808638+540406=1349044 となる。時刻情報の設定時点(時刻応答処理完了時点)におけるSC側クロックカウンタ55のカウンタ値は「3535282261」であるため、SCカウンタ値は、3535282261-1349044=3533933217 という値になる。
【0123】
図9はクロックカウンタ情報の蓄積の一例を示す図である。図8に示す処理を繰り返すことにより、TSAサーバ200が時刻情報を取得した時点でのTSA側クロックカウンタ240のカウンタ値を表すTSAカウンタの値と、TSAサーバ200が時刻情報を取得した時点でのSC側クロックカウンタ55のカウンタ値を表すSCカウンタの値(クロックカウンタ情報)が蓄積される。ここで、SCカウンタの値は推定値であるものの、TSAサーバ200が時刻源260から時刻情報を取得したタイミングにおけるSC側クロックカウンタ55のカウンタ値とみなせるため、SCカウンタとTSAカウンタとの差分を算出することで、内部発振クロック56のクロックドリフトの傾向を推定できる。
【0124】
図10はクロックドリフトの推定の一例を示す図である。図10に示すように、2回目の時刻同期では、TSAカウンタの値とSCカウンタの値との差分(カウンタ差分)は「1346264」であり、1MHzでの遅延時間(クロックドリフト)は約1.3秒となる。3回目の時刻同期では、TSAカウンタの値とSCカウンタの値との差分(カウンタ差分)は「1398619」であり、1MHzでの遅延時間は約1.4秒となる。4回目の時刻同期では、TSAカウンタの値とSCカウンタの値との差分(カウンタ差分)は「1931035」であり、1MHzでの遅延時間は約1.9秒となる。
【0125】
セキュアコンポーネント50は、図10に示すようなクロックドリフトの傾向を把握することが可能となる。この場合、通信不能やサーバ故障等により、予定していたTSAサーバ200との時刻同期ができないケースであっても、クロックドリフトの推定値を基にクロックドリフトの自律的な補償を行うことが可能となる。
【0126】
図10の例では、便宜上過去3回の時刻同期を図示しているが、時刻同期の回数は3回に限定されるものではなく、4回以上であってもよい。過去3回の時刻同期の履歴の平均からクロックドリフトを補正する方式を採った場合、図10に例示した数値によれば、過去3回のズレは、カウンタ差分の合計が4675918、遅延時間の合計が約4.6秒(=1.3+1.4+1.9)であり、過去3回のTSAカウンタの合計値は10539503237(=3532586953+3553680932+3453235352)であるから、ズレの割合は、4675918÷10539503237≒0.000444(%)となる。クロック周波数を1MHzとしたときの1時間当たりのクロックカウントのズレは、3600(秒)×1000000(Hz)×0.000444(%)=1598400となる。すなわち、セキュアコンポーネント50では、クロックドリフト要因により、1時間当たり約1.6秒の遅れが発生すると推定できる。この場合、セキュアコンポーネント50側で1時間(3600000000のクロックカウント)当たり1.6秒分(1598400)のカウンタ値を、1時間ごとに減算すれば、TSAサーバ200の時刻同期に依存することなく、自律的に遅れを補正できる。以下にクロックドリフトの推定と補正の処理を示す。
【0127】
図11はクロックドリフトの推定と補正の一例を示す図である。以下、図中の各処理を#1~#5として説明する。
【0128】
#1(時刻補正コマンドの実行):デバイス100は、セキュアコンポーネント50に対し、時刻補正コマンドを実行する。
【0129】
#2(内部補正指示):コマンド処理部52は、時刻補正コマンドを受信し、時刻計算部54に対して時刻補正を指示する。
【0130】
#3(現在のクロックカウンタの読み出し):時刻計算部54は、SC側クロックカウンタ55から現在のカウンタ値を読み出す。図11の例では、SC側クロックカウンタ55のカウンタ値は「35735 34218」である。
【0131】
#4(ドリフト補正値の推定):時刻計算部54は、時刻情報テーブル57に記録されたTSAカウンタとSCカウンタの累積記録から、ドリフト補正値を計算する。
【0132】
#5(補正後カウンタ値の書き込み):時刻計算部54は、現在のクロックカウンタ値にドリフト補正値を減算し、減算結果を補正後カウンタとしてSC側クロックカウンタ55に書き込む。図11の例では、SC側クロックカウンタ55のカウンタ値「35751 32618」が書き込まれている。これにより、例えば、補正前の同期時刻「2022/2/15 10:39:05」が、2秒(≒約1.6秒)だけ遅らせて、補正後の同期時刻「2022/2/15 10:39:07」に修正される。補正後の同期時刻は、TSAサーバ200での時刻情報取得時点に一致する。
【0133】
上述のように、制御部は、推定した現在時刻と時刻情報との間の遅延時間に基づいて現在時刻を補正してもよい。
【0134】
図11の処理では、時刻内部補正のための専用コマンドを実行しているが、これに限定されるものではなく、例えば、通常の時刻同期処理や、タイムスタンプ生成時の処理の一部として実行してもよい。
【0135】
図11の処理では、過去3回分のカウンタ履歴を基に平均を算出してドリフトを計算するという方式で補正値を決定したが、クロックドリフトの計算アルゴリズムは図11の処理に限定されない。クロックカウンタの履歴を用いて時刻情報を補正する方法であればよい。例えば、補正した時刻の日時(繁忙期、閑散期)や時間帯(昼、夜)を参酌してクロックドリフトに含めるクロックカウンタをピックアップしてもよく、あるいはクロックカウンタの履歴を入力データとして機械学習モデルに入力し、機械学習モデルが出力する補正値を用いてもよい。
【0136】
セキュアコンポーネント50が発行するタイムスタンプの信頼性は、生成元の鍵となるTSA鍵ペア(TSA秘密鍵、TSA公開鍵)の信頼性に依拠する。TSA鍵ペアの信頼性は、TSA秘密鍵の秘匿性と、TSA公開鍵がCAの署名を受けている(公開鍵証明書を有している)点にあるが、公開鍵証明書の有効期限切れや偽造、鍵の漏洩等が発生した場合、タイムスタンプの信頼性が失われる。本実施形態では、セキュアコンポーネント50内部で新しいTSA鍵ペアを生成した後、TSA公開鍵証明書を秘匿通信路経由で更新する。以下、具体的に説明する。
【0137】
図12はTSA鍵ペア及び証明書の更新の一例を示す図である。以下、図中の各処理を#1~#16として説明する。
【0138】
#1(TSA鍵生成コマンドの実行):デバイス100は、セキュアコンポーネント50に対し、TSA鍵生成コマンドを実行する。
【0139】
#2(新しいTSA鍵ペアの生成):セキュアコンポーネント50は、TSA鍵ペアの生成を行う。これにより、新たなTSA秘密鍵とTSA公開鍵(証明書なし)が生成される。
【0140】
#3(公開鍵の暗号化):セキュアコンポーネント50は、生成したTSA公開鍵(証明書なし)を秘匿通信部53に送り、暗号化する。
【0141】
#4(暗号化公開鍵の返送):セキュアコンポーネント50は、暗号化されたTSA公開鍵をデバイス100に返送する。
【0142】
#5(ネットワークI/Fへの転送):デバイス100は、SCI/F20から暗号化TSA公開鍵を受信すると、受信した暗号化TSA公開鍵をネットワークI/F10に転送する。
【0143】
#6(ネットワーク間通信):ネットワークI/F10は、ネットワーク経由で暗号化TSA公開鍵をTSAサーバ200に送信する。
【0144】
#7(秘匿通信部への転送):TSAサーバ200は、受信した暗号化TSA公開鍵を秘匿通信部220へ転送する。
【0145】
#8(CAへの証明書要求):TSAサーバ200は、秘匿通信部220で暗号化TSA公開鍵を復号し、復号したTSA公開鍵をCA300に送り、公開鍵証明書の生成を要求する。
【0146】
#9(CAからの公開鍵証明書返送):CA300は、受信したTSA公開鍵に対し、CA秘密鍵で署名を行い、新たなTSA公開鍵証明書を生成し、生成したTSA公開鍵証明書をTSAサーバ200に返送する。
【0147】
#10(TSA公開鍵証明書の暗号化):TSAサーバ200は、新たなTSA公開鍵証明書を秘匿通信路で送るべく、秘匿通信部220に送り暗号化する。
【0148】
#11(ネットワークI/Fへの転送):秘匿通信部220は、暗号化したTSA公開鍵証明書をネットワークI/F210へ転送する。
【0149】
#12(ネットワーク間通信):ネットワークI/F210は、ネットワーク経由で暗号化したTSA公開鍵証明書をデバイス100に送信する。
【0150】
#13(SCI/Fへの転送):デバイス100は、暗号化TSA公開鍵証明書を受信すると、受信した暗号化TSA公開鍵証明書をSCI/F20へ転送する。
【0151】
#14(公開鍵証明書更新コマンドの実行):SCI/F20は、公開鍵証明書更新コマンドに基づき、暗号化TSA公開鍵証明書をセキュアコンポーネント50に送信する。
【0152】
#15(公開鍵証明書の復号):セキュアコンポーネント50は、暗号化TSA公開鍵証明書を受信すると、受信した暗号化TSA公開鍵証明書を秘匿通信部53に送り、復号する。
【0153】
#16(公開鍵証明書の更新):セキュアコンポーネント50は、復号したTSA公開鍵証明書を新たなTSA公開鍵証明書として格納する。
【0154】
上述のユースケースでは、セキュアコンポーネント50とTSAサーバ200(タイムスタンプ事業者)を一体的に動作させるため、両者の秘匿通信路経由でTSA公開鍵を授受し、TSAサーバ200からCA300に証明書生成を依頼する方式としている。しかし、もともと公開鍵は秘匿性が要求されないので、秘匿通信路を使用しなくてもよい。この場合、平文でTSAサーバ200とTSA公開鍵を授受してもよい。また、TSAサーバ200を経由せず、デバイス100から直接CA300に公開鍵証明書を要求してもよい。特に平文で公開鍵証明書を授受する場合、公開鍵証明書の正当性を検証するため、セキュアコンポーネント50がCA公開鍵証明書を保持し、受信した公開鍵証明書の検証をセキュアコンポーネント50の内部で実施してもよい。
【0155】
上述のように、制御部は、TSA秘密鍵(秘密鍵)及びTSA公開鍵(公開鍵)を含む非対称鍵ペアを生成してもよい。これにより、TSA秘密鍵の秘匿性を確保でき、結果としてセキュアコンポーネント50が生成するタイムスタンプの信頼性を高めることができる。
【0156】
また、制御部は、CA300(認証局サーバ)に対するTSA公開鍵の署名要求に基づく公開鍵証明書を取得し、セキュアメモリに保持した公開鍵証明書を、取得した公開鍵証明書で更新してもよい。これにより、TSA公開鍵がCA300の署名を受けているので、TSA鍵ペアの信頼性を高め、結果としてセキュアコンポーネント50が生成するタイムスタンプの信頼性を高めることができる。また、鍵の危殆化やトラストチェーン(Trust Chain)の変更に遠隔で対応可能なローカルタイムスタンプサービスを実現できる。
【0157】
また、制御部は、予め保持したCA公開鍵証明書(認証局公開鍵証明書)に基づいて、取得したTSA公開鍵証明書を検証し、検証が成功した場合、セキュアメモリに保持した公開鍵証明書を、取得した公開鍵証明書で更新してもよい。これにより、秘匿通信路を経由せず、平文で公開鍵証明書を授受するケースにおいても、公開鍵証明書の正当性を検証できる。
【0158】
昨今のSociety5.0時代においては、デバイスが生成したデータがサイバー空間上を往来することになり、しかもデバイスやデバイスが生成したデータの信頼性が問われる。加えて、デバイスが生成したデータやデバイスそのものは、サイバー空間上の主体としての人間や人間が作り出したデータと比較して、極めて数が多い、かつ、実空間のあらゆる場所に偏在し得る等の特性がある。これらデバイスやデバイスが生成したデータに対して信頼性を付与する場合、どのようにして人手を介さずに自動的に正当性を証明して信頼性を付与するか等が課題となる。本実施形態のタイムスタンプシステム(セキュアコンポーネント、デバイス)及び現在時刻推定方法によれば、上述のような課題に対して解決方法を提供できる。
【0159】
デバイス100は、インターネットに接続されているIoTデバイスを含み、データ生成場所のより近く(ネットワークの末端など)に設置されるエッジデバイスとも称される。エッジデバイス側で処理できるデータはエッジデバイスで処理することで、データ分析やコンピューティングインテリジェンスを拡張することでエッジサーバとも称される。このようなデバイス100は、エッジコンピューティングに活用され、例えば、自動車、工場、農業、医療、小売り、交通、運輸など様々な分野に適用可能である。
【0160】
自動運転の研究が進む自動車では、緊急性の高い処理は、クラウドへデータを送信して処理するのでは間に合わないため、自動車に搭載されたデバイスで処理する必要がある。このような場合、たとえば、自動運転車で事故が発生した場合、自動車に保持されているデータを用いて原因究明が行われることになるが、当該データは関係者(運転者、保険会社、あるいは自動車メーカなど)によって改ざんされておらず、客観的に証明可能なデータでなければならない。保険の支払い等の財産的影響や、法規の適用、裁判の結果などに重大な影響を及ぼすためである。このようなデバイス(エッジデバイス)に対して信頼性を付与する場合、(1)デバイスの数や生成されるデータが極めて多く、信頼性付与要求を中央(例えば、クラウド上のサーバなど)で集約して処理すると、膨大な処理負荷になる、(2)リアルタイム性が高いデータを取り扱う場合、ネットワークを経由して信頼性を付与すると遅延が大きくなる、(3)ネットワーク接続が切断された場合に信頼性を付与する手段がない、等の様々な不都合がある。
【0161】
このような問題への対処としては、エッジ側において信頼性の付与を完結させることが解決手段の一つとして考えられる。しかし、単純にエッジ側の時刻情報と秘密鍵演算だけでタイムスタンプを生成すると、エッジ側の時刻情報を改ざんし、都合のいい時刻でタイムスタンプを生成する、あるいは、偽の公開証明書に対応した、偽の秘密鍵でタイムスタンプを生成して第三者証明があるように見せかける等の改ざんを許す結果となる。しかし、本実施形態のデバイス100(セキュアコンポーネント50)によれば、時刻証明者(セキュアコンポーネント50)が生成した時刻に対する信頼性、及び時刻証明者(セキュアコンポーネント50)が保持する鍵の安全性が担保されるので、上述のような、IoTデバイスやIoTデバイスが生成したデータに対するタイムスタンプサービスの問題を解決できる。
【0162】
(付記1)セキュアコンポーネントは、制御部を備え、前記制御部は、秘匿通信路経由で時刻源から時刻情報を取得し、取得した時刻情報をセキュアメモリに保持し、内部クロックのパルスを計数する計数部の計数値をリセットするとともに計数を開始し、外部から現在時刻を要求された場合、前記セキュアメモリに保持した時刻情報及び前記計数部の計数値に基づいて現在時刻を推定する。
【0163】
(付記2)セキュアコンポーネントは、付記1において、前記制御部は、推定した現在時刻を外部へ出力する。
【0164】
(付記3)セキュアコンポーネントは、付記1又は付記2において、秘密鍵を含む非対称鍵ペアをセキュアメモリに保持しておき、前記制御部は、外部から対象データ及び前記対象データの時刻証明要求を取得した場合、前記時刻情報及び前記計数部の計数値に基づいて現在時刻を推定し、前記対象データ、推定した現在時刻及び前記秘密鍵に基づいて署名を生成し、生成した署名及び推定した現在時刻を含むタイムスタンプを外部へ返送する。
【0165】
(付記4)セキュアコンポーネントは、付記1から付記3のいずれか一つにおいて、前記制御部は、現在時刻を推定した際の前記計数部の計数値に基づいて前記現在時刻の信頼度を判定し、判定した信頼度を外部へ返送する。
【0166】
(付記5)セキュアコンポーネントは、付記1から付記4のいずれか一つにおいて、前記制御部は、現在時刻を推定した際の前記計数部の計数値を外部へ返送する。
【0167】
(付記6)セキュアコンポーネントは、付記1から付記5のいずれか一つにおいて、前記制御部は、前記時刻源の時刻情報の受信時点、並びに前記時刻源の時刻情報の要求時点及び前記時刻源の時刻情報のセキュアメモリへの保持時点の少なくとも一つの時点における前記計数部の計数値に基づいて、推定した現在時刻と時刻情報との間の遅延時間を算出する。
【0168】
(付記7)セキュアコンポーネントは、付記6において、前記制御部は、前記遅延時間に基づいて現在時刻を補正する。
【0169】
(付記8)セキュアコンポーネントは、付記1から付記7のいずれか一つにおいて、前記制御部は、秘密鍵及び公開鍵を含む非対称鍵ペアを生成する。
【0170】
(付記9)セキュアコンポーネントは、付記8において、前記制御部は、認証局サーバに対する前記公開鍵の署名要求に基づく公開鍵証明書を取得し、セキュアメモリに保持した公開鍵証明書を、取得した公開鍵証明書で更新する。
【0171】
(付記10)セキュアコンポーネントは、付記9において、前記制御部は、予め保持した認証局公開鍵証明書に基づいて、取得した公開鍵証明書を検証し、検証が成功した場合、セキュアメモリに保持した公開鍵証明書を、取得した公開鍵証明書で更新する。
【0172】
(付記11)セキュアコンポーネントは、付記1から付記10のいずれか一つにおいて、セキュアエレメント、トラステッド・プラットフォーム・モジュール又はトラステッド実行環境のいずれかにより構成される。
【0173】
(付記12)デバイスは、前述のセキュアコンポーネントを備える。
【0174】
(付記13)現在時刻推定方法は、秘匿通信路経由で時刻源から時刻情報を取得し、取得した時刻情報をセキュアメモリに保持し、内部クロックのパルスを計数する計数部の計数値をリセットするとともに計数を開始し、外部から現在時刻を要求された場合、前記セキュアメモリに保持した時刻情報及び前記計数部の計数値に基づいて現在時刻を推定する。
【0175】
各実施形態に記載した事項は相互に組み合わせることが可能である。また、特許請求の範囲に記載した独立請求項及び従属請求項は、引用形式に関わらず全てのあらゆる組み合わせにおいて、相互に組み合わせることが可能である。さらに、特許請求の範囲には他の2以上のクレームを引用するクレームを記載する形式(マルチクレーム形式)を用いているが、これに限るものではない。マルチクレームを少なくとも一つ引用するマルチクレーム(マルチマルチクレーム)を記載する形式を用いて記載してもよい。
【符号の説明】
【0176】
100 デバイス
10 ネットワークI/F
20 SCI/F
50 セキュアコンポーネント
51 署名生成部
52 コマンド処理部
53 秘匿通信部
54 時刻計算部
55 SC側クロックカウンタ
56 内部発振クロック
57 時刻情報テーブル
200 TSAサーバ
210 ネットワークI/F
220 秘匿通信部
230 時刻計算部
240 TSA側クロックカウンタ
250 TSA側クロック
260 時刻源
300 CA
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12