(57)【要約】【課題】本発明は、埋め込みシステム又は付属品におけるプログラムコードの整合性を検証するための、安価で、ソフトウェアベースのセキュリティ追加実装ソリューションを、高価なハードウェアの交換によらずに提供する。プログラムコードイメージを格納するために使用できる付属品上の全ての未使用メモリは、ランダムデータにより満たされる。ホストシステムはまた、ランダムデータを含む付属品のプログラムイメージのコピーを局所的に格納する。ホストシステムは、付属品上のメモリアドレス又はメモリレンジのリストを付属品に送信し、それは常に異なり本質的にランダムである。付属品は、セキュアハッシュ関数への入力として、メモリアドレスに格納された値を使用してダイジェストを生成する。ホストシステムは、埋め込まれたプログラムコードの整合性を、付属品により生成され、そこから返された結果としてのダイジェストを検証することにより検証する。【選択図】図１
2008541211.tif 000002
【特許請求の範囲】
【請求項１】
付属品に埋め込まれたプログラムコードの整合性を検証する方法であって、前記付属品は、プログラムコードと、プログラムコードに関連するデータを格納するメモリ装置を有し、メモリ装置のすべての未使用メモリ空間はランダムデータで満たされ、ホストは、メモリ装置のメモリイメージへのアクセスを有し、前記方法は、
付属品へメモリアドレスのリストを送信するステップと、
付属品から値を受信し、前記値は、前記リスト中の指定されたメモリアドレスにおけるメモリの値から生成され、それを代表しているステップと、
メモリイメージと前記リストから予測値を生成するステップと、
付属品から受信した前記値を、前記予測値と比較するステップとを含み、
プログラムコードの整合性は、前記受信値が前記予測値と等価であれば検証される方法。
【請求項２】
前記値は、前記リストにおいて指定された連続する前記指定されたメモリアドレスにおけるメモリの前記値を連結したものである請求項１に記載の方法。
【請求項３】
前記値は、セキュアハッシングアルゴリズムを使用して、前記指定されたメモリアドレスにおけるメモリの前記値をそこへの入力として計算されたダイジェストであり、前記予測値は、前記セキュアハッシングアルゴリズムと等価な第２セキュアハッシングアルゴリズムを使用して計算された予測ダイジェストである請求項１に記載の方法。
【請求項４】
ランダムデータストリングを付属品に送信するステップを更に含み、
ダイジェストは受信したランダムデータストリングを追加入力として計算され、予測ダイジェストは、ランダムデータストリングを第２入力として生成される請求項３に記載の方法。
【請求項５】
付属品を、そのファームウェアプログラムコードを認証するために準備する方法であって、前記ファームウェアプログラムコードおよび、前記ファームウェアプログラムコードに関連するデータは前記付属品のメモリ装置に格納され、前記方法は、
前記ファームウェアプログラムコードに、前記ファームウェアプログラムコードによりアドレス可能なメモリアドレスに対応するアドレスのリストをホストから受信するための第１ＡＰＩを提供するステップと、
前記ファームウェアプログラムコードに、前記リストと、前記リスト中で指定された前記アドレスにおけるメモリの値から代表値を生成するための暗号プログラムを提供するステップと、
前記ファームウェアプログラムコードに、前記ホストへ前記代表値を返すための第２ＡＰＩを提供するステップと、
前記ファームウェアプログラムコードと前記データにより占有されていないメモリ装置のすべてのメモリ空間をランダムデータで満たすステップと、
前記メモリ装置のメモリイメージを参照のために提供するステップと、を含み、
前記ファームウェアプログラムコードは、認証操作において、前記代表値が予測代表値と等価である場合に認証され、前記予測代表値は、前記リストを使用して前記メモリイメージのコピーから前記ホストにより計算される方法。
【請求項６】
前記代表値は、セキュアハッシングプログラムを使用して計算されたダイジェストである請求項５に記載の方法。
【請求項７】
前記予測代表値は、前記セキュアハッシングアルゴリズムと等価な第２セキュアハッシングアルゴリズムを使用して計算された予測ダイジェストである請求項６に記載の方法。
【請求項８】
ランダムデータストリングを付属品に送信するステップを更に含み、
ダイジェストは受信したランダムデータストリングを追加入力として計算され、予測ダイジェストは、ランラムデータストリングを第２入力として生成される請求項７に記載の方法。
【請求項９】
認証可能ファームウェアプログラムコードを有する付属品であって、前記ファームウェアプログラムコードおよび前記ファームウェアプログラムコードに関連するデータは、前記付属品のメモリ装置に格納され、前記ファームウェアプログラムコードと前記データにより占有されていない前記メモリ装置のすべてのメモリ空間は、ランダムデータにより全体が占有され、前記付属品は、前記メモリ装置の外部格納メモリイメージを有し、前記ファームウェアプログラムコードは、
前記ファームウェアプログラムコードによりアドレス可能な前記メモリ装置上のメモリアドレスに対応するアドレスのリストをホストから受信するためのＡＰＩと、
前記リストと、前記リストにおいて指定された前記アドレスにおけるメモリの値からダイジェストを生成するためのセキュアハッシュプログラムと、
前記ダイジェストを前記ホストに返すための第２ＡＰＩとを備え、
前記ホストは、前記リストを使用して、前記メモリイメージの信頼できるコピーから予測ダイジェストを生成し、前記予測ダイジェストを、前記ファームウェアプログラムコードから返された前記ダイジェストと比較して、前記ファームウェアプログラムコードを認証する付属品。
【請求項１０】
認証可能ファームウェアプログラムコードを有する付属品であって、前記ファームウェアプログラムコードおよび前記ファームウェアプログラムコードに関連するデータは、前記付属品のメモリ装置に格納され、前記付属品は、前記メモリ装置の外部格納メモリイメージを有し、前記ファームウェアプログラムコードは、
ホストからの入力を受信し、値をホストに返すためのインタフェースと、
前記入力と、前記メモリ装置上の選択されたアドレスにおけるメモリの値から値を生成するプログラムを備え、
前記ホストは、前記入力を使用して、前記メモリイメージの信頼できるコピーから予測値を生成し、前記予測値を、前記ファームウェアプログラムコードから返された前記値と比較して、前記ファームウェアプログラムコードを認証する付属品。
【請求項１１】
前記プログラムはセキュアハッシングプログラムであり、前記値は前記セキュアハッシングプログラムにより生成されたダイジェストである請求項１０に記載の付属品。
【請求項１２】
前記入力は、ホストにより生成されたランダム値である請求項１０に記載の付属品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般的には暗号法の分野に関する。より特別には、本発明は、埋め込みシステムにおけるプログラムコードの整合性を検証するための、安価で、ソフトウェアベースのセキュリティ追加実装ソリューションに関する。
【背景技術】
【０００２】
コンピュータシステムは、典型的には、周辺装置をシステムの機能を補完するために使用する。このような状況においては、コンピュータシステムは、ホストシステムと称され、その周辺装置は、付属品と称される。付属品は通常、プログラムコード、マイクロコード、またはファームウェアでプログラムまたは再プログラムできるマイクロプロセッサまたはマイクロコントローラを使用して構築されているので、計算が可能である。これら付属品の機能と正確な操作は、付属品内に常駐するプログラムの正確さに依存している。
【０００３】
プログラムコードにおいて発見された欠陥のために、既に設置された付属品をアップグレードしたり、追加装置を取り付けたりする必要が起こることがある。例えば、医療機器のような高価な適用において危険度の高い装置をアップグレードすることが必要になることがある。これらのタイプの装置は、しばしば政府により規制されている。欠陥が発見され、再設計が進行中のときは、即座の暫定ソリューションが利用できる。従って、そのようなソリューションを既に現場に設置された装置に適用することが望ましい。
【０００４】
個人は時として、付属品のプログラムコードを、ホストシステムの観点からは不正な動作を行い、しかも、ホストシステムには通常の動作を報告することにより、ホストシステムが不都合は何も起きていないと思わせるように、悪意を持って改竄することがある。アップグレードを行う前に、付属品プログラムコードのいかなる不正な変更も検出し、アップグレードはそのような不正な変更が検出されない場合のみに行うことが望ましい。
【０００５】
この問題に対する１つのソリューションは、付属品が現場に設置される前に、例えば、容認される前のすべてのマイクロコードのアップグレードを認証する信頼できるマイクロコントローラを使用して、付属品に対してセキュリティ設計を行うことである。しかし、最初に付属品が現場に設置されるときは、セキュリティに対する関心および危険レベルは低く、時間の経過と共に、状況が変わって、安全でない付属品に関連する危険性が思いがけなく増大するというケースがたまにある。付属品を交換し、またはハードウェアの変更を行うためのコストは高すぎると考えられており、そのため、ホストシステムは、高リスクの環境において安全でない付属品を有することになる。
【０００６】
この問題に対する単純なソリューションは、ホストシステムに、付属品からのすべてのプログラムコードを読み取らせ、セキュアハッシング関数を使用してダイジェストを計算させ、その結果を、ある局所的に維持されるダイジェストと比較させることである。このアプローチには、２つの問題がある。第１番目として、付属品は、それがオリジナルのプログラムコードのコピーを維持し、ホストシステムからの読み込み要求を不正に取得し、ホストシステムに、オリジナルの格納プログラムコードのイメージを戻すように再プログラムできるということである。第２番目として、付属品に格納されたプログラムコードは、低速なシリアル接続を介して効果的に送信し、または遠隔的にアクセスするには大きすぎるということである。これらの例においては、ホストシステムに検証のために返されるダイジェストを計算することはより効果的である。
【０００７】
チャレンジレスポンスメカニズムを使用したとしても、単にダイジェストを計算するだけでは、付属品上のどこかのメモリにオリジナルのプログラムコードのコピーを維持している改竄された付属品を効果的に無効にすることはできない。
【０００８】
本発明の目的は、上記の不都合点の少なくとも１つを緩和あるいは除去することである。
【発明の開示】
【０００９】
一般的には、本発明は、プログラムコードイメージを格納するために使用できる付属品装置上の未使用のすべてのメモリを、高エントロピーのランダムデータで満たすことを含む。ホストシステムはまた、ランダムデータを含む付属品のメモリイメージの信頼できるコピーへのアクセスを有していなければならない。
【００１０】
付属品上の既存のプログラムは、ホストシステムにより呼び出し可能なアプリケーションプログラムインタフェース（ＡＰＩ）を有している。付属品は、もしＡＰＩを１つも有していないときは、必要であれば書き換えて、追加のＡＰＩを含むことができる。ホストシステムはＡＰＩを使用して、付属品上のメモリアドレスまたはメモリレンジのリストを付属品に送信する。このリストは、付属品により時間的に先行して推測されることを防止するために、常に内容が異なり、完全に予測不可能である。付属品は、リストと、リストにより参照された付属品装置のメモリの値から決定された代表値を生成する。好ましくは、代表値は、セキュアハッシュ関数への入力としての、供給されたメモリアドレスにおけるメモリ値を使用するダイジェストである。付属品により生成される、結果としてのダイジェストは、検証のためにホストシステムに返される。
【００１１】
メモリをランダムデータで埋めることにより、攻撃者は、プログラムイメージを交換し、古いプログラムイメージを維持するための付属品上の十分な領域を有することができない。プログラムイメージのみを交換しても、その前に、ハードウェアの交換を攻撃者に要求する、付属品に追加メモリを追加することなしには、攻撃者が付属品を改竄することはできない。メモリをランダムデータで埋めることにより、そして、このように暗黙的に認証過程にランダムデータを含むことにより、攻撃者は、検出されることなくプログラムイメージへの不正な変更を加えることが更にできなくなる。
【００１２】
最終的な結果は、ホストシステムが、付属品のプログラムコードは悪意を持って変更されていないというある保証を有することができることである。
【発明を実施するための最良の形態】
【００１３】
以下の説明およびそこで記載される実施形態は、本発明の原理の特別な実施形態の、例または複数の例を示すことにより提供される。これらの例は、本発明のそれらの原理を説明するためのものであり、それに制限されるものではない。以下の記述において、明細書および図を通して、類似の部分は、同じ個々の参照番号が付けられている。
【００１４】
図１を参照すると、付属品２２と通信するホスト２０が示されている。ホスト２０は一般的には、ＣＰＵ２４と、ＣＰＵ２４にアクセス可能なホストメモリ装置２６と、これもまたＣＰＵ２４にアクセス可能なホスト格納媒体２８と、ある入出力装置（図示せず）を有するコンピュータシステムである。アプリケーションプログラム３０は、ＣＰＵ２４上で実行される。アプリケーションプログラム３０は、ホスト格納媒体２８に格納でき、ホスト格納媒体２８は、ホスト２０に永続的にインストールされ、またはホスト２０から除去可能であり、またはホスト２０に遠隔アクセス可能である。アプリケーションプログラム３０は、付属品２２と通信し、その動作を指示する。
【００１５】
付属品２２は、一般的にはある計算能力を有している。典型的には、マイクロプロセッサまたはマイクロコントローラ３２を有している。付属品２２もまた、十分な計算能力を有する他のタイプのプログラマブルプロセッサを有している。例えば、付属品２２は、ＤＳＰ（デジタル信号プロセッサ）またはＦＰＧＡ（フィールド・プログラマブル・ゲート・アレイ）を備えていてもよい。プロセッサまたはマイクロコントローラ３２は、一般的にはメモリ格納空間へのアクセスを有しており、メモリ格納空間は、付属品メモリ装置３４と、揮発性メモリ装置３６に分割できる。ファームウェアプログラムコード３８、または埋め込みプログラムコード、またはマイクロコードは、マイクロコントローラ３２上で実行され、ホスト２０上で実行されるアプリケーションプログラム３０を補完し、更に、付属品２２の動作を制御する。
【００１６】
ファームウェアプログラムコード３８および永続的（不変）データは、付属品メモリ装置３４上または任意の永続的媒体上に格納できる。揮発性データ、つまり、プログラムの作動状態に関連するデータは、揮発性メモリ装置３６上に格納される。付属品メモリ装置３４または揮発性メモリ装置３６のいずれかはまた、半永続的データ、つまりパワーサイクルの間は永続的であるが、各パワーサイクルの間にプログラム的に改変できるデータを格納するためにも使用される。
【００１７】
データリンク４０は、アプリケーションプログラム３０とファームウェアプログラムコード３８の間の通信チャネルを必要なときに提供する。データリンク４０は、有線でもワイヤレスでもよい。例えば、接続ケーブルであっても、無線周波数接続であってもよい。ホスト２０と付属品２２の間の直接接続であってもよく、または、ある仲介ホストシステムを通して中継されてもよい。データリンク４０は恒久的であってもよく、またはより好ましくは、オンデマンドで確立される接続である。
【００１８】
アプリケーションプログラム３０とファームウェアプログラムコード３８のそれぞれは、お互いに通信するためのアプリケーションプログラムインタフェース（ＡＰＩ）を有している。特に、後述するが、ファームウェアプログラムコード３８は、アプリケーションプログラム３０が呼び出して、メモリアドレスのリストを転送するためのＡＰＩと、それを通してファームウェアプログラムコード３８が、メモリアドレスのリストの内容に基づいて計算されたダイジェストのような代表値を返すＡＰＩを有している。概念的にはファームウェアプログラムコード３８は、２つの分離したＡＰＩを有していると記述されるが、これらの２つのＡＰＩは、実際には単一のＡＰＩとして提供されてもよい。アプリケーションプログラム３０もまた、メモリアドレスのリストを送信し、返される代表値を受信するための対応するＡＰＩを有している。
【００１９】
ここでは、より揮発性が高いデータの格納のために使用される傾向にあるホストメモリ装置２６と、より永続性が高いデータの格納のために使用される傾向にあるホスト格納媒体２８があると区別されているが、ホスト２０は、揮発性および永続性データの両者を格納するための単一のデータ格納装置のみを有してもよい。同様に、付属品２２は、揮発性および永続性データの両者を格納するための単一のデータ格納装置のみを有してもよい。
【００２０】
理解されるであろうが、ホスト２０は、汎用コンピュータ、カスタマイズされた特別用途コンピュータ、または他のプログラマブル計算装置であってもよい。更に、ホスト２０は単一コンピュータシステムとして示され、記述されているが、それは、単に説明に都合がよいからである。ホスト２０は、集合的に組み合わされたシステムであり、いくつかのコンピュータシステムを含み、上記のようにタスクを実行すると理解される。当業者には理解できることであるが、ホスト２０により実行される計算および格納は、いくつかのネットワーク化されたコンピュータに分配してもよく、それによりシステムの機能および上述した方法の性能に影響を与えることはない。
【００２１】
図２および図３を参照すると、ファームウェアプログラムコード３８の整合性を検証する方法の例が詳細に記載されている。図２において、点線の左側は、ホスト２０により、またはホスト２０の構成要素上で一般的に実行される操作である。図２において点線の右側は、付属品２２または付属品２２の構成要素上で一般的に実行される操作である。
【００２２】
通常、ファームウェアプログラムコード３８のサイズは、付属品メモリ装置３４上で利用できるメモリのサイズよりも小さい。つまり、付属品メモリ装置３４は、通常は、未使用メモリ空間、つまり、ファームウェアプログラムコード３８にもファームウェアプログラムコード３８に関連するデータにも占有されていない空間を有する。敵対者が未使用メモリ空間を使用して任意の不正コードを格納するという機能を制限するために、検証に先立ち、すべての未使用メモリ空間は、ランダムデータで満たされる。ランダムデータは、好ましくは、高エントロピーを有する。高エントロピーのランダムデータは、圧縮するのが困難な傾向にあり、一方、ランダム性を有するが、低エントロピーのデータは、圧縮しやすい傾向がある。好ましくは、付属品メモリ装置３４のすべてのメモリ空間は、非圧縮性データで占有される。すべてのメモリ空間を非圧縮性データで満たすことは、敵対者がデータを圧縮して、それによりメモリ空間を得ようとすることを防止する。高エントロピーランダムデータを生成するために、多数の乱数生成アルゴリズムが利用できる。例えば、米国における米国立標準技術研究所（ＮＩＳＴ）により発刊された「デジタル署名規格」である、米国連邦情報処理標準規格公告186-2の「Change Notice 1（変更通知）」で指定された乱数生成アルゴリズムを使用できる。更に、エントロピーのより低いデータのブロック暗号化は、より高いエントロピーを生成する傾向にある。
【００２３】
ステップ１１０において、付属品装置２２上のすべての未使用メモリは、ランダムデータにより満たされ、埋められたメモリイメージの信頼できるコピーは、後の参照または使用のために検索される。このステップは、付属品装置２２により実行することもできるが、すべての未使用メモリをランダムに生成された高エントロピーデータで埋めることを可能にする既存のツールがある。一般的には、データのランダム性は、未使用メモリ空間を満たすために採用されるツールにより制御される。好ましくは、メモリの埋め込みは、付属品が市場に出される前に、開発設備または製造現場において実行される。
【００２４】
ランダムデータで埋めた後、付属品２２上のすべてのメモリ空間は占有される。図３を参照すると、付属品メモリ空間２００は、連続するプログラムコードおよび永続的データ空間２０２と、未使用メモリ空間２０４に分割される。未使用メモリ空間２０４は、ランダムデータ２０６で満たされる。図３は、ファームウェアプログラムコード３８がメモリの連続セグメント、つまり、プログラムコードおよび永続的データ空間２０２の連続部分を占有しているが、ファームウェアプログラムコード３８が、いくつかの離散メモリセグメントを占有することもできる。同様に、永続的（不変）データは、メモリの連続セグメントまたはいくつかの離散メモリセグメントを占有することもできる。プログラムコードおよび永続的データ空間２０２は連続してもいなくても、未使用すべてのメモリ空間はランダムデータにより満たされ、または埋められる。
【００２５】
理解されることではあるが、付属品メモリ空間２００は、揮発性メモリ装置３６上の揮発性データにより占有されたメモリ空間を含むことができる。検証工程において変化しない（またはよく定義された方法で変化しない）メモリ要素は検証できる。付属品メモリ空間２００はまた、シリアルＥＥＰＲＯＭのような「周辺」メモリ装置上のデータにより占有されたメモリ空間も含むことができる。実際、付属品メモリ空間２００は、付属品メモリ装置３４と揮発性メモリ装置３６両者の物理的空間外の部分さえも含むことができる（しかし、これらのアドレスは、物理的アドレスの陰の部分として折り返されている）。当然、これらは、付属品２２（およびホスト２０）が任意の、そしてすべての利用できるメモリ空間にアドレスできるメモリアドレス方式をサポートし、バンク切替え、オーバーレイ、およびシャドウイングのような特別なメモリ構成をサポートすることを要求する。実際、異なるメモリアドレス方式および特別なメモリ構成を、セキュリティをより高めるために有効に利用することができる。例えば、検証されたメモリアドレスが物理的メモリ空間の外側のメモリ空間に対応するときは、互換性があり、しかしより大きなメモリ領域を必要とする修正されたプログラムが、必然的により大きな装置上で起動中に、オリジナルプログラムと、より小型の装置の検証工程をエミュレートすることは難しい。
【００２６】
付属品２２上のメモリのイメージは、占有されていないメモリ空間は残されていないが、後の参照または使用のために検索される。イメージは、信頼される方法で生成されて保存される。例えば、イメージは、付属品２２の製造現場でのプログラミングのような、信頼できる操作中に付属品２２から取得できる。工場が付属品イメージを大量にプログラムし、イメージを、これもまたホストコードとデータイメージを生成する開発設備の別の場所で生成することも可能である。イメージがどのように生成されようとも、イメージは信頼できる方法で生成され提供される。イメージが保存されるときは、イメージはまた信頼できる方法で保存される。最終的な結果、イメージの信頼できるコピーが、必要なときに、取得できる。
【００２７】
ホスト２０は、占有されていないメモリ空間は残されていない、付属品２２上のメモリのイメージの信頼できるコピーをステップ１２０で取得する。一般的に、ホスト２０は、イメージが改竄されるリスクを最小限に抑えるために局所的には信頼できるイメージを格納しない。その代わりに、ホスト２０には、イメージの信頼できるコピーへのアクセスが提供される。ここではただ１つの信頼できるメモリイメージにしか言及しなかったが、付属品２２のいくつかの異なるメモリイメージをホスト２０が利用できるようにしなければならないようにすることも可能である。これは、付属品２２が、その製造者により、時間の経過と共に、何回かアップグレードされることもあるからである。それぞれの以前のアップグレードは、異なるメモリイメージという結果になる。付属品２２が現場でアップグレードされると、付属品２２は、いくつかのアップグレードのいずれかの１つに対応するか、またはそのオリジナルバージョンに対応する。
【００２８】
理解されるであろうが、このステップは、メモリイメージの信頼できるコピーの保存に続く次のステップとして説明されているが、これら２つのステップは、何日も、何ヶ月も、または数年も離れていることもある。メモリイメージの信頼できるコピーが付属品の製造中に保存され、イメージの信頼できるコピーが、何年も後になって、現場において展開された付属品の修理が行われるときに検索されることもある。更に、このステップは、ホスト側の第１ステップとして説明されたが、これは必要なことではない。このステップは、予測代表値を計算する前に完了する必要があり、計算前であれば、いつでも実行できる。
【００２９】
図２を参照すると、ホスト２０はステップ１３０で、付属品２２に、検証工程を開始するためのメモリアドレスのリストを送信する。このリストは、付属品メモリ装置３４上のメモリアドレスのレンジ、またはメモリアドレスのいくつかのレンジである。例えば、図３は、ランダムに選択された３つのメモリセグメントまたはメモリレンジを示している。それらは、第１開始アドレス２１０と第１終了アドレス２１２の間の第１メモリレンジ２０８、つまりメモリセグメントAと、第２開始アドレス２１６と第２終了アドレス２１８の間の第２メモリレンジ２１４、つまりメモリセグメントBと、第３開始アドレス２２２と第３終了アドレス２２４の間の第３メモリレンジ２２０、つまりメモリセグメントCである。
【００３０】
このリスト、またはメモリアドレスのレンジは、本質的にランダムであり、または少なくとも予測不可能であり、それによりレンジを付属品２２が予測することはできない、つまり、リストを、付属品２２上に格納されているファームウェアコードを悪意を持って改竄しようと試みる敵対者が予測することはできない。開始点と終了点の選択が予測不可能であるばかりでなく、選択されたメモリレンジの順番も予測不可能である。例えば、リストは、セグメントCのアドレスを第１レンジとして、セグメントＡのアドレスを第２レンジとして、そしてセグメントＢのアドレスを第３レンジとして含むことができる。選択されたメモリレンジの順番を変更することにより異なるリストが生成され、以下に説明するように、ステップ１４０において異なる代表値が生成されることになる。このリストは、典型的にはホスト２０により生成される。しかし、リストは、それが完全に予測不可能であり、それが生成されるたびに異なっている限りいかなる方法で生成してもよい。ホスト２０は、一般的には、より大きな計算能力を有しているので、ホスト２０は、典型的には、リストを生成してそれを付属品２２に送信する。
【００３１】
例としての１つの実践において、リストに含まれるメモリアドレスレンジの１つは、付属品２２の操作にとって重要であると考えられるプログラムコードを常に含んでいる。つまり、ホスト２０は、アプリケーションプログラム３０の全体の重要コードを含むメモリセグメントを常に含んでいる。重要なコードを含むメモリは常に選択されたメモリレンジに含まれるが、重要コードを含むメモリセグメントは、上述したように、リスト内にランダムに配置することができる。
【００３２】
メモリアドレスのリストを受信すると、付属品２２はステップ１４０において、入力としてメモリアドレスのリストを取る値と、供給されたアドレスでのメモリ値を生成する。生成された値は、供給されたアドレスにおけるメモリ値の代表である。生成された値が、リストと、供給されたメモリアドレスでの実際の値を代表するのであれば、多数のアルゴリズムを使用して値を生成することができる。例えば、供給されたメモリアドレスのメモリの値はまず読み込まれて、ストリングとして連結することができる。このストリングは、従って代表値である。好ましくは、代表値は、セキュアハッシュアルゴリズムを使用して計算されたダイジェストである。セキュアハッシュアルゴリズムは、供給されたメモリアドレスにおけるメモリ値をその入力としてダイジェストを計算する。ＳＨＡ（セキュアハッシュアルゴリズム）のセキュリティ特性を有するいかなるダイジェスト用アルゴリズムも使用することができる。このセキュアハッシュ関数は、例えば、ＳＨＡ−１またはＭＤ５に基づく１つである。好ましくは、付属品手段に既に存在するＳＨＡのセキュリティ特性を有するダイジェスト用アルゴリズムを使用できるか、または付属品２２の特別なプロセッサタイプでの効率に依存して、ＳＨＡ−１またはＳＨＡ−２５６の１つを使用することができる。付属品２２は、結果としての代表値を、ステップ１５０においてホスト２０に返す、つまり送信し、それはステップ１６０において、ホスト２０により受信される。
【００３３】
図３に示される例は、永続的データおよびファームウェアプログラムコード３８により全体が占有されているメモリ空間に対応する第１メモリレンジ２０８と、ランダムデータで満たされた、未使用メモリ空間２０４に対応する第３メモリレンジ２２０と、部分的にファームウェアプログラムコード３８と、部分的にランダムデータを含むメモリのセクションに対応する第２メモリレンジ２１４を有する。理解されるであろうが、他の選択も可能である。重要なことは、リストの可能なセット（ホスト２０により要求され得る）が、十分に大きくて、アドレスの選択が完全に予測不可能であるということである。これは、計算が、格納および計算という両者の観点から見て、対価の高い、または実現不可能であるので、対応する代表値のすべて（またはその意味のあるサブセットでさえも）を予め計算することを阻止する。
【００３４】
ファームウェアプログラムコード３８は、これらのセキュアハッシングアルゴリズムの１つまたはいくつかを実践するモジュールを有することができる。１つのセキュアハッシングアルゴリズムのみが実践されるときは、付属品は実践されたセキュアハッシング関数を使用してダイジェストを計算し、受信したメモリレンジを入力とし、結果としてのダイジェストをホストシステムに送信する。ファームウェアプログラムコード３８が２つ以上のセキュアハッシングアルゴリズムを実践するときは、実践されたセキュアハッシングアルゴリズムの１つを使用してダイジェストが生成される。結果としてのダイジェストは、使用されたセキュアハッシングアルゴリズムの表示と共にホスト２０に送信される。理解されるであろうが、ホスト２０または付属品２２のいずれかは、特別なセキュアハッシングアルゴリズムを選択して、ダイジェストを生成するために使用したセキュアハッシングアルゴリズムを他に知らせてもよい。
【００３５】
ファームウェアに追加実装するときは、ファームウェアプログラムコード３８は、ランダムに生成されたメモリアドレスのリストを受信するためのＡＰＩを有していなくてもよい。また、セキュアハッシュアルゴリズムを使用してダイジェストを生成するモジュールも有していなくてよい。そのような付属品に対して安全なアップグレード、つまり、ファームウェアコードが認証できた場合のみに実行されるアップグレードを準備するために、まず、認証機能を付属品上に追加実装することが必要である。つまり、まず、付属品２２上の既存のプログラムを書き換え、ホスト２０により、メモリアドレスのリストを受け取るために呼び出すことができる追加ＡＰＩと、リストから計算された代表値をホストに返すことができる追加ＡＰＩを含むようにすることが必要である。書き換えられたファームウェアプログラムは、代表値を計算するためのモジュールまたはダイジェストを計算するためのセキュアハッシングアルゴリズムを実行する１つのまたは複数のモジュールも含む。
【００３６】
ホスト２０が結果としてのダイジェストまたは代表値をステップ１６０において付属品２２から受信した後、ホスト２０は、付属品のメモリイメージの信頼できるコピーを使用して予測代表値をステップ１７０において計算する。好ましくは、付属品２２により使用されたアルゴリズムと同じものがホスト２０により使用されて、予測代表値が生成される。しかし、これは必要なことではない。ホスト２０により使用されたアルゴリズムは、予測代表値が受信した代表値と同じであるために、付属品２２により使用されたものと等価であることのみが必要である。付属品２２が２つ以上のセキュアハッシングアルゴリズムを実行し、しかし、その１つのみを使用してダイジェストを計算すると、ホスト２０は、同じまたは等価なアルゴリズムを選択して、予測代表値を計算する。
【００３７】
ステップ１８０において、ホスト２０は、付属品２２から受信した代表値を、付属品プログラムイメージを検証するために局所的に計算された予測代表値と比較する。ファームウェアプログラムコード３８は、これらの２つの値が同一またはお互いに等価でなければ認証されない。
【００３８】
上述したように、本方法の第１ステップは、付属品上のすべてのメモリが占有されていることを確実にすることである。付属品の機能を実行するために使用されるコンパイルされたプログラムが付属品上の物理的メモリよりも小さい場合は、残りの部分は、完全にランダムな、高エントロピーデータにより埋め込まれる。埋め込まれたデータは、メモリイメージの一部となり、追加実装アップグレードの間、ホストシステムにより利用されるようになる。
【００３９】
更なる例としての実践において、ホスト２０は、データストリングをステップ１３０において、メモリアドレスのリストと共に付属品２２に送信する。ストリングはランダムであってもよく、または、付属品（または、ホストシステムまでも）の固有識別情報のような識別情報を含んでいてもよい。ストリングが、セキュアハッシュ関数への補助入力として使用されるときは、本方法は典型的には、チャレンジレスポンス法と称される。しかし、付属品への不法なプログラムコードの注入を防止することは、依然として、メモリイメージ中のランダムな埋め込みデータに依存している。
【００４０】
種々の例が詳細に説明された。当業者は、多数の修正、適合、および変形が、本発明の範囲を逸脱することなく上記の例になされることを理解するであろう。上記の好適な実施例における変更またはそこへの追加は、本発明の性質、精神、または範囲から逸脱することなくなされるので、本発明は、これらの詳細に制限されず、付随する請求項によってのみ制限される。
【００４１】
説明の目的で、しかしこれに制限されることなく、実施形態が、添付された図面を参照して、例により、より詳細に説明される。
【図面の簡単な説明】
【００４２】
【図１】付属品と通信するホストシステムを示すブロック図である。
【図２】図１に示された付属品におけるプログラムコードの整合性を検証する方法のステップを示すフローチャート図である。
【図３】ランダムデータで埋められた、図１に示された付属品上の未使用メモリ空間と、ホストシステムによりランダムに選択された付属品上のメモリレンジを模式的に示している。
【図１】
2008541211.tif 000003
【図２】
2008541211.tif 000004
【図３】
2008541211.tif 000005
【国際調査報告】
2008541211.tif 000006
2008541211.tif 000007
2008541211.tif 000008