(58)【調査した分野】(Int.Cl.,DB名)
前記ウォッチドッグ・タイマは、前記少なくとも1つのハードウェア・プロセッサに割り当てられるプライベート・ウォッチドッグ・タイマを有する、請求項1に記載のシステム。
前記プログラマブル・ロジックは、前記プログラマブル・ロジックが前記セキュア環境へ遷移するように前記少なくとも1つのハードウェア・プロセッサを指示する場合を伝えるリセット・タイマを実現するように設定することが可能である、請求項1に記載のシステム。
前記プログラマブル・ロジックは、前記ウォッチドッグ・タイマに関連するレジスタにロードされる所定値を利用することにより、前記リセット・タイマを実現するように設定されることが可能である、請求項4に記載のシステム。
前記プログラマブル・ロジックは、前記プログラマブル・ロジックが、前記ウォッチドッグ・タイマに関連するステータス・レジスタからイベント値を取り出す場合を伝えるイベント・タイマを実現するように設定することが可能である、請求項1に記載のシステム。
前記プログラマブル・ロジックは、前記ウォッチドッグ・タイマに関連するレジスタにロードされる所定値より長い時間インターバルを利用してイベント・タイマを実現するように設定することが可能である、請求項6に記載のシステム。
前記プログラマブル・ロジックは、前記セキュア環境へ遷移し、ステータス・レジスタから前記イベント値を取り出すことを、前記プログラマブル・ロジックが前記ウォッチドッグ・タイマはゼロ値に到達していないと判断する限り、前記少なくとも1つのハードウェア・プロセッサに反復的に指示するように設定することが可能である、請求項1に記載のシステム。
取り出されたイベント値は、前記ウォッチドッグ・タイマがゼロ値に到達していないことを示す第1値、又は前記ウォッチドッグ・タイマがゼロ値に到達していることを示す第2値を含む、請求項8に記載のシステム。
取り出されたイベント値と前記所定値との比較が、前記ウォッチドッグ・タイマは前記少なくとも1つのハードウェア・プロセッサによりリセットされていないことを示す場合に、前記プログラマブル・ロジックは前記FPGAのロックダウン・プロシジャを開始するように設定することが可能である、請求項1に記載のシステム。
前記ウォッチドッグ・タイマは、前記少なくとも1つのハードウェア・プロセッサに割り当てられるプライベート・ウォッチドッグ・タイマを有する、請求項11に記載の方法。
前記セキュア環境へ遷移するように前記プログラマブル・ロジックが前記少なくとも1つのハードウェア・プロセッサに指示する場合を伝えるリセット・タイマを、前記プログラマブル・ロジックが実現するステップ;
を有する請求項11に記載の方法。
前記ウォッチドッグ・タイマに関連するステータス・レジスタからイベント値を前記プログラマブル・ロジックが取り出す場合を伝えるイベント・タイマを、前記プログラマブル・ロジックが実現するステップ;
を有する請求項11に記載の方法。
前記イベント・タイマが、前記ウォッチドッグ・タイマに関連するレジスタにロードされる所定値より長い時間インターバルを利用して実現される、請求項16に記載の方法。
前記セキュア環境へ遷移し、ステータス・レジスタから反復的に前記イベント値を取り出すことを、前記プログラマブル・ロジックが前記ウォッチドッグ・タイマはゼロ値に到達していないと判断する限り、前記少なくとも1つのハードウェア・プロセッサに反復的に指示するステップ;
を有する請求項11に記載の方法。
取り出されたイベント値は、前記ウォッチドッグ・タイマがゼロ値に到達していないことを示す第1値、又は前記ウォッチドッグ・タイマがゼロ値に到達していることを示す第2値を含む、請求項18に記載の方法。
取り出されたイベント値と前記第2所定値との比較が、前記ウォッチドッグ・タイマは前記少なくとも1つのハードウェア・プロセッサによりリセットされていないことを示す場合に、前記FPGAのロックダウン・プロシジャを開始するステップ;
を有する請求項11に記載の方法。
【発明を実施するための形態】
【0012】
具体例の方法及びシステムは、FPGA内のセキュア実行可能環境とハードウェア・セキュリティ・ソリューションとの間で通信するためのFPGA内のファームウェア・セキュリティ・インターフェースを実現することに関連する。一実施形態では、FPGAのプログラマブル・ロジック内のソフト・コア・プロセッサとして、セキュリティ・モニタが実現され、ファームウェア・セキュリティ・インターフェースはセキュリティ・モニタの1つ以上の機能を修正する。セキュリティ・モニタに対する修正は、FPGAがセキュリティ環境を起動することを保証するためにFPGA内でタイマ「ハートビート(heartbeat)」を設定すること、及びそのような環境の起動にFPGAが万一失敗した場合にアラームを発動ることを含む。
【0013】
明示的に別意に言及されない限り、コンポーネント及び機能は選択的であり、組み合わせられても良いし或いは細分されても良く、オペレーションは順序を変更しても良く、組み合わせられても良いし或いは細分されても良い。以下の記載では、説明の目的で多くの具体的な詳細が実施例の十分な理解をもたらすために述べられる。しかしながら、本願の対象の事項はこれらの具体的な詳細によらずに実施されても良いことが、当業者には明らかであろう。
【0014】
図1はセキュア及び非セキュアな仕方で動作するように構成されるFPGA102を示す実施例によるブロック図である。
図1に示されるように、セキュアFPGA102は、クロック生成回路104と、アプリケーション・プロセッサ・ユニット106と、プログラマブル回路108と、メモリ・インターフェース110とを含む。更に、セキュアFPGA102は、マシン読み取り可能なメモリ112に通信可能に結合される。
図1はセキュアFPGA102がコンポーネント104-112を含むことを示しているが、当業者は、セキュアFPGA102が代替的な又は相違するコンポーネントを更に含んで良いことを認めるであろう。本開示により修正されて良いセキュアFPGA102の一例は、「Zynq-7000 SoC」というFPGAファミリであり、カリフォルニア州サンノゼに所在するザイリンクス社(Xilinx)から入手可能である。
【0015】
クロック生成回路104は、セキュアFPGA102内の1つ以上のタイマに関してクロック信号を生成するように構成される。一実施形態において、クロック生成回路104は、セキュアFPGA102に結合される位相シフト入力ピンに応じてクロック信号を生成し、クロック信号はセキュアFPGA102の他のコンポーネントに対するリファレンス信号として役立つ。特に、一実施形態では、このリファレンス・クロック信号は、アプリケーション・プロセッサ・ユニット(APU)106に通信可能に結合される位相ロック・ループ(PLL)のようなセキュアFPGA102の様々なセクションにルーティングされる。クロック信号は、以後APU106のCPU114,116に分配され、ウォッチドッグ・タイマ118,120により参照される。更に、クロック信号はプログラマブル・ロジック108に提供され、以下で更に説明されるような様々なタイミングの目的で使用される。
図1は、クロック生成回路104のクロック信号がシステム・バス132を介して分配されることを図示しているが、クロック信号は、APU106及びプログラマブル・ロジック108の対応する入力ピンに(直接的又は間接的に)APU106の対応する入力ピンを接続する銅線により分配されても良い。
【0016】
APU106は、第1CPU114と、第2CPU116と、第1ウォッチドッグ・タイマ118と、第2ウォッチドッグ・タイマ120と、汎用インタラプト・コントローラ(GIC)122とを含む。APU106は、セキュアFPGA102にアクセス可能なソフトウェア及びファームウェアを実行するように構成される。FPGA102に関するAPU106の一例は、「デュアルARM Cortex-9 APU」であり、これはザイリンクス社による「SoC FPGA」の「Zynq-7000」ファミリ・シリーズ内にある。
【0017】
セキュアFPGA102は「アーム・トラストゾーン・テクノロジ(ARM TrustZone technology)」とともに構成され、これはカリフォルニア州サンノゼに所在するアーム社により開発されている。当業者に知られているように、「トラストゾーン」は、プロセッサ、メモリ、及びペリフェラルをカバーする「ARM SoC」に対する一群のハードウェア・セキュリティ拡張である。「トラストゾーン」により、セキュアFPGA102の様々なコンポーネントは、セキュア環境と非セキュア(例えば、ノーマルな)環境とに区分けされることが可能である。更に、非セキュアな環境内のコンポーネントは、セキュアな環境内のコンポーネントに直接的にはアクセスできず、そうではなくリクエストを通じて間接的にセキュアな環境へアクセスできるに過ぎない。一例として、セキュアFPGA102にアクセス可能なマシン読み取り可能なメモリは、セキュア・メモリと非セキュア・メモリとに区分けされることが可能である。別の例として、以下詳細に説明されるように、セキュアFPGA102は、セキュア・サービス又は保護されたハードウェア・リソースに対するリクエストを取り扱うためのセキュア・オペレーティング・システムと、非セキュアなタスクを取り扱うための非セキュア・オペレーティング・システムとを実行して良い。
【0018】
更に、各々のCPU114,116は「ARMトラストゾーン拡張」とともに構成され、それにより、指定されたCPUは、セキュア環境又はノーマル環境(即ち、非セキュア環境)の何れかで動作するように指示されることが可能である。CPUが動作する環境は、システム・バス132により伝えられるNSビットにより示される。CPUがセキュア環境内にある場合、CPUは、保護されたコンポーネント及びセキュアFPGA102のリソースに対するアクセス権を有する。非セキュアCPUにより実行されるプロセスが、セキュア環境内のリソースに対するアクセスを要求する場合、非セキュアCPUは、セキュア・リソースに対するアクセスを要求するために特定のコール(a specific call)をセキュアCPUに対して行う必要がある。一実施形態では、何れかのCPU114,116が、セキュア環境に遷移するように指示されても良い。この実施形態では、CPU114又はCPU116が、セキュア環境内で1つ以上のオペレーションを実行するように指示されて良い。代替的な実施形態では、何れかのCPU114,116が、セキュア環境と非セキュア環境との間で遷移することに尽力する。
【0019】
APU106のCPU114,116は、(i)外的な中断ハンドラ、(ii)インタラプト・リクエスト(an interrupt request:IRQ)、(iii)ファースト・インタラプト・リクエスト(a fast interrupt request:FIQ)、又は(iv)非セキュア環境からのセキュア・モニタ・コール(a Secure Monitor Call:SMC)を介する4通りの方法のうちの何れかにより、ノーマル環境からセキュア環境へ遷移しても良い。従って、CPU114,116の各々はインタラプト・インターフェース(図示せず)を介してGIC122に通信可能に結合される。GIC122は、プログラマブル・ロジック108のようなセキュアFPGA102の様々なコンポーネント及びペリフェラルから到来するIRQs及びFIQsを処理する(この点については後述される)。FIQ及びIRQ間の相違は、一般にFIQにはIRQより高い優先度が与えられていることであり、それにより、CPUは、IRQに応対する前にFIQに応対し、場合によってはIRQを無視しても良い。
【0020】
更に、各々のCPU114,116は対応するプライベート・ウォッチドッグ・タイマ118,120を有し、これらのタイマには、値がゼロに到達するまでデクリメントされる或る値がロードされることが可能である。特に、各々のウォッチドッグ・タイマ118,120は、対応するウォッチドッグ・タイマに値をロードするロード値レジスタを含む。ウォッチドッグ・タイマ118,120は、ウォッチドッグ・タイマがゼロに到達した場合にロード値レジスタに値を自動的にロードするように構成されることが可能であり、或いは、ウォッチドッグ・タイマがゼロに到達したことを示すイベント・フラグ(例えば、ステータス・レジスタ)を設定することが可能である。ウォッチドッグ・タイマがイベント・フラグを設定するように構成される場合、ウォッチドッグ・タイマはその後にそれがゼロに到達したことを示すインタラプト(例えば、IRQ又はFIQ)をGIC122へ送信する。従って、GIC122は、ウォッチドッグ・タイマ・インタラプトにより指示されるように、指定されたCPUへ、受信したウォッチドッグ・タイマ・インタラプトを連絡する。以下で説明されるように、ウォッチドッグ・タイマ・インタラプトは、各ウォッチドッグ・タイマがリセットされたか否かを示すことが可能である。
【0021】
プログラマブル・ロジック108は、システム・バス132及び専用の通信ライン134によりAPU106に通信可能に結合される。システム・バス132は、セキュリティ・モニタ128から1つ以上のCPU114,116へ連絡される指示の処理を促す。これに対して、専用通信ライン134は、プログラマブル・ロジック108からGIC122へ連絡されるインタラプト・リクエスト及びファースト・インタラプト・リクエストを処理する。
【0022】
一実施形態では、プログラマブル・ロジック108の一部分は、セキュリティ・モニタ128として動作するように構成される。セキュリティ・モニタ128は、セキュアFPGA102のセキュア・ステータスを独立して操作及び監視するように構成される「ソフト・コア(soft core)」プロセッサである。当業者に知られているように、ソフト・コア・プロセッサは、論理合成(logic synthesis)を利用して実現されるマイクロプロセッサ・コアである。ソフト・コア・プロセッサは、ハイ・エンド及びコモディティ双方の多様性を含む、プログラマブル・ロジック(例えば、ASIC、FPGA、CPLD)を含む様々な半導体デバイスにより実現されることが可能である。セキュアFPGA102により実現されても良いセキュリティ・モニタ128の一例は、ザイリンクス・セキュリティ・モニタIPコアであり、これは完全なプレイス・アンド・ルート・デザイン・ファイル(a fully placed-and-routed design file)として入手可能である。
【0023】
従来の利用法では、セキュリティ・モニタ128は、セキュアFPGA102のコンポーネントの動作温度や、セキュアFPGA102により受信されるビットストリームのような、FPGA102のロジック・エレメント及びソフトウェアを監視する。しかしながら、デフォルト・コンフィギュレーションで定められるように、セキュリティ・モニタ128は、セキュア環境が実際にセキュアFPGA102により実行されるか否かを監視しない。本開示で提供されるように、カスタム・セキュア・ロジック130は、この特徴を含むようにセキュア・モニタ128の機能を拡張する。
【0024】
従って、カスタム・セキュア・ロジック130は、セキュア環境の実行を、1つ以上のCPU114,116により適切に監視するために、セキュア・モニタ128に関する追加的なインターフェース及び機能を決定する。一実施形態では、カスタム・セキュア・ロジック130により決定されるインターフェースは、インタラプト・インターフェース、ウォッチドッグ・タイマ・インターフェース、システム・バス・インターフェース、及びCPUインターフェースを含む。この実施形態はこれら4つのインターフェースを含むが、セキュアFPGA102及び/又はカスタム・セキュア・ロジック130の代替的な実現は、より少ない代替的なインターフェースを含んでも良い。そのような代替的な実現は、本開示の範囲内に該当するように想定されている。
【0025】
一実施形態では、インタラプト・インターフェースは、セキュリティ・モニタ128と汎用インタラプト・コントローラ122との間の通信を促進する。特に、インタラプト・インターフェースは、GIC122に伝えられるインタラプトを生成するために、セキュリティ・モニタ128へ、パラメータ及びファンクション・コールを提供する。以下に説明されるように、セキュリティ・モニタ128はGIC122へインタラプトを伝え、GICはセキュア環境へ遷移することをCPU116に指示する。インタラプト・インターフェースにより規定されるパラメータの具体例は、以下のものに限定されないが、CPU116のインタラプト・レジスタ、GIC122がセキュア・インタラプトをCPU116へ合図するか否かを示すFIQレジスタ・パラメータ、インタラプトするようにCPUに指示するターゲットCPUパラメータ、及び他のそのようなインタラプト・パラメータ又はインタラプト・パラメータの組み合わせを含む。代替的な実施形態では、インタラプト・インターフェースはより少ない又は代替的なパラメータを規定しても良い。
【0026】
一実施形態では、ウォッチドッグ・タイマ・インターフェースは、セキュリティ・モニタ128と1つ以上のウォッチドッグ・タイマ118,120との間の通信を促進する。特に、
図2-4に関連して以下で説明されるように、選択されたウォッチドッグ・タイマは、対応するCPUがセキュア環境と非セキュア環境との間で遷移することを保証するように操作される。ウォッチドッグ・タイマにより規定されるパラメータの具体例は、以下のものに限定されるわけではないが、ウォッチドッグ・タイマがカウントすべき時間長を指定するロード値パラメータ、ウォッチドッグ・タイマがロード値パラメータから値を再ロードすべきか否かを指定する再ロード・パラメータ、及びタイマがイネーブル又はディセーブルにされるか否かを指定するイネーブル・パラメータを含む。このように、以下でも説明されるように、ウォッチドッグ・タイマ120のようなウォッチドッグ・タイマは、ロード値パラメータにより特定される値をロードすることが可能であり、その値はウォッチドッグ・タイマがゼロに到達するまでデクリメントされる。
【0027】
システム・バス・インターフェースは、プログラマブル・ロジック108とシステム・バス132との間の通信を促進する。特に、システム・バス132のバス・ラインを選択し、選択されたバス・ラインを通信に使用するためにセキュリティ・モニタ128が使用するパラメータ及びファンクション・コールを、システム・バス・インターフェースは提供する。システム・バス132により提供されるバス・ラインの具体例は、「AXI 32ビット・バス・ライン」、「AXI 64ビット・バス・ライン」、「AHB 32ビット・バス・ライン」、「APB 32ビット・バス・ライン」、及び他のそのようなバス・ライン又はバス・ラインの組み合わせを含む。
図1はシステム・バス132を帯状のブロックとして示しているが、当業者は、システム・バス132が多くの様々なバス・ラインを含み、場合によってはセキュアFPGA102の様々なコンポーネントに対する様々な方向に流れて良いことを理解するであろう。
【0028】
一実施形態において、CPUインターフェースはセキュリティ・モニタ128と選択されたCPU(例えば、CPU114又はCPU116)との間の通信を促進する。特に、CPUインターフェースは、選択されたCPUと通信するために使用する、及び非セキュア環境からセキュア環境へ或いはその逆向きに選択されたCPUを遷移させるために使用するパラメータ及びファンクション・コールを提供する。更に、セキュリティ・モニタ128は、所与のウォッチドッグ・タイマのロード値レジスタにロードされた値に従って所与のウォッチドッグ・タイマをリセットするように、選択されたCPUを指示するために、規定のCPUインターフェースを使用する。以下で説明されるように、カスタム・セキュア・ロジック130により提供される特徴の1つは、選択されたCPUがセキュア環境で動作する一方、指定されたウォッチドッグ・タイマをリセットするために、選択されたCPUを指示するように、セキュリティ・モニタ128が拡張されることである。一例として、この特徴は、セキュアFPGA102がセキュア環境へ遷移すること、及びセキュア環境が期待されるように動作することを確認又は保証するという技術的恩恵を有する。
【0029】
図2は、セキュアFPGA102のCPU116を保護された状態に置く通信パスウェイを示す実施例によるブロック図である。CPU116をセキュア環境に遷移させるために、セキュリティ・モニタ128は、カスタム・セキュア・ロジック130により提供されるファンクション・コールを実行する。特に、CPU116がターゲットCPUであることを示すターゲットCPUパラメータ内の識別子とともに、セキュリティ・モニタ128はFIQをGIC122へ送信する。更に、インストラクションは、CPU116がセキュア環境へ遷移すべきことを指示するFIQを伴う。一実施形態では、セキュリティ・モニタ128は、このFIQを送信し、所定の時間インターバルでこのファンクション・コールを実行する。所定の時間インターバルの具体例は、ミリ秒時間インターバル、マイクロ秒時間インターバル、秒時間インターバル、及びそのような他の時間インターバルを含む。これらの時間インターバルを測定するため、セキュリティ・モニタ128は、クロック生成回路104により提供されるクロック信号を利用して、各自自身のタイマを実現しても良い。一実施形態において、所定の時間インターバルは100msである。そして、この点に関し、セキュリティ・モニタ128は100ms毎にGIC122へFIQを送信するように構成される。代替的な実施形態において、所定の時間インターバルは、ウォッチドッグ・タイマ120がゼロ値に到達して良い可能性に配慮して100msより短い。従って、代替的な実施形態では、所定の時間インターバルは、95ms、90ms、或いは100msより短いそのような値であっても良い。
【0030】
CPU116がセキュア環境へ遷移する場合に、CPU116はその対応するウォッチドッグ・タイマ(例えば、ウォッチドッグ・タイマ120)と相互作用する。一実施形態では、CPU116は、セキュアFPGA102の初期ブート・シーケンスの後に、先ずウォッチドッグ・タイマ120と相互作用する。当業者に知られるように、セキュアFPGA102は:セキュア・オペレーティング・システム(例えば、セキュアOS124)をロードする第1ステージ・ブート・ローダ、及びセキュアOS124がロードされた後に非セキュア・オペレーティング・システム(例えば、非セキュアOS126)をロードする第2ステージ・ブート・ローダという2つの異なるブート・ローダ(two different boot loaders)を実行する。セキュアOS124の一例は、カリフォルニア州サンシャインに所在するシエラウェア社(Sierraware)から入手可能なシエラウェア・シエラTEE(the Sierraware SierraTEE)である。非セキュアOS126の一例はリナックス(登録商標)OS(the Linux OS)である。
【0031】
非セキュアOS126の実行中に、セキュアOS124はバックグランド・プロセスとして実行する。セキュア・リソースが非セキュアOS126により必要とされる場合、フォアグランドへセキュアOS124がロードされる1つ以上のCPU114,116により、コンテキスト・スイッチが実行される。このように、双方のオペレーティング・システムがセキュアFPGA102において占有及び実行することが可能である。
【0032】
マシン読み取り可能なメモリ112は、メモリ・インターフェース110を介してセキュアFPGA102に通信可能に結合される。マシン読み取り可能なメモリ112は、命令及びデータを一時的又は永続的に保存するように構成される1つ以上のデバイスを含み、また、以下のものに限定されるわけではないが、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、バッファ・メモリ、フラッシュ・メモリ、光媒体、磁気媒体、キャッシュ・メモリ、その他のタイプのストレージ(例えば、消去可能でプログラム可能なリード・オンリ・メモリ(EEPROM))、及び/又はそれらの適切な任意の組み合わせを含んで良い。「マシン読み取り可能なメモリ」という用語は、セキュアOS124及び非セキュアOS126を保存することが可能な単独のメモリ又は複数の媒体(例えば、集中した又は分散したデータベース、或いは、関連するキャッシュ及びサーバ)を含むように解釈されるべきである。従って、マシン読み取り可能なメモリ112は、単独のストレージ装置又はデバイスとして実現されても良いし、或いは代替的に及び/又は追加的に、複数のストレージ装置又はデバイスを含む「クラウドに基づく」ストレージ・システム又はストレージ・ネットワークとして実現されても良い。
図1に示されるように、マシン読み取り可能なメモリ112は本来的に「信号」を排除する。
【0033】
メモリ・インターフェース110は、マシン読み取り可能なメモリ112と通信するように構成される1つ以上のインターフェースを含む。メモリ・インターフェース110は、ユニバーサル・シリアル・バス(USB)インターフェース、マイクロSDインターフェース、IEEE1394インターフェース、又は他のそのような有線インターフェース若しくは有線インターフェースの組み合わせのような有線インターフェースを含んでも良い。このようにしてセキュアOS124及び非セキュアOS126はマシン読み取り可能なメモリ112からセキュアFPGA102へ転送可能である。
【0034】
セキュリティ・モニタ128の追加とともに、セキュアFPGA102のブート・シーケンスはブートロム(BootROM)をインスタンス化し、インスタンス化されたものは、第1ステージ・ブート・ローダをロード及び実行する。第1ステージ・ブート・ローダは、次に、セキュリティ・モニタ128をロード及びインスタンス化し、セキュアOS124のロード及び実行、第2ステージ・ブート・ローダのロード及び実行、そして最終的に非セキュアOS126のロード及び実行に続く。図示されていないが、セキュアOS及び非セキュアOS126は、セキュアFPGA102の内部メモリに転送され、その内部メモリはセキュア・セグメント及び非セキュア・セグメントに区分けされることが可能である。
【0035】
当業者に知られるように、第1ステージ・ブート・ローダは、主に、セキュアOS124をロードして実行する責任を有する。しかしながら、セキュリティ・モニタ128の追加とともに、第1ステージ・ブート・ローダは、セキュアOS124のインスタンス化の前に、セキュリティ・モニタ128及びカスタム・セキュア・ロジック130をプログラマブル・ロジック108へロードする。こうして、セキュリティ・モニタ128は、レジスタ、メモリ・アドレス、通信回線、及びその他のリソース及びペリフェラルのようなセキュアFPGA102の様々なリソース及びペリフェラルを初めに保護するように実行する(例えば、1つ以上の通信インターフェースが使用されているか否かを判断する)。更に、例えばウォッチドッグ・タイマ120を(例えば、セキュア環境を通じてアクセスされるべき)セキュア・リソースとして指定し、1つ以上のローカル・タイマを設定することにより(例えば、例えばタイマは、セキュリティ・モニタ128がCPUにセキュア環境へ遷移するように命令すべきことを指示する第1タイマ、及びセキュリティ・モニタ128がウォッチドッグ・タイマ120のステータス・レジスタを検査すべきことを指示するタイマである)、セキュリティ・モニタ128はカスタム・セキュア・ロジック130により提供される1つ以上の修正を実行する。
【0036】
セキュリティ・モニタ128はセキュアFPGA102のリソースを継続的に監視する。セキュリティ・モニタ128が、セキュアFPGA102の切り替わりを示す信号の提供を受けた後、第1ステージ・ブート・ローダはセキュアOS124をロードする。従って、セキュアOS124は、以後に非セキュアOS126をロードする第2ステージ・ブート・ローダ(不図示)をインスタンス化する。
【0037】
セキュリティ・モニタ128が非セキュリティOS126のローディングを検出すると、セキュリティ・モニタ128は、カスタム・セキュア・ロジック130を介して、セキュア環境の実行のモニタリングを上述したように始める。一実施形態では、そのようなモニタリングは、カスタム・セキュア・ロジック130により提供されるウォッチドッグ・インターフェースを介してウォッチドッグ・タイマに初期値をロードすることを含む。上述したように、この初期値は100msであっても良い。そして、セキュリティ・モニタ128は、カスタム・セキュア・ロジック130のCPUインターフェースを介して、ウォッチドッグ・タイマ120のカウントダウン動作を初期化することをCPUに指図する。その後に又はそれと並行して、セキュリティ・モニタ128は、
図2を参照しながら説明したようにFIQをCPU116へ送信することを保証するために自身のタイマを実現する。
【0038】
CPU116がセキュア環境へ遷移すると、CPU116は、ウォッチドッグ・タイマ120をロードし直すように、セキュリティ・モニタ128を介して指示される。
図3は、ウォッチドッグ・タイマ120をリセットする通信パスウェイを示す実施例によるブロック図である。
図3に示されるように、CPU116は、CPU116を表現するボックスの影付きで示されるように、セキュア環境で動作している。それに応じてCPU114は非セキュア環境で動作している。一実施形態において、セキュリティ・モニタ128は、CPU116がセキュア環境で動作している一方、ウォッチドッグ・タイマ120のロード値レジスタに100msの値を再ロードすることをCPU116に指示する。そのような命令はシステム・バス132の1つ以上のバス・ラインを介して伝えられても良い。
【0039】
CPU116がウォッチドッグ・タイマ120を再ロードすると、セキュリティ・モニタ128も、ウォッチドッグ・タイマ120が実際にリセットされたことを確認するために、ウォッチドッグ・タイマ120を監視している。それに応じて、カスタム・セキュア・ロジック130は、セキュリティ・モニタ128が近似的に同時に実行するファンクション・コール、或いは直後にCPU116がウォッチドッグ・タイマ120のロード値レジスタを再ロードするファンクション・コールを含む。例えば、CPU116がウォッチドッグ・タイマ120のロード値レジスタをロードした後に、凡そ105msにおいて、セキュリティ・モニタ128はファンクション・コールを実行しても良い。一実施形態において、ファンクション・コールは、ウォッチドッグ・タイマ120に関連するステータス・レジスタに保存される値を取り出すことを、セキュリティ・モニタ128に指示する。
図1に関連して説明されるように、ステータス・レジスタは、ウォッチドッグ・タイマ120がゼロ値に到達したか否かを示す値を保存する。
【0040】
万一、ウォッチドッグ・タイマ120がゼロ値に到達し、ゼロ値が達成されたことを指示するステータス・レジスタのイベント・フラグを設定する場合、この値は、CPU116がウォッチドッグ・タイマ120を実際にはリセットしなかったことを、セキュリティ・モニタ128に示すことになる。CPU116がウォッチドッグ・タイマ120をリセットする一実施形態では、そのリセットは、ゼロ値が到達されたことをステータス・レジスタが示さないように、ステータス・レジスタをクリアしても良い。
【0041】
CPU116がセキュア環境で動作しなかったことを、セキュリティ・モニタ128が判断した場合、セキュリティ・モニタ128はGIC122に対するFIQを生成しても良い。
図1に関し、このFIQは専用通信ライン134を介して伝達される。
【0042】
図4は、
図3のウォッチドッグ・タイマがリセットされたことを確認する通信パスウェイを示す実施例によるブロック図である。
図4に示されるように、セキュリティ・モニタ128は、システム・バス132の1つ以上のバス・ラインを介してウォッチドッグ・タイマ120と通信する。一実施形態では、セキュリティ・モニタ128はカスタム・セキュア・ロジック130により規定されるファンクション・コールを実行し、そのファンクション・コールは、ウォッチドッグ・タイマ120に関連するステータス・レジスタから読み込むことをセキュリティ・モニタに実行させる。ゼロに到達したウォッチドッグ・タイマ120に対応する第1値、及びゼロに到達していないウォッチドッグ・タイマ120に対応する第2値又はデフォルト値に対応する第2値(例えば、その値は一切イベントが発生していないことを示す)のような1つ以上の所定の値の中から選択される値を、ステータス・レジスタは保存しても良い。この点に関し、セキュリティ・モニタ128がステータス・レジスタに保存されている値を取り出すと、セキュリティ・モニタ128は、取り出した値と、ウォッチドッグ・タイマ120がゼロに到達したことを示す所定の値とを比較する。これらの値が等しくない場合、「ウォッチドッグ・タイマ120は保護された環境で動作しているCPU116によってリセットされた」と、セキュリティ・モニタ128は判断する。これらの値が等しい場合、「ウォッチドッグ・タイマ120はCPU116によってリセットされなかった」と、セキュリティ・モニタ128は判断する。
【0043】
図2-4に示されてはいないが、CPU116は、ウォッチドッグ・タイマ120をリセットした後に、非セキュア環境に戻る(ただし、セキュア環境がそれでも適切に機能していることを条件とする)。一実施形態では、セキュリティ・モニタ128が初めにCPU116にセキュア環境に入るように指示している場合、セキュリティ・モニタ128は、非セキュア環境に戻るようにCPU116に命令を提供する。代替的な実施形態では、セキュリティ・モニタ128がウォッチドッグ・タイマ120のステータスを判定した後に、セキュリティ・モニタ128が、非セキュア環境に戻るようにCPU116に命令を提供する。この方法では、セキュア環境が適切に機能していることを条件として、CPU116は、セキュリティ・モニタ128により設定された所定の時間インターバルに従って(例えば、約100ms毎に)、セキュア環境と非セキュア環境との間で交替する。
【0044】
場合によっては、セキュア環境は適切に機能していないかもしれない(例えば、CPU116がセキュア環境に遷移していないかもしれない)。例えば、悪意のコード又はハードウェアの改竄がGIC122に不具合を生じさせるかもしれず、その場合、GIC122は、CPU116がセキュア環境へ遷移すべきことをCPU116に通知することに失敗してしまう。別の例として、この悪意のコード又はハードウェアの改竄は、システム・バス132におけるインタラプションを引き起こすかもしれず、或いは、セキュアOS124を乗っ取ってしまうかもしれず、その場合、CPU116はウォッチドッグ・タイマ120をリセットすることに失敗してしまうかもしれない。セキュリティ・モニタ128がセキュアOS124及び非セキュアOS126から独立している場合、そのような混乱の事態でさえウォッチドッグ・タイマ120のステータス・レジスタを依然として確認することが可能である。
【0045】
かくて、
図1に戻ると、セキュリティ・モニタ128は、ウォッチドッグ・タイマ120のステータス・レジスタに保存される値に応じて1つ以上のアクションをとるように、カスタム・セキュア・ロジック130により構成される。一実施形態では、ウォッチドッグ・タイマ120のステータス・レジスタに保存されている値が、ウォッチドッグ・タイマ120はゼロに到達したことを示す場合、セキュリティ・モニタ128は、FPGA102を保護するために、セキュリティ・モニタ128により提供される1つ以上の命令を実行することを、1つ以上のCPU114,116に行わせるために、GIC122へFIQを送信する。セキュアFPGA102を保護することは、以下のものに限定はされないが、セキュアFPGA102に通信可能に結合される1つ以上のメモリを消去すること、セキュアFPGA102の様々なコンポーネントに関連する1つ以上のレジスタをアップロード又は消去すること、セキュアFPGA102の1つ以上のペリフェラル又はコンポーネントへのアクセスをディセーブルにすること、及び更なる動作を禁止するためにセキュアFPGA102をパワーダウンすることを含んでも良い。更に、セキュアFPGA102はセキュア状態に置かれても良く、セキュア状態は、それをアンロックするため又はセキュア状態から抜け出るために、ユーザ入力又はセキュアOS124の実行を必要とする。
【0046】
セキュリティ・モニタ128は、また、セキュリティ不具合(security failures)として指定される1つ以上の状態に基づいてアクションをとるようにカスタム・セキュア・ロジック130により構成される。これらの状態は、以下のものに限定されないが、(i)クロック信号が所定の限界を超えてクロック発生回路104により生成されていること、(ii)(例えば、セキュアFPGA102の対応するコンポーネントを設定する1つ以上のレジスタのような)1つ以上のコンフィギュレーション・レジスタにおける訂正できないエラー、(iii)セキュアFPGA102へ送信されるビットストリームの改竄、(iv)所定の限界を超えるセキュアFPGA102の動作温度、及び(v)そのような他の状態又は状態の組み合わせ含む。場合によっては、1つ以上のCPU114,116がカスタム・セキュア・ロジック130により規定されるセキュリティ・ロックダウン・プロシジャ(the security lockdown procedures)を開始することに失敗した場合、セキュリティ・モニタ128は、セキュアFPGA102のリセット・レジスタへリセット信号を送信し、その送信は、APU106を含むシステム全体がリセット状態に入ることを引き起こす。
【0047】
図5Aは、開示される修正されたセキュリティ・モニタを実現する実施例による方法502を示す。
図1に関し、方法502は、セキュアFPGA102の1つ以上のコンポーネントにより実現され、それらに関連して説明される。
【0048】
初めに、セキュアFPGA102はセキュアFPGA102にとってローカルなマシン読み取り可能なメモリに保存されている「BootROM」を実行し、BootROMは第1ステージ・ブート・ローダをロードして実行する(オペレーション504)。その後、第1ステージ・ブート・ローダは、カスタム・セキュア・ロジック130により修正されたセキュリティ・モニタ128を、プログラマブル・ロジック108にロードする(オペレーション506)。先に説明されたように、セキュリティ・モニタ128は、例えばレジスタをクリアすること、メモリ・アドレスをクリアすること、1つ以上のバス・ライン又は通信ラインが使用中であるか否かを判断すること、及びそのような他のオペレーションにより、セキュアFPGA102の初期セキュリティ検査を実行する(オペレーション508)。
【0049】
この初期セキュリティ検査が完了すると、セキュリティ・モニタ128は第1ステージ・ブート・ローダに通知し、そのブート・ローダはマシン読み取り可能なメモリ112からセキュアOS124をロードして実行する(オペレーション510)。ソースOS124が初期化された後、第2ステージ・ブート・ローダ(不図示)を実行する(オペレーション512)。次に、第2ステージ・ブート・ローダは、マシン読み取り可能なメモリ112から非セキュアOS126をロードして実行する(オペレーション514)。非セキュアOS126をロードして実行することにより、セキュアFPGA102は動作状態に置かれる。
【0050】
図5Bを参照すると、セキュリティ・モニタ128は、セキュア環境の実行を監視する1つ以上の内部(即ち、ローカル)タイマを初期化する(オペレーション516)。上述したように、第1タイマは、セキュリティ・モニタ128がウォッチドッグ・タイマ120のステータス・レジスタを確認すべき時を伝えるイベント・タイマであっても良く、また、タイマは、セキュリティ・モニタ128がCPU116へリセット信号(例えば、FIQ)を送信すべき時を伝えるリセット・タイマであっても良い。
【0051】
ローカル・タイマを初期化した後、セキュリティ・モニタ128はGIC122を介してCPU116へFIQを送信する(オペレーション518)。このFIQは、初期値(例えば、100ms)でCPUウォッチドッグ・タイマ120を初期化するための命令を含む又はそれが後に続く(オペレーション520)。オペレーション520において、方法502は、セキュリティ・モニタ128のローカル・タイマを検査すること、及びCPU116を非セキュア環境へ戻すこと(オペレーション522)へ分岐する。
【0052】
一実施形態において、セキュリティ・モニタ128は、ローカル・リセット・タイマが満了したか否かを判断する(オペレーション524)。この実施形態では、これは、ローカル・リセット・タイマが100msになった又はそれを超えたか否かを判断することを含む。ローカル・リセット・タイマが満了していない場合(即ち、オペレーション524の「NO」の分岐)、セキュリティ・モニタ128はローカル・リセット・タイマのデクリメント(又はインクリメント)を続行surする。ローカル・リセット・タイマが満了した場合(即ち、オペレーション524の「YES」の分岐)、方法フローは
図5Cのオペレーション534へ進む(以下、更に説明される)。
【0053】
シリアルに又はパラレルに、セキュリティ・モニタ128は、ローカル・イベント・タイマが満了したか否かを判断する(オペレーション526)。ローカル・イベント・タイマが満了していない場合(即ち、オペレーション526の「NO」の分岐)、セキュリティ・モニタ128はローカル・イベント・タイマのデクリメント(又はインクリメント)を続行する。ローカル・イベント・タイマが満了した場合(オペレーション526の「YES」の分岐)、方法フローはオペレーション528へ進む。オペレーション528において、セキュリティ・モニタ128は、ウォッチドッグ・タイマ120がゼロ値に到達したか否かを判断するために、ウォッチドッグ・タイマ120のステータス・レジスタを読み込む。上述したように、万一、ウォッチドッグ・タイマ120がゼロ値に到達した場合、これは、CPU116がセキュア環境へ入りウォッチドッグ・タイマ120をリセットすることに失敗したことを示す。
【0054】
セキュリティ・モニタ128は、ウォッチドッグ・タイマ120のステータス・レジスタが、ゼロ値に達したウォッチドッグ・タイマ120に対応するイベント・フラグを保存しているか否かを判断する(オペレーション530)。一実施形態において、ステータス・レジスタは、ゼロ値に未だ到達していないことを示すデフォルト又はヌル値(NULL value)を保存しても良いし、或いは、ゼロに到達したことを示す値を保存しても良い。それに応じて、セキュリティ・モニタ128は、ウォッチドッグ・タイマ120がリセットされたか否かを判断するために、ステータス・レジスタの値を、1つ以上の予め決定された又はプログラムされた値と比較する。ウォッチドッグ・タイマ120が、ゼロ値に到達したウォッチドッグ・タイマ120に対応するイベント・フラグを保存していない場合(即ち、オペレーション530の「NO」の分岐)、セキュリティ・モニタ128はそのローカル・イベント・タイマをリセットする(オペレーション532)。方法フローはオペレーション526へ戻るように進む。しかしながら、ウォッチドッグ・タイマ120がゼロ値に到達したウォッチドッグ・タイマ120に対応するイベント・フラグを保存している場合(即ち、オペレーション530の「YES」の分岐)、方法フローは
図5Cのオペレーション542へ進む。
【0055】
図5Cを参照すると、オペレーション534からの方法フローとともに始まっており(即ち、ローカル・リセット・タイマが満了している)、セキュリティ・モニタ128は、セキュア環境へ遷移するためにCPU116へインタラプトを送る(オペレーション534)。CPUへのインタラプトとともに、又はCPUへ送信したインタラプトに続いて、セキュリティ・モニタ128は、ウォッチドッグ・タイマ120をリセットするようにCPU116を指示する(オペレーション536)。上述したように、これはCPU116がウォッチドッグ・タイマ120に関連するロード値レジスタにタイマ値(例えば、100ms)を保存することを含んでも良い。その後、CPU116は、そのカウントダウン・プロシジャを再開するように、ウォッチドッグ・タイマ120を指示しても良い。更にその後に、セキュリティ・モニタ128は、セキュリティ・モニタ128がCPU116へ別のインタラプトを送信する次の時間に備えて、そのローカル・イベント・タイマをリセットする(オペレーション538)。その後に又は並列的に、CPU116は非セキュア環境へ戻るように遷移する(オペレーション540)。そして、方法フローは
図5Bのオペレーション524へ戻る。
【0056】
図5Bのオペレーション530に関し、方法フローは
図5Cのオペレーション542へ進む場合がある。方法フローがオペレーション542へ到達する場合、セキュリティ・モニタ128は、CPU116がウォッチドッグ・タイマ120をリセットすることに失敗した、と判断している。これは、CPU116がセキュア環境への遷移に失敗したこと、及びセキュア環境において致命的な又は安全性の欠陥が潜在的に存在することを伝える。それに応じて、セキュリティ・モニタ128は、ロックダウン・プロシジャを開始するために、1つ以上のCPU114,116へインタラプトを送ることを試みても良い。上述したように、このプロシジャは、1つ以上のメモリ・アドレス及び/又はレジスタをクリアすること(例えば、消去すること)、1つ以上のペリフェラルをディセーブル又はパワーダウンすること、セキュアFPGA102のコンポーネント及びリソースに対するアクセス又は別のアクセスを禁止すること、及びそのような他のアクションをとることを含んでも良い。セキュリティ・モニタ128がCPU114,116から独立している場合、セキュリティ・モニタ128は、セキュアFPGA102がロックダウン又はセキュア状態に入ったことを確認してもよい(オペレーション544)。
【0057】
万一、セキュリティ・モニタ128が、セキュアFPGA102はセキュア状態に入ったことを確認することに失敗した場合、セキュリティ・モニタ128は,セキュアFPGA102を保護するために、自らの測定を実行しても良い。例えば、セキュリティ・モニタ128はセキュアFPGA102のリセット・レジスタに或る値を保存しても良く、その値は、セキュアFPGA102の1つ以上のコンポーネントにおけるリセットを引き起こす。そして、セキュリティ・モニタ128は、セキュアFPGA102のシャットダウン・プロシジャを開始し、そのプロシジャはセキュアFPGA102の1つ以上のペリフェラル又はコンポーネントのパワーダウンを含んでも良い(オペレーション546)。
【0058】
このように、本開示は、セキュア環境が適切に実行されたか否かを確認する修正されたセキュリティ・モニタをFPGAに提供する。この特徴はセキュリティの世界に分岐をもたらし、その理由は、従来のセキュリティ・モニタは一般にFPGAのコンポーネントが改竄されたか否か、及び環境全体が適切に機能しているか否かを監視しているに過ぎないからである。更に、本開示は既存のセキュリティ・モニタに関わる追加的なインターフェース及びファンクション・コールを提供し、セキュリティ・モニタの機能群及び技術的な能力を効果的に拡張する。従って、開示される修正されたセキュリティ・モニタの技術的恩恵は、既に存在しているものより堅牢なセキュリティ・ソリューションを提供する。
モジュール,コンポーネント及びロジック
【0059】
所定の実施形態は、ロジック又は多数のコンポーネント、モジュール若しくは機構を含むように本願で説明されている。モジュールはソフトウェア・モジュール(例えば、マシン読み取り可能な媒体に組み込まれるコード)又はハードウェア・モジュールの何れかを構成して良い。「ハードウェア・モジュール」は所定のオペレーションを実行することが可能な有形ユニットであり、所定の物理的な方法で構成又は配置されて良い。様々な実施例において、(例えば、スタンドアローン・コンピュータ・システム、倉アインと・コンピュータ・システム、又はサーバ・コンピュータ・システムのような)1つ以上のコンピュータ・システム又は(例えば、プロセッサ又はプロセッサ群のような)コンピュータ・システムの1つ以上のハードウェア・モジュールは、本願で説明される所定のオペレーションを実行するように動作するハードウェア・モジュールとして、(例えば、アプリケーション又はアプリケーションの部分のような)ソフトウェアにより構成されても良い。
【0060】
或る実施形態では、ハードウェア・モジュールは、機械的に、電子的に、又はそれらの適切な任意の組み合わせにより実現されて良い。例えば、ハードウェア・モジュールは、所定のオペレーションを実行するように永続的に構成される専用回路又はロジック(又は論理装置)を含んでも良い。例えば、ハードウェア・モジュールは、フィールド・プログラマブル・ゲート・アレイ(FPGA)又は特定用途向け集積回路(ASIC)のような特定用途プロセッサであっても良い。ハードウェア・モジュールは、所定のオペレーションを実行するためにソフトウェアにより一時的に構成されるプログラマブル・ロジック又は回路を含んでも良い。例えば、ハードウェア・モジュールは、汎用プロセッサ又はその他のプログラマブル・プロセッサにより実行されるソフトウェアを含んでも良い。そのようなソフトウェアにより構成されると、ハードウェア・モジュールは、設定された機能を実行するように特別に仕立てられた特定のマシン(又はマシンのうちの特定のコンポーネント)となり、もはや汎用プロセッサではなくなる。ハードウェア・モジュールを機械的に、専用の永続的に構成される回路で、或いは(例えば、ソフトウェアにより構成される)一時的に構成される回路で実現する判断は、コスト及び時間の考察に委ねられて良いことが認められるであろう。
【0061】
従って、「ハードウェア・モジュール」という言い回しは、有形エンティティを包含するように理解されるべきであり、所定の方法で動作する或いは本願で説明される所定のオペレーションを実行するように物理的に構成される、(例えば、結線により)永続的に構成される、或いは一時的に構成される(例えば、プログラムされる)エンティティであるように理解されるべきである。本願で使用されるように、「ハードウェア実現モジュール」はハードウェア・モジュールを指す。ハードウェア・モジュールが一時的に構成される(例えば、プログラムされる)実施形態を考察する場合、各々のハードウェア・モジュールが時間内に任意の1つのインスタンスで構成又はインスタンス化されることは必須でない。例えば、ハードウェア・モジュールが特定用途プロセッサとなるようにソフトウェアにより構成される汎用プロセッサを有する場合、汎用プロセッサは異なる時間に各自異なる特定用途プロセッサとして構成されて良い(例えば、それらは異なるハードウェア・モジュールを有する)。それに応じてソフトウェアは、例えば、或る時間インスタンスでは特定のハードウェア・モジュールを構成し、異なる時間インスタンスでは異なるハードウェア・モジュールを構成するように、特定のプロセッサ又はプロセッサ群を構成する。
【0062】
ハードウェア・モジュールは、他のハードウェア・モジュールに情報を提供し及び他のハードウェア・モジュールから情報を受信することが可能である。従って、説明されるハードウェア・モジュールは通信可能に結合されていると解釈されて良い。複数のハードウェア・モジュールが同時に存在する場合、2つ以上のハードウェア・モジュールの間又はそれらの中で、(例えば、適切な回路及びバスにより)信号の伝達により通信が行われて良い。複数のハードウェア・モジュールが設定される又は異なる時間にインスタンス化される実施形態では、そのようなハードウェア・モジュール間の通信は、例えば、複数のハードウェア・モジュールがアクセスするアクセス先のストレージ及びメモリ構造における情報の抽出を通じて達成される。例えば、或るハードウェア・モジュールは、或るオペレーションを実行し、そのオペレーションの出力を、結合されているメモリ・デバイスに保存しても良い。別のハードウェア・モジュールは、以後の時点で、保存されている出力を取り出して処理するためにメモリ・デバイスにアクセスしても良い。ハードウェア・モジュールは、入力又は出力デバイスとの通信を開始してもよく、(例えば、情報の集まりのような)リソース上で動作することが可能である。
【0063】
本願で説明される方法例の様々なオペレーションは、関連するオペレーションを実行するように(例えば、ソフトウェアにより)一時的に構成される或いは永続的に構成される1つ以上のプロセッサにより、少なくとも部分的に実行されて良い。一時的又は永続的に構成されるか否かによらず、そのようなプロセッサは、本願で説明される1つ以上のオペレーション又は機能を実行するように動作するプロセッサ実現モジュールを構成して良い。本願で使用されるように、「プロセッサ実現モジュール」は1つ以上のプロセッサを利用して実現されるハードウェア・モジュールを指す。
【0064】
同様に、本願で説明される方法は、ハードウェアの具体例である特定のプロセッサ又はプロセッサ群により少なくとも部分的にプロセッサで実現されて良い。例えば、方法の少なくとも一部のオペレーションは、1つ以上のプロセッサ又はプロセッサ実現モジュールにより実行されて良い。更に、1つ以上のプロセッサは、「クラウド・コンピューティング」環境又は「サース(software as a service:SaaS)」として関連するオペレーションのパフォーマンスをサポートするように動作しても良い。例えば、少なくとも幾つかのオペレーションは、(例えば、インターネットのような)ネットワークを介して及び(例えば、アプリケーション・プログラム・インターフェース(API)のような)1つ以上の適切なインターフェースを介して、アクセス可能であるこれらのオペレーションにより、(プロセッサを含むマシンの具体例である)コンピュータのグループにより実行されて良い。
【0065】
所定のオペレーションのパフォーマンスは、単独のマシン内に存在するプロセッサだけでなく、多数のマシンにわたって配備されているプロセッサの間に分散されていても良い。一部の実施例では、プロセッサ又はプロセッサ実現モジュールは、(例えば、家庭環境、オフィス環境、或いはサーバ・ファーム内のような)単独の地理的な場所に配置されていても良い。別の実施例では、プロセッサ又はプロセッサ実現モジュールは、多数の地理的な場所にわたって分散されていても良い。
マシン及びソフトウェア・アーキテクチャ
【0066】
図1-5Cに関連して説明されるモジュール、方法、アプリケーション等は、マシン及び関連するソフトウェア・アーキテクチャに関連して幾つかの実施形態では実現される。以下のセクションは、開示される実施形態を利用することに適した代表的なアーキテクチャを説明している。
【0067】
ソフトウェア・アーキテクチャは、特定の目的に特化されたデバイス及びマシンを作成するためにハードウェア・アーキテクチャに関連して使用される。例えば、特定のソフトウェア・アーキテクチャに結び付けられる特定のハードウェア・アーキテクチャは、モバイル・フォン、タブレット・デバイス等のようなモバイル・デバイスを作り出す。若干異なるハードウェア及びソフトウェアは、「モノのインターネット(internet of things:IoT)」で使用するスマート・デバイスをもたらすかもしれない。更に別の組み合わせは、クラウド・コンピューティング・アーキテクチャ内で使用するためのサーバ・コンピュータを生み出す。そのようなソフトウェア及びハードウェア・アーキテクチャの全ての組み合わせがここで提示されているわけではなく、なぜなら、当業者は本願に含まれる開示から様々な文脈で本発明をどのように実現するかを容易に理解できるからである。
マシン・アーキテクチャ及びマシン読み取り可能な媒体の具体例
【0068】
図6は、マシン読み取り可能な媒体(例えば、マシン読み取り可能な記憶媒体)から命令を読み込み、本願で開示される任意の1つ以上の方法を実行することが可能な実施例によるマシン600のコンポーネントを示すブロック図である。具体的には、
図6は、コンピュータ・システムの例示的な形式におけるマシン600の図式的表現を示し、そのマシンの中で、本願で説明される任意の1つ以上の方法をマシン600に実行させるための命令616(例えば、ソフトウェア、プログラム、アプリケーション、アプレット、アプリ(an app)、又はその他の実行可能なコード)が実行されて良い。例えば、命令は、
図5A-5Cのフロー図をマシンに実行させても良い。追加的又は代替的に、命令は
図1の1つ以上のコンポーネントを実現しても良い。命令は、汎用のプログラムされていないマシンを、記述及び説明される機能を説明される方法で実行するようにプログラムされた特定のマシンに変える。代替的な実施形態において、マシン600はスタンドアローン・デバイスとして動作し、或いは他のマシンに結合されても良い(例えば、ネットワーク化されても良い)。ネットワーク化された配置において、マシン600は、サーバ・クライアント・ネットワーク環境におけるサーバ・マシン又はクライアント・マシンの立場で動作しても良く、或いはピア・ツー・ピア(又は分散された)ネットワーク環境におけるピア・マシンとして動作しても良い。マシン600は、以下のものに限定されないが、サーバ・コンピュータ、クライアント・コンピュータ、パーソナル・コンピュータ(PC)、タブレット・コンピュータ、ラップトップ・コンピュータ、ネットブック、パーソナル・ディジタル・アシスタント(PDA)を含んでも良く、或いは、順番に或いは別の方法で、マシン600により行われるアクションを指定する命令616を実行することが可能な任意のマシンを含んで良い。更に、単独のマシン600しか示されていないが、「マシン」という用語は、本願で説明される任意の1つ以上の方法を実行するために命令616を個々に又は一緒に実行する複数のマシン600の集まりを含むようにも解釈される。
【0069】
マシン600は、バス602を介するようにして互いに通信するように構成されて良いプロセッサ610、メモリ/ストレージ630、及びI/Oコンポーネント650を含んで良い。実施例において、プロセッサ610(例えば、中央処理ユニット(CPU)、縮小命令セット・コンピューティング(RISC)プロセッサ、複合命令セット・コンピューティング(CISC)プロセッサ、グラフィックス・プロセシング・ユニット(GPU)、ディジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、無線周波数集積回路(RFIC)、その他のプロセッサ、又はそれらの適切な任意の組み合わせ)は、例えば、命令616を実行して良いプロセッサ612及びプロセッサ614を含んで良い。「プロセッサ」という用語は、同時に命令を実行して良い2つ以上の独立したプロセッサ(しばしば「コア」と言及される)を含んで良いマルチ・コア・プロセッサを含むように意図される。
図6は複数のプロセッサを示しているが、マシン600は、シングル・コアを有するシングル・プロセッサ、複数のコア(例えば、マルチ・コア・プロセス)を有するシングル・プロセッサ、シングル・コアを有する複数のプロセッサ、複数のコアを有する複数のプロセッサ、或いはそれらの任意の組み合わせを含んで良い。
【0070】
メモリ/ストレージ630は、メイン・メモリ又は他のメモリ・ストレージのようなメモリ632、及びストレージ・ユニット636を含んでも良く、それらはバス602を介すること等によりプロセッサ610にアクセス可能である。ストレージ・ユニット636及びメモリ632は、本願で説明される任意の1つ以上の方法又は機能を具現化する命令616を保存する。命令616は、マシン600による命令の実行中に完全に又は部分的に、メモリ632内に、ストレージ・ユニット636内に、少なくとも1つのプロセッサ610内に(例えば、プロセッサのキャッシュ・メモリ内に)、或いはそれらの適切な任意の組み合わせの中に存在して良い。従って、メモリ632、ストレージ・ユニット636、及びプロセッサ610のメモリはマシン読み取り可能なメモリの具体例である。
【0071】
ここで使用されるように、「マシン読み取り可能な媒体」は、一時的又は永続的に命令及びデータを保存することが可能なデバイスを意味し、以下のものに限定されるわけではないが、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、バッファ・メモリ、フラッシュ・メモリ、光媒体、磁気媒体、キャッシュ・メモリ、その他のタイプのストレージ(例えば、消去可能でプログラム可能なリード・オンリ・メモリ(EEPROM))、及び/又はそれらの適切な任意の組み合わせを含んで良い。「マシン読み取り可能な媒体」という用語は、命令616を保存することが可能な単独の媒体又は複数の媒体(例えば、集中した又は分散されたデータベース、付随したキャッシュ、及びサーバ)を含むように解釈されるべきである。「マシン読み取り可能な媒体」という用語は、マシン(例えば、マシン600)により実行するための命令(例えば、命令616)を保存することが可能な任意の媒体又は複数の媒体の組み合わせを含むようにも解釈され、それにより、命令は(例えば、プロセッサ610のような)マシン600の1つ以上のプロセッサにより実行される場合に、本願で説明される任意の1つ以上の方法をマシン600に実行させる。従って、「マシン読み取り可能な媒体」は、単独のストレージ装置又はデバイスに加えて、複数のストレージ装置又はデバイスを含む「クラウド・ベース」のストレージ・システム又はストレージ・ネットワークを指す。「マシン読み取り可能な媒体」という用語は、本来、信号を排除する。
【0072】
I/Oコンポーネント650は、入力を受信し、出力を提供し、出力を生成し、情報を送信し、情報を交換し、測定結果を取得する等のための広範囲に及ぶ様々なコンポーネントを含んで良い。特定のマシンに含まれる具体的なI/Oコンポーネント650は、マシンのタイプに依存することになる。例えば、モバイル・フォンのようなポータブル・マシンは、タッチ入力デバイス又はそのような他の入力機構を含む傾向にある一方、ヘッドレス・サーバ・マシンはそのようなタッチ入力デバイスを含まない傾向にあるであろう。I/Oコンポーネント650は
図6に示されていない多くの他のコンポーネントを含んで良いことが認められるであろう。I/Oコンポーネント650は、以下の説明を単に簡略化する目的で機能に応じてグループ化されており、そのグループ化は何らの限定でもない。様々な実施例において、I/Oコンポーネント650は出力コンポーネント652及び入力コンポーネント654を含んで良い。出力コンポーネント652は、視覚的なコンポーネント(例えば、プラズマ・ディスプレイ・パネル(PDP)、発光ダイオード(LED)ディスプレイ、液晶ディスプレイ(LCD)、プロジェクタ、陰極線管(CRT)のようなディスプレイ)、聴覚的なコンポーネント(例えば、スピーカ)、触覚的なコンポーネント(例えば、振動モータ、抵抗メカニズム)、及び他の信号生成部等を含んで良い。入力コンポーネント654は、英数字入力コンポーネント(例えば、キーボード、英数字入力を受けるように構成されたタッチ・スクリーン、フォト・オプティカル・キーボード、又は他の英数字入力コンポーネント)、ポイント・ベースの入力コンポーネント(例えば、マウス、タッチパッド、トラックボール、ジョイスティック、モーション・センサ、又は他のポインティング装置)、触覚式入力コンポーネント(例えば、物理的なボタン、タッチ又はタッチ・ジェスチャの位置及び/又は力を提供するタッチ・スクリーン、或いは他の触覚的な入力コンポーネント)、オーディオ入力コンポーネント(例えば、マイクロフォン)等を含んで良い。
【0073】
別の実施例において、I/Oコンポーネント650は、バイオメトリック・コンポーネント656、モーション・コンポーネント658、環境コンポーネント660、又はポジション・コンポーネント662を、広範囲に及ぶ他のコンポーネントの配置のうち特に含んでも良い。例えば、バイオメトリック・コンポーネント656は、(例えば、手の表現、顔の表現、音声の表現、身体ジェスチャ、又は目線の追跡のような)表現を検出し、(例えば、血圧、心拍、体温、汗、又は脳波のような)生体信号を測定し、(例えば、声の識別、網膜の識別、顔の識別、指紋の識別、又は脳波図に基づく識別)人を識別する等のためのコンポーネントを含んで良い。モーション・コンポーネント658は、加速度センサ・コンポーネント(例えば、加速度計)、重力センサ・コンポーネント、回転センサ/コンポーネント(例えば、ジャイロスコープ)等を含んでも良い。環境コンポーネント660は、例えば、照明センサ・コンポーネント(例えば、光度計)、温度センサ・コンポーネント(例えば、周囲温度を検出する1つ以上の温度計)、湿度センサ・コンポーネント、圧力センサ・コンポーネント(例えば、気圧計)、音響センサ・コンポーネント(例えば、背景雑音を検出する1つ以上のマイクロフォン)、近接センサ・コンポーネント(例えば、近辺の対象物を検出する赤外線センサ)、ガス・センサ(安全性のために有毒ガスの濃度を検出するめの、或いは雰囲気中の汚染物質を測定するためのガス検出センサ)を含んでも良く、或いは周辺の物理的な環境に対応する指示、測定値、又は信号を提供し得る他のコンポーネントを含んでも良い。ポジション・コンポーネント662は、ロケーション・センサ・コンポーネント(例えば、グローバル・ポジショニング・システム(GPS)受信コンポーネント)、高度センサ・コンポーネント(例えば、高度が導出される元である空気圧を検出する気圧計又は高度計)、方向センサ・コンポーネント(例えば、磁力計)等を含んでも良い。
【0074】
通信は広範囲に及ぶ様々な技術を利用して実現されて良い。I/Oコンポーネント650は、マシン600をネットワーク680又はデバイス670へそれぞれカップリング682及びカップリング672を介して結合するように動作する通信コンポーネント664を含んでも良い。例えば、通信コンポーネント664は、ネットワーク680とのインターフェースのためにネットワーク・インターフェース・コンポーネント又は適切な他のデバイスを含んでも良い。別の例において、通信コンポーネント664は、有線通信コンポーネント、無線通信コンポーネント、セルラ通信コンポーネント、近距離通信(NFC)コンポーネント、ブルートゥース(登録商標)コンポーネント(例えば、ブルートゥース低エネルギ)、WiFiコンポーネント、及び他のモダリティにより通信を提供する他の通信コンポーネントを含んでも良い。デバイス670は他のマシン又は広範囲に及ぶ様々なペリフェラル・デバイスのうちの何れであっても良い(例えば、ユニバーサル・シリアル・バス(USB)を介して結合されるペリフェラル・デバイスであっても良い)。
【0075】
更に、通信コンポーネント664は身元(又は識別子)を検出しても良いし、或いは身元を検出するように動作するコンポーネントを含んでも良い。例えば、通信コンポーネント664は、無線周波数識別(RFID)タグ・リーダ・コンポーネント、NFCスマート・タグ検出コンポーネント、光リーダ・コンポーネント(例えば、ユニバーサル・プロダクト・コード(UPC)バー・コードのような1次元バー・コード、クイック・レスポンス(QR)コード、アズテック・コード、データ・マトリクス、データグリフ、マキシコード、PDF417、ウルトラ・コード、「UCC RSS-2D」バー・コードのような多次元バー・コード、及びその他の光コード)、又は音響検出コンポーネント(例えば、タグ付けされたオーディオ信号を識別するためのマイクロフォン)を含んでも良い。更に、インターネット・プロトコル(IP)ジオ・ロケーションによる位置、Wi-Fi信号三角法による位置、特定の位置を指示し得るNFCビーコン信号の検出による位置等のような様々な情報が、通信コンポーネント664により導出されて良い。
伝送媒体
【0076】
様々な実施例において、ネットワーク680の1つ以上の部分は、アドホック・ネットワーク、イントラネット、エクストラネット、仮想プライベート・ネットワーク(VPN)、ローカル・エリア・ネットワーク(LAN)、ワイヤレスLAN(WLAN)、ワイド・エリア・ネットワーク(WAN)、ワイヤレスWAN(WWAN)、メトロポリタン・エリア・ネットワーク(MAN)、インターネット、インターネットの一部分、公衆交換電話網(PSTN)の一部分、旧式電話サービス(POTS)ネットワーク、セルラ電話ネットワーク、ワイヤレス・ネットワーク、Wi-Fiネットワーク、他のタイプのネットワーク、又はそのような2つ以上のネットワークの組み合わせであっても良い。例えば、ネットワーク680又はネットワーク680の一部分はワイヤレス又はセルラ・ネットワークを含んでも良く、カップリング682は、符号分割多重アクセス(CDMA)コネクション、モバイル通信用グローバル・システム(GSM(登録商標))コネクション、又は他のタイプのセルラ又はワイヤレス・カップリングであっても良い。この例では、カップリング682は、シングル・キャリア無線伝送技術(1xRTT)、エボリューション・データ最適化(EVDO)技術、ゼネラル・パケット無線サービス(GPRS)技術、GSMエボリューションのためのエンハンスト・データ・レート(EDGE)技術、第三世代パートナーシップ・プロジェクト(3GPP)(3G、4Gネットワーク、UMTS、HSPA、WiMAX、LTE規格、様々な規格決定機関により規定される他のもの、その他のロング・レンジ・プロトコルを含む)、或いはその他のデータ転送技術のような任意の多様なタイプのデータ伝送技術を実現して良い。
【0077】
命令616は、(例えば、通信コンポーネント664に含まれるネットワーク・インターフェース・コンポーネントのような)ネットワーク・インターフェース・デバイスを介する伝送媒体を利用して、及び多くの周知の伝送プロトコルのうちの任意の何れか(例えば、ハイパーテキスト・トランスファ・プロトコル(HTTP))を利用して、ネットワーク680を介して送受信されて良い。同様に、命令616は、デバイス670へカップリング672(例えば、ピア・ツー・ピア・カップリング)を介する伝送媒体を利用して送受信されても良い。「伝送媒体」という用語は、マシン600による実行のために命令616を保存し、エンコードし、又は搬送することが可能である任意の無形媒体を含むように解釈され、その無形媒体は、ディジタル又はアナログ通信信号、又はそのようなソフトウェアの通信を促す他の無形媒体を含む。
用 語
【0078】
本明細書を通じて、複数のインスタンスが、単独のインスタンスとして説明されるコンポーネント、オペレーション、又は構造を実現しても良い。1つ以上の方法の個々のオペレーションが別個のオペレーションとして説明され記述されているが、1つ以上の個々のオペレーションは同時に実行されても良く、オペレーションが説明された順序で実行される必然性はない。例示的なコンフィギュレーションにおいて別個のコンポーネントとして提示されている構造及び機能は、組み合わせられた構造又はコンポーネントとして実現されても良い。同様に、単独のコンポーネントとして提示される構造及び機能は、別個のコンポーネントとして実現されても良い。これら及びその他の変形、修正、付加、及び改善は、本願における対象事項の範囲内に属する。
【0079】
本発明の対象事項の概要が具体的な実施例に関連して説明されてきたが、本開示の実施形態の広範囲に及ぶ範囲から逸脱することなく、これらの実施形態に対して様々な修正及び変形が施されて良い。本発明の対象事項のそのような実施形態は、1つより多くが実際に開示されている場合に本願の範囲を何らかの単独の開示又は発明概念に自発的に限定する意図無しに、簡明化のため「発明」という用語によって、個別的又は集合的に言及されて良い。
【0080】
本願で説明される実施形態は、開示される教示を当業者が実施できる程度に十分に詳細に説明されている。それらから他の実施形態が利用され導出されても良く、それにより、本開示の範囲から逸脱することなく、構造的及び論理的な代替及び変更が施されて良い。従って、詳細な説明は、限定的な意味には解釈されず、様々な実施形態の範囲は、特許請求の範囲に付与される均等物の全ての範囲とともに添付の特許請求の範囲によってのみ決定される。
【0081】
本願で使用されるように、「又は」という用語は、包含的又は排他的な意味の何れかにより解釈されて良い。更に、単独のインスタンスとして本願で説明されるリソース、オペレーション、又は構造について、複数のインスタンスが提供されても良い。更に、様々なリソース、オペレーション、モジュール、エンジン、及びデータ・ストアの間の境界は、幾分任意的であり、特定の例示的なコンフィギュレーションの文脈で特定のオペレーションが説明されている。機能の他の割り振りが想定されており、そのような割り振りも本開示の様々な実施形態の範囲内に属して良い。一般に、例示的なコンフィギュレーションで別個のリソースとして提示される構造及び機能は、組み合わせられた構造又はリソースとして実現されても良い。同様に、単独のリソースとして提示される構造及び機能は、個々のリソースとして実現されても良い。これら及び他の変形、修正、付加、及び改善は、添付の特許請求の範囲により表現されるような本開示の実施形態の範囲内に属する。従って、明細書及び図面は限定的な意味ではなく例示的に解釈されるべきである。