(57)【要約】【課題】ソフトウェアのセキュア認証済チャネルを提供すること。【解決手段】ソフトウェア製作者は、自己のモジュールを検査し、そのモジュールが占有するメモリ内のアドレスの範囲を判定する。メモリ内のアドレスの保護される範囲が、ハッカーによるパッチ当てなどの変更を可能にしないように事前に定義される。各製作者が、協調して処理を行うことをを望む他の全ての製作者に、記憶保護域を記述するアドレスの範囲およびモジュールの既知の適切なバージョンを配布する。他の製作者は、記憶保護域のディジタル署名を返し、これらのディジタル署名が、第１の製造業者のモジュールに保管される。それに相当するものとして、他方の製作者が、自分自身のモジュールに対して同一のことを行う。その後、２個のモジュールの間のセキュア通信チャネルを実現するために、モジュールが、まず、お互いに、前に作成られた署名を渡す。その後、真正の許可されたモジュールとの通信が行われていることを保証するために、署名および記憶保護域内のアドレス範囲の使用を介して、各モジュールが、他方のモジュールにパッチが当てられていないことを検査する。さらに、モジュールは、それぞれ、呼び出す予定の他のモジュール内のすべてのエントリ・ポイントが、実際に記憶保護域内にあることを検証する。両方のモジュールが信頼に値するものとして検証される場合に、これらのモジュールは、自由にお互いを呼び出すことができる。各モジュールは、呼び出された時に、他方のモジュールの記憶保護域内から呼び出されたことを検証しなければならない。【選択図】図３
2004509392.tif 000002
【特許請求の範囲】
【請求項１】
単一マシン上のソフトウェア・モジュールのピア・ツー・ピア認証のための方法であって、
ソフトウェア・モジュールが占有する保護されたアドレス範囲を判定するステップと、
前記保護される範囲内のコードの完全性を検証するステップと、
そのモジュールによって実行される関数呼出しが、前記範囲から生じ、前記範囲にリターンすることを検証するステップと、
を含む方法。
【請求項２】
前記認証方法が、各モジュールが他方のモジュールを認証するように２個のモジュールの間で実行される請求項１に記載の方法。
【請求項３】
前記モジュールの一方または両方が、自己完全性検査のための１または複数の機構を配置する請求項２に記載の方法。
【請求項４】
前記保護されたアドレス範囲およびソフトウェア・モジュールを前記認証方法を使用するエンティティに配布するステップをさらに含む請求項１乃至３に記載の方法。
【請求項５】
前記保護されたアドレス範囲に対するディジタル署名と共に返される改訂されたソフトウェア・モジュールを受け取るステップをさらに含む請求項４に記載の方法。
【請求項６】
前記ディジタル署名が、ＲＳＡ署名、ＤＳＡ署名、署名されるＳＨＡ−１などの暗号ハッシュ、およびディジタル・シグネットからなるディジタル署名の群から選択されるディジタル署名を含む請求項５に記載の方法。
【請求項７】
非準拠ソフトウェア・モジュールを準拠ソフトウェア・モジュールに変換するツールをさらに含む請求項５または６に記載の方法。
【請求項８】
メモリ内のモジュールのロケーションに依存しない正規ハッシュに基づく署名をさらに含む請求項５に記載の方法。
【請求項９】
前記ディジタル署名が、周期的、ランダム、およびモジュールが使用されるたびに、からなる検査技法の群から選択される検査技法を使用して検査され、前記検査が、前記ソフトウェア・モジュールの動作中に実行される請求項５乃至８に記載の方法。
【請求項１０】
モジュールの署名が、複数の実施形態を介して生成され、保管され、前記実施形態が、すべての製作者の前記署名を生成し、保管する認証機関と、複数の認証機関および製作者がそれらの間で署名の生成および保管を分散する分散実施形態とからなる実施形態の群から選択される実施形態を含む請求項５乃至９のいずれかに記載の方法。
【請求項１１】
呼び出されるすべての関数が検証された保護される範囲内に存在することを検証するステップをさらに含む請求項１乃至１０のいずれかに記載の方法。
【請求項１２】
単一マシン上のソフトウェア・モジュールのピア・ツー・ピア認証の命令を含むコンピュータ可読媒体であって、
ソフトウェア・モジュールが占有するアドレスの保護される範囲を判定する命令と、
前記保護される範囲内のコードの完全性を検証する命令と、
そのモジュールによって実行される関数呼出しが、前記範囲から生じ、前記範囲にリターンすることを検証する命令と、
を含むコンピュータ可読媒体。
【請求項１３】
前記認証命令が、各モジュールが他方のモジュールを認証するように２個のモジュールの間で実行される請求項１２に記載のコンピュータ可読媒体。
【請求項１４】
前記モジュールの一方または両方が、自己完全性検査のための１または複数の機構を配置する請求項１３に記載のコンピュータ可読媒体。
【請求項１５】
前記保護されるアドレス範囲およびソフトウェア・モジュールを前記認証方法を使用するエンティティに配布する命令をさらに含む請求項１２乃至１４に記載のコンピュータ可読媒体。
【請求項１６】
前記保護されるアドレス範囲に対するディジタル署名と共に返される改訂されたソフトウェア・モジュールを受け取る命令をさらに含む請求項１５に記載のコンピュータ可読媒体。
【請求項１７】
前記ディジタル署名が、ＲＳＡ署名、ＤＳＡ署名、署名されるＳＨＡ−１などの暗号ハッシュ、およびディジタル・シグネットからなるディジタル署名の群から選択されるディジタル署名を含む請求項１６に記載のコンピュータ可読媒体。
【請求項１８】
非準拠ソフトウェア・モジュールを準拠ソフトウェア・モジュールに変換するツールをさらに含む請求項１６または１７に記載のコンピュータ可読媒体。
【請求項１９】
メモリ内のモジュールのロケーションに依存しない正規ハッシュに基づく署名をさらに含む請求項１６に記載のコンピュータ可読媒体。
【請求項２０】
前記ディジタル署名が、周期的、ランダム、およびモジュールが使用されるたびに、からなる検査技法の群から選択される検査技法を使用して検査され、前記検査が、前記ソフトウェア・モジュールの動作中に実行される請求項１６乃至１９に記載のコンピュータ可読媒体。
【請求項２１】
モジュールの署名が、複数の実施形態を介して生成され、保管され、前記実施形態が、すべての製作者の前記署名を生成し、保管する認証機関と、複数の認証機関および製作者がそれらの間で署名の生成および保管を分散する分散実施形態とからなる実施形態の群から選択される実施形態を含む請求項１６乃至２０のいずれかに記載のコンピュータ可読媒体。
【請求項２２】
呼び出されるすべての関数が検証された保護される範囲内に存在することを検証することをさらに含む請求項１２乃至２１のいずれかに記載のコンピュータ可読媒体。
【請求項２３】
単一マシン上のソフトウェア・モジュールのピア・ツー・ピア認証のシステムであって、
ソフトウェア・モジュールが占有するアドレスの保護される範囲を判定する判定ユニットと、
前記保護される範囲内のコードの完全性を検証する検証ユニットと、
そのモジュールによって実行される関数呼出しが、前記範囲から生じ、前記範囲にリターンすることを検証する第２の検証ユニットと、
を含むシステム。
【請求項２４】
前記認証が、各モジュールが他方のモジュールを認証するように２個のモジュールの間で実行される請求項２３に記載のシステム。
【請求項２５】
前記モジュールの一方または両方が、自己完全性検査のための１または複数の機構を配置する請求項２４に記載のシステム。
【請求項２６】
前記保護されるアドレス範囲およびソフトウェア・モジュールを前記認証方法を使用するエンティティに配布する送信ユニットをさらに含む請求項２３乃至２５に記載のシステム。
【請求項２７】
前記保護されるアドレス範囲に対するディジタル署名と共に返される改訂されたソフトウェア・モジュールを受け取る受信ユニットをさらに含む請求項２６に記載のシステム。
【請求項２８】
前記ディジタル署名が、ＲＳＡ署名、ＤＳＡ署名、署名されるＳＨＡ−１などの暗号ハッシュ、およびディジタル・シグネットを含むディジタル署名の群から選択されるディジタル署名を含む請求項２７に記載のシステム。
【請求項２９】
非準拠ソフトウェア・モジュールを準拠ソフトウェア・モジュールに変換するツール・ユニットをさらに含む請求項２７または２８に記載のシステム。
【請求項３０】
メモリ内のモジュールのロケーションに依存しない正規ハッシュに基づく署名をさらに含む請求項２７に記載のシステム。
【請求項３１】
前記ディジタル署名が、周期的、ランダム、およびモジュールが使用されるたびに、を含む検査技法の群から選択される検査技法を使用して検査され、前記検査が、前記ソフトウェア・モジュールの動作中に実行される請求項２７乃至３０に記載のシステム。
【請求項３２】
モジュールの署名が、複数の実施形態を介して生成され、保管され、前記実施形態が、すべての製作者の前記署名を生成し、保管する認証機関と、複数の認証機関および製作者がそれらの間で署名の生成および保管を分散する分散実施形態とからなる実施形態の群から選択される実施形態を含む請求項２７乃至３１のいずれかに記載のシステム。
【請求項３３】
呼び出されるすべての関数が検証された保護される範囲内に存在することを検証する検証ユニットをさらに含む請求項２３乃至３２のいずれかに記載のシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ソフトウェアの耐改竄性（ｔａｍｐｅｒ　ｒｅｓｉｓｔｅｎｃｅ）に関する。より具体的には、本発明は、システム上の２個のソフトウェア・モジュール間のセキュア認証済チャネル（Ｓｅｃｕｒｅ　Ａｕｔｈｅｎｔｉｃａｔｅｄ　Ｃｈａｎｎｅｌ）を確立する方法および装置に関する。
【０００２】
【従来の技術】
この開示において、情報処理ユニットを含むデバイスの製作者（ｍａｎｕｆａｃｔｕｒｅｒ）をエンティティと称する。あるタイプのソフトウェア・アプリケーションは、自分自身をハッキングから保護しなければならない。例えば、ＤＶＤビデオ再生装置には、スクランブル方式を使用してユーザがＤＶＤムービーをコピーできないようにする保護を含めることが、ライセンスによって要求されている。最近では、全米レコード協会によって開始されたＳＤＭＩ（Ｓｅｃｕｒｅ　Ｄｉｇｉｔａｌ　Ｍｕｓｉｃ　Ｉｎｉｔｉａｔｉｖｅ）が、耐改竄性を有するソフトウェアによってのみ満たすことができる要求仕様を公表した。
【０００３】
ＳＤＭＩの要求仕様では、特定のアプリケーションが、異なる製作者による異なるソフトウェア・モジュールから構成されることが想定されている。例えば、ある製作者は、ＩＢＭ　Ｅｌｅｃｔｏｒｏｎｉｃ　Ｍｅｄｉａ　Ｍａｎａｇｅｍｅｎｔ　Ｓｙｓｔｅｍ（商標）のようなインターネットを通じた音楽のセキュアなダウンロードを可能にする電子音楽配信システムを作成することができ、第２の製作者は、ＳＯＮＹ（Ｒ）のメモリースティック・ウォークマン（商標）のようなセキュアなフラッシュ・メモリ音楽再生装置をサポートするソフトウェアを作成することができる。消費者は、購入し、ダウンロードした音楽を、自分のフラッシュ・メモリ音楽再生装置に置くことを望んでいる。
【０００４】
ＳＤＭＩの要求仕様には、２個の準拠するソフトウェア・モジュールの間のセキュア認証済チャネル（Ｓｅｃｕｒｅ　Ａｕｔｈｅｎｔｉｃａｔｅｄ　Ｃｈａｎｎｅｌ）すなわちＳＡＣという概念が記載されている。そこでは、２の異なる製作者によって作成された、同一マシン上でお互いのエントリ・ポイントをセキュアに呼び出すことを望む２個のモジュールの間の通信を記述するモデルが提案されている。図１に、同一マシン（１０６）のメモリにロードされた少なくとも２個のモジュール（１０２、１０４）を含むセキュア認証済チャネル（１００）が示されている。これらのモジュールは、異なるベンダによって作成され、公開されたＡＰＩを使用して互いに通信する。不法な複製をするために自分自身を間に挟み音楽コンテンツを盗むハッキング・プログラムに対する保護はない。その理由により、ＳＤＭＩは、認証の機構およびこれらの２つのモジュールの間の通信をセキュアなものとする機構（セキュア認証済チャネル）を要求する。
【０００５】
図２に、ＳＤＭＩの要求仕様に対応して設計された従来技術のソフトウェア・アーキテクチャのセキュリティ・コンテンツ（２００）を示す。ソフトウェア・モジュールには、公開鍵証明書（２０２）、公開鍵（２０４）、および秘密鍵（２０６）が含まれる。例えば、ＳＡＣは、下記のように実施される。
１．各モジュールが、自分自身の完全性（ｉｎｔｅｇｒｉｔｙ）に対する責任を負っている。
２．各モジュールが、その公開鍵（２０４）を証明する標準的な公開鍵証明書（２０２）を有している。
３．各モジュールが、秘密に保持すべき秘密鍵（２０６）を有している。
４．標準的な公開鍵プロトコルを使用して、モジュールの間のセッション鍵を作成する。
５．後に続いてモジュール間でやりとりされるデータおよび制御を、セッション鍵（図２には図示せず）を用いて暗号化し、データの不正な改竄（ｔａｍｐｅｒｉｎｇ）または盗聴を防ぐ。
【０００６】
【発明が解決しようとする課題】
本質的には、この手法は、２の当事者の間の通信を保護する周知のプロトコルである。残念ながら、ＳＡＣに対してこの手法を使用することに対して幾つかの問題がある。セキュアな通信プロトコルでは、攻撃者が通信する二人の当事者の通信パイプラインの外部にいるだろうが、ソフトウェアに関してはそうではない。ハッカーは、両方のモジュールを見ることができ、一方または両方にパッチを当てることができるので、秘密鍵の秘密保持が現実の問題となる。同様に、各モジュールが、パッチを当てられ、または改竄をされてはいないことを確認する自己完全性の検査も非常に困難である。従って、このプロトコルは最弱のリンクと同程度に弱く、秘密鍵の一方が知られた場合や１のモジュールのパッチ当てが成功した場合にＳＡＣが破られることになる。
【０００７】
【課題を解決するための手段】
本発明は、単一マシン上のソフトウェア・モジュールのピア・ツー・ピア認証の方法を提供する。この方法には、ソフトウェア・モジュールが占有するアドレスの保護される範囲を判定するステップと、前記保護される範囲内のコードの完全性を検証するステップと、そのモジュールによって実行される関数呼出しのすべてが、前記範囲から生じ、前記範囲にリターンすることを検証するステップとが含まれる。
【０００８】
本発明の好適な実施形態によれば、２個のソフトウェア・モジュール間の接続の認証性およびセキュリティを安全なものとしかつ検証する、より効率的で有効な方法、装置、および製品が提供される。
【０００９】
好適には、モジュールが、許可されたモジュールと許可されないモジュールを識別できるようにするソフトウェアの配信を制御する改良されたシステムおよび方法が提供される。
【００１０】
好適には、本発明は、新しいセキュア認証済チャネル（ＳＡＣ）を提供する。好適な実施形態によれば、各モジュールが、自分自身の完全性に関して責任を負うのでなく、他のモジュールの完全性の責任を負っていることが、このプロトコルの長所である。ソフトウェアの通信プロトコルの本来的な欠点は、ＳＡＣの両方の実装がお互いおよび攻撃者に可視であることである。好ましいことに、本発明によれば、欠点であったものを長所に変えることができる。
【００１１】
好適な実施形態によれば、本発明は、まず、各々のソフトウェア製作者が自己のモジュールを試験し、モジュールが占有するメモリ内のアドレスの範囲を判定することによって実施される。メモリ内のアドレスのどの範囲が、ハッカーによってパッチを当てられることが許されないかを判断する。そのような範囲を、記憶保護域と称する。典型的には、記憶保護域には、モジュールの全てのプログラム・コード及びプログラム・コードの機能を達成するのに必要なデータの一部が含まれる。
【００１２】
近年のプログラミング技法では、ソフトウェア・モジュールは、しばしばロケーション非依存コード（ｌｏｃａｔｉｏｎ　ｉｎｄｅｐｅｎｄｅｎｔ　ｃｏｄｅ）として作成される。最終的には、モジュールのアドレスは、最終製品のメモリ・マップでのロードの間に解決される。好適には、ロケーション非依存コードであるので、実行時に記憶保護域の絶対アドレスおよび長さが判定される。この理由から、好適には、相対基底としてコード・セグメントの先頭を使用する基底アドレスおよび長さの指定が可能とされている。好適には、アドレス範囲が供給されない場合は、コード・セグメント全体がデフォルトとされる。
【００１３】
好適な実施形態によれば、次に、各製作者は、相互に協調したオペレーションを望む他の全ての製作者に、記憶保護域を記述したアドレス範囲およびモジュールの既知の適切なバージョンを配布する。好適には、他の製作者は、記憶保護域のディジタル署名を返し、これらのディジタル署名は、第１の製作者のモジュールに保管される。好適には、署名は、記憶保護域の機械コード命令に対して計算される。好適には、これらの全てが、モジュールがフィールドに展開される前に、製造時に行われる。
【００１４】
好適には、相当するものとして、他の製作者が自分自身のモジュールについて同一のことを行う。２個のモジュールの間のセキュアな通信チャネルをもたらすために、本発明の１の好適な実施形態によるモジュールは、まず、前に作成された署名をお互いに渡しあう。これは、署名が秘密でないので、モジュールがフィールドで実際に動作する時に行うことができる。本発明の代替の好適な実施形態では、各モジュールに、フィールドでの実際の動作中に通信することが期待される他のモジュールの署名のコピーが含まれる。
【００１５】
その後、好適な実施形態によれば、通信が真正の許可されたモジュールとの間で行われていることを保証するために、各モジュールが、署名および記憶保護域内のアドレス範囲の使用を通じて他のモジュールのアドレス範囲などに関してディジタル署名を検証することによって、他のモジュールにパッチが当てられていないことを検査する。
【００１６】
好適には、モジュールは、両方のモジュールが信頼できるものとして検証された場合に、お互いを自由に呼び出すようにされる。好適には、各モジュールは、呼び出されたときに、他のモジュールの記憶保護域内から呼び出されたことを検証する。また、本発明の好適な実施形態では、他のモジュール内のエントリ・ポイントを呼び出す前に、モジュールが、それが呼び出す予定の関数が実際にターゲット・モジュールの記憶保護域内にあることを確認する。これらの検査は、攻撃者が２個のモジュールをメモリにロードし、署名検査が完了するのを待機し、その後、第３モジュール内からいずれかのモジュールのエントリ・ポイントを呼び出すことを防ぐためのものである。
【００１７】
もう１つの態様によれば、本発明は、単一マシン上のソフトウェア・モジュールのピア・ツー・ピア認証の命令を含むコンピュータ可読媒体であって、ソフトウェア・モジュールが占有するアドレスの保護される範囲を判定する命令と、前記保護される範囲内のコードの完全性を検証する命令と、そのモジュールによって実行されるすべての関数呼出しが、前記範囲から生じ、前記範囲にリターンすることを検証する命令とを含むコンピュータ可読媒体を提供する。
【００１８】
もう１つの態様によれば、本発明は、単一マシン上のソフトウェア・モジュールのピア・ツー・ピア認証のシステムであって、ソフトウェア・モジュールが占有するアドレスの保護される範囲を判定する判定ユニットと、前記保護される範囲内のコードの完全性を検証する検証ユニットと、そのモジュールによって実行されるすべての関数呼出しが、前記範囲から生じ、前記範囲にリターンすることを検証する第２の検証ユニットとを含むシステムを提供する。
【００１９】
本発明の好適な実施形態を、例としてのみ、図面に関してここに説明する。
【００２０】
【発明の実施の形態】
［例示的な実施形態−ソフトウェアのセキュア認証済チャネル］
この実施形態には、モジュールの改竄、置換を検出し、プログラム・モジュールのハッキングを防ぐためにコンピュータ内のコンピュータ・プログラム・コード・モジュールの完全性を検証する方法が含まれる。具体的には、各プログラム・モジュールが、他のプログラム・コード・モジュールの完全性の検証に対して責任を負う。換言すると、マスタ−スレーブ関係なしに、独立のピア（ｐｅｅｒ）モジュールがお互いを検査する。
【００２１】
本発明の実施形態では、新規なセキュア認証済チャネル（ＳＡＣ）が提供される。このプロトコルの長所は、各モジュールが自分自身の完全性に責任を負うのではなく、他のモジュールの完全性に責任を負っていることである。ＳＡＣの両側が、お互いに、かつ、攻撃者を含む他の当事者に可視であることであるという伝統的なソフトウェアの通信プロトコルの本来的な欠点が、いま長所に変えられる。
【００２２】
図３に、モジュール署名（ｍｏｄｕｌｅ　ｓｉｇｎｉｔｕｒｅ）を生成するための本発明の好適な実施形態を図示するフロー図（３００）が含まれる。まず、各ソフトウェアの製作者が、マニュアルまたは自動のいずれかで、自分のモジュールを検査し、当該モジュールが占有するメモリ内のアドレスの範囲を判定する（３０２）。ハッカーによる攻撃の可能性があるので、メモリ内のどのアドレス範囲を完全な状態に保たなければならないかに関する判定を行う（３０４）。代替的には、メモリ内のアドレスのどの範囲にモジュールの主機能が含まれるかに関する判定を行う。この範囲には、ＳＡＣを利用する他のモジュールに対して発せられる呼出しの全てが含まれ、そのような範囲を記憶保護域と称する。典型的には、記憶保護域には、モジュールの全てのプログラム・コード及びプログラム・コードの機能を達成するのに必要なデータの一部が含まれる。
【００２３】
次に、各製作者は、相互に協調したオペレーションを望む他の全ての製作者に、記憶保護域を記述したアドレスの範囲およびモジュールの既知の適切なバージョンを配布する（３０６）。他の製作者は、記憶保護域に対するディジタル署名を返す（３０８）。好適には、署名は、記憶保護域全体をハッシュ化し、ディジタル署名のためにそのハッシュを使用することによって生成される。その後、他のモジュールの他の製作者によって供給されるディジタル署名を、第１の製作者のモジュールに保管し（３１０）、改訂されたソフトウェア・モジュールを、ソフトウェア・モジュールの製作者に転送する。また、アドレスの範囲が、第１の製作者のモジュールに保管される。これは、署名を正しく検証できるようにし、呼出し元のルーチンおよび呼び出されるルーチンのエントリ・ポイントを判定するためである。換言すると、ＳＡＣは、モジュールに、その期待されるエントリ・ポイントおよびその署名された区域を明らかにするように指示する。好適には、以上のステップのすべてが、製造時にモジュールがフィールドに展開される前に行われる。それに相当するものとして、他の製作者は、自分自身のモジュールに関して同一のことを行う。
【００２４】
図４は、改良されたソフトウェア・モジュール・ピア・ツー・ピア完全性検査を示すフロー図（４００）において、好適な実施形態に従う本発明を図示している。次に、完全性検査の基本動作の記述を説明する。２個のモジュール間のセキュア通信チャネルを実現するために、これらのモジュールは、まず、以前に作成した署名をお互いに渡す（４０２）。その後、通信が真正の許可されたモジュールとの間で行われていることを保証するために、署名および記憶保護域内のアドレス範囲の使用を介して、各モジュールが、他方のモジュールにパッチが当てられていないことを検査する（４０４）。署名は、指定されたアドレス範囲内のコードのハッシュに基づく。署名、アドレス範囲、および使用可能なＡＰＩは、各モジュール内に永久的に保管され、署名検証のために検索される。検証中に、指定されたアドレス範囲に対するハッシュを再計算する。これによって、指定されたアドレス範囲内のコードが真正であるか否かが判定される。コードにパッチが当てられている場合には、供給されたアドレス範囲のハッシュが異なり、署名の検証が失敗する。また、関数呼出しの起点は、スタック上の関数のリターン・アドレスを調べることによって簡単に判定することができる。さらに、モジュールは、それぞれ、呼び出す予定の他のモジュール内のすべてのエントリ・ポイントが、実際に他のモジュールの記憶保護域内にあることを検証する。これを実現するために、全てのモジュールが、例えば、当該情報を他のモジュールに組み込ませるか、他のモジュールに動的に照会することによって、他のモジュールの保護記憶域を検索する。それらが真正のモジュールとして検証されない場合には、処理は終了する。そうではなく、両方のモジュールが信用に値するものとして検証される場合（４０６）は、モジュールは、自由にお互いを呼び出すことができる（４０８）。しかし、各モジュールは、呼び出される時に、他のモジュールの記憶保護域内から呼び出されたことを検証することが好ましい（４１０）。呼出し元モジュールが、その記憶保護域内から呼び出していない場合には、処理が終了する。そうではなく、他のモジュールの記憶保護域から呼び出された場合には、モジュールの間での通信を継続して（４１２）、作業を達成する。したがって、ソフトウェア・モジュールを攻撃するすべての試みは破られる。呼び出されたモジュールは、下記の処理によって、呼出し元モジュールが記憶保護域アドレス空間から呼び出していることを判定する。全ての関数呼出しが、スタックに残されたリターン・アドレスを信頼する。これが、関数が呼出し元にリターンする方法である。その結果、そのリターン・アドレスを使用して、呼出し元が指定された記憶保護域内にあるかどうかを確認する。換言すると、モジュールＢは、モジュールＡによって、最初の署名検証の処理中にモジュールＢが検証したアドレス範囲内からのみ呼び出されることを保証することができる。これを図５に示す。
【００２５】
図５に、本発明の好適な実施形態による、記憶保護域を含むソフトウェア・モジュールが占有する空間を含むコンピュータ・システムのメモリ空間（５００）を示す。ソフトウェア・モジュールに、例えば、（５０４）および（５０６）によって定義されるコード空間が含まれる。モジュールには、ハッカーによるパッチ当てから保護されなければならないアドレス範囲を定義する記憶保護域（５０６）が含まれる。関数呼出し（５０８）が、スタック（５１０）に残されたリターン・アドレスを用いて図示されている。
【００２６】
［高水準の概要について］
本発明の高水準の概要を、好適な実施形態に従って示す。
１．処理の性質のゆえに、秘密鍵のような秘密情報の伝送が不要である。
２．いかなる既知の暗号手段によっても、それを使用してディジタル署名を作成することが許される。「ディジタル署名」の用語は、最も広義に解釈されなければならない。各製作者みずからが、何がディジタル署名を構成するかを決定することができる。ディジタル署名は、標準的なＲＳＡディジタル署名またはＤＳＡディジタル署名とすることができる。換言すると、アドレスの範囲内のデータが、ＳＨＡ−１などの暗号ハッシュを用いてハッシュ化され、そのハッシュが署名される。一般に、ディジタル署名は、疑わしいデータの有効性を表す単一のビット出力を提供するだけである。それゆえ、それによって提供されるコード保護は、攻撃者によってかなり簡単に破られる傾向にある。従って、好適には、本発明は、ディジタル・シグネット（ｄｉｇｉｔａｌ　ｓｉｇｎｅｔ）と称するものの代替使用を提供する。シグネットは、署名の通常の単一ビットではなく、ビットのストリングを出力として供給し、コード完全性アプリケーションにおいてより強いので、署名の代替として使用することができる。さらに、シグネットは、コード自体の一部とすることができ、これによって、コード保護機能が促進される。シグネット技術は、米国特許第６０３８３１６号および米国特許第５９７８４８２号で教示され、その教示は、参照によって本明細書に組み込まれる。そのような解決策の全てが、本発明の範囲に含まれる。
３．好適には、本発明には、古いコンピュータ・プログラム・コード・モジュールを、新しい署名を介して検証される新しいプログラム・コード・モジュールに変換するツールが含まれる。
４．一方向ベース（ｏｎｅ−ｗａｙ　ｂａｓｉｓ）で、検証を実行することができる。換言すると、モジュールには、検証なしで使用できるものと検証されなければならないものがある。本明細書に記載のプロトコルを用いると、自分自身に関してはセキュリティを必要としないが、別のモジュールに接続する時に限ってセキュリティが必要である圧縮モジュールなどのモジュールの適切な解決が可能になる。
５．仮想記憶内のアドレス範囲に対するディジタル署名に関連する問題の１つは、オペレーティング・システムのローダが、衝突（ｃｏｌｌｉｓｉｏｎ）の場合に、モジュールを異なる基底アドレスに再配置する可能性があるという事実である。この再配置中に、ローダが、コード内の絶対アドレスを参照するいくつかの命令に対する修正を実行する。その結果、好適には、アドレス範囲のハッシュがモジュールの絶対基底アドレスにかかわらずに必ず同一の値を返すように、これらの変更を一時的に正規形に復帰させる特殊ハッシュ技法が必要である。この技法は、米国特許出願第０９／３５２２８５号で教示され、その写しが、本明細書に置かれる。
６．好適な実施形態では、各モジュールが、他のモジュールの完全性の責任を負う。しかし、これは、他の理由のための自己完全性論理が各モジュールに存在しないことを意味するものではない。自己保全性も有するモジュールであっても本発明の範囲に含まれる。
７．好適な実施形態には、本発明に登場する製作者の働く悪事に対する保護がない。従って、このシステムへの参加に合意する製作者の権利を保護するために、契約などによって、製作者は、お互いに法的な関係を形成しなければならない。
８．セッション鍵がなく、従来技術のようにインターフェースの一方でデータを暗号化し、他方でそれを暗号化解除することに関連するオーバーヘッドがないことが好ましい。
９．このプロトコルは、最も強いリンクと同程度に強い。あるモジュールのハッキングが成功した場合に、他の完全なモジュールは、署名が一致しないのでその事実を検出する。この場合、第２のモジュールは、データ交換への参加を拒否する。
【００２７】
［別の実施形態−署名生成の実施形態］
上記で説明したように、ソフトウェア・セキュア認証処理には、各製作者が他のすべての製作者と通信して、このプロトコルを使用可能にする処理が含まれる。モジュールの証明を実現するために、複数の実施形態が考えられる。具体的には、検証処理を援助するために、すべての製作者の代わりにモジュール内の署名の生成および保管を実行する認証機関を設ける。勿論、これには、製作者がディジタル署名に使用される技術に同意することを必要とする。代替の実施形態には、分散署名生成処理が含まれる。分散処理では、自分自身の署名技術を用いてモジュールに署名する複数の認証機関および個々の製作者が存在する。
【００２８】
［別の１つの実施形態−変換ツール］
残念ながら、一部の製作者が、説明したプロトコルの制定に合意しない可能性がある。そこで、非準拠モジュールをプロトコルに必要なステップを実行するモジュールに変換できるツールを提供することによって、この可能性に前もって対応する。具体的には、このツールは、モジュールにクロス・モジュール署名交換を実行する追加のエントリ・ポイントを追加し、モジュール内の他のすべてのエントリ・ポイントを、呼出し元が他のモジュールの記憶保護域から来ることを確認するために検査するエントリ・ポイントに変換する。勿論、変換されたモジュールは、署名されるモジュールになる。
【００２９】
［もう１つの実施形態　一方向保全性検査］
もう１つの実施形態では、このプロトコルが、一方向モードで使用される。たとえば音楽圧縮モジュールなど、呼出し元モジュールなどの呼出し元エンティティの性質に関心を持たない、ある種のソフトウェア・モジュールがある。その機能すなわち、なにものかのための音楽の圧縮を実行する音楽圧縮モジュールに関するセキュリティ問題はない。その一方で、音楽を委託され、通常は制限付きコピーを実施することを求める電子音楽配信システムでは、曲が送信されようとしている圧縮モジュールが、実際に、よい圧縮モジュールであって、ユーザのディスクに曲を不正に書き込むことによって曲を追加として盗むハッキングされたプログラムではないことに関心が持たれる。その場合に、電子音楽配信モジュールが、圧縮モジュールからの署名を必要とするが、その逆は必ずしも必要ではない。
【００３０】
［もう１つの実施形態　周期的な署名検査］
ハッカーにとってはより困難ではあるが、ハッカーは、署名検査が行われた後に動作中の処理に接続して、その時に自分のコード・パッチを挿入する可能性がある。従って、一実施形態では、周期的、ランダム、またはモジュールが使用されるたびに、署名検査を実行して、新たに挿入されたパッチを検出することができる。これは、経過時間に基づいて、または保護されたインターフェースにまたがる実際の呼出し／リターンの数に基づいて行うことができる。多くのディジタル署名が、比較的高価なので、本発明の１実施形態では、さらに、後続のディジタル署名検査を、より安価な手段、例えば、単純に最初のハッシュを記録し、新しいハッシュが異なるか否かを検出することによって行うことができる。本明細書で企図されるディジタル署名の広義の定義で、ハッシュの最初の単純な検査が、特に強い検査ではないが、「ディジタル署名検査」の一種であることに留意されたい。
【００３１】
［結論］
（１）データ・ファイルの認証をセキュアにし、検証するための、（２）セキュア認証済みチャネルを確立するための、および（３）２個のモジュールの間の通信を保護するための、より効率的な方法、装置、および製品を、従来技術の制限の多くを克服する本発明の種々の実施形態に従って説明した。
【００３２】
［ハードウェアおよびソフトウェアの実施形態のオプションの議論］
本発明は、当業者に既知であるように、ハードウェアまたはソフトウェアあるいはハードウェアとソフトウェアの組合せとして実施することができる。好適な実施形態によるシステムまたは方法は、説明されたまたは請求された個々の機能またはステップを実行する別々の要素または手段、あるいは説明されたまたは請求された機能またはステップのどれかの実行を組合せた１または複数の要素または手段を有する単一のコンピュータ・システム内で実施することができ、あるいは当業者に既知の適当な手段によって相互接続された分散コンピュータ・システムに配置することができる。
【００３３】
好適な実施形態によれば、本発明は、特定の種類のコンピュータ・システムに制限されるものではない。当業者には周知の通り、本発明は、説明された機能および方法ステップを実行するように配置された、すべての汎用のコンピュータと共に使用することができる。当業者には既知の通り、上記で説明したそのようなコンピュータの動作はコンピュータの動作または制御の下で使用する媒体に含まれるコンピュータ・プログラムによるものとすることができる。当業者に既知の通り、コンピュータ・プログラム製品を保持し、コンピュータ・プログラム製品を含むことができ、またはコンピュータ・プログラム製品を配布することに使用することが可能なコンピュータ可読媒体は、組み込みメモリなどのコンピュータの付属物とするか、ディスクなどの持ち運び可能な媒体とすることができる。
【００３４】
本発明は、当業者には既知の通り、特定のコンピュータ・プログラムまたは論理または言語または命令に制限されない。本発明は、そのような適切なものであれば、いかなるプログラム、論理、言語、命令を用いても実施することができる。そのようなコンピュータ・システムには、コンピュータ可読媒体からのデータ、命令、メッセージすなわちメッセージ・パケット、およびその他のコンピュータ可読情報をコンピュータが読み取れるようにするコンピュータ可読媒体を、開示された発明を制限することなく、含め得る。コンピュータ可読媒体には、ＲＯＭ、フラッシュ・メモリ、フレキシブル・ディスク（Ｒ）、ディスク・ドライブ・メモリ、ＣＤ−ＲＯＭ、および他の永続記憶装置などの不揮発性メモリが含まれ得る。さらに、コンピュータ可読媒体には、例えば、ＲＡＭ、バッファ、キャッシュ・メモリ、およびネットワーク回路などの揮発性記憶装置が含まれ得る。
【００３５】
さらに、コンピュータ可読媒体には、有線ネットワークまたは無線ネットワークなどのコンピュータ可読情報をコンピュータが読み取れるようにするネットワーク・リンクおよび／またはネットワーク・インターフェースなどの一時的状態媒体内のコンピュータ可読情報が含まれ得る。
【００３６】
要約すると、ソフトウェア製作者は、自分のモジュールを検査し、そのモジュールが占有するメモリ内のアドレスの範囲を判定する。メモリ内のアドレスの保護範囲が、ハッカーによるパッチ当てなどの変更を可能にしないように事前に定義される。各製作者が、協調処理を望む他のすべての製作者に、記憶保護域を記述するアドレスの範囲およびモジュールの既知のよいバージョンを、配布する。他の製作者は、記憶保護域のディジタル署名を返し、これらのディジタル署名が、第１の製作者のモジュールに保管される。それに相当するものとしてして、他方の製作者は、自分自身のモジュールに対して同一のことを行う。その後、２つのモジュールの間のセキュア通信チャネルをもたらすために、モジュールが、まず、互いに、前に作られた署名を渡す。その後、真正の許可されたモジュールとの通信が行われていることを保証するために、署名および記憶保護域内のアドレス範囲の使用を介して、各モジュールが、他方のモジュールにパッチが当てられていないことを検査する。さらに、モジュールは、それぞれ、呼び出す予定の他のモジュール内のすべてのエントリ・ポイントが、実際に記憶保護域内にあることを検証する。両方のモジュールが信頼に値するものとして検証される場合に、これらのモジュールは、自由にお互いを呼び出すことができる。しかし、各モジュールは、呼び出された時に、まず、他方のモジュールの記憶保護域内から呼び出されたことを検証する。
【図面の簡単な説明】
【図１】
従来技術で見られる、単一マシン上で実施されるセキュア認証済みチャネル（１００）を示す図である。
【図２】
従来技術のＳＤＭＩの要求仕様に記載のソフトウェア・モジュールのセキュリティ・コンテンツ（２００）を示す図である。
【図３】
本発明の好適な実施形態によるモジュール署名生成のフロー図（３００）である。
【図４】
本発明の好適な実施形態による、改良されたソフトウェア・モジュール・ピア・ツー・ピア完全性の検査を表すフロー図（４００）である。
【図５】
記憶保護域を含む、ソフトウェア・モジュールが占有する空間を含むコンピュータ・システムのメモリ空間（５００）を示す図である。
【図１】
2004509392.tif 000003
【図２】
2004509392.tif 000004
【図３】
2004509392.tif 000005
【図４】
2004509392.tif 000006
【図５】
2004509392.tif 000007
【国際公開パンフレット】
2004509392.tif 000008
2004509392.tif 000009
2004509392.tif 000010
2004509392.tif 000011
2004509392.tif 000012
2004509392.tif 000013
2004509392.tif 000014
2004509392.tif 000015
2004509392.tif 000016
2004509392.tif 000017
2004509392.tif 000018
2004509392.tif 000019
2004509392.tif 000020
2004509392.tif 000021
2004509392.tif 000022
2004509392.tif 000023
2004509392.tif 000024
2004509392.tif 000025
2004509392.tif 000026
2004509392.tif 000027
2004509392.tif 000028
2004509392.tif 000029
2004509392.tif 000030
2004509392.tif 000031
2004509392.tif 000032
【国際公開パンフレット（コレクトバージョン）】
2004509392.tif 000033
2004509392.tif 000034
【国際公開パンフレット（コレクトバージョン）】
2004509392.tif 000035
2004509392.tif 000036
【国際調査報告】
2004509392.tif 000037
2004509392.tif 000038
2004509392.tif 000039
2004509392.tif 000040
2004509392.tif 000041
2004509392.tif 000042