ハイブリッド型コンピュータセキュリティクロック
【課題】装置の状況や利用の状況に応じて、一定の電力を必要とせずに、イベントの発生を信頼して順序付けるために利用できる少なくとも何らかのクロック情報を、電子装置に備えることが可能となるクロック構造を提供する。
【解決手段】電子装置から読取り可能なクロックタイムと単調進行タイムとを含むクロックオブジェクトである。単調進行タイムは、クロックオブジェクトから単調進行タイムを読取るごとに増分される。クロックオブジェクトは、クロックタイムの信頼レベルの指標を含むものであってもよい。
【解決手段】電子装置から読取り可能なクロックタイムと単調進行タイムとを含むクロックオブジェクトである。単調進行タイムは、クロックオブジェクトから単調進行タイムを読取るごとに増分される。クロックオブジェクトは、クロックタイムの信頼レベルの指標を含むものであってもよい。
【発明の詳細な説明】
【技術分野】
【0001】
「汎用アクセス制御システム」と題する米国特許出願第 号および「汎用の信頼および非信頼メッセージング」と題する米国特許出願第 号を相互参照する。これらは、本願と同日に出願されており、参照として本願明細書に引用する。
【0002】
さらに、以下の同時係属米国出願を相互参照する。「付属した格納装置を用いるコンピュータシステムのセキュリティ確保のための方法とシステム」と題する、2001年7月25日に出願された米国特許出願第09/912,931号、「汎用のセキュリティ及びデジタル権利管理、ならびにストレージコントローラからのプライバシーサービスを提供するためのシステム及び方法」と題する、2004年10月12日に出願された米国特許出願第10/963,373号、「汎用のセキュリティ及びデジタル権利管理、ならびにストレージコントローラからのプライバシーサービスを提供するためのシステム及び方法」と題する、2004年11月9日に出願された米国特許出願第10/984,368号、「付属した格納装置を用いるコンピュータシステムのセキュリティ確保のための方法とシステム」と題する、2005年7月11日に出願された米国特許出願第11/178,908号、「ストレージ装置上での汎用サービスを提供する方法および装置」と題する、2006年1月31日に出願された米国特許出願第11/343,338号、「付属したストレージ装置を用いるコンピュータシステムのセキュリティ確保のための方法とシステム」と題する、2006年2月2日に出願された米国特許出願第11/346,118号。
【0003】
本発明は、一般的に、電子計算機装置に関し、特に、次のものに限られるものではないが、セキュリティ機能などのための、時間に関する情報を提供するためのクロック構造に関するものである。
【背景技術】
【0004】
電子装置には、時間に関する情報を提供するためのクロックが含まれている。例えば、電子装置では、日付と時刻に関する情報を取得するための手段を備えるために、セキュリティ機能を実施することが望まれている。フォレンジック(forensic)な記録機能として、所定のイベントが発生した時刻を記録できる能力を備えることが重要となる。
【0005】
リアルタイムクロックは、装置の電源を落としても、現在時刻を刻み続ける。従って、リアルタイムクロックには、装置の電源が落ちた後でも、クロックが時間を取得し時刻を刻み続けられるように、バッテリなどの電源が必要となる。一方、リアルタイムに対応していないクロックは、装置の電源が落ちている時には機能しないが、電源が入った時には、かなり正確に時間を記録する。
【発明の開示】
【発明が解決しようとする課題】
【0006】
ストレージ装置などの多くの電子装置に共通する問題として、コスト上の理由や電源が必要とされる実用上の理由から、リアルタイムクロックを備えることが現実的でないという問題がある。これにより、どのイベントが発生しているか、またそのイベントがいつ発生したかに関する証拠を、容易に把握できるように、正確な時間情報を保持し、発生したイベントを正しい順序で記録することが困難となる。
【0007】
従って、装置の状況や利用の状況に応じて、一定の電力を必要とせずに、イベントの発生を信頼して順序付けるために利用できる少なくとも何らかのクロック情報を、電子装置に備えることが可能となるクロック構造が求められている。
【0008】
本発明の一つあるいはそれ以上の数の実施例は、これらの問題やその他の問題に対する解決策を提供し、従来技術に対する他の利点をもたらすものである。
【課題を解決するための手段】
【0009】
本発明の一実施例は、クロックオブジェクトに関するものである。クロックオブジェクトは、電子装置から読取り可能なクロックタイムと単調進行タイムを含んでいる。単調進行タイムは、クロックオブジェクトから単調進行タイムを読取るたびに更新される。
【0010】
本発明の他の実施例は、クロックオブジェクトに関するものであり、このクロックオブジェクトは、電子装置から読取り可能なクロックタイムと、クロックタイムの信頼レベルを示す信頼度指標を含んでいる。クロックオブジェクトは、電子装置から出されたクロック読取り要求に応じて、クロックタイムと信頼度指標を電子装置に返すように構成されている。
【0011】
例えば、クロックタイムは、高信頼クロックタイムと低信頼クロックタイムとの少なくとも一つを含むことができる。信頼度指標と、少なくとも一つの高信頼クロックタイムと低信頼クロックタイムとが、読取り要求に応じて、電子装置に返される。
【0012】
さらに他の実施例では、クロックオブジェクトは、クロックソースから読み取ったソースタイムを表す静的な設定時間を含んでおり、クロックタイムは、ソースタイムに基づいている。クロックオブジェクトは、さらに、クロックデータベースへの設定時間の記録に成功した際の、遅延を表す遅れ時間を含んでいる。
【0013】
本発明の実施例を特徴づける他の特徴と効果は、以下の詳細な説明と対応する図面とから明らかになるものである。
【実施例】
【0014】
本願明細書の一つあるいはそれ以上の数の実施例は、クロックオブジェクトの形式をもつハイブリッド型のクロック構造に関するものであり、このクロックオブジェクトは、装置の状況や利用の状況に応じて、クロックエラーとクロック信頼度とともに、複数の異なるクロックソースにもとづいた“クロックタイム”を提供するものである。また、クロックオブジェクトは、クロックタイムの時間分解能によらず、イベントの発生した順序を常に識別することが可能な、単調進行タイムを提供するものである。“時間”あるいは“クロックタイム”という用語は、日付、時刻、及び/あるいはカウントなどの、任意の形式あるいは時間単位の時間情報を含んでいる。
【0015】
クロックオブジェクトに対して、クロックタイムに関する情報を取得する要求が発行された際には、クロックオブジェクトは、クロック情報を提供する元となるクロックの種類を表すものとともに、現在のクロックタイムを返す。クロックオブジェクトの一実施例は、以下の基本的な特徴を有している。
a.クロックオブジェクトは、状況に応じて、実際のクロック(日付/時刻)と、単調に増分するカウンタ(単調進行タイム)の両者を記録し通知することが可能である。
b.クロックオブジェクトは、外部で設定された信頼性の低いクロックタイムと、外部で設定された信頼性の高いクロックタイムとを区別して扱うことが可能である。
c.クロックオブジェクトは、外部で設定されたクロックタイムについて、誤差に制限を設ける手段を提供する。
d.クロックオブジェクトは、信頼できる内部のリアルタイムクロックが利用可能である場合には、それを利用するための自然な手段を提供する。
【0016】
1.序文
説明の目的のために、以下の開示は、通信チャネルを介して“ホスト”に接続された“周辺装置”に関連したハイブリッド型のクロックオブジェクトの一例を提供するものであり、ホストは、通信チャネルを介して現在のクロックタイムを設定し、その値を読取る。ホストと周辺装置という用語は、ホストは周辺装置との通信セッションを要求するとうことを定義するために区別して用いられる。ホスト装置と周辺装置は、各々、次のものに限定されるものではないが、デスクトップコンピュータシステム、ラップトップコンピュータシステム、ネットワーク接続型コンピュータシステム、携帯電話や個人情報端末などの無線システム、内蔵WEBカメラを含むデジタルカメラ、格納装置、及び/又はこれらの装置や他のシステムや装置を合理的に組み合わせたものなどの、任意の電子計算機装置又は、計算機装置の周辺装置を含むものである。
【0017】
クロックオブジェクトは、メッセージング又は非メッセージング環境のホスト上に直接実装するような、他の環境や任意の電子装置上に実装することも可能である。クロックオブジェクトは、通信チャネル、データバス、あるいは他の直接的あるいは間接的な接続やデータベースを介してアクセスすることができる。
【0018】
一実施例において、クロックオブジェクトは、時間記録と時間に関する他の情報を格納した、テーブル又は他のデータベースを保持している。周辺装置は、任意の数のクロックオブジェクトを含むことが可能であるが、通常は、一つのオブジェクトがデフォルトクロックオブジェクトとして割り当てられている。
【0019】
クロックオブジェクトは、例えば、以下の2つの時間マーカーを用いて、日付と時刻を追跡する。
ExactTimeと称する、64ビットのSNTPクロックタイムフィールド(IETF RFC 2030準拠)
LagTimeと称する、64ビットのSNTPクロックタイムエラーフィールド
ここで、SNTPとは、“シンプル・ネットワーク・タイム・プロトコル”を指す。他の時間フォーマット、プロトコル、基準を用いることもできる。
【0020】
クロックオブジェクトは、ホストからExactTimeを受信することにより、ホスト又はホストを介したなんらかのプロセス通信がクロックタイムのソースからクロックタイムを読み取った時刻と、ExactTimeが受信されたとの確認をクロックオブジェクトから受信したことを確認した時刻との間の時間遅れを、計測できるようになっている。次に、ホストプロセスは、LagTimeをクロックオブジェクトに送り、クロックオブジェクトは、LagTimeを受信して、ExactTimeとLagTimeとを永続的に記録する。このようにして、クロックオブジェクトは、ExactTimeについての数値を知り、LagTimeを介して、大まかではあるが、エラーについても把握することが可能である。オプションとして、特定の環境に対応するために、ホストは、この操作を繰り返し、平均の遅れ時間あるいは最大限の遅れ時間を提供することができることは明白である。
【0021】
クロックオブジェクトは、高信頼クロックソース(HighTrustSource)から受信した時刻と、低信頼クロックソース(LowTrustSource)から受信した時刻とを区別する能力も備えている。高信頼クロックソース(HighTrustSource)は遠隔にあるものでもよいが、強固に保護された時間のソースであり、低信頼クロックソース(LowTrustSource)は近隣にあるものであるが、ローカルのパソコン(PC)クロックなどの、強固には保護されていない時間のソースである。
【0022】
本発明の一実施例において、クロックオブジェクトは、高信頼(HighTrust)ソースが、信頼度はより高いが、長い遅れ時間(LagTime)をもつ時刻を提供することを仮定しているため、クロックオブジェクトは、高信頼(HighTrust)ソースを用いて、低信頼(LowTrust)のExactTime中のエラーをある範囲に留める。このようにして、低信頼(LowTrust)であるが正確な時刻を検出して用いることが可能となる。多くの場合、低信頼(LowTrust)ソースは、高信頼(HighTrust)ソースよりも時間分解能は大きいが、より正確で信頼性の高い時刻を提供する。しかし、高信頼(HighTrust)ソースは、現在の相対時間については、より信頼できるものとなっている。
【0023】
以下で詳細に説明するように、クロックオブジェクトは、低信頼(LowTrust)のExactTimeと高信頼(HighTrust)のExactTimeとの両者、高信頼(HIghTrust)の制限範囲をもたない低信頼(LowTrust)のExacttime、または高信頼モード(HighTrustMode)及び低信頼モード(LowTrustMode)と呼ばれるクロックオブジェクトモードを用いる高信頼(HighTrust)のExactTimeを受信するように設定されている。
【0024】
クロックオブジェクトは、さらに、タイマーモード(TimerMode)とクロックモード(ClockMode)という2つの時間モードを備え、装置のリセットの後に時間が設定されたものであるか、クロックオブジェクトに設定時間が与えられていないかどうかを区別する。リセットの後では、(装置のリセットや電源切断の際に、時間の進行と時間情報を保持するためのバックアップバッテリを、装置が含んでいない場合には)クロックオブジェクトは、タイマーモード(TimerMode)になる。タイマーモード(TimerMode)では、ExactTimeは、時間が更新されるが、リセットの後であるため、取り出された時刻値は絶対値としては信頼できないことを、その読み値は示すことになる。
【0025】
低信頼タイム(LowTrustExactTime)と高信頼タイム(HighTrustExactTime)に加え、クロックオブジェクトは、単調進行カウンタを独立して保持しており、このカウンタは、クロックタイムがクロックオブジェクトから読み取られる毎に、そのカウンタ数値が更新される。一実施例では、このカウンタは、単調進行タイム(MonotonicTime)と呼ばれる値を有する64ビットの永続カウンタを含んでいる。単調進行タイム(MonotonicTime)は、“単調”であり、リセット又はリブートがあっても、進行とともに増分(あるいは漸減)する値を含んでいる。従って、クロックタイムの各読み値は、現在のクロックタイム(ExactTime)に加え、フォレンジックの記録などで、イベントを順序付けるために用いることが可能な一意の単調値を提供する。単調進行タイム(MonotonicTime)は、均一あるいは不均一な増分で増分することができるが、同一の計数値を二度返すことはない。単調進行タイム(MonotonicTime)が単調に変化する(すなわち、時間の進行とともに増加あるいは減少する)限り、これらの増分は、正値又は負値である。
【0026】
単調進行タイム(MonotonicTime)は、クロックオブジェクトのExactTimeを時間的に後戻りさせることができるため、有用である。さらに、連続した読取りのスピードが時間分解能に関連した値となるように設定することにより、クロックタイムを続けて読み取り、同一のExactTime値を返すことが可能となる。これらの場合には、もしこのような方法をとらなければ、一つのイベントと他のイベント間の時間的な順序関係を、高い信頼性をもって決定することは困難となる。
【0027】
本発明の位置実施例においては、クロックオブジェクトからクロックタイムを読み出すことに応じて、クロックオブジェクトは、ExactTimeか、遅れタイム(LagTime)か、単調進行タイム(MonotonicTime)か、どの種類のクロックタイムを戻そうとしているかを示す表示を、要求元に返す。
【0028】
2.実施例
図1は、本発明の一実施例による、通信チャネル106を介して周辺装置104に接続されたホスト102を有する、複数の構成要素からなるプラットフォーム100のブロック図である。APP1(符号110)とAPP2(符号112)など、多数のホストソフトウェアアプリケーションは、ドライバ114と周辺インターフェース116とを介して、周辺装置104との間で相互にやりとりする。
【0029】
周辺装置104は、セキュリティプロバイダ(SP)120を含んでおり、これは、周辺装置の確実な信頼状態を制御するために作成されたテーブルとメソッドの組を含んでいる。一実施例では、セキュリティプロバイダ120は、完全に自己完結しており、スタンドアロンのセキュリティ領域にこれらのテーブルを有している。セキュリティプロバイダは永続的なデータとメソッド(あるいはリモートプロシージャコール)から各々構成されたオブジェクトを含んでいる。一実施例では、セキュリティプロバイダ120は、アクセス制御オブジェクト122の組と、クロックオブジェクト124とを含んでいる。セキュリティプロバイダ120へのアクセスは、例えば、2003年1月30日発行の米国特許出願公開番号US2003/0023867に記載されているように、制御される。
【0030】
ホスト102上のアプリケーションは、セキュリティプロバイダ120との通信セッションを確立することにより、クロックオブジェクト124によって保持されているクロックタイムの状態などの周辺装置104上の永続的な状態について、問い合わせを行ったり、変更を加えることができる。これらのセッションは、一つあるいはそれ以上の数のオブジェクトのメソッド(図1のコネクタ130)を実行する。ホスト102は、特定のインターフェース116のインターフェースコマンドを用いてセッションをオープンすることにより、セキュリティプロバイダ120との間で通信を行う。単純な場合では、ホスト102は、周辺装置が直接接続されたプラットフォームホストである。より一般的な場合では、ホスト102は、中間的なプラットフォームホストとの間で通信を行う他のプラットフォームであり、このプラットフォームホストは、ネットワークを介して周辺装置104にセッションストリームを中継する。通信セッションと、セキュリティプロバイダ120のセキュリティ及びアクセス制御機能については、前述の相互参照した米国特許出願に、詳細に記載されている。
【0031】
一つあるいはそれ以上の数の実施例において、クロックオブジェクト124は、周辺装置104のファームウェア内に、例えば、セキュリティプロバイダ120のアクセス制御とセキュア/非セキュアメッセージングシステムを実装するファームウェアの一部として、実装されている。図1に示した実施例は、周辺装置104のセキュリティとアクセス制御機能に関して記載されているものであるが、クロックオブジェクト124は、任意の電子装置とともに、セキュリティあるいはアクセス制御機能の一部として、あるいはその外部にあるものとして用いることができる。本発明の他の実施例では、クロックオブジェクト124は、任意のセキュリティアクセス制御あるいはメッセージングシステムとは関係のない分離した機能として実装することも可能である。
【0032】
一実施例では、クロックオブジェクト124は、永続的なデータと(リモートプロシージャコールなどの)メソッドとを集めたものを含んでいる。データは、一つあるいはそれ以上の数のテーブル又は他のデータベース形式で保持されている。メソッドは、例えば、テーブルや他のオブジェクトに対して操作を行う手続きである。(ホスト102上のアプリケーションなどの)呼び出し側は、メソッドのパラメータ値のリストを、クロックオブジェクト124に送り、クロックオブジェクトは、結果値のリストと、それに続けて、例えば、状態コードとを返す。
【0033】
クロックオブジェクト124は、クロック情報データと、データに対して操作を行うメソッドとを集めたものを含んでいる。さらに、クロックオブジェクトは、例えば、クロック機能を実装し、クロックデータを格納し、メソッドを実行するための、任意のハードウェア、ソフトウェアあるいはファームウェアの全て又は一部を含む。
【0034】
図1に示した実施例では、クロックオブジェクト124は、クロックテーブル140を
揮発性メモリ142内に保持し、それに対応する永続的なクロックテーブル144を不揮発性メモリ146に保持している。例えば、周辺装置が、ディスク駆動装置などのデータ格納装置を含んでいる場合には、揮発性メモリ142は、駆動プロセッサ150が用いるランダムアクセスメモリ(RAM)を含み、不揮発性メモリ146は、データ格納ディスクの媒体を含むことが可能である。しかし、他の実施例では、他の任意の種類の揮発性メモリと不揮発性メモリを用いることも可能である。
【0035】
以下で詳細に説明するように、クロックテーブル140、144は、ホスト102上のアプリケーションによって変更されたり読取られるクロック情報を格納する。例えば、アプリケーションAPP1(符号110)は、ローカルあるいは遠隔に存在する(ローカルPCクロックなどの)低信頼クロックソース160あるいはローカルあるいは遠隔に存在する高信頼クロックソース162から、タイム値を読取ることにより、LowTrustExactTime又はHighTrustExactTimeを設定することができる。高信頼クロックソースの一例としては、例えば、有線あるいは無線の、ローカルあるいは広域ネットワークを介して、ホスト102によって読取られるSNTPクロックソースがある。ローカルの低信頼クロックソース160は、即座に利用可能で正確ではあるが、信頼できないLowTrustExactTimeを提供し、高信頼クロックソース162は、正確さには及ばないものの、信頼性の高いHighTrustExactTimeを提供する。高信頼クロックソース162は、通常、ローカルの低信頼クロックソース160よりも長いアクセス時間を有している。
【0036】
クロックオブジェクト124で保持される低信頼又は高信頼ExactTimeを設定する際には、ホストアプリケーションAPP1は、遅れタイマー170を起動し、次に、クロックソース160又は162から、ExactTimeを読取る。ホストアプリケーションは、読取ったタイム値を、例えば、“クロック設定(ClockSet)”メソッド呼び出しのパラメータとしてクロックオブジェクト124に送る。クロックオブジェクト124は、そのタイム値を受信し、ホストアプリケーションAPP1に対して、クロックタイムをクロックテーブル140に記録したことを応答する。クロックオブジェクト124がExactTime値を受信したことの確認をホストアプリケーションAPP1が受け取ると、ホストアプリケーションは、遅れタイマー170の値“遅れ時間(LagTime)”を読取る。遅れ時間(LagTime)値は、クロックオブジェクト124によって記録されたExactTimeが実際より遅れている時間の最大値を表しており、その値は、クロックデータベースにExactTimeを正しく書き込む時の遅延である。遅れ時間(LagTime)は、最悪の場合の遅れエラーを上回るが、本発明の一つあるいはそれ以上の数の実施例においては、より詳細な評価を行う必要はない。
【0037】
ホストアプリケーションは、他のメッセージのパラメータとして、遅延時間(LagTime)値を、クロックオブジェクト124に送る。クロックオブジェクト124は、それを受信すると、揮発性メモリ上のクロックテーブル140を、不揮発性メモリ上のクロックテーブル144に転送することにより、(ExactTime)と遅延時間(LagTime)を永続的に記録する。遅延時間(LagTime)値は、クロックオブジェクト124によって格納されたExactTimeを修正したり、クロックエラーの計測や制限を設けるために用いられる。
【0038】
ホストアプリケーションは、実装の違いによって、クロックソース160又は162から時間を読取る前か後のどちらで、クロックオブジェクト124を用いてメッセージングセッションを開くことを選択してもよい。最も近い時間を求めることが望まれる場合には、ホスト側のプロセスは、ソースクロックタイムを読取して送る前に、クロックオブジェクト124でセッションを開く。しかし、時間は、ローカル又は広域ネットワークを経由して取得する必要があり、この場合には、セッションは、時間を更新する前に、セッション自身の認証を行ったり、クロックオブジェクト124によりセッションのセキュリティを確保する必要があることが原因の一部となって、より長い遅れ時間が発生する。
【0039】
静的な(ExactTime)値が記録されると、記録された時間が、LowTrustExactTimeであるか、HighTrustExactTimeであるかにかかわらず、クロックオブジェクト124は、タイマ180を用いて、その現在のクロックタイムの計測値を増分させる。周辺装置104に電源が入ると、タイマ180は、格納されたExactTime値からの時間進行について正確な計測を継続する。
【0040】
さらに、クロックオブジェクト124は、単調進行タイム(MonotonicTime)と呼ばれる独立した単調進行カウンタ値を、揮発性メモリ上のクロックテーブル140に保持する。クロックオブジェクト124は、ホストアプリケーションあるいは他のオブジェクト又はプロセスが、クロックオブジェクト124から時間を読取るごとに、単調進行タイム(MonotonicTime)を増分させる。以下に詳細に説明するように、クロックオブジェクト124は、不揮発性メモリ上のクロックテーブル144に単調進行タイム(MonotonicTime)を定期的に格納し、単調に増加するカウンタ値を、常に、提供できるようにする。
【0041】
リアルタイムクロック190が、周辺装置104で利用可能である場合には、クロックオブジェクト124は、その値を、低信頼クロックタイム値あるいは高信頼クロックタイム値として適宜利用することが可能である。また、クロックオブジェクト124は、リアルタイムクロック値を、例えば、ホストアプリケーションによって行われるプロシージャを介して設定することも可能である。
【0042】
他の実施例において、クロックオブジェクト124のタイマや他の支援機能は、ハードウェア、ファームウェア、ソフトウェアあるいはそれらの組み合わせによって実装することが可能である。
【0043】
3.クロックテーブル
本発明の一実施例において、テーブルは、一般的に、名前が付けられた列と、アドレス指定可能な行とを含んでいる。行と列が交叉する場所には、セルが存在する。一つの列内の全てのセルは、同一の種類のデータを有している。しかし、本願明細書と特許請求の範囲で用いられる“テーブル”という用語は、メモリ中のデータの2つあるいはそれ以上の数のフィールドを関連付けるために用いられる、任意のデータ構造あるいは配置を含むものとなっている。テーブルの“列”と“行”は、フィールドが格納されているメモリセルの物理的な配置を必ずしも限定するものではないが、フィールド間を関連付ける方法を指すものであり、これらの用語“列”と“行”は、入れ替えて使うことが可能である。
【0044】
一実施例では、クロックテーブル140、144は、単一の列を有している。表1は、本発明の一実施例における、クロックテーブル140、144の列の記載例を示すものである。
【表1】
【0045】
上記の表では、データ種類“ブール値”は、1バイトの符号なし整数、uinteger{1}であり、例えば、“偽”の場合は値が0で、“真”の場合は値が1となる。これに代えて、1ビットの値を用いることも可能である。データ種類“uidref{Authority}”は、特定のアクセス制御の権限を識別するための一意の識別子であり、図1のアクセス制御オブジェクト122によって保持され、高信頼タイム又は低信頼タイムを設定することによるものである。データ種類“clock_kind”は、enum{Timer,Low,High,LowHigh}の形式を有している。これらの形式のひとつは、この列の中で列挙され得る。データ形式“clock_time”は、typeOr{trusted:sntp_time,monotonic:uinteger{8}}の形式を有している。ホストが、電源起動からの信頼できる時間(LowTrust又はHighTrust)を与えた場合には、“信頼された”クロックタイムが用いられ、これは、sntp_time形式を有する。それ以外の場合は、単調積算カウンタ値が用いられ、これは、符号なしの8バイトの整数である。
【0046】
HaveHighフィールドは、高信頼タイム値が有効であるかどうかを示すものである。この値が真である場合は、HighByWho、HighSetTime、HighInitialTimer及びHighLagTimeの各フィールドが意味を持つものとなる。TrustModeがLowならば、例えば、この値は偽でなければならない。
【0047】
同様に、HaveLowフィールドは、信頼タイム値が有効であるかどうかを示すものである。この値が真である場合は、LowbyWho、LowSetTime、LowInitialTimer及びLowLagの各フィールドが意味を持つものとなる。TrustModeがHighならば、例えば、この値は偽でなければならない。
【0048】
HighSetTime及びLowSetTimeは、ホストから受信したHighTrustExactTimeとLowTrustExactTimeに対応しており、これらは静的な時間値である。HighInitialTimerとLowInitialTimerは、HighSetTimeとLowSetTimeの値が設定された時点でタイマ180から与えられる“timer()”の各値に対応している。これらの値のいずれかがホストで設定される時点で、クロックオブジェクトは、timer()の静的な値を、HighInitialTimer又はLowInitialTimerの各フィールドに記録する。
【0049】
ホスト遅れタイマ170によって計測された、高信頼クロックソースと低信頼クロックソースに関する遅れ時間は、HighLag及びLowLagの行に、各々、格納される。これらの遅れ時間は、一般的に、各クロックソースから各ExactTimesを読取ってから、対応する設定タイムをクロックテーブルに記録するまでの遅延を表している。
【0050】
揮発性メモリ上のクロックテーブル140(RAM内)のMonotonicBaseの行に格納された値は、揮発性MonotonicBaseと呼ばれるが、アプリケーション、オブジェクトあるいは他のプロセス又は装置がクロックオブジェクト124から時間を読取る毎に、指定された均一あるいは不均一な増分で増分する。各読取りごとに、揮発性MonotonicBaseの値が、MonotinicTimeとして、要求元に返される。
【0051】
一実施例では、MonotonicBaseは、それが用いられる電子装置が使用される期間内に、単調進行カウントが最大カウントに到達することがないように、十分なビット数を有している。例えば、MonotonicBaseは、64ビット長である。しかし、他の実施例では、このビット数よりも多いビット数や少ないビット数を用いることも可能である。
【0052】
MonotonicReserveの値は、クロックオブジェクト124が、そのコンテンツ、特に、揮発性MonotinicBaseの値を不揮発性メモリ146内のクロックテーブル144に複写あるいは保存する揮発性MonotonicBaseを増分させる回数の単位で期間を、決定する。従って、MonotonicReserveが揮発性MonotinicBaseを増分する毎に、不揮発性MonotinicBase値は更新される。これにより、カウント値の増分が行われることを確保しながら、メインメモリへの書込み回数を最小にする。クロックオブジェクトは、不揮発性メモリへ最新値を保存して、それ以降の、揮発性MonotonicBaseの増分の総回数の最新値を、MonotinicIncrementと称して、それを監視する。MonotonicIncrementがMonotonicReserve値に達した時に、クロックオブジェクトは、揮発性メモリ上のMonotonicBaseを不揮発性メモリ上のクロックテーブルに書き込む。
【0053】
例えば、リセット又は電源が落とされることにより、揮発性メモリ上のMonotonicBaseの前回の値は消失する。しかし、電源が入ると、クロックオブジェクトは、揮発性メモリ上のクロックテーブル140のMonotonicBaseの行に、少なくとも保存された、不揮発性MonotonicBaseとMonotonicReserve値の合計と等しい値を書き込む。これにより、揮発性MonotonicBaseの新しい値が、少なくとも、リセットの前に保存された次回の最新値と同じ程度となることが保証される。最新の永続値が不揮発性メモリ上のクロックテーブルに保存されているため、揮発性MonotonicBase値は、MonotonicReserveを上回る値にまでは増分することはない。従って、揮発性メモリ上のMonotonicBase値は、MonotonicReserve値によって値が飛ぶことがあっても、常に増加することが保証されている。その後は、クロックオブジェクトからクロックタイムを読取っても、同一のMonotonicTime値が返されることはない。
【0054】
他の実施例では、単調進行する値は、他の方法で扱うものであってよい。例えば、不揮発性メモリへの保存の際に、保存されたMonotonicBaseは、MonotonicReserveによって事前に増加させておくことが可能である。リセット後に、この保存された値を、揮発性メモリ上のMonotonicBaseに、直接書き込むことも可能である。単調に増加する(あるいは、場合によって減少する)カウントを確実に提供するために、他の処理を用いることも可能である。
【0055】
このように、クロックオブジェクトは、以下の制約条件を保持している。
0 ≦ MonotonicIncrement ≦ MonotonicReserve,揮発性MonotonicBase = 不揮発性MonotonicBase+MonotonicIncrement
ここで、MonotonicIncrementは、不揮発性メモリへの最後の保存以降の、MonotonicBaseを増分させる回数の合計値である。
【0056】
4.クロックメソッド
このセクションは、ホストアプリケーション(又は他のプロセス、オブジェクト、装置)からコールされ、クロックオブジェクト上で実行あるいはクロックオブジェクトにより実行されるメソッドあるいはプロセスの例を示すものである。メソッドとは、ホストアプリケーションが実行しようとする、クロックオブジェクトなどの周辺装置のリソースや特徴を活用する行為である。
【0057】
4.1 クロック取得(GetClock)メソッド
クロック取得(GetClock)メソッドは、現在時刻に関する情報を読取るために用いられ、以下の形式を有している。
TableName.GetClock[]
=>
[Kind:clock_kind,ExactTime:clock_time,
LagTime:clock_time,MonotonicTime:
clock_time]
【0058】
第一の表現は、所望するクロックテーブル名称(図1のクロックテーブル140の名称)を表し、クロック取得(GetClock)メソッドを指定するものである。“=>”の後に続く表現は、クロックオブジェクトからホストに返される結果を表すものである。
【0059】
結果は、4つのパラメータ、データ種類が“clock_kind”である“Kind”と、データ種類が“clock_time”である“ExactTime”と、データ種類が“clock_time”である“LagTime”と、データ種類が“clock_time”である“MonotonicTime”である。他の実施例では、これらのパラメータのうち一つあるいはそれ以上の数のパラメータを、一つあるいはそれ以上の数の分離したメッセージに含めて返すことも可能である。
【0060】
クロックオブジェクトが、クロック取得(GetClock)メソッドコールを受け取ると、クロックオブジェクトは、その揮発性メモリ上のクロックテーブルを読取る。もし、HaveLowが真である場合は、結果は、[Low,Lowtime,LowLag,MonotonicTime]となる。もし、HaveHighが真である場合は、結果は、[High,HighTime,HighLag,MonotonicBase]となる。それ以外の場合は、結果は[“timer”,timer(),0,MonotonicBase]となる。他の実施例においては、他のプライオリティで実行できる。
【0061】
本実施例では、クロック取得(GetClock)メソッドコールは、クロックテーブルとTrustModeの内容に応じて、2つの仮想変数、HighTimeかLowTimeのいずれかを返す。クロックオブジェクトは、以下の式により、これらの変数を計算する。
HighTime=HighSetTime+(timer()―HighInitialTime)
LowTime=LowSetTime+(timer()―LowInitialTime)
【0062】
クロックオブジェクトは、タイマ180とHighInitialTimeの値を読取り、ホストにより初期設定されクロックテーブルに格納されたHighSetTime(HighTrustExactTime)からの経過時間を決定する。これに代えて、タイマ180はホストがHighSetTimeを設定する毎にリセットされ、ホストにより読取られる際に単純にHighSetTimeに加算されてもよい。さらに他の実施例では、高信頼設定時間と低信頼設定時間のために、分離した複数のタイマを設けることも可能である。
【0063】
種類がclock_kindのパラメータは、結果として返されるExactTimeクロックタイムの信頼レベルを表すものとして用いられる。これに代えて、クロックオブジェクトは、HighTimeとLowTimeとの両方を、これらのクロックタイムのどちらが有効であるかを示す有効フラグとともに返すことも可能である。有効フラグは、クロックタイムを求める基準となるクロックソースの信頼レベルを表す指標としても用いられる。
【0064】
4.2 リセットクロック(ResetClock)メソッド
リセットクロック(ResetClock)メソッドは、以下の形式を有している。
TableName.ResetClock[]
=>
[Result:boolean]
【0065】
本メソッドは、クロックをリセットし、クロックオブジェクトをタイマーモードに設定するものである。本メソッドは、周辺装置がリセットされたり、ホストからコールされた時に、自動的にコールされる。
【0066】
本メソッドがコールされると、クロックオブジェクトは、以下の属性を設定する。
TrustMode=Timer
HaveHigh=0(すなわち、偽)
HaveLow=0(すなわち、偽)
揮発性MonotonicBase=不揮発性MonotonicBase+MonotonicReserve
【0067】
さらに、メモリ変数MonotonicIncrementが0に設定される。このメモリ変数は、不揮発性MonotonicBaseの最新値が保存された以降の揮発性MonotonicBaseの増分回数を表すものである。
【0068】
この設定操作により、揮発性MonotinicBaseが(リセットクロック(ResetClock)メソッドコールにより、MonotonicReserve値に達するまで、一気に増加することがあっても)常に増加することが保証される。
【0069】
クロックオブジェクトによって返されるブール値の結果は、リセットクロック(ResetClock)メソッドが実行されたかどうかを示すものである。
【0070】
4.3 SetClockHighメソッド
SetClockHighメソッドは、以下の形式を有している。
TableName.SetClockHigh[ExactTime:sntp_time,LagTime:sntp_time]
=>
[Result:Boolean]
【0071】
本メソッドは、図1のソース162などの高信頼ソースをもとに時間を設定するために、ホストによって用いられる。
【0072】
図2は、SetClockHighメソッドが動いている間に、ホストと周辺装置の間でやりとりされるメッセージストリームの例を示す図である。
【0073】
HighTrustExactTimeを設定すると、ホストアプリケーションは、図2のステップ200で、遅れタイマ170(図1)を起動し、クロックソース162からExactTimeを読取り、ステップ201で、上述した形式のパラメータとして、ExactTime値をクロックオブジェクト124に送る。この時点で、LagTimeパラメータは、その値が未定であるため、送られるパラメータの中には含まれていないか、パラメータにヌル値に設定されている。ステップ202で、クロックオブジェクト124は、ExactTime値を受け取り、その値を、揮発性メモリ上のクロックテーブル140のHighTimeの列に格納し、さらに、ステップ203で、クロックタイムが記録されたことをホストアプリケーションに対して通知する。ブール値の“Okay”結果には、操作が成功した場合には真が設定され、操作が失敗した場合には偽が設定される。また、ステップ204で、クロックオブジェクトは、タイマ180の値を読取り、その値を、クロックテーブルのHighInitialTimeの列に記録する。クロックオブジェクト124がExactTime値を受け取ったことを示す確認を、ホストアプリケーションが受け取ると、ステップ204で、ホストアプリケーションは、遅れタイマ170の値を読取り、ステップ205で、さらなるSetClockHighメッセージのパラメータとして、LagTime値をクロックオブジェクト124に送る。クロックオブジェクトがこれを受け取ると、ステップ206で、クロックテーブルのHighLagの列に、LagTime値を格納し、HighTimeとHighLagの値を、不揮発性メモリ上のクロックテーブル144に永続的に格納する。
【0074】
本メソッドコールは、TrustModeがLowでない時のみ、受領される。このコールが受領されると、HaveHighは真に設定され、HighByWhoは、このメッセージングセッションに対する権限所有者に設定される。もし、新しい高信頼値が、以下に示す制約条件に従って、既存の低信頼値を制限することがない場合には、HaveLowは偽に設定される。
【0075】
TrustModeがLowhighであり、高信頼値と低信頼値の両方が存在する際には、低信頼値は、高信頼値に含まれていなければならない。すなわち、
LowTime ≧ HighTime
LowTime+LowLag ≦ HighTime+HighLag
【0076】
LowTime値は、時間を遡ることは許されていないため、HighTimeよりも大きな値でなければならない。また、LowLagは、HighLagよりも短くなければならないため、上記の二番目の不等式が成立しなければならない。そうでない場合には、LowTime値に問題があるということになる。
【0077】
上記の不等式のいずれか一方が真でない場合には、LowTimeが誤っている可能性があるため、クロックオブジェクトはそれを破棄し、HaveLow値を“0”(すなわち偽)に設定する。なお、これらの時間比較を行うステップを実装した場合には、timer()の値は、比較式の両辺に現れて消去されるため、その値は不要となる。
【0078】
4.4 SetClockLowメソッド
SetClockLowメソッドは、SetClockHighメソッドと似ており、以下の形式を有している。
TableName.SetClockLow[ExactTime:sntp_time,LagTime:sntp_time]
=>
[Result:boolean]
【0079】
本メソッドは、図1のPCクロック160などの低信頼ソースをもとに時間を設定するために用いられる。
【0080】
このメソッドのコールは、上述のSetClockHighと同様の方法でストリーム化されている。ホストは、遅れタイマ170を用いてLowLag時間を計測しながら、LowTrustExactTimeをクロックオブジェクトに送る。クロックオブジェクトは、クロックテーブルのLowTimeの列のLowTrustExactTimeを記録し、タイマ180を読取り、その値をクロックテーブルのLowInitialTimeの列に記録する。クロックオブジェクトが、LowTimeを記録したことを確認すると、ホストは、クロックオブジェクトにLowLag時間値を送り、その値は、テーブルのLowLag列に格納される。LowTimeとLowLagの両方の値は、いずれかが不揮発性メモリ中で更新される前に、受信される。
【0081】
本メソッドのコールは、TrustModeがHighでない時にのみ受領される。もしモードがLowHighであり、HaveHighが真である場合には、上述した不等式に従って、新しい高信頼値が既存の低信頼値を制限する場合にのみ、このコールが受領される。他の実施例では、他の比較式あるいは制約式を用いることも可能である。
【0082】
このコールが受領されると、HaveLowは真に設定され、LowByWhoはこのセッションに対する権限所有者に設定される。
【0083】
4.5 ClockSetModeメソッド
本メソッドは、クロックテーブル中のTrustModeを設定し、以下の形式を有している。
TableName.ClockSetMode[Mode:Clock_kind]
=>
[Result:boolean]
【0084】
TrustModeがLowに設定されると、HaveHighは偽に設定される。TrustModeがHighに設定されると、HaveLowは偽に設定される。TrustModeがLowHighに設定されると、HaveLow及びHaveHighは真に設定される。
【0085】
4.6 RenewCounterメソッド
TableName.RenewCounter[]
=>
[Result:boolean]
【0086】
ホストは、主記憶媒体上の不揮発性メモリ上のクロックテーブルと、RAMの揮発性メモリ上のクロックテーブル内の現在値とを同期させようとする任意の時に、本メソッドをコールする。クロックオブジェクトは、現在値を不揮発性メモリに書込み、MonotonicIncrementを0に設定する。なお、本メソッドは、仮想的に変化するMonotonicTimeの値を不変のものにする。
5.結論
【0087】
このように、上述したクロックオブジェクトは、一定の電力を必要とせずに、単調にイベントを確実に順序付けるために用いられる少なくとも何らかのクロック情報を有する電子装置を提供することが可能である。クロックの時間分解能や、クロック読取りの間の遅れ、あるいは電源リセットに関わらず、クロックオブジェクトは、各クロック読取りに関する、単調に増加する一意の情報を提供する。これは、発生イベントを正確に順序付けることが重要となる、データ記録アプリケーションにおいて特に有用である。例えば、クロックオブジェクトは、否認することができない一連の発生イベントを証明するフォレンジックな記録のための、タイムスタンプを生成することが可能である。
【0088】
また、クロックオブジェクトは、クロック情報が、高信頼ソースあるいは低信頼ソースのどちらに基づいているかを表す指標を提供したり、クロックエラーやクロック情報の他の制約条件を表す指標を提供する。
【0089】
以上の説明において、本発明の様々な実施例の多くの特徴と利点について、本発明の様々な構造と機能の詳細と合わせて説明してきたが、本開示は、例示的なものであり、詳細に、特に、特許請求の範囲を表現している用語の一般的な意味の元に示された程度であれば、本発明の原理の範囲内において、構成要素の構造と配置に関する変更を加えることが可能である。例えば、本発明の範囲と主旨を逸脱することなく同一の機能性を実質的に保持しながら、クロックオブジェクトの特定のアプリケーションに応じて、特定の要素を変化させることが可能である。さらに、上述した好適な実施例は、周辺装置のためのクロックオブジェクトに関するものであるが、本発明の教示することは、本発明の範囲と主旨を逸脱することがない限り、任意の電子装置に適用することが可能であることは、当業者にとって理解されうるものである。
【図面の簡単な説明】
【0090】
【図1】図1は、本発明の一実施例における、ファームウェアが実装されたクロックオブジェクトをもつ周辺装置を有する複数の構成要素からなるプラットフォームのブロック図である。
【図2】図2は、ClockSetHighメソッドの実行中に、ホストと周辺装置との間で交換されるメッセージストリームを示す図である。
【符号の説明】
【0091】
102 ホスト
104 周辺装置
116 インターフェース
122 アクセスコントロールオブジェクト
124 クロックオブジェクト
140,144 クロックテーブル
142 揮発性メモリ
146 不揮発性メモリ
150 プロセッサ
160 PCクロック
162 高信頼クロックソース
180 タイマ
190 リアルタイムクロック
【技術分野】
【0001】
「汎用アクセス制御システム」と題する米国特許出願第 号および「汎用の信頼および非信頼メッセージング」と題する米国特許出願第 号を相互参照する。これらは、本願と同日に出願されており、参照として本願明細書に引用する。
【0002】
さらに、以下の同時係属米国出願を相互参照する。「付属した格納装置を用いるコンピュータシステムのセキュリティ確保のための方法とシステム」と題する、2001年7月25日に出願された米国特許出願第09/912,931号、「汎用のセキュリティ及びデジタル権利管理、ならびにストレージコントローラからのプライバシーサービスを提供するためのシステム及び方法」と題する、2004年10月12日に出願された米国特許出願第10/963,373号、「汎用のセキュリティ及びデジタル権利管理、ならびにストレージコントローラからのプライバシーサービスを提供するためのシステム及び方法」と題する、2004年11月9日に出願された米国特許出願第10/984,368号、「付属した格納装置を用いるコンピュータシステムのセキュリティ確保のための方法とシステム」と題する、2005年7月11日に出願された米国特許出願第11/178,908号、「ストレージ装置上での汎用サービスを提供する方法および装置」と題する、2006年1月31日に出願された米国特許出願第11/343,338号、「付属したストレージ装置を用いるコンピュータシステムのセキュリティ確保のための方法とシステム」と題する、2006年2月2日に出願された米国特許出願第11/346,118号。
【0003】
本発明は、一般的に、電子計算機装置に関し、特に、次のものに限られるものではないが、セキュリティ機能などのための、時間に関する情報を提供するためのクロック構造に関するものである。
【背景技術】
【0004】
電子装置には、時間に関する情報を提供するためのクロックが含まれている。例えば、電子装置では、日付と時刻に関する情報を取得するための手段を備えるために、セキュリティ機能を実施することが望まれている。フォレンジック(forensic)な記録機能として、所定のイベントが発生した時刻を記録できる能力を備えることが重要となる。
【0005】
リアルタイムクロックは、装置の電源を落としても、現在時刻を刻み続ける。従って、リアルタイムクロックには、装置の電源が落ちた後でも、クロックが時間を取得し時刻を刻み続けられるように、バッテリなどの電源が必要となる。一方、リアルタイムに対応していないクロックは、装置の電源が落ちている時には機能しないが、電源が入った時には、かなり正確に時間を記録する。
【発明の開示】
【発明が解決しようとする課題】
【0006】
ストレージ装置などの多くの電子装置に共通する問題として、コスト上の理由や電源が必要とされる実用上の理由から、リアルタイムクロックを備えることが現実的でないという問題がある。これにより、どのイベントが発生しているか、またそのイベントがいつ発生したかに関する証拠を、容易に把握できるように、正確な時間情報を保持し、発生したイベントを正しい順序で記録することが困難となる。
【0007】
従って、装置の状況や利用の状況に応じて、一定の電力を必要とせずに、イベントの発生を信頼して順序付けるために利用できる少なくとも何らかのクロック情報を、電子装置に備えることが可能となるクロック構造が求められている。
【0008】
本発明の一つあるいはそれ以上の数の実施例は、これらの問題やその他の問題に対する解決策を提供し、従来技術に対する他の利点をもたらすものである。
【課題を解決するための手段】
【0009】
本発明の一実施例は、クロックオブジェクトに関するものである。クロックオブジェクトは、電子装置から読取り可能なクロックタイムと単調進行タイムを含んでいる。単調進行タイムは、クロックオブジェクトから単調進行タイムを読取るたびに更新される。
【0010】
本発明の他の実施例は、クロックオブジェクトに関するものであり、このクロックオブジェクトは、電子装置から読取り可能なクロックタイムと、クロックタイムの信頼レベルを示す信頼度指標を含んでいる。クロックオブジェクトは、電子装置から出されたクロック読取り要求に応じて、クロックタイムと信頼度指標を電子装置に返すように構成されている。
【0011】
例えば、クロックタイムは、高信頼クロックタイムと低信頼クロックタイムとの少なくとも一つを含むことができる。信頼度指標と、少なくとも一つの高信頼クロックタイムと低信頼クロックタイムとが、読取り要求に応じて、電子装置に返される。
【0012】
さらに他の実施例では、クロックオブジェクトは、クロックソースから読み取ったソースタイムを表す静的な設定時間を含んでおり、クロックタイムは、ソースタイムに基づいている。クロックオブジェクトは、さらに、クロックデータベースへの設定時間の記録に成功した際の、遅延を表す遅れ時間を含んでいる。
【0013】
本発明の実施例を特徴づける他の特徴と効果は、以下の詳細な説明と対応する図面とから明らかになるものである。
【実施例】
【0014】
本願明細書の一つあるいはそれ以上の数の実施例は、クロックオブジェクトの形式をもつハイブリッド型のクロック構造に関するものであり、このクロックオブジェクトは、装置の状況や利用の状況に応じて、クロックエラーとクロック信頼度とともに、複数の異なるクロックソースにもとづいた“クロックタイム”を提供するものである。また、クロックオブジェクトは、クロックタイムの時間分解能によらず、イベントの発生した順序を常に識別することが可能な、単調進行タイムを提供するものである。“時間”あるいは“クロックタイム”という用語は、日付、時刻、及び/あるいはカウントなどの、任意の形式あるいは時間単位の時間情報を含んでいる。
【0015】
クロックオブジェクトに対して、クロックタイムに関する情報を取得する要求が発行された際には、クロックオブジェクトは、クロック情報を提供する元となるクロックの種類を表すものとともに、現在のクロックタイムを返す。クロックオブジェクトの一実施例は、以下の基本的な特徴を有している。
a.クロックオブジェクトは、状況に応じて、実際のクロック(日付/時刻)と、単調に増分するカウンタ(単調進行タイム)の両者を記録し通知することが可能である。
b.クロックオブジェクトは、外部で設定された信頼性の低いクロックタイムと、外部で設定された信頼性の高いクロックタイムとを区別して扱うことが可能である。
c.クロックオブジェクトは、外部で設定されたクロックタイムについて、誤差に制限を設ける手段を提供する。
d.クロックオブジェクトは、信頼できる内部のリアルタイムクロックが利用可能である場合には、それを利用するための自然な手段を提供する。
【0016】
1.序文
説明の目的のために、以下の開示は、通信チャネルを介して“ホスト”に接続された“周辺装置”に関連したハイブリッド型のクロックオブジェクトの一例を提供するものであり、ホストは、通信チャネルを介して現在のクロックタイムを設定し、その値を読取る。ホストと周辺装置という用語は、ホストは周辺装置との通信セッションを要求するとうことを定義するために区別して用いられる。ホスト装置と周辺装置は、各々、次のものに限定されるものではないが、デスクトップコンピュータシステム、ラップトップコンピュータシステム、ネットワーク接続型コンピュータシステム、携帯電話や個人情報端末などの無線システム、内蔵WEBカメラを含むデジタルカメラ、格納装置、及び/又はこれらの装置や他のシステムや装置を合理的に組み合わせたものなどの、任意の電子計算機装置又は、計算機装置の周辺装置を含むものである。
【0017】
クロックオブジェクトは、メッセージング又は非メッセージング環境のホスト上に直接実装するような、他の環境や任意の電子装置上に実装することも可能である。クロックオブジェクトは、通信チャネル、データバス、あるいは他の直接的あるいは間接的な接続やデータベースを介してアクセスすることができる。
【0018】
一実施例において、クロックオブジェクトは、時間記録と時間に関する他の情報を格納した、テーブル又は他のデータベースを保持している。周辺装置は、任意の数のクロックオブジェクトを含むことが可能であるが、通常は、一つのオブジェクトがデフォルトクロックオブジェクトとして割り当てられている。
【0019】
クロックオブジェクトは、例えば、以下の2つの時間マーカーを用いて、日付と時刻を追跡する。
ExactTimeと称する、64ビットのSNTPクロックタイムフィールド(IETF RFC 2030準拠)
LagTimeと称する、64ビットのSNTPクロックタイムエラーフィールド
ここで、SNTPとは、“シンプル・ネットワーク・タイム・プロトコル”を指す。他の時間フォーマット、プロトコル、基準を用いることもできる。
【0020】
クロックオブジェクトは、ホストからExactTimeを受信することにより、ホスト又はホストを介したなんらかのプロセス通信がクロックタイムのソースからクロックタイムを読み取った時刻と、ExactTimeが受信されたとの確認をクロックオブジェクトから受信したことを確認した時刻との間の時間遅れを、計測できるようになっている。次に、ホストプロセスは、LagTimeをクロックオブジェクトに送り、クロックオブジェクトは、LagTimeを受信して、ExactTimeとLagTimeとを永続的に記録する。このようにして、クロックオブジェクトは、ExactTimeについての数値を知り、LagTimeを介して、大まかではあるが、エラーについても把握することが可能である。オプションとして、特定の環境に対応するために、ホストは、この操作を繰り返し、平均の遅れ時間あるいは最大限の遅れ時間を提供することができることは明白である。
【0021】
クロックオブジェクトは、高信頼クロックソース(HighTrustSource)から受信した時刻と、低信頼クロックソース(LowTrustSource)から受信した時刻とを区別する能力も備えている。高信頼クロックソース(HighTrustSource)は遠隔にあるものでもよいが、強固に保護された時間のソースであり、低信頼クロックソース(LowTrustSource)は近隣にあるものであるが、ローカルのパソコン(PC)クロックなどの、強固には保護されていない時間のソースである。
【0022】
本発明の一実施例において、クロックオブジェクトは、高信頼(HighTrust)ソースが、信頼度はより高いが、長い遅れ時間(LagTime)をもつ時刻を提供することを仮定しているため、クロックオブジェクトは、高信頼(HighTrust)ソースを用いて、低信頼(LowTrust)のExactTime中のエラーをある範囲に留める。このようにして、低信頼(LowTrust)であるが正確な時刻を検出して用いることが可能となる。多くの場合、低信頼(LowTrust)ソースは、高信頼(HighTrust)ソースよりも時間分解能は大きいが、より正確で信頼性の高い時刻を提供する。しかし、高信頼(HighTrust)ソースは、現在の相対時間については、より信頼できるものとなっている。
【0023】
以下で詳細に説明するように、クロックオブジェクトは、低信頼(LowTrust)のExactTimeと高信頼(HighTrust)のExactTimeとの両者、高信頼(HIghTrust)の制限範囲をもたない低信頼(LowTrust)のExacttime、または高信頼モード(HighTrustMode)及び低信頼モード(LowTrustMode)と呼ばれるクロックオブジェクトモードを用いる高信頼(HighTrust)のExactTimeを受信するように設定されている。
【0024】
クロックオブジェクトは、さらに、タイマーモード(TimerMode)とクロックモード(ClockMode)という2つの時間モードを備え、装置のリセットの後に時間が設定されたものであるか、クロックオブジェクトに設定時間が与えられていないかどうかを区別する。リセットの後では、(装置のリセットや電源切断の際に、時間の進行と時間情報を保持するためのバックアップバッテリを、装置が含んでいない場合には)クロックオブジェクトは、タイマーモード(TimerMode)になる。タイマーモード(TimerMode)では、ExactTimeは、時間が更新されるが、リセットの後であるため、取り出された時刻値は絶対値としては信頼できないことを、その読み値は示すことになる。
【0025】
低信頼タイム(LowTrustExactTime)と高信頼タイム(HighTrustExactTime)に加え、クロックオブジェクトは、単調進行カウンタを独立して保持しており、このカウンタは、クロックタイムがクロックオブジェクトから読み取られる毎に、そのカウンタ数値が更新される。一実施例では、このカウンタは、単調進行タイム(MonotonicTime)と呼ばれる値を有する64ビットの永続カウンタを含んでいる。単調進行タイム(MonotonicTime)は、“単調”であり、リセット又はリブートがあっても、進行とともに増分(あるいは漸減)する値を含んでいる。従って、クロックタイムの各読み値は、現在のクロックタイム(ExactTime)に加え、フォレンジックの記録などで、イベントを順序付けるために用いることが可能な一意の単調値を提供する。単調進行タイム(MonotonicTime)は、均一あるいは不均一な増分で増分することができるが、同一の計数値を二度返すことはない。単調進行タイム(MonotonicTime)が単調に変化する(すなわち、時間の進行とともに増加あるいは減少する)限り、これらの増分は、正値又は負値である。
【0026】
単調進行タイム(MonotonicTime)は、クロックオブジェクトのExactTimeを時間的に後戻りさせることができるため、有用である。さらに、連続した読取りのスピードが時間分解能に関連した値となるように設定することにより、クロックタイムを続けて読み取り、同一のExactTime値を返すことが可能となる。これらの場合には、もしこのような方法をとらなければ、一つのイベントと他のイベント間の時間的な順序関係を、高い信頼性をもって決定することは困難となる。
【0027】
本発明の位置実施例においては、クロックオブジェクトからクロックタイムを読み出すことに応じて、クロックオブジェクトは、ExactTimeか、遅れタイム(LagTime)か、単調進行タイム(MonotonicTime)か、どの種類のクロックタイムを戻そうとしているかを示す表示を、要求元に返す。
【0028】
2.実施例
図1は、本発明の一実施例による、通信チャネル106を介して周辺装置104に接続されたホスト102を有する、複数の構成要素からなるプラットフォーム100のブロック図である。APP1(符号110)とAPP2(符号112)など、多数のホストソフトウェアアプリケーションは、ドライバ114と周辺インターフェース116とを介して、周辺装置104との間で相互にやりとりする。
【0029】
周辺装置104は、セキュリティプロバイダ(SP)120を含んでおり、これは、周辺装置の確実な信頼状態を制御するために作成されたテーブルとメソッドの組を含んでいる。一実施例では、セキュリティプロバイダ120は、完全に自己完結しており、スタンドアロンのセキュリティ領域にこれらのテーブルを有している。セキュリティプロバイダは永続的なデータとメソッド(あるいはリモートプロシージャコール)から各々構成されたオブジェクトを含んでいる。一実施例では、セキュリティプロバイダ120は、アクセス制御オブジェクト122の組と、クロックオブジェクト124とを含んでいる。セキュリティプロバイダ120へのアクセスは、例えば、2003年1月30日発行の米国特許出願公開番号US2003/0023867に記載されているように、制御される。
【0030】
ホスト102上のアプリケーションは、セキュリティプロバイダ120との通信セッションを確立することにより、クロックオブジェクト124によって保持されているクロックタイムの状態などの周辺装置104上の永続的な状態について、問い合わせを行ったり、変更を加えることができる。これらのセッションは、一つあるいはそれ以上の数のオブジェクトのメソッド(図1のコネクタ130)を実行する。ホスト102は、特定のインターフェース116のインターフェースコマンドを用いてセッションをオープンすることにより、セキュリティプロバイダ120との間で通信を行う。単純な場合では、ホスト102は、周辺装置が直接接続されたプラットフォームホストである。より一般的な場合では、ホスト102は、中間的なプラットフォームホストとの間で通信を行う他のプラットフォームであり、このプラットフォームホストは、ネットワークを介して周辺装置104にセッションストリームを中継する。通信セッションと、セキュリティプロバイダ120のセキュリティ及びアクセス制御機能については、前述の相互参照した米国特許出願に、詳細に記載されている。
【0031】
一つあるいはそれ以上の数の実施例において、クロックオブジェクト124は、周辺装置104のファームウェア内に、例えば、セキュリティプロバイダ120のアクセス制御とセキュア/非セキュアメッセージングシステムを実装するファームウェアの一部として、実装されている。図1に示した実施例は、周辺装置104のセキュリティとアクセス制御機能に関して記載されているものであるが、クロックオブジェクト124は、任意の電子装置とともに、セキュリティあるいはアクセス制御機能の一部として、あるいはその外部にあるものとして用いることができる。本発明の他の実施例では、クロックオブジェクト124は、任意のセキュリティアクセス制御あるいはメッセージングシステムとは関係のない分離した機能として実装することも可能である。
【0032】
一実施例では、クロックオブジェクト124は、永続的なデータと(リモートプロシージャコールなどの)メソッドとを集めたものを含んでいる。データは、一つあるいはそれ以上の数のテーブル又は他のデータベース形式で保持されている。メソッドは、例えば、テーブルや他のオブジェクトに対して操作を行う手続きである。(ホスト102上のアプリケーションなどの)呼び出し側は、メソッドのパラメータ値のリストを、クロックオブジェクト124に送り、クロックオブジェクトは、結果値のリストと、それに続けて、例えば、状態コードとを返す。
【0033】
クロックオブジェクト124は、クロック情報データと、データに対して操作を行うメソッドとを集めたものを含んでいる。さらに、クロックオブジェクトは、例えば、クロック機能を実装し、クロックデータを格納し、メソッドを実行するための、任意のハードウェア、ソフトウェアあるいはファームウェアの全て又は一部を含む。
【0034】
図1に示した実施例では、クロックオブジェクト124は、クロックテーブル140を
揮発性メモリ142内に保持し、それに対応する永続的なクロックテーブル144を不揮発性メモリ146に保持している。例えば、周辺装置が、ディスク駆動装置などのデータ格納装置を含んでいる場合には、揮発性メモリ142は、駆動プロセッサ150が用いるランダムアクセスメモリ(RAM)を含み、不揮発性メモリ146は、データ格納ディスクの媒体を含むことが可能である。しかし、他の実施例では、他の任意の種類の揮発性メモリと不揮発性メモリを用いることも可能である。
【0035】
以下で詳細に説明するように、クロックテーブル140、144は、ホスト102上のアプリケーションによって変更されたり読取られるクロック情報を格納する。例えば、アプリケーションAPP1(符号110)は、ローカルあるいは遠隔に存在する(ローカルPCクロックなどの)低信頼クロックソース160あるいはローカルあるいは遠隔に存在する高信頼クロックソース162から、タイム値を読取ることにより、LowTrustExactTime又はHighTrustExactTimeを設定することができる。高信頼クロックソースの一例としては、例えば、有線あるいは無線の、ローカルあるいは広域ネットワークを介して、ホスト102によって読取られるSNTPクロックソースがある。ローカルの低信頼クロックソース160は、即座に利用可能で正確ではあるが、信頼できないLowTrustExactTimeを提供し、高信頼クロックソース162は、正確さには及ばないものの、信頼性の高いHighTrustExactTimeを提供する。高信頼クロックソース162は、通常、ローカルの低信頼クロックソース160よりも長いアクセス時間を有している。
【0036】
クロックオブジェクト124で保持される低信頼又は高信頼ExactTimeを設定する際には、ホストアプリケーションAPP1は、遅れタイマー170を起動し、次に、クロックソース160又は162から、ExactTimeを読取る。ホストアプリケーションは、読取ったタイム値を、例えば、“クロック設定(ClockSet)”メソッド呼び出しのパラメータとしてクロックオブジェクト124に送る。クロックオブジェクト124は、そのタイム値を受信し、ホストアプリケーションAPP1に対して、クロックタイムをクロックテーブル140に記録したことを応答する。クロックオブジェクト124がExactTime値を受信したことの確認をホストアプリケーションAPP1が受け取ると、ホストアプリケーションは、遅れタイマー170の値“遅れ時間(LagTime)”を読取る。遅れ時間(LagTime)値は、クロックオブジェクト124によって記録されたExactTimeが実際より遅れている時間の最大値を表しており、その値は、クロックデータベースにExactTimeを正しく書き込む時の遅延である。遅れ時間(LagTime)は、最悪の場合の遅れエラーを上回るが、本発明の一つあるいはそれ以上の数の実施例においては、より詳細な評価を行う必要はない。
【0037】
ホストアプリケーションは、他のメッセージのパラメータとして、遅延時間(LagTime)値を、クロックオブジェクト124に送る。クロックオブジェクト124は、それを受信すると、揮発性メモリ上のクロックテーブル140を、不揮発性メモリ上のクロックテーブル144に転送することにより、(ExactTime)と遅延時間(LagTime)を永続的に記録する。遅延時間(LagTime)値は、クロックオブジェクト124によって格納されたExactTimeを修正したり、クロックエラーの計測や制限を設けるために用いられる。
【0038】
ホストアプリケーションは、実装の違いによって、クロックソース160又は162から時間を読取る前か後のどちらで、クロックオブジェクト124を用いてメッセージングセッションを開くことを選択してもよい。最も近い時間を求めることが望まれる場合には、ホスト側のプロセスは、ソースクロックタイムを読取して送る前に、クロックオブジェクト124でセッションを開く。しかし、時間は、ローカル又は広域ネットワークを経由して取得する必要があり、この場合には、セッションは、時間を更新する前に、セッション自身の認証を行ったり、クロックオブジェクト124によりセッションのセキュリティを確保する必要があることが原因の一部となって、より長い遅れ時間が発生する。
【0039】
静的な(ExactTime)値が記録されると、記録された時間が、LowTrustExactTimeであるか、HighTrustExactTimeであるかにかかわらず、クロックオブジェクト124は、タイマ180を用いて、その現在のクロックタイムの計測値を増分させる。周辺装置104に電源が入ると、タイマ180は、格納されたExactTime値からの時間進行について正確な計測を継続する。
【0040】
さらに、クロックオブジェクト124は、単調進行タイム(MonotonicTime)と呼ばれる独立した単調進行カウンタ値を、揮発性メモリ上のクロックテーブル140に保持する。クロックオブジェクト124は、ホストアプリケーションあるいは他のオブジェクト又はプロセスが、クロックオブジェクト124から時間を読取るごとに、単調進行タイム(MonotonicTime)を増分させる。以下に詳細に説明するように、クロックオブジェクト124は、不揮発性メモリ上のクロックテーブル144に単調進行タイム(MonotonicTime)を定期的に格納し、単調に増加するカウンタ値を、常に、提供できるようにする。
【0041】
リアルタイムクロック190が、周辺装置104で利用可能である場合には、クロックオブジェクト124は、その値を、低信頼クロックタイム値あるいは高信頼クロックタイム値として適宜利用することが可能である。また、クロックオブジェクト124は、リアルタイムクロック値を、例えば、ホストアプリケーションによって行われるプロシージャを介して設定することも可能である。
【0042】
他の実施例において、クロックオブジェクト124のタイマや他の支援機能は、ハードウェア、ファームウェア、ソフトウェアあるいはそれらの組み合わせによって実装することが可能である。
【0043】
3.クロックテーブル
本発明の一実施例において、テーブルは、一般的に、名前が付けられた列と、アドレス指定可能な行とを含んでいる。行と列が交叉する場所には、セルが存在する。一つの列内の全てのセルは、同一の種類のデータを有している。しかし、本願明細書と特許請求の範囲で用いられる“テーブル”という用語は、メモリ中のデータの2つあるいはそれ以上の数のフィールドを関連付けるために用いられる、任意のデータ構造あるいは配置を含むものとなっている。テーブルの“列”と“行”は、フィールドが格納されているメモリセルの物理的な配置を必ずしも限定するものではないが、フィールド間を関連付ける方法を指すものであり、これらの用語“列”と“行”は、入れ替えて使うことが可能である。
【0044】
一実施例では、クロックテーブル140、144は、単一の列を有している。表1は、本発明の一実施例における、クロックテーブル140、144の列の記載例を示すものである。
【表1】
【0045】
上記の表では、データ種類“ブール値”は、1バイトの符号なし整数、uinteger{1}であり、例えば、“偽”の場合は値が0で、“真”の場合は値が1となる。これに代えて、1ビットの値を用いることも可能である。データ種類“uidref{Authority}”は、特定のアクセス制御の権限を識別するための一意の識別子であり、図1のアクセス制御オブジェクト122によって保持され、高信頼タイム又は低信頼タイムを設定することによるものである。データ種類“clock_kind”は、enum{Timer,Low,High,LowHigh}の形式を有している。これらの形式のひとつは、この列の中で列挙され得る。データ形式“clock_time”は、typeOr{trusted:sntp_time,monotonic:uinteger{8}}の形式を有している。ホストが、電源起動からの信頼できる時間(LowTrust又はHighTrust)を与えた場合には、“信頼された”クロックタイムが用いられ、これは、sntp_time形式を有する。それ以外の場合は、単調積算カウンタ値が用いられ、これは、符号なしの8バイトの整数である。
【0046】
HaveHighフィールドは、高信頼タイム値が有効であるかどうかを示すものである。この値が真である場合は、HighByWho、HighSetTime、HighInitialTimer及びHighLagTimeの各フィールドが意味を持つものとなる。TrustModeがLowならば、例えば、この値は偽でなければならない。
【0047】
同様に、HaveLowフィールドは、信頼タイム値が有効であるかどうかを示すものである。この値が真である場合は、LowbyWho、LowSetTime、LowInitialTimer及びLowLagの各フィールドが意味を持つものとなる。TrustModeがHighならば、例えば、この値は偽でなければならない。
【0048】
HighSetTime及びLowSetTimeは、ホストから受信したHighTrustExactTimeとLowTrustExactTimeに対応しており、これらは静的な時間値である。HighInitialTimerとLowInitialTimerは、HighSetTimeとLowSetTimeの値が設定された時点でタイマ180から与えられる“timer()”の各値に対応している。これらの値のいずれかがホストで設定される時点で、クロックオブジェクトは、timer()の静的な値を、HighInitialTimer又はLowInitialTimerの各フィールドに記録する。
【0049】
ホスト遅れタイマ170によって計測された、高信頼クロックソースと低信頼クロックソースに関する遅れ時間は、HighLag及びLowLagの行に、各々、格納される。これらの遅れ時間は、一般的に、各クロックソースから各ExactTimesを読取ってから、対応する設定タイムをクロックテーブルに記録するまでの遅延を表している。
【0050】
揮発性メモリ上のクロックテーブル140(RAM内)のMonotonicBaseの行に格納された値は、揮発性MonotonicBaseと呼ばれるが、アプリケーション、オブジェクトあるいは他のプロセス又は装置がクロックオブジェクト124から時間を読取る毎に、指定された均一あるいは不均一な増分で増分する。各読取りごとに、揮発性MonotonicBaseの値が、MonotinicTimeとして、要求元に返される。
【0051】
一実施例では、MonotonicBaseは、それが用いられる電子装置が使用される期間内に、単調進行カウントが最大カウントに到達することがないように、十分なビット数を有している。例えば、MonotonicBaseは、64ビット長である。しかし、他の実施例では、このビット数よりも多いビット数や少ないビット数を用いることも可能である。
【0052】
MonotonicReserveの値は、クロックオブジェクト124が、そのコンテンツ、特に、揮発性MonotinicBaseの値を不揮発性メモリ146内のクロックテーブル144に複写あるいは保存する揮発性MonotonicBaseを増分させる回数の単位で期間を、決定する。従って、MonotonicReserveが揮発性MonotinicBaseを増分する毎に、不揮発性MonotinicBase値は更新される。これにより、カウント値の増分が行われることを確保しながら、メインメモリへの書込み回数を最小にする。クロックオブジェクトは、不揮発性メモリへ最新値を保存して、それ以降の、揮発性MonotonicBaseの増分の総回数の最新値を、MonotinicIncrementと称して、それを監視する。MonotonicIncrementがMonotonicReserve値に達した時に、クロックオブジェクトは、揮発性メモリ上のMonotonicBaseを不揮発性メモリ上のクロックテーブルに書き込む。
【0053】
例えば、リセット又は電源が落とされることにより、揮発性メモリ上のMonotonicBaseの前回の値は消失する。しかし、電源が入ると、クロックオブジェクトは、揮発性メモリ上のクロックテーブル140のMonotonicBaseの行に、少なくとも保存された、不揮発性MonotonicBaseとMonotonicReserve値の合計と等しい値を書き込む。これにより、揮発性MonotonicBaseの新しい値が、少なくとも、リセットの前に保存された次回の最新値と同じ程度となることが保証される。最新の永続値が不揮発性メモリ上のクロックテーブルに保存されているため、揮発性MonotonicBase値は、MonotonicReserveを上回る値にまでは増分することはない。従って、揮発性メモリ上のMonotonicBase値は、MonotonicReserve値によって値が飛ぶことがあっても、常に増加することが保証されている。その後は、クロックオブジェクトからクロックタイムを読取っても、同一のMonotonicTime値が返されることはない。
【0054】
他の実施例では、単調進行する値は、他の方法で扱うものであってよい。例えば、不揮発性メモリへの保存の際に、保存されたMonotonicBaseは、MonotonicReserveによって事前に増加させておくことが可能である。リセット後に、この保存された値を、揮発性メモリ上のMonotonicBaseに、直接書き込むことも可能である。単調に増加する(あるいは、場合によって減少する)カウントを確実に提供するために、他の処理を用いることも可能である。
【0055】
このように、クロックオブジェクトは、以下の制約条件を保持している。
0 ≦ MonotonicIncrement ≦ MonotonicReserve,揮発性MonotonicBase = 不揮発性MonotonicBase+MonotonicIncrement
ここで、MonotonicIncrementは、不揮発性メモリへの最後の保存以降の、MonotonicBaseを増分させる回数の合計値である。
【0056】
4.クロックメソッド
このセクションは、ホストアプリケーション(又は他のプロセス、オブジェクト、装置)からコールされ、クロックオブジェクト上で実行あるいはクロックオブジェクトにより実行されるメソッドあるいはプロセスの例を示すものである。メソッドとは、ホストアプリケーションが実行しようとする、クロックオブジェクトなどの周辺装置のリソースや特徴を活用する行為である。
【0057】
4.1 クロック取得(GetClock)メソッド
クロック取得(GetClock)メソッドは、現在時刻に関する情報を読取るために用いられ、以下の形式を有している。
TableName.GetClock[]
=>
[Kind:clock_kind,ExactTime:clock_time,
LagTime:clock_time,MonotonicTime:
clock_time]
【0058】
第一の表現は、所望するクロックテーブル名称(図1のクロックテーブル140の名称)を表し、クロック取得(GetClock)メソッドを指定するものである。“=>”の後に続く表現は、クロックオブジェクトからホストに返される結果を表すものである。
【0059】
結果は、4つのパラメータ、データ種類が“clock_kind”である“Kind”と、データ種類が“clock_time”である“ExactTime”と、データ種類が“clock_time”である“LagTime”と、データ種類が“clock_time”である“MonotonicTime”である。他の実施例では、これらのパラメータのうち一つあるいはそれ以上の数のパラメータを、一つあるいはそれ以上の数の分離したメッセージに含めて返すことも可能である。
【0060】
クロックオブジェクトが、クロック取得(GetClock)メソッドコールを受け取ると、クロックオブジェクトは、その揮発性メモリ上のクロックテーブルを読取る。もし、HaveLowが真である場合は、結果は、[Low,Lowtime,LowLag,MonotonicTime]となる。もし、HaveHighが真である場合は、結果は、[High,HighTime,HighLag,MonotonicBase]となる。それ以外の場合は、結果は[“timer”,timer(),0,MonotonicBase]となる。他の実施例においては、他のプライオリティで実行できる。
【0061】
本実施例では、クロック取得(GetClock)メソッドコールは、クロックテーブルとTrustModeの内容に応じて、2つの仮想変数、HighTimeかLowTimeのいずれかを返す。クロックオブジェクトは、以下の式により、これらの変数を計算する。
HighTime=HighSetTime+(timer()―HighInitialTime)
LowTime=LowSetTime+(timer()―LowInitialTime)
【0062】
クロックオブジェクトは、タイマ180とHighInitialTimeの値を読取り、ホストにより初期設定されクロックテーブルに格納されたHighSetTime(HighTrustExactTime)からの経過時間を決定する。これに代えて、タイマ180はホストがHighSetTimeを設定する毎にリセットされ、ホストにより読取られる際に単純にHighSetTimeに加算されてもよい。さらに他の実施例では、高信頼設定時間と低信頼設定時間のために、分離した複数のタイマを設けることも可能である。
【0063】
種類がclock_kindのパラメータは、結果として返されるExactTimeクロックタイムの信頼レベルを表すものとして用いられる。これに代えて、クロックオブジェクトは、HighTimeとLowTimeとの両方を、これらのクロックタイムのどちらが有効であるかを示す有効フラグとともに返すことも可能である。有効フラグは、クロックタイムを求める基準となるクロックソースの信頼レベルを表す指標としても用いられる。
【0064】
4.2 リセットクロック(ResetClock)メソッド
リセットクロック(ResetClock)メソッドは、以下の形式を有している。
TableName.ResetClock[]
=>
[Result:boolean]
【0065】
本メソッドは、クロックをリセットし、クロックオブジェクトをタイマーモードに設定するものである。本メソッドは、周辺装置がリセットされたり、ホストからコールされた時に、自動的にコールされる。
【0066】
本メソッドがコールされると、クロックオブジェクトは、以下の属性を設定する。
TrustMode=Timer
HaveHigh=0(すなわち、偽)
HaveLow=0(すなわち、偽)
揮発性MonotonicBase=不揮発性MonotonicBase+MonotonicReserve
【0067】
さらに、メモリ変数MonotonicIncrementが0に設定される。このメモリ変数は、不揮発性MonotonicBaseの最新値が保存された以降の揮発性MonotonicBaseの増分回数を表すものである。
【0068】
この設定操作により、揮発性MonotinicBaseが(リセットクロック(ResetClock)メソッドコールにより、MonotonicReserve値に達するまで、一気に増加することがあっても)常に増加することが保証される。
【0069】
クロックオブジェクトによって返されるブール値の結果は、リセットクロック(ResetClock)メソッドが実行されたかどうかを示すものである。
【0070】
4.3 SetClockHighメソッド
SetClockHighメソッドは、以下の形式を有している。
TableName.SetClockHigh[ExactTime:sntp_time,LagTime:sntp_time]
=>
[Result:Boolean]
【0071】
本メソッドは、図1のソース162などの高信頼ソースをもとに時間を設定するために、ホストによって用いられる。
【0072】
図2は、SetClockHighメソッドが動いている間に、ホストと周辺装置の間でやりとりされるメッセージストリームの例を示す図である。
【0073】
HighTrustExactTimeを設定すると、ホストアプリケーションは、図2のステップ200で、遅れタイマ170(図1)を起動し、クロックソース162からExactTimeを読取り、ステップ201で、上述した形式のパラメータとして、ExactTime値をクロックオブジェクト124に送る。この時点で、LagTimeパラメータは、その値が未定であるため、送られるパラメータの中には含まれていないか、パラメータにヌル値に設定されている。ステップ202で、クロックオブジェクト124は、ExactTime値を受け取り、その値を、揮発性メモリ上のクロックテーブル140のHighTimeの列に格納し、さらに、ステップ203で、クロックタイムが記録されたことをホストアプリケーションに対して通知する。ブール値の“Okay”結果には、操作が成功した場合には真が設定され、操作が失敗した場合には偽が設定される。また、ステップ204で、クロックオブジェクトは、タイマ180の値を読取り、その値を、クロックテーブルのHighInitialTimeの列に記録する。クロックオブジェクト124がExactTime値を受け取ったことを示す確認を、ホストアプリケーションが受け取ると、ステップ204で、ホストアプリケーションは、遅れタイマ170の値を読取り、ステップ205で、さらなるSetClockHighメッセージのパラメータとして、LagTime値をクロックオブジェクト124に送る。クロックオブジェクトがこれを受け取ると、ステップ206で、クロックテーブルのHighLagの列に、LagTime値を格納し、HighTimeとHighLagの値を、不揮発性メモリ上のクロックテーブル144に永続的に格納する。
【0074】
本メソッドコールは、TrustModeがLowでない時のみ、受領される。このコールが受領されると、HaveHighは真に設定され、HighByWhoは、このメッセージングセッションに対する権限所有者に設定される。もし、新しい高信頼値が、以下に示す制約条件に従って、既存の低信頼値を制限することがない場合には、HaveLowは偽に設定される。
【0075】
TrustModeがLowhighであり、高信頼値と低信頼値の両方が存在する際には、低信頼値は、高信頼値に含まれていなければならない。すなわち、
LowTime ≧ HighTime
LowTime+LowLag ≦ HighTime+HighLag
【0076】
LowTime値は、時間を遡ることは許されていないため、HighTimeよりも大きな値でなければならない。また、LowLagは、HighLagよりも短くなければならないため、上記の二番目の不等式が成立しなければならない。そうでない場合には、LowTime値に問題があるということになる。
【0077】
上記の不等式のいずれか一方が真でない場合には、LowTimeが誤っている可能性があるため、クロックオブジェクトはそれを破棄し、HaveLow値を“0”(すなわち偽)に設定する。なお、これらの時間比較を行うステップを実装した場合には、timer()の値は、比較式の両辺に現れて消去されるため、その値は不要となる。
【0078】
4.4 SetClockLowメソッド
SetClockLowメソッドは、SetClockHighメソッドと似ており、以下の形式を有している。
TableName.SetClockLow[ExactTime:sntp_time,LagTime:sntp_time]
=>
[Result:boolean]
【0079】
本メソッドは、図1のPCクロック160などの低信頼ソースをもとに時間を設定するために用いられる。
【0080】
このメソッドのコールは、上述のSetClockHighと同様の方法でストリーム化されている。ホストは、遅れタイマ170を用いてLowLag時間を計測しながら、LowTrustExactTimeをクロックオブジェクトに送る。クロックオブジェクトは、クロックテーブルのLowTimeの列のLowTrustExactTimeを記録し、タイマ180を読取り、その値をクロックテーブルのLowInitialTimeの列に記録する。クロックオブジェクトが、LowTimeを記録したことを確認すると、ホストは、クロックオブジェクトにLowLag時間値を送り、その値は、テーブルのLowLag列に格納される。LowTimeとLowLagの両方の値は、いずれかが不揮発性メモリ中で更新される前に、受信される。
【0081】
本メソッドのコールは、TrustModeがHighでない時にのみ受領される。もしモードがLowHighであり、HaveHighが真である場合には、上述した不等式に従って、新しい高信頼値が既存の低信頼値を制限する場合にのみ、このコールが受領される。他の実施例では、他の比較式あるいは制約式を用いることも可能である。
【0082】
このコールが受領されると、HaveLowは真に設定され、LowByWhoはこのセッションに対する権限所有者に設定される。
【0083】
4.5 ClockSetModeメソッド
本メソッドは、クロックテーブル中のTrustModeを設定し、以下の形式を有している。
TableName.ClockSetMode[Mode:Clock_kind]
=>
[Result:boolean]
【0084】
TrustModeがLowに設定されると、HaveHighは偽に設定される。TrustModeがHighに設定されると、HaveLowは偽に設定される。TrustModeがLowHighに設定されると、HaveLow及びHaveHighは真に設定される。
【0085】
4.6 RenewCounterメソッド
TableName.RenewCounter[]
=>
[Result:boolean]
【0086】
ホストは、主記憶媒体上の不揮発性メモリ上のクロックテーブルと、RAMの揮発性メモリ上のクロックテーブル内の現在値とを同期させようとする任意の時に、本メソッドをコールする。クロックオブジェクトは、現在値を不揮発性メモリに書込み、MonotonicIncrementを0に設定する。なお、本メソッドは、仮想的に変化するMonotonicTimeの値を不変のものにする。
5.結論
【0087】
このように、上述したクロックオブジェクトは、一定の電力を必要とせずに、単調にイベントを確実に順序付けるために用いられる少なくとも何らかのクロック情報を有する電子装置を提供することが可能である。クロックの時間分解能や、クロック読取りの間の遅れ、あるいは電源リセットに関わらず、クロックオブジェクトは、各クロック読取りに関する、単調に増加する一意の情報を提供する。これは、発生イベントを正確に順序付けることが重要となる、データ記録アプリケーションにおいて特に有用である。例えば、クロックオブジェクトは、否認することができない一連の発生イベントを証明するフォレンジックな記録のための、タイムスタンプを生成することが可能である。
【0088】
また、クロックオブジェクトは、クロック情報が、高信頼ソースあるいは低信頼ソースのどちらに基づいているかを表す指標を提供したり、クロックエラーやクロック情報の他の制約条件を表す指標を提供する。
【0089】
以上の説明において、本発明の様々な実施例の多くの特徴と利点について、本発明の様々な構造と機能の詳細と合わせて説明してきたが、本開示は、例示的なものであり、詳細に、特に、特許請求の範囲を表現している用語の一般的な意味の元に示された程度であれば、本発明の原理の範囲内において、構成要素の構造と配置に関する変更を加えることが可能である。例えば、本発明の範囲と主旨を逸脱することなく同一の機能性を実質的に保持しながら、クロックオブジェクトの特定のアプリケーションに応じて、特定の要素を変化させることが可能である。さらに、上述した好適な実施例は、周辺装置のためのクロックオブジェクトに関するものであるが、本発明の教示することは、本発明の範囲と主旨を逸脱することがない限り、任意の電子装置に適用することが可能であることは、当業者にとって理解されうるものである。
【図面の簡単な説明】
【0090】
【図1】図1は、本発明の一実施例における、ファームウェアが実装されたクロックオブジェクトをもつ周辺装置を有する複数の構成要素からなるプラットフォームのブロック図である。
【図2】図2は、ClockSetHighメソッドの実行中に、ホストと周辺装置との間で交換されるメッセージストリームを示す図である。
【符号の説明】
【0091】
102 ホスト
104 周辺装置
116 インターフェース
122 アクセスコントロールオブジェクト
124 クロックオブジェクト
140,144 クロックテーブル
142 揮発性メモリ
146 不揮発性メモリ
150 プロセッサ
160 PCクロック
162 高信頼クロックソース
180 タイマ
190 リアルタイムクロック
【特許請求の範囲】
【請求項1】
電子装置によって読取り可能なクロックタイムと、
前記電子装置によって読取り可能で、クロックオブジェクトからの単調進行タイムの読込みごとに増分する前記単調進行タイムと、
を含むクロックオブジェクト。
【請求項2】
請求項1記載のクロックオブジェクトにおいて、前記電子装置からのクロック読取り要求に応じて、前記クロックオブジェクトは、前記クロックタイムと前記単調進行タイムとを単一のメッセージで電子装置に返すクロックオブジェクト。
【請求項3】
請求項1記載のクロックオブジェクトにおいて、前記単調進行タイムは、前記クロックタイムとは独立しているクロックオブジェクト。
【請求項4】
請求項1記載のクロックオブジェクトにおいて、前記クロックタイムと前記単調進行タイムはともにハイブリッドタイムを形成し、前記クロックオブジェクトからの前記ハイブリッドタイムの各読取りに応じて、前記単調進行タイムは増分するクロックオブジェクト。
【請求項5】
請求項4記載のクロックオブジェクトは、さらに、
揮発性クロックデータベースであって、揮発性メモリ内に保存され、前記単調進行タイムを揮発性単調進行タイムとして保存する前記揮発性クロックデータベースと、
不揮発性クロックデータベースであって、不揮発性メモリ内に保存され、前記クロックオブジェクトは周期的に揮発性単調進行タイムを不揮発性データベースに不揮発性単調進行タイムとして格納する前記不揮発性クロックデータベースと、
を含むクロックオブジェクト。
【請求項6】
請求項5記載のクロックオブジェクトは、さらに予約値を含み、前記クロックオブジェクトは、前記揮発性単調進行タイムの変化の各予約値回数ごとに、前記揮発性単調進行タイムを前記不揮発性データベースに格納し、
前記クロックオブジェクトのリセットに対して、前記クロックオブジェクトは、前記揮発性単調進行タイムを、少なくとも、前記不揮発性単調進行タイムと前記予約値との和に設定するクロックオブジェクト。
【請求項7】
請求項1記載のクロックオブジェクトであって、さらに
クロックデータベースであって、クロックソースから受信したソースタイムを表す静的な設定時間を含むクロックデータベースと、
タイマであって、タイマ値を増分させ、前記クロックタイムは設定時間と前記タイマ値との関数である前記タイマと、
を含むクロックオブジェクト。
【請求項8】
請求項1記載のクロックオブジェクトであって、さらに、クロックデータベースを含み、該クロックデータベースは、
クロックソースから読取ったソースタイムを表す静的な設定時間であって、前記クロックタイムは、前記ソースタイムに基づく前記静的な設定時間と、
前記クロックデータベース内の前記設定時間の記録に成功した際の遅れを表す遅れ時間と、
を含むクロックオブジェクト。
【請求項9】
請求項8記載のクロックオブジェクトにおいて、前記電子装置からのクロック読取り要求に応じて、前記クロックオブジェクトは、前記クロックタイムと前記遅れ時間を前記電子装置に返すクロックオブジェクト。
【請求項10】
請求項1記載のクロックオブジェクトであって、さらに、前記クロックタイムの信頼レベルの指標を含むクロックオブジェクト。
【請求項11】
請求項1記載のクロックオブジェクトにおいて、
前記クロックタイムは、高信頼クロックタイムと、低信頼クロックタイムと、タイマー値とを含むグループから選択された少なくとも一つの種類を含み、前記高信頼クロックタイムは前記低信頼クロックタイムよりも信頼できるものであり、
前記電子装置からのクロック読取り要求に応じて、前記クロックオブジェクトは、前記高信頼クロックタイムと、前記低信頼クロックタイムと、前記タイマー値の中の少なくとも一つを、返されるクロックタイムの前記種類を表す指標とともに、前記電子装置に返すクロックオブジェクト。
【請求項12】
請求項11記載のクロックオブジェクトであって、さらに、クロックデータベースを含み、該クロックデータベースは、前記高信頼クロックタイムと前記低信頼クロックタイムを格納し、さらに利用可能であるならば、前記データベースが前記高信頼クロックタイムを含むか、データベースが前記低信頼クロックタイムを含むかを表す指標を格納するクロックオブジェクト。
【請求項13】
電子装置によって読取り可能なクロックタイムと、
クロックタイムの信頼レベルを表す信頼度指標とを含み、
前記電子装置からのクロック読取り要求に応じて、前記クロックタイムと前記信頼度指標とを前記電子装置に返すクロックオブジェクト。
【請求項14】
請求項13記載のクロックオブジェクトにおいて、
前記クロックタイムは、高信頼クロックタイムと低信頼クロックタイムとのうちの少なくとも一つの種類を含み、前記高信頼クロックタイムは前記低信頼クロックタイムよりも信頼できるものであり、
前記クロック読取り要求に応じて、前記クロックオブジェクトは、前記高信頼クロックタイムと前記低信頼クロックタイムとの少なくとも一つと、前記信頼度指標とを前記電子装置に返すクロックオブジェクト。
【請求項15】
請求項14記載のクロックオブジェクトにおいて、前記信頼度指標は、返されるクロックタイムの前記種類を表すクロックオブジェクト。
【請求項16】
請求項14記載のクロックオブジェクトであって、さらにクロックデータベースを含み、該クロックデータベースは、前記高信頼クロックタイムと前記低信頼クロックタイムを格納し、さらに利用可能であるならば、前記データベースが前記高信頼クロックタイムを含むか、前記データベースが前記低信頼クロックタイムを含むかを表す指標を格納するクロックオブジェクト。
【請求項17】
請求項13記載のクロックオブジェクトであって、さらに、
前記電子装置によって読取り可能なハイブリッドタイムを含み、該ハイブリッドタイムは、前記クロックタイムと単調進行タイムとを含み、該単調進行タイムは、前記クロックオブジェクトからの前記ハイブリッドタイムの読取りごとに増分するクロックオブジェクト。
【請求項18】
請求項17記載のクロックオブジェクトであって、さらに、
予約値と、
揮発性メモリ内に保存され、揮発性単調進行タイムとして前記単調進行タイムを格納する揮発性クロックデータベースと、
不揮発性メモリ内に保存される不揮発性クロックデータベースであって、前記クロックオブジェクトは、前記揮発性単調進行タイムの変化の回数が予約値に達するごとに前記揮発性単調進行タイムを不揮発性単調進行タイムとして前記不揮発性データベースに格納するように構成される前記不揮発性クロックデータベースと、
を含み、
前記クロックオブジェクトのリセット時に、前記クロックオブジェクトは、前記揮発性単調進行タイムを、少なくとも、前記不揮発性単調進行タイムと前記予約値との和に設定するクロックオブジェクト。
【請求項19】
請求項13記載のクロックオブジェクトであって、さらに、
クロックソースから受信したソースタイムを表す静的な設定時間と、タイマ値を増分させるタイマとを含むクロックデータベースを含み、
前記クロックタイムは、前記設定時間と前記タイマ値との関数であるクロックオブジェクト。
【請求項20】
請求項13記載のクロックオブジェクトであって、さらに、
クロックソースから受信したソースタイムを表す静的な設定時間と、クロックデータベースに前記設定時間の記録に成功した際の遅れを表す遅れ時間とを含むクロックデータベースを含むクロックオブジェクト。
【請求項1】
電子装置によって読取り可能なクロックタイムと、
前記電子装置によって読取り可能で、クロックオブジェクトからの単調進行タイムの読込みごとに増分する前記単調進行タイムと、
を含むクロックオブジェクト。
【請求項2】
請求項1記載のクロックオブジェクトにおいて、前記電子装置からのクロック読取り要求に応じて、前記クロックオブジェクトは、前記クロックタイムと前記単調進行タイムとを単一のメッセージで電子装置に返すクロックオブジェクト。
【請求項3】
請求項1記載のクロックオブジェクトにおいて、前記単調進行タイムは、前記クロックタイムとは独立しているクロックオブジェクト。
【請求項4】
請求項1記載のクロックオブジェクトにおいて、前記クロックタイムと前記単調進行タイムはともにハイブリッドタイムを形成し、前記クロックオブジェクトからの前記ハイブリッドタイムの各読取りに応じて、前記単調進行タイムは増分するクロックオブジェクト。
【請求項5】
請求項4記載のクロックオブジェクトは、さらに、
揮発性クロックデータベースであって、揮発性メモリ内に保存され、前記単調進行タイムを揮発性単調進行タイムとして保存する前記揮発性クロックデータベースと、
不揮発性クロックデータベースであって、不揮発性メモリ内に保存され、前記クロックオブジェクトは周期的に揮発性単調進行タイムを不揮発性データベースに不揮発性単調進行タイムとして格納する前記不揮発性クロックデータベースと、
を含むクロックオブジェクト。
【請求項6】
請求項5記載のクロックオブジェクトは、さらに予約値を含み、前記クロックオブジェクトは、前記揮発性単調進行タイムの変化の各予約値回数ごとに、前記揮発性単調進行タイムを前記不揮発性データベースに格納し、
前記クロックオブジェクトのリセットに対して、前記クロックオブジェクトは、前記揮発性単調進行タイムを、少なくとも、前記不揮発性単調進行タイムと前記予約値との和に設定するクロックオブジェクト。
【請求項7】
請求項1記載のクロックオブジェクトであって、さらに
クロックデータベースであって、クロックソースから受信したソースタイムを表す静的な設定時間を含むクロックデータベースと、
タイマであって、タイマ値を増分させ、前記クロックタイムは設定時間と前記タイマ値との関数である前記タイマと、
を含むクロックオブジェクト。
【請求項8】
請求項1記載のクロックオブジェクトであって、さらに、クロックデータベースを含み、該クロックデータベースは、
クロックソースから読取ったソースタイムを表す静的な設定時間であって、前記クロックタイムは、前記ソースタイムに基づく前記静的な設定時間と、
前記クロックデータベース内の前記設定時間の記録に成功した際の遅れを表す遅れ時間と、
を含むクロックオブジェクト。
【請求項9】
請求項8記載のクロックオブジェクトにおいて、前記電子装置からのクロック読取り要求に応じて、前記クロックオブジェクトは、前記クロックタイムと前記遅れ時間を前記電子装置に返すクロックオブジェクト。
【請求項10】
請求項1記載のクロックオブジェクトであって、さらに、前記クロックタイムの信頼レベルの指標を含むクロックオブジェクト。
【請求項11】
請求項1記載のクロックオブジェクトにおいて、
前記クロックタイムは、高信頼クロックタイムと、低信頼クロックタイムと、タイマー値とを含むグループから選択された少なくとも一つの種類を含み、前記高信頼クロックタイムは前記低信頼クロックタイムよりも信頼できるものであり、
前記電子装置からのクロック読取り要求に応じて、前記クロックオブジェクトは、前記高信頼クロックタイムと、前記低信頼クロックタイムと、前記タイマー値の中の少なくとも一つを、返されるクロックタイムの前記種類を表す指標とともに、前記電子装置に返すクロックオブジェクト。
【請求項12】
請求項11記載のクロックオブジェクトであって、さらに、クロックデータベースを含み、該クロックデータベースは、前記高信頼クロックタイムと前記低信頼クロックタイムを格納し、さらに利用可能であるならば、前記データベースが前記高信頼クロックタイムを含むか、データベースが前記低信頼クロックタイムを含むかを表す指標を格納するクロックオブジェクト。
【請求項13】
電子装置によって読取り可能なクロックタイムと、
クロックタイムの信頼レベルを表す信頼度指標とを含み、
前記電子装置からのクロック読取り要求に応じて、前記クロックタイムと前記信頼度指標とを前記電子装置に返すクロックオブジェクト。
【請求項14】
請求項13記載のクロックオブジェクトにおいて、
前記クロックタイムは、高信頼クロックタイムと低信頼クロックタイムとのうちの少なくとも一つの種類を含み、前記高信頼クロックタイムは前記低信頼クロックタイムよりも信頼できるものであり、
前記クロック読取り要求に応じて、前記クロックオブジェクトは、前記高信頼クロックタイムと前記低信頼クロックタイムとの少なくとも一つと、前記信頼度指標とを前記電子装置に返すクロックオブジェクト。
【請求項15】
請求項14記載のクロックオブジェクトにおいて、前記信頼度指標は、返されるクロックタイムの前記種類を表すクロックオブジェクト。
【請求項16】
請求項14記載のクロックオブジェクトであって、さらにクロックデータベースを含み、該クロックデータベースは、前記高信頼クロックタイムと前記低信頼クロックタイムを格納し、さらに利用可能であるならば、前記データベースが前記高信頼クロックタイムを含むか、前記データベースが前記低信頼クロックタイムを含むかを表す指標を格納するクロックオブジェクト。
【請求項17】
請求項13記載のクロックオブジェクトであって、さらに、
前記電子装置によって読取り可能なハイブリッドタイムを含み、該ハイブリッドタイムは、前記クロックタイムと単調進行タイムとを含み、該単調進行タイムは、前記クロックオブジェクトからの前記ハイブリッドタイムの読取りごとに増分するクロックオブジェクト。
【請求項18】
請求項17記載のクロックオブジェクトであって、さらに、
予約値と、
揮発性メモリ内に保存され、揮発性単調進行タイムとして前記単調進行タイムを格納する揮発性クロックデータベースと、
不揮発性メモリ内に保存される不揮発性クロックデータベースであって、前記クロックオブジェクトは、前記揮発性単調進行タイムの変化の回数が予約値に達するごとに前記揮発性単調進行タイムを不揮発性単調進行タイムとして前記不揮発性データベースに格納するように構成される前記不揮発性クロックデータベースと、
を含み、
前記クロックオブジェクトのリセット時に、前記クロックオブジェクトは、前記揮発性単調進行タイムを、少なくとも、前記不揮発性単調進行タイムと前記予約値との和に設定するクロックオブジェクト。
【請求項19】
請求項13記載のクロックオブジェクトであって、さらに、
クロックソースから受信したソースタイムを表す静的な設定時間と、タイマ値を増分させるタイマとを含むクロックデータベースを含み、
前記クロックタイムは、前記設定時間と前記タイマ値との関数であるクロックオブジェクト。
【請求項20】
請求項13記載のクロックオブジェクトであって、さらに、
クロックソースから受信したソースタイムを表す静的な設定時間と、クロックデータベースに前記設定時間の記録に成功した際の遅れを表す遅れ時間とを含むクロックデータベースを含むクロックオブジェクト。
【図1】
【図2】
【図2】
【公開番号】特開2007−293861(P2007−293861A)
【公開日】平成19年11月8日(2007.11.8)
【国際特許分類】
【外国語出願】
【出願番号】特願2007−114174(P2007−114174)
【出願日】平成19年4月24日(2007.4.24)
【出願人】(500373758)シーゲイト テクノロジー エルエルシー (278)
【Fターム(参考)】
【公開日】平成19年11月8日(2007.11.8)
【国際特許分類】
【出願番号】特願2007−114174(P2007−114174)
【出願日】平成19年4月24日(2007.4.24)
【出願人】(500373758)シーゲイト テクノロジー エルエルシー (278)
【Fターム(参考)】
[ Back to top ]