(57)【要約】【課題】解読される危険性のある平文化されたソフトウェアおよびデータの存在をシステム上から完全に排除しつつ分岐命令を特別に処理する回路も必要としないプロセッサおよびプログラム実行方法を提供すること。【解決手段】プロセッサ固有情報記憶手段と、プログラム記憶手段と、プログラムカウンタと、プロセッサ固有情報、該プログラムカウンタが指定する次に実行する命令および該命令に対し所定の相対的位置関係にある一以上の命令から次の実行の内容を決定する手段と、データ記憶手段と、プロセッサ固有情報、参照しようとするデータおよび該データに対応するアドレスから該参照しようとするデータの正味内容を決定する手段と、プロセッサ固有情報、設定しようとするデータおよびデータに対応するアドレスから該設定しようとするデータのプロセッサに固有の表現を決定する手段とを備える。【選択図】      図１
2004246637.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサ固有の情報を記憶するプロセッサ固有情報記憶手段と、
実行順序の定義された不変情報の系列であるプログラムを記憶するプログラム記憶手段と、
次に実行する不変情報の位置を記憶するプログラムカウンタと、
該プロセッサ固有情報記憶手段により記憶したプロセッサ固有情報、該プログラムカウンタが指定する次に実行する不変情報、および該次に実行する不変情報に対し所定の相対的位置関係にある一以上の不変情報から当該次の実行の内容を決定する実行内容決定手段と
を少なくとも含むプロセッサ。
【請求項２】
プロセッサ固有の情報を記憶するプロセッサ固有情報記憶手段と、
アドレスに対応する複数の可変情報を記憶する可変情報記憶手段と、
該プロセッサ固有情報記憶手段により記憶したプロセッサ固有情報、参照しようとする可変情報、および該参照しようとする可変情報に対応するアドレスから、該参照しようとする可変情報の正味内容を決定する正味内容決定手段と、
該プロセッサ固有情報記憶手段により記憶したプロセッサ固有情報、設定しようとする可変情報、および該設定しようとする可変情報に対応するアドレスから、該設定しようとする可変情報の、該可変情報記憶手段上での、プロセッサに固有の表現を決定するプロセッサ固有表現決定手段と、
を少なくとも有するプロセッサ。
【請求項３】
請求項１に記載の、プロセッサ固有情報記憶手段、プログラム記憶手段、プログラムカウンタ、および実行内容決定手段と、請求項２に記載の、可変情報記憶手段と、正味内容決定手段と、プロセッサ固有表現決定手段と、
を少なくとも有するプロセッサ。
【請求項４】
前記所定の相対的位置関係が、前記次に実行する不変情報より同一の文脈においては後にのみ実行され得る不変情報との相対的位置関係にあたる、請求項１または３に記載のプロセッサ。
【請求項５】
前記所定の相対的位置関係にある一以上の不変情報をキャッシュする不変情報キャッシュ手段を備えた、請求項１、３、４のいずれか一項に記載のプロセッサ。
【請求項６】
少なくともプロセッサと記憶装置を備えた処理装置であって、プログラムなどの不変情報と、データなどの可変情報とを、それぞれ異なる方式で暗号化および復号化もしくはそのいずれかを行い、記憶装置に記憶しかつプロセッサにより処理する、処理装置。
【請求項７】
請求項１、３、４、５のいずれか一項に記載のプロセッサを備えた処理装置であって、
実行順序の定義された不変情報の系列でありかつ該処理装置のプロセッサとは別個のプロセッサを備えた処理装置でも実行可能であるプロセッサ不問プログラムを記憶するプロセッサ不問プログラム記憶手段と、
該プロセッサ不問プログラム記憶手段が記憶するプロセッサ不問プログラムを、前記プロセッサの備えるプロセッサ固有情報記憶手段が記憶するプロセッサ記憶情報に応じて当該プロセッサに固有の表現でありかつ該プロセッサで事前処理なしに実行できるプロセッサ固有プログラムに変換するプロセッサ固有プログラム化手段と、
を少なくとも備えた処理装置。
【請求項８】
前記プロセッサ固有プログラム化手段が、後に実行される不変情報から前に実行される不変情報へという順序で、前記プロセッサ不問プログラムを前記プロセッサ固有プログラムに変換する、請求項７に記載の処理装置。
【請求項９】
請求項１から５のいずれか一項に記載のプロセッサと結合されかつアドレスと対応づけて情報を記憶する記憶装置であって、
各アドレスが、
該アドレスに対応する情報が可変であるかどうかを識別する可変性識別フィールドと、
該アドレスに対応する情報が事前変換なしで参照および設定もしくはその一方が可能であるかどうかを識別する固有性識別フィールドと、
を少なくとも有する記憶装置。
【請求項１０】
プロセッサ固有の情報を記憶するプロセッサ固有情報記憶ステップと、
実行順序の定義された不変情報の系列であるプログラムを記憶するプログラム記憶ステップと、
次に実行する不変情報の位置を記憶するプログラムカウントステップと、
該プロセッサ固有情報記憶ステップにより記憶したプロセッサ固有情報、該プログラムカウントステップにより記憶した位置に対応する次に実行する不変情報、および該次に実行する不変情報に対し所定の相対的位置関係にある一以上の不変情報から当該次の実行の内容を決定する実行内容決定ステップと
を少なくとも含むプログラム実行方法。
【請求項１１】
プロセッサ固有の情報を記憶するプロセッサ固有情報記憶ステップと、
アドレスに対応する複数の可変情報を記憶する可変情報記憶ステップと、
該プロセッサ固有情報記憶ステップにより記憶したプロセッサ固有情報、参照しようとする可変情報、および該参照しようとする可変情報に対応するアドレスから、該参照しようとする可変情報の正味内容を決定する正味内容決定ステップと、
該プロセッサ固有情報記憶ステップにより記憶したプロセッサ固有情報、設定しようとする可変情報、および該設定しようとする可変情報に対応するアドレスから、該設定しようとする可変情報の、該可変情報記憶ステップで記憶するプロセッサに固有の表現を決定するプロセッサ固有表現決定ステップと、
を少なくとも含むプログラム実行方法。
【請求項１２】
請求項１０に記載の、プロセッサ固有情報記憶ステップ、プログラム記憶ステップ、プログラムカウントステップ、および実行内容決定ステップと、請求項１１に記載の、可変情報記憶ステップ、正味内容決定ステップ、プロセッサ固有表現決定ステップと、
を少なくとも含むプログラム実行方法。
【請求項１３】
前記所定の相対的位置関係が、前記次に実行する不変情報より同一の文脈においては後にのみ実行され得る不変情報との相対的位置関係にあたる、請求項１０または１２に記載のプログラム実行方法。
【請求項１４】
前記所定の相対的位置関係にある一以上の不変情報をキャッシュするキャッシュステップをさらに含む、請求項１０、１２、１３のいずれか一項に記載のプログラム実行方法。
【請求項１５】
実行順序の定義された不変情報の系列でありかつプログラムを実行する処理装置のプロセッサとは別個のプロセッサを備えた処理装置でも実行可能であるプロセッサ不問プログラムを記憶するプロセッサ不問プログラム記憶ステップと、
該プロセッサ不問プログラム記憶ステップで記憶するプロセッサ不問プログラムを、プロセッサ固有情報記憶ステップで記憶するプロセッサ記憶情報に応じて当該処理装置に固有の表現でありかつ当該処理装置のプロセッサで事前処理なしに実行できるプロセッサ固有プログラムに変換するプロセッサ固有プログラム化ステップと、
をさらに含む請求項１０、１２、１３、１４のいずれか一項に記載のプログラム実行方法。
【請求項１６】
前記プロセッサ固有プログラム化ステップが、後に実行される不変情報から前に実行される不変情報へという順序で、前記プロセッサ不問プログラムを前記プロセッサ固有プログラムに変換する、請求項１４に記載のプログラム実行方法。
【請求項１７】
計算機を請求項１から５のいずれか一項に記載のプロセッサ、請求項６から８のいずれか一項に記載の処理装置、もしくは請求項９に記載の記憶装置として動作させるためのコンピュータプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プログラム及びデータを含めたソフトウエアの保護、すなわち解析、改竄、複製の防止に関する。
【０００２】
また、一方では、このために、処理すべきプロセッサの個体を問わないプログラム（プロセッサ不問プログラム）を、処理すべきプロセッサが当該プロセッサに限定されたプログラム（プロセッサ固有プログラム）へとプロセッサ固有プログラム化するプロセッサに関する。また、特にプロセッサ固有プログラム化の鍵となるプロセッサ固有情報としていわゆる秘密鍵を用い、プロセッサ固有プログラム化を介してプロセッサ不問プログラム（この場合、平文のプログラムに相当する）を暗号化するプロセッサに関する。また、プロセッサ固有プログラム化されたかかるプログラムを直接実行する機能を有するプロセッサに関する。
【０００３】
また、他方では、同じく、処理すべきプロセッサの個体を問わないデータ（プロセッサ不問データ）を、処理すべきプロセッサが当該プロセッサに限定されたデータ（プロセッサ固有データ）へとプロセッサ固有データ化するプロセッサに関する。また、特にプロセッサ固有データ化の鍵となるプロセッサ固有情報として秘密鍵を用い、プロセッサ固有データ化を介してプロセッサ不問データ（この場合、平文のデータに相当する）を暗号化するプロセッサに関する。また、プロセッサ固有データ化されたデータを事前変換なしに正味内容として処理する機能と、計算結果等変更されたデータの正味内容のプロセッサ固有データ化した表現を事前処理なしで決定する機能とを有するプロセッサに関する。
【０００４】
なお、以降、本明細書においては、上記プロセッサ固有プログラム化およびプロセッサ固有データ化を、あわせてプロセッサ固有情報化とよび、こうして生成されるプロセッサ固有プログラムおよびプロセッサ固有データを、あわせてプロセッサ固有表現とよぶ。
【０００５】
また、本発明は、かかるプロセッサを備えた処理装置および記憶装置、かかるプロセッサを利用したプログラム実行方法、および、計算機をかかるプロセッサ、処理装置、および記憶装置として動作させるためのコンピュータプログラムに関する。
【０００６】
【従来の技術】
従来の、暗号化によるソフトウェア（プログラムおよびデータ）の保護方法は、暗合化されたソフトウエアを、その実行前に一旦平文化、すなわち事前変換を行うため、平文化されたソフトウェアの実体がコンピュータシステム上の記憶装置上に存在してしまうものであり、第三者がその記憶装置周辺を解析すれば、ソフトウェアの解読が可能になってしまうという問題を有していた（例えば、特許文献１参照。）。
【０００７】
この問題は、ソフトウエアが当初から含むプログラムとデータについても、ソフトウエア実行中に生成される動的データについても同様であった。
【０００８】
一方、暗号化されたプログラム中の各命令（すなわちオペレータ（命令語）と対応するオペランド（引数）などの定数（不変データ））を実行時に一対一で平文化する（すなわち各命令の逐次的な復号化とそれぞれの解釈を行う）手法は、上述の一括復号化（すなわち事前変換）を伴わないプログラム平文化を可能にするが、暗合化されたソフトウエア表現の系列とその処理結果の系列との相関が高く、入出力特性の推測が容易であるという問題があった（例えば、特許文献２参照。）。
【０００９】
また、時間やアドレスなどのパラメータを暗号化の際に用いて入出力特性の推測等、解析を困難にする手法が考案されたが、分岐命令の存在により、時間やアドレスのパラメータをあらかじめ一意に特定することができなくなるため、分岐命令を特別に処理する回路が必要になるという問題を有していた（例えば、特許文献３参照。）。
【００１０】
【特許文献１】
特開２０００−３５７０８５号公報
【００１１】
【特許文献２】
特開平５−２３３２７０号公報
【００１２】
【特許文献３】
特開平１０−０５５２７３号公報
【００１３】
【発明が解決しようとする課題】
本発明は、解読される危険性のある平文に戻されたソフトウェアの存在をシステム上から排除するため、ソフトウエア一括平文化すなわち事前変換を行わず、かつ、暗号強度を増すパラメータを利用する際にも、上記のような分岐命令を特別に処理する回路の必要性がない暗合化（固有情報化）プロセッサ、関連する処理装置および記憶装置、プログラム実行方法、およびプログラムを提供することを目的とする。
【００１４】
本発明は、上記の課題を達成するため、暗号化（固有情報化）されて解析困難な、プロセッサに固有の表現にされたソフトウエアの平文化をそのソフトウエアの実行時に（逐次的に）命令解読部で直接行い、かつ、命令の暗号化及び平文化を行う際には隣接する（もしくは所定の相対的位置関係をもつ）命令と依存関係をもたせるようにする。より具体的には、中央処理装置（以下、プロセッサ）、キャッシュメモリ、当業者に周知の秘密鍵暗号化手法および平文化手法を用い、暗号化された命令／データをコンピュータシステム上の記憶装置に一度も展開することなく実行／処理可能なシステムを構築する。
【００１５】
このシステムの当技術分野における位置付けについて、図８に示す。図８の太線が、本発明の技術的範囲、すなわち本発明による解決の要旨にあたる。
【００１６】
なお、より太い線は、本発明のさらに好ましい実施形態となる従属請求項４および１２を示す。
【００１７】
【課題を解決するための手段】
この場合、一方で、プログラムの実行については、プロセッサが、プロセッサ固有の情報を記憶するプロセッサ固有情報記憶手段と、実行順序の定義された不変情報の系列であるプログラムを記憶するプログラム記憶手段と、次に実行する不変情報の位置を記憶するプログラムカウンタと、該プロセッサ固有情報記憶手段により記憶したプロセッサ固有情報、該プログラムカウンタが指定する次に実行する不変情報、および該次に実行する不変情報に対し所定の相対的位置関係にある一以上の不変情報から当該次の実行の内容を決定する実行内容決定手段とを少なくとも含むことを最も主要な特徴とする。
【００１８】
これにより、例えば隣接する命令（不変情報）との依存関係を持たせて暗合強度を向上させながらも分岐命令の影響を受けないプログラム（すなわちプログラムを構成する各命令の）暗号化および実行時復号化を実現し、上述の課題すなわち、解読される危険性のある平文に戻されたソフトウェアの存在をシステム上から排除するため一括事前変換を行わずかつ暗号強度を増すパラメータを利用する際にも分岐命令を特別に処理する回路の必要性がない暗合化（固有情報化）プロセッサ等を達成することができる。
【００１９】
なお、プロセッサ固有情報記憶手段は、位置的には、プロセッサ内の専用の論理配線もしくは素子（レジスタ）として、または、プロセッサ内外のＲＯＭ、ＰＲＯＭ（フラッシュ型ＥＥＰＲＯＭ、フューズ型ＲＯＭ、アンチフューズ型ＲＯＭ）等として、さらに特殊な場合には、揮発性のＲＡＭとして実現することができる。ＰＲＯＭやＲＡＭの場合には、ユーザが最初に明示的に指定するパスワードなどを含ませることができる他、ノイズ、タイマ、熱センサなどを使った乱数発生器からの値を保存して一時的なプロセッサ固有情報とすることもできる。また、この手段の表現形式としては、後述するように、２進ビット等の「値」としてレジスタ、ＲＯＭもしくはＰＲＯＭ等に集積して定義しうるだけでなく、特殊な実施形態では、ゲート制御論理自体に埋め込んで離散的に定義することもできる。
【００２０】
プログラム記憶手段は、一般的な揮発性ＲＡＭ、不揮発性ＲＡＭ（フラッシュメモリ、磁気ディスクその他）、ＲＯＭ、ＰＲＯＭ（ＵＶ−ＥＰＲＯＭ、ＥＥＰＲＯＭ）などにより当業者が容易に実現することができる。
【００２１】
プログラムカウンタ（いわゆるＰＣ）は、周知のとおり、レジスタとして実現することができる。ただし、本発明の機能を効率的に達成するため、実行内容を決定するための不変情報（すなわちオペレータもしくはオペランド）以外に、それと所定の相対的位置関係にある不変情報（すなわち又別のオペレータもしくはオペランド）をもメインストリームと並列にピックアップするためのハードウエアロジックへ当該ピックアップ基準位置を（および所定の相対的位置関係自体がプログラムカウンタに依存して可変の場合には相対的位置関係自体を示すオフセット等をも）入力するための専用のパラレル接続等を当該プログラムカウンタの出力として備えていてもよい。
【００２２】
実行内容決定手段は、高速な順序回路としてもしくは論理回路として実現することができる。この入力は、プロセッサ固有情報記憶手段により記憶したプロセッサ固有情報、プログラムカウンタが指定する次に実行する不変情報、およびこの次に実行する不変情報に対し所定の相対的位置関係にある一以上の不変情報であり、これら３つの情報を（並列で）ピックアップして蓄積する（例えばやはり３つの）レジスタからの、専用の（ローカル）パラレル接続を備えることもできる。一方、この出力すなわち実行内容をあらわす（オペレータのみならずオペランドに相当する実行内容（不変の定数値）についての）ビット列もしくはそのビット列をプロセッサ固有のルックアップテーブルや論理回路等を介してさらに変換したビット列は、順序回路としてのプロセッサの現行フェーズの（ゲート）ロジックを直接／間接に決定することができる。これらの実現については当業者が一般のプロセッサの設計手法を用いることができるため、本明細書では詳述しない。
【００２３】
また、他方で、データの処理については、プロセッサが、プロセッサ固有の情報を記憶するプロセッサ固有情報記憶手段と、アドレスに対応する複数の可変情報を記憶する可変情報記憶手段と、該プロセッサ固有情報記憶手段により記憶したプロセッサ固有情報、参照しようとする可変情報、および該参照しようとする可変情報に対応するアドレスから、該参照しようとする可変情報の正味内容を決定する正味内容決定手段と、該プロセッサ固有情報記憶手段により記憶したプロセッサ固有情報、設定しようとする可変情報、および該設定しようとする可変情報に対応するアドレスから、該設定しようとする可変情報の、該可変情報記憶手段上でのプロセッサに固有の表現を決定するプロセッサ固有表現決定手段と、を少なくとも有することを最も主要な特徴とする。
【００２４】
これによりデータ（可変情報）自身のアドレス（番地）を暗号化の入力値（すなわち暗号強度向上のためのパラメータ）に持つデータの暗号化を実現し、一方では入出力特性が推測されやすいという上記問題点を解決するとともに、他方では隣接データになんら依存しないため、前記アドレスで示されるデータの処理（またはアクセス）単位長のデータの変更も容易となる。
【００２５】
なお、可変情報としてのデータは、典型的には（仮想）メモリ上のアドレスによって識別される１ワード（汎用レジスタや主メモリが一度に記憶しかつＡＬＵ（算術論理ユニット）その他の処理リソースが一度に処理する単位情報量）分の変数であるが、１ワード以上の構造体やファイルも同様に扱えることに留意されたい。
【００２６】
可変情報記憶手段は、今日の一般的なノイマン型コンピュータでは、プログラム記憶手段と共用とすることができ、実現手法も同様である。ただし、可変情報を扱うため、ＲＯＭとしては実現することができず、一般的には、実メモリ（ＤＲＡＭ、ＳＲＡＭなど）であるＲＡＭに動的にマッピングされる仮想のアドレスの所定の境界（もしくは（ＨＤＤなど）外部記憶装置上のファイル等の場合にはファイル属性等）によって領域を区別し、この場合は、いわゆるデータ領域として、プログラム領域と区別して位置づけることができる。
【００２７】
こうしたデータ領域中の情報は、その（仮想）アドレス（もしくは（外部記憶装置の）ファイルパスとファイル内オフセット、や入出力ポート番号）等を指定することによりデータバスに取り出すことができ、既にプロセッサ固有データ化されている場合には（後述するよう）変換後に、またプロセッサ固有データ化されていない場合には変換を経ず直接に、演算、転送（コピー）などの対象とすることができる。また、演算の結果としてのデータや他のアドレスに転送するためのデータは、データバスを介して任意の（仮想）アドレス（もしくはファイル＋ファイル内オフセット、やポート）に書き込むことができる。
【００２８】
また、可変情報の（仮想）アドレスを指定する各レジスタは、それらの指定（すなわち蓄積）するアドレスを、以下で述べる正味内容決定手段およびプロセッサ固有表現決定手段における演算で使用すべく、それらの手段への入力となる専用のパラレル接続を有していてもよい。
【００２９】
正味内容決定手段は、入力として、プロセッサ固有情報記憶手段により記憶したプロセッサ固有情報、参照しようとする可変情報、および当該参照しようとする可変情報に対応するアドレスをとる。したがって、やはりこれらの情報を蓄積する各（専用の）レジスタ等からの入力として、それぞれローカルなパラレル接続等を用意することで高速化を図ることができる。
【００３０】
一方、この出力は、その名が示すとおり、（たとえば復号化した結果としての）正味内容であり、典型的には１ワード分のビットイメージである。
【００３１】
なお、この正味内容（可変情報）は、プログラムを構成する命令（不変情報）の場合と異なり、処理するプロセッサの個体を問わない伝統的な２進表現（整数、浮動小数点、２進数に符号化されたアルファベットなど）である必要が大きい。伝統的な２進数表現の体系とこれにもとづく電子的表現の規則性により、すでに確立された形式的な論理演算が可能となり、既存のＡＬＵ等を前提とした一般的な設計が可能になるからである。
【００３２】
なお、逆に命令（特にオペランド）についてはこういった規則性の要請は少なく、命令のデコードおよびこれに基づく関連ゲートの制御を司る回路は、いわば上記プロセッサ固有情報と一体となった、見かけ上は規則性の少ない解析しにくい構造とすることもできる。こうした固有情報と一体となったゲート制御は、そのフェーズでの制御信号を決定する（一段以上の）ルックアップテーブルを用いて、当業者が容易に実現することができる。この場合、このルックアップテーブルが、プロセッサ固有情報の等価的な蓄積装置として機能していることに留意されたい。
【００３３】
プロセッサ固有表現決定手段は、入力として、プロセッサ固有情報記憶手段により記憶したプロセッサ固有情報、設定しようとする可変情報、およびこの設定しようとする可変情報に対応するアドレスをとる。したがって、やはり、これらの情報を蓄積する各（専用の）レジスタ等からそれぞれローカルなパラレル接続を用意して高速化を図ることができる。
【００３４】
一方、この出力は、その（仮想）アドレス等に書き込むべきプロセッサ固有の表現である。このプロセッサ固有表現は、参照しようとする情報と同様、典型的には１ワード分のビットイメージである。プロセッサ固有表現決定手段により決定されて所望のアドレスに設定（格納）されたプロセッサ固有表現は、上述の正味内容決定手段によりふたたびその生データ（すなわちプロセッサ不問データ、すなわち平文データ）としての意味、すなわち正味内容を参照することができる。
【００３５】
また、本発明は、前記プロセッサ固有情報記憶手段と、前記プログラム記憶手段と、前記プログラムカウンタと、前記実行内容決定手段と、前記可変情報記憶手段と、前記正味内容決定手段と、前記プロセッサ固有表現決定手段とを併せそなえたプロセッサを提供する。
【００３６】
プロセッサの主な用途である計算機は、命令（オペレータ）や定数（オペランド）などスタティックな（すなわち通常は静的な不変情報である）プログラムと、変数や出力データなどダイナミックな（すなわち通常は動的な可変情報である）データとの両方を取り扱うことが一般的であり、プログラム（不変情報）の実行のための手段とデータ（可変情報）の処理（参照および設定）のための手段との両方を同時に持ち合わせることにより、一般的な計算機の機能を完備することができる。
【００３７】
なお、ここで、関数呼出型言語におけるスタックを用いた制御構造等の場合には、動的ローカル変数を含むスタックも、可変情報たる静的変数（Ｃ言語におけるｓｔａｔｉｃ宣言のある大域変数や、ヒープ領域など）と同様に、可変情報たるデータとして扱われることに留意されたい。また、データの中でも、上述のごときオペランドとなる定数や、変数配列に代入される定数配列は、可変情報たるデータとしてでなく、不変情報たるプログラムと同様に扱える点にも留意されたい。なお、不変情報と可変情報を暗号化（固有情報化）／復号化する方式が異なることも本発明の特徴の一つであり、閲覧や改竄のリスクを分散することにつながる。また、具体的な暗号化の方法としては、例えばＤＥＳ、ＳＡＦＥＲ＋、ＲＩＪＩＮＤＡＥＬ他の方式を用いることができ、たとえば、ＤＥＳ方式でＣＢＣモードを採用する場合には、ＤＥＳ暗号／復号鍵としてプロセッサ固有情報（６４ビットもしくは５６ビット）用いることができる。そして、不変情報（プログラム）についてはＣＢＣモードの前の暗号文（Ｃｉ−１）として、次に実行する不変情報（命令）に対し所定の相対的位置関係にある一以上の不変情報（後続の命令）を用いることができ、可変情報（データ）についてはＣＢＣモードの初期ベクトル（ＩＶ）として、参照しようとする可変情報（データ）に対応するアドレスを用いることができる。なお、ＤＥＳ暗号／復号化における非線形関数や転置表を決定するパラメータとしてこれらの情報を適宜用いることができることは明らかであり、また、他の暗号方式等のパラメータとして使用できることも明らかである。
【００３８】
有利には、前記所定の相対的位置関係は、前記次に実行する不変情報より同一の文脈においては後にのみ実行され得る不変情報との相対的位置関係にあたる。
【００３９】
今日のプロセッサでは後の命令の動的実行系列を予測して後続の命令を事前にキャッシュしておくのが一般的であり、したがって、かかる相対的位置関係にあたる命令（オペレータやオペランドにあたる不変情報）は、今日の既存のアーキテクチャの回路をさらに複雑にすることなく、容易に本発明のための逐次復号化演算などに利用することができる。
【００４０】
ここで、同一の文脈とは、関数呼出時や割込処理時におけるようなレジスタ（すぐ後に実行すべきいくつかの命令を予測的にもしくは並列処理すべくキャッシュするためのレジスタも含む）の退避を要せずに処理できるプログラム実行ステップの動的な範囲をいう。このような範囲であればキャッシュされた内容をそのまま実行内容決定（復号化）パラメータとして生かすことができる
【００４１】
また有利には、前記所定の相対的位置関係にある一以上の不変情報をキャッシュする不変情報キャッシュ手段を備えることができる。
【００４２】
相対的位置関係が離れている場合や、同一の文脈において後続となるべき相対的位置関係の命令等（オペレータおよびオペランド）ではなく同一の文脈において「前となるべき」（なお、分岐命令があるのでかならずしも「前に実行される」とは限らないことに注意）相対的位置関係の命令等に依存する場合には、その「前となるべき」相対的位置関係の命令を別途キャッシュする手段をもつことにより、参照情報をキャッシュし、実行を高速化することができる。
【００４３】
不変情報キャッシュ手段の入力では、プログラム記憶手段からのローカルなパラレル接続等（データバス）により、プログラムカウンタから所定の相対的位置関係にある命令等の情報をも並列に受け取るよう構成できる。
【００４４】
本発明はまた、上記に関連して、実行順序の定義された不変情報の系列でありかつ該処理装置のプロセッサとは別個のプロセッサを備えた処理装置でも実行可能であるプロセッサ不問プログラムを記憶するプロセッサ不問プログラム記憶手段と、該プロセッサ不問プログラム記憶手段が記憶するプロセッサ不問プログラムを、前記プロセッサの備えるプロセッサ固有情報記憶手段が記憶するプロセッサ記憶情報に応じて当該処理装置に固有の表現でありかつ該プロセッサで事前処理なしに実行できる装置固有プログラムに変換するプロセッサ固有プログラム化手段と、を少なくとも備えた処理装置、例えば計算機を提供する。
【００４５】
これにより製造段階では既製品のプロセッサ不問プログラムを画一的に投入することができ製造が効率化される一方、いったん上記プロセッサ固有プログラム化手段により処理装置固有プログラムとなった後は機密性が保持されるという利点がある。
【００４６】
プロセッサ不問プログラム記憶手段は、上記プログラム記憶手段の機能の一部のみを利用することにより、もしくはプログラム記憶手段の機能を拡張することにより容易に実現できる。
【００４７】
すなわち、プログラムとデータがメモリの領域境界によって区別されている場合には、やはり又別の領域（たとえばプロセッサ不問プログラム領域）を、レジスタやＲＯＭ／不揮発ＲＡＭの予約領域に定義して区別することが可能であり、（外部）メモリデバイスやファイルやポートによって区別されている場合には、メモリデバイスやファイルなどをさらに内部領域によって区別するほか、デバイスやファイルやポート自体によって区別することも可能である。なお、この区別を実現した、プロセッサ動作を高速化するための好ましい実施形態については後述する。
【００４８】
また、有利には、この処理装置では、前記プロセッサ固有プログラム化手段が、後に実行される不変情報から前に実行される不変情報へという順序で、前記プロセッサ不問プログラムを前記処理装置固有プログラムに変換する。
【００４９】
このようにすることにより、後続の命令に依存する暗号化の場合の変換処理を効率化することができる。すなわち、後続の命令に対応する不変情報の、プロセッサに固有の表現を直前に処理しているため、これをキャッシュしておくことにより、いちいちフェッチせずに用いることができる。
【００５０】
なお、ここでは、生データから固有表現への変換が済んでいる実行時とは異なり、後続の命令に対応するプロセッサ固有表現のみならず、後続の命令に対応する生データ（すなわち、プロセッサ不問プログラム（すなわち平文プログラム）を構成する生データ）も利用可能である。しかし、「実行時に初めて」命令内容（すなわち命令として使う生データ）を決定するという方針をとる場合、前の命令の実行時にはその後の命令内容として使う生データを参照できない（つまりその生データを参照するためにはそのさらに後ろの生データが必要になるといったような依存の無限の連鎖が起こる）ため、生データ（すなわち平文プログラムの断片）をパラメータとして用いたプロセッサ固有プログラム化および対応する実行時逐次復号化等は一見困難であり本願の手法が比較的有利であることに留意されたい。なお、プロセッサ不問プログラムを構成する最後のワード（生データすなわち平文データ）は、パラメータとなる後続の命令等が存在しないため、この例外となり、たとえば所定の１ワード定数を後続命令等とみなすことができる。
【００５１】
また、本発明は、上記プロセッサと結合されかつアドレスと対応づけて情報を記憶する記憶装置であって、各アドレスが、該アドレスに対応する情報が可変であるかどうかを識別する可変性識別フィールドと、該アドレスに対応する情報が事前変換なしで参照および設定もしくはその一方が可能であるかどうかを識別する固有性識別フィールドとを少なくとも有する記憶装置を提供する。
【００５２】
これにより、そのアドレスに対応する情報を不変の命令としてデコードすればよいのか可変のデータとしてデコードすればよいのかを局所的に識別することが可能となり、ソフトウエアによる局所的データアクセスが可能となりあるいはハードウエアによる処理が容易となり、処理を高速化することができる。また、プロセッサ不問プログラムとプロセッサ固有プログラムを効率的に区別することができ、臨機応変で柔軟なプロセッサ固有プログラム化（事前変換）を現実的なものにする。
【００５３】
可変性識別フィールドおよび固有性識別フィールドは、典型的にはそれぞれ１ビットでよい。また、それぞれ１ビットとし合わせて２ビットとする場合には、データバスおよびレジスタを、それぞれこのデータの転送および蓄積のためその２ビット分広げることが有利である。
【００５４】
可変性と固有性は独立した特性であるが、本発明においてはプロセッサ固有化していない情報（プロセッサ不問プログラムやプロセッサ不問データ）については処理過程において可変性の有無を識別する必要がないので、プログラム（不変）かデータ（可変）かにかかわらず、可変性を初期値の例えば０（すなわち、可変（書き換え可能））のままにしておくことができる。
【００５５】
本発明はまた、一方で、プログラムの実行のために、プロセッサ固有の情報を記憶するプロセッサ固有情報記憶ステップと、実行順序の定義された不変情報の系列であるプログラムを記憶するプログラム記憶ステップと、次に実行する不変情報の位置を記憶するプログラムカウントステップと、該プロセッサ固有情報記憶ステップにより記憶したプロセッサ固有情報、該プログラムカウントステップにより記憶した位置に対応する次に実行する不変情報、および該次に実行する不変情報に対し所定の相対的位置関係にある一以上の不変情報から当該次の実行の内容を決定する実行内容決定ステップとを少なくとも含むプログラム実行方法を提供する。
【００５６】
本発明はまた、他方で、データの処理のために、プロセッサ固有の情報を記憶するプロセッサ固有情報記憶ステップと、アドレスに対応する複数の可変情報を記憶する可変情報記憶ステップと、該プロセッサ固有情報記憶ステップにより記憶したプロセッサ固有情報、参照しようとする可変情報、および該参照しようとする可変情報に対応するアドレスから、該参照しようとする可変情報の正味内容を決定する正味内容決定ステップと、該プロセッサ固有情報記憶ステップにより記憶したプロセッサ固有情報、設定しようとする可変情報、および該設定しようとする可変情報に対応するアドレスから、該設定しようとする可変情報の、該可変情報記憶ステップで記憶する、プロセッサに固有の表現を決定するプロセッサ固有表現決定ステップとを少なくとも含むプログラム実行方法を提供する。
【００５７】
本発明はさらに、前記プロセッサ固有情報記憶ステップと、前記プログラム記憶ステップと、前記プログラムカウントステップと、前記実行内容決定ステップと、前記可変情報記憶ステップと、前記正味内容決定ステップと、前記プロセッサ固有表現決定ステップとを少なくとも含むプログラム実行方法を提供する。
【００５８】
これらの方法では、前記所定の相対的位置関係が、前記次に実行する不変情報より同一の文脈においては後にのみ実行され得る不変情報との相対的位置関係にあたることが有利である。
【００５９】
また、前記所定の相対的位置関係にある一以上の不変情報をキャッシュするキャッシュステップをさらに含むことが有利である。
【００６０】
また、これらの実行方法は、実行順序の定義された不変情報の系列でありかつプログラムを実行する処理装置のプロセッサとは別個のプロセッサを備えた処理装置でも実行可能であるプロセッサ不問プログラムを記憶するプロセッサ不問プログラム記憶ステップと、該プロセッサ不問プログラム記憶ステップで記憶するプロセッサ不問プログラムを、プロセッサ固有情報記憶ステップで記憶するプロセッサ記憶情報に応じて当該処理装置に固有の表現でありかつ当該処理装置のプロセッサで事前処理なしに実行できる装置固有プログラムに変換するプロセッサ固有プログラム化ステップとをさらに含むことができる。
【００６１】
有利には、前記プロセッサ固有プログラム化ステップは、後に実行される不変情報から前に実行される不変情報へという順序で、前記プロセッサ不問プログラムを前記処理装置固有プログラムに変換する。
【００６２】
本発明はまた、計算機を上記のプロセッサ、処理装置、もしくは記憶装置として動作させるためのコンピュータプログラムを提供する。
【００６３】
【発明の実施の形態】
以下、添付の図１から図７を参照しながら、本発明の一実施形態について説明する。なお、この実施形態では、プロセッサ固有情報化として、秘密鍵を用いた周知の暗号化方法による暗号化を採用しており、プログラムにもデータにも同一の暗号化アルゴリズムを用いている。また、プログラムもデータも、主記憶にそれぞれの領域として記憶され、それぞれ命令キャッシュ（不変情報キャッシュ手段）およびデータキャッシュを介して中央処理装置（ＣＰＵ、すなわちプロセッサ）に入力（データの場合には出力も）される（図１）。ただし、暗号強度向上のための暗号化パラメータについては、本発明の方針に従い、プログラムは後続命令と、データはアドレスとなっており、相違する（図２）。また、本実施形態では、従来のブロック暗号の暗号化（すなわちプロセッサ固有情報化）および平文化（すなわちプロセッサ不問情報化）手法との比較を行う（図３）とともに、平文化については命令とデータに分けて詳細を説明する（図４、図５）。さらに実施例として、開発が完了したプログラムの処理装置への設定手続（すなわちプロセッサ固有情報化、図６）、および固有性識別フィールドおよび可変性識別フィールドとしての付加情報をもった記憶装置（図７）について説明する。
【００６４】
図１は本発明の構成の概要を示す。
【００６５】
本発明のプロセッサたる中央処理装置１００は、本発明のプログラム記憶手段もしくは不変情報キャッシュ手段たる命令キャッシュ２００上に、実行しようとする（暗号化された）不変情報たる命令が存在する場合、外部命令バス２０１を介してこの命令および後述する後続の命令を読み込む。この時、実行内容決定手段たる命令平文化手段１３０は、プロセッサ固有情報記憶手段たる秘密鍵記憶手段１６０に記憶されている当中央処理装置１００の個体に依存する秘密鍵（すなわち当プロセッサの固有情報）を使用して、上記外部命令バス２０１上にある暗号化された命令の平文化（いわばプロセッサ不問命令化、この場合は暗号化に対する復号化）を行う。平文化された命令は命令実行装置１１０で解釈され実行される。
【００６６】
上記中央処理装置１００は、演算に必要な（暗号化された）可変情報たるデータがデータキャッシュ２１０上に存在する場合、外部データバス２１１を介してデータを読み込む。この時、必要ならば正味内容決定手段たるデータ（／命令）平文化手段１４０は、上記秘密鍵記憶手段（すなわちプロセッサ固有情報記憶手段）に記憶されている上記中央処理装置１００の個体に依存の秘密鍵（プロセッサ固有情報）および後述する当該可変情報のアドレス自体を利用して、上記外部データバス上にある暗号化されたデータの平文化（いわばプロセッサ不問データ化、この場合は暗号化に対する復号化）を行う。平文化されたデータはＡＬＵその他の処理リソースにあたる演算装置１２０で処理される。
【００６７】
なお、後述の実施例では、プロセッサ不問のソフトウエア（プログラムおよびデータ）を処理装置にロード後にプロセッサ固有ソフトウエア化を行っているが、別の実施例では、処理装置と、その処理装置の備えるプロセッサに固有の情報と、処理装置外部で生成したそのプロセッサ固有のソフトウエアとの対応づけをやはり外部のデータベースなどを用いて管理しながら、プロセッサ固有ソフトウエアを直接に当該処理装置に導入することもでき、この場合は、暗号化された命令およびデータのみが、製造ならびに運用過程のすべてを通じて、当該処理装置内に存在しうることになる。
【００６８】
また、上記中央処理装置１００は、可変情報たる演算結果を書き戻す（設定、格納する）べき記憶手段３００等の（仮想）アドレスが上記データキャッシュ２１０上に存在する場合、上記秘密鍵記憶手段１６０に記憶されている上記中央処理装置１００の個体に依存する秘密鍵（プロセッサ固有情報）および後述する当該可変情報（変数すなわちデータ領域の基準位置からのオフセット）のアドレスを利用して、プロセッサ固有表現決定手段たるデータ（／命令）暗号化手段１５０が暗号化を行った当該演算結果たるデータを、外部データバス２１１を介してデータキャッシュ２１０に書き込むことになる。
【００６９】
上記命令キャッシュ及びデータキャッシュに上記中央処理装置が要求する命令もしくはデータが存在しない場合、主記憶手段３００から必要な命令およびデータを外部メモリバス３０１を介して取り込むことになる。
【００７０】
なお、上述の全てのバス、すなわち外部命令バス２０１、外部データバス２１１、および外部メモリバス３０１は、１ワード（この実施形態では６４ビット）＋２ビット分のバス幅を有し、この＋２ビットにより、固有性（当該プロセッサに固有の暗号化されているか）と可変性（暗号化が、不変の命令等に対するものかあるいは可変のデータに対するものかを示す）の情報を常に供給している。ただし、別の実施形態では、かかる固有性および可変性の情報は、バスとは関係なく処理装置内で参照される大域的な（レジスタ）フラグを用いて中央処理装置１００に伝達される。
【００７１】
この図１を参照して述べたかかる手法によれば、命令、データともに上記命令キャッシュ２００、データキャッシュ２１０、外部命令バス２０１、外部データバス２１１、外部メモリバス３０１、および主記憶手段３００のいずれにも平文の状態で存在することがないようにできるため、第三者がこのシステム上の命令及びデータの解読、改竄、複製を行う事は極めて困難となる。
【００７２】
図２は、命令及びデータの暗号化の詳細を示すものである。
【００７３】
まず、図２を参照しながら平文のソフトウェアを本発明により暗号化（すなわちプロセッサ固有表現化）する方法について述べる。なお、この実施形態におけるソフトウェアの暗号化は、主記憶手段３００内のアドレスの大きい番地から小さい番地に向かって順にすなわちいわゆるプログラムカウンタの進行とは逆に一命令ずつ行い、データ暗号化手段１５０の入力パラメータとして、以前に暗号化されたひとつまたは複数の命令（プロセッサ固有表現）を用いる。この手法により、ある任意の命令はその後続のひとつまたは複数の命令に依存する関係を持つことになる。これにより、ある入力値（すなわち暗号化された命令表現（の系列））に対する出力値（すなわち実行内容を表すビットイメージひいてはその実行結果（の系列））がその入力値だけでは決定しない事になり、暗号解析が極めてに困難になる。
【００７４】
ここではまず、主記憶手段３００上の平文のソフトウェアすなわち当該中央処理装置１００の個体に依存しないプロセッサ不問ソフトウエアを、外部データバス２１１を通して読み込む。この場合、二者択一回路１４０１は上記外部データバス２１１の値をデータ暗号化手段１５０に直接入力するよう選択される。また二者択一回路１４０２は、データ暗号化手段１５０の入力パラメータとして、以前に暗号化した命令（ここではプログラムを後ろから暗号化しているため実行上後続の命令（すなわち後続のオペレータもしくはオペランドとなる）を入力するよう選択する。またデータ暗号化手段１５０の入力鍵には中央処理装置１００の個体に依存する（すなわち個体ごとに固有の）秘密鍵１６１が入力される。
【００７５】
次に、同じ図２を参照しながら平文のデータを本発明により暗号化（すなわちプロセッサ固有表現化）する方法について述べる。
【００７６】
ここではまず、主記憶手段３００上の平文のデータ（外部からインポートした暗号化されていないデータなど）を外部データバス２１１を通して読み込む。この場合、一方の二者択一回路１４０１は、上記外部データバス２１１の値を直接データ暗号化手段１５０に入力する側を選択する。また他方の二者択一回路１４０２は、上記データ暗号化手段１５０の入力パラメータとして、当該データのアドレスを入力するよう選択する。また入力鍵には上記中央処理装置１００の個体に依存する秘密鍵１６１が入力される。
【００７７】
可変のデータについては、不変の命令等と異なり、本発明による暗号化は任意の順番で行う事ができる。また、データは他のデータ（の暗号化表現）との依存関係を持たないため単独に変更することが可能である一方、データ自身のアドレスに依存関係を持つ。したがって、同じデータ（値）の暗号化を行ってもそのデータの格納アドレスが異なれば出力（設定、格納）される暗号化表現が異なり、やはり暗号解析は極めて困難となる。
【００７８】
図３は、命令の復号化と実行を考慮した本願発明による命令暗号化・復号化手法と、従来の命令暗号化・復号化手法との対比を示す。
【００７９】
従来のブロック暗号方式では、暗号化する平文ソフトウエアをある一定の長さのブロックに分割し、各ブロックごとに暗号化を行う。このとき、ブロックごとの暗号化を他のブロックと独立で行うと、攻撃に対して弱くなるため、従来は直前に暗号化されたブロックの演算結果を使用して暗号化を行っていた（図３Ａ）。
【００８０】
一方、本発明の当実施形態では、一命令を一ブロックとして暗号化を行う一方、暗号化された命令を平文化する際には直前に暗号化した命令（すなわち一ブロック）が必要となる。ただし、典型的な暗号文の場合には読み出し順や通信の到着順などの関係から直前の暗号文が参照し易い一方、暗号文がコンピュータプログラムの命令（オペレータやオペランド）である場合は、分岐命令の存在から、必ずしも直前の暗号文が参照し易いわけではなく、むしろ、一般的なプロセッサのプログラム実行方式においては、後続の命令、つまり直後の暗号文のほうが分岐命令の存在にかかわらず参照し易い場合が多い。したがって、この実施形態では、この性質を事前暗号化（プロセッサ固有プログラム化）の段階であらかじめ考慮し、平文化のパラメータとして後続命令の暗号化表現を使用するようにし、これを想定した事前暗号化（プロセッサ固有プログラム化）を行う（図３Ｂ）。これは、図からも分かるように、事前暗号化を行う順序を従来とは逆にする事、つまり後ろの命令から前の命令へという順序で事前暗号化（プロセッサ固有プログラム化）することを意味する（図３Ｂ）。
【００８１】
図４は、こうして事前暗号化（プロセッサ固有プログラム化）された命令の、プログラム実行時における逐次的な平文化の詳細を示し、この図を参照して暗号化されたソフトウェアを実行する方法について述べる。
【００８２】
ここではまず、主記憶装置３００上にある暗号化された命令を左図の外部命令バス２０１を介して読み込む。平文化を行う際には、実行しようとする命令のひとつまたは複数の後続の命令がパラメータとして必要となるため、命令プリフェッチ部１１００（不変情報キャッシュ手段）は、実行しようとする命令とその後続の複数の命令を読み込む。実行しようとする命令は、その後続の命令または命令群とともに命令平文化手段１３０（実行内容決定手段）によって平文化される。この際、プロセッサ（１００）の個体依存の秘密鍵１６１すなわちプロセッサ固有情報を、平文化を行う際の鍵として使用する。平文化された命令は、命令デコード部１１０１へ送られて実行される。
【００８３】
右図は、主記憶手段３００上の命令の実行順を示したものである。実行しようとする命令３１００は、暗号化が行われる段階でその後続の命令３１０１及び３１０２の情報をパラメータとして使っているため、平文化を行うには当該後続の命令が必要となる。これはその命令３１００の直前の命令が、隣接する命令３１０３であっても、隣接していない分岐命令３０１４であっても、同じように平文化が行えることを意味し、分岐命令の存在にかかわらない効率的な逐次平文化が可能であることを意味する。
【００８４】
なお、この手法によれば、秘密鍵１６１’が異なる中央処理装置１００’（をそなえた全体処理装置）は、上記の秘密鍵１６１により暗号化されたソフトウェアの平文化を行おうとしても、上記命令平文化手段１３０からの出力が異なるため、実行する事ができないことに留意されたい。
【００８５】
図５は、（事前）暗号化されたデータのほうの平文化の詳細を示し、この図を参照して暗号化されたデータの処理方法について述べる。
【００８６】
ここではまず、主記憶手段３００上の平文のデータを外部データバス２１１を通して読み込む。データ平文化手段１４０に入力される、データ平文化の際のパラメータとしては、そのデータのアドレス（書き換え可能データ用）もしくはそのデータのひとつまたは複数の後続のデータ（読み取り専用データ用）が、二者択一回路１４０３によって選ばれる。また入力鍵には上記中央処理装置１００の個体に依存する秘密鍵１６１（プロセッサ固有情報）が入力される。二者択一回路１４０１は上記データ平文化手段１４０の出力側を選択する。これにより、演算装置１２０及びレジスタファイル１７０には平文化されたデータが入力される。
【００８７】
演算した結果を書き戻す場合には、二者択一回路１４０２は、データ暗号化手段１５０に書き戻すデータ（可変情報）のアドレスが入力されるよう選択され、外部データバス２１１には暗号化されたデータ（すなわちプロセッサ固有表現）が出力される。
【００８８】
図６は、この実施形態の一態様となる実施例１を示す。この実施例では、開発が完了したプロセッサ不問プログラム（すなわち他のプロセッサを備えた処理装置でも実行できるプログラム）の当処理装置への設定（プロセッサ固有プログラム化、ここでは暗号化）の手続を説明する。
【００８９】
ここではまず、プログラム開発環境５００にて開発が完了したプログラム及び読み取り専用データ５１０が、平文の状態のままシステム上の不揮発性記憶手段書き込み装置４１０を介して、システム上の不揮発性記憶手段４００に書き込まれる（図の製品出荷前）。
【００９０】
次に、中央処理装置１００は、システム上の上記不揮発性記憶手段４００から平文の状態のプログラム及び読み取り専用データを順に読み込み、上記中央処理装置１００の個体に依存する秘密鍵１６１（プロセッサ固有情報）を利用して暗号化を行い、ふたたび上記不揮発性記憶手段書き込み装置４１０を介して、上記不揮発性記憶手段４００に書き込む。この手続きがすべて完了すると、上記システム上の不揮発性記憶手段４００内にあるすべてのプログラム及び読み取り専用データは、上記中央処理装置１００でのみ実行および利用が可能な状態、すなわちプロセッサ固有ソフトウエア（プログラムおよび（読み取り専用）データ）となる（図の製品出荷後）。なお、この例は、製品出荷前と出荷後の状態のみを示すものであるが、基本（バンドル）ソフトの暗号化（プロセッサ固有情報化）は出荷前にメーカーの工場内で行われるのが一般的であり、出荷前に図の「製品出荷語の状態」となりうることに留意されたい。一方、ユーザが後でインストールする市販ソフトは、ユーザがインストールした直後には図の「製品出荷前の状態」であり、本願発明により暗号化して以後に図の「製品出荷後の状態」となる。また、ユーザに暗号化のトリガを与える場合には、ユーザが任意に決めたパスワードを、暗号鍵（プロセッサ固有情報）として記憶させ使用したり、所定の暗号鍵に含めて記憶させ使用したり、上記隣接命令やアドレスなどの暗号化パラメータ以外の二次暗号化パラメータとして使用することも可能である。
【００９１】
図７を参照しながら、この実施形態の別の態様となる実施例２として、付加フィールドに１ビットの固有性識別フィールドおよびやはり１ビットの可変性識別フィールドを備えた記憶装置を挙げる。なお、ここでは、固有性識別フィールドは、暗合化されていれば１、されていなければ０であり、可変性識別フィールドは読み取り専用ならば０、書き換え可能ならば１である。なお、本暗号化の実施形態では、固有性が暗号化の有無を表しかつ可変性が暗号化の２種類のパラメータすなわち後続の固有表現およびアドレスの区別を実質的に表すことから、それぞれ別個に１ビットを割り当てているが、暗号化のパラメータを３種類以上用意することが有利な詳述しない実施形態では、固有性と可変性に１ビットづつを別個に割り当てる利益が少なく、暗号化されていない場合も含めた４種類以上の暗号化を、例えば２ビット以上の「暗号モード」（例えば、００：暗号化されていない、０１：後続表現をパラメータとした暗号化がされている、１０：アドレスをパラメータとした暗号化がされている、１１：アドレスおよび後続表現をパラメータとした暗号化がされている）として区別することができる。なお、同様の考え方から、本実施形態においても、未だ暗号化されない間は、プログラムとデータを区別せず、いずれも固有性は０で可変性は１となっている（右図）。
【００９２】
通常、プログラムには、命令（オペレータおよびオペランド）と読み取り専用のデータ（定数配列など）が混在しており、ソフトウェアの暗号化を行う際にこれらを区別する事はできない。したがって、ソフトウェアの暗号化を行う際には、命令と読み取り専用のデータを区別せずに暗号化を行う。
【００９３】
一方、データについては、暗号化が行われる際に、ソフトウェア内部に含まれる読み取り専用のデータ（不変情報）と、書き換え可能なデータ（可変情報）とに区別される。読み取り専用のデータ（不変情報）は、暗号化のパラメータにその後続のデータを用いる手法で暗号化され、右図に示すように可変性フィールドは０に設定される。また、書き換え可能なデータ（可変情報）は、暗号化のパラメータにそのデータのアドレスを用いる手法で暗号化され、やはり右図に示すように、可変性フィールドは１に設定される。
【００９４】
これら２種類のデータは、どちらの方式で暗号化が行われたものなのかをそのデータに対応するアドレスの付加フィールド内の可変性フィールドで判断して、適切な方法で平文化を行えるようにしている。
【００９５】
図の右の表には、それらのビット（固有性フィールド、可変性フィールド）と命令及びデータの特性との関係、すなわち暗号化（プロセッサ固有情報化）されたかどうか（固有性）、および、書き換え可能かどうか（可変性）を示す。
【００９６】
図の左の表には、右表の定義に従い記憶装置のプログラム領域およびデータ領域内の命令及びデータ格納領域を設定した例を示す。なお、ここでいう記憶装置とは主記憶装置３００並びにキャッシュメモリ２００、２１０を指し、いずれの装置においてもかかる設定をとっている。この表の例では、プログラム領域内の命令はいずれも暗号化（プロセッサ固有表現化）されておりかつ読み取り専用（不変情報）である。また、表中の上方データ領域内のデータはいずれも暗号化されているが、書き換え可能（可変情報）である。表中の下方データ領域内のデータはプロセッサ固有表現化されていない生データ（すなわち平文データ）であり、かつ書き換え可能（可変情報）である。
【００９７】
この下方のデータ領域内の生データは、前述のデータ平文化手段１４０（すなわち正味内容決定手段）を介さずに参照できるが、一般的な表現であるため簡単に閲覧、改竄等されてしまう。したがって、この場合、データ暗号化手段１５０（すなわちプロセッサ固有表現決定手段）を介して事前暗号化を施すことにより、上方のデータ領域内のデータと同様に暗号化（プロセッサ固有表現化）された状態とすることができる。これにより、閲覧等が極めて困難となる一方、参照する際には、データ平文化手段１４０を介した逐次平文化、書き換える際にはデータ暗号化手段１５０を介した逐次暗号化が必要となる。
【００９８】
なお、上述の実施形態はあくまでも例としてのものであり、本明細書の開示により、当業者は、特許請求の範囲内で様々なバリエーションを実現することができる。
【００９９】
【発明の効果】
以上のとおり、本発明によれば、解読される危険性のある平文化されたソフトウェアの存在をシステム上から排除しつつ、かつ、暗号強度をあげるためのパラメータの利用にあたり分岐命令を特別に処理する回路も必要としないプロセッサ等およびプログラム実行方法を提供することができる。
【０１００】
また、今日の半導体製造方法においては、プロセッサに隣接して置かれるキャッシュメモリがハードマクロとして置かれることがほとんどであるためその物理的な場所を特定でき、キャッシュメモリの出入り口の第三者による解析を介して平文化されたプログラムやデータを盗み出すことが可能であるが、この発明によれば、キャッシュメモリ上にも暗号化されたプログラムやデータを置くことが可能となり、たとえ第三者がキャッシュメモリの出入り口でその入出力値を測定したとしても、元のソフトウェアやデータを推測する事が極めて困難となる。つまりメモリ上のソフトウェアの保護はもとより、チップ上での保護も可能にする。
【０１０１】
また、本発明の暗号化手法は、当該命令のみならず後続の命令にも依存した暗号文を生成するため解読攻撃に対する強度を保ったまま、分岐命令も簡潔に処理する事ができる。
【０１０２】
また、こうした工夫により全体的としては回路が複雑になるのを回避することができる。
【０１０３】
さらに、この発明の暗号化手法によれば、プロセッサは正規に暗号化された命令のみしか実行できないため、これをソフトウェアの認証や不正プログラムからのオペレーティングシステムの保護などに応用することもできる。
【図面の簡単な説明】
【図１】本発明の構成の概要を示すブロック図である。
【図２】本発明による命令及びデータの暗号化の詳細を示す図である。
【図３】復号および命令実行を考慮した本発明の手法と従来手法との対比を示す図である。
【図４】本発明による命令の平文化の詳細を示す図である。
【図５】本発明によるデータの平文化の詳細を示す図である
【図６】本発明の一実施例を示す図である。
【図７】本発明の別の実施例を示す図である。
【図８】本発明の当技術分野における位置付けを示す図である。
【符号の説明】
１００  中央処理装置（プロセッサ）
１１０  命令実行装置
１１００  命令プリフェッチ部
１１０１  命令デコード部
１２０  演算装置（ＡＬＵなど処理リソース）
１３０  命令平文化手段（実行内容決定手段）
１４０  データ平文化手段（正味内容決定手段）
１４０１，１４０２，１４０３  二者択一回路
１５０  データ暗号化手段（プロセッサ固有表現決定手段）
１６０  秘密鍵記憶手段（プロセッサ固有情報記憶手段）
１６１  プロセッサ個体依存の秘密鍵（プロセッサ固有情報）
２００  命令キャッシュ（不変情報キャッシュ手段）
２０１  外部命令バス（パラレル接続）
２１０  データキャッシュ
２１１  外部データバス（パラレル接続）
３００  主記憶手段（主メモリ）
３０１  外部メモリバス（パラレル接続）
４００  システム上の不揮発性記憶手段（プログラム記憶手段、可変情報記憶手段、プロセッサ不問プログラム記憶手段）
４１０  不揮発性記憶手段書込装置（プロセッサ固有プログラム化手段）
５００  プログラム開発環境
５１０  開発が完了したプログラム及び読取専用データ（プロセッサ不問ソフトウエア）
３０１４  隣接していない分岐命令
３１００  実行しようとする命令（不変情報たるオペレータおよびオペランド）
３１０１，３１０２  実行しようとする命令の後続の命令
【図１】
2004246637.tif 000003
【図２】
2004246637.tif 000004
【図３】
2004246637.tif 000005
【図４】
2004246637.tif 000006
【図５】
2004246637.tif 000007
【図６】
2004246637.tif 000008
【図７】
2004246637.tif 000009
【図８】
2004246637.tif 000010