(57)【要約】【課題】セキュア領域の格納内容の信頼性を高めて、悪意をもった者に不正の糸口を与えることがない、及び悪意をもった者により改ざんがされたプログラムが、通常メモリにロードされることを防止するプログラムローダを提供する。【解決手段】ロード対象であるプログラムをそのロード先情報に従ってメモリ上にロードするプログラムローダであって、ロード先情報を、前記プログラムが記録されている記録媒体から取得する取得部と、前記ロード先情報に対する改竄の有無を検証する検証部と、プログラムのロードを実行するロード部と、を備え、ロード先情報は、前記メモリ上のアドレス空間のうち、プログラムの実行イメージが占めるべきメモリ領域を示し、前記ロード部は、前記検証により、改竄が無いことが判明した場合、前記ロード先情報に示されるメモリ領域に、プログラムの実行イメージを生成して、実行に供することでロードを行う。【選択図】図１
2007133860.tif 000002
【特許請求の範囲】
【請求項１】
ロード対象であるプログラムをそのロード先情報に従ってメモリ上にロードするプログラムローダであって、
ロード先情報を、前記プログラムが記録されている記録媒体から取得する取得手段と、
前記ロード先情報に対する改竄の有無を検証する検証手段と、
プログラムのロードを実行するロード手段とを備え、
ロード先情報は、前記メモリ上のアドレス空間のうち、プログラムの実行イメージが占めるべきメモリ領域を示し、
前記ロード手段は、前記検証により、改竄が無いことが判明した場合、前記ロード先情報に示されるメモリ領域に、プログラムの実行イメージを生成して、実行に供することでロードを行う
ことを特徴とするプログラムローダ。
【請求項２】
前記ロード対象であるプログラムは、ロードオブジェクトの形態で記録媒体に記録されており、
ロードオブジェクトは、前記プログラム、前記ロード先情報、及び認証子を含み、
前記認証子は、
改ざんがないとの仮定下において、プログラム及びそのロード先情報の組合せに固有となる値であり、ユーザへのプログラム供給の前段階において、予め算出されており、
改ざんの有無の検証は、
プログラムを実行しようとする段階において、前記ロード対象であるプログラム及びそのロード先情報の組合せに固有な値を算出して、算出された値と前記認証子とを比較することでなされる
ことを特徴とする請求項１記載のプログラムローダ。
【請求項３】
前記ロード対象であるプログラムは、ロードオブジェクトの形態で記録媒体に記録されており、
ロードオブジェクトは、前記プログラム、前記ロード先情報、及び認証子を含み、
前記認証子は、
改ざんがないとの仮定下において、プログラムに固有となる値であり、ユーザへのプログラム供給の前段階において、予め算出されており、
前記認証子が算出された後、ユーザへのプログラム供給の前段階において、前記プログラムは、当該プログラムにおける所定位置のデータを、当該データとそのロード先情報とを可逆演算することにより得られる演算結果に置き換えられており、
改ざんの有無の検証は、
プログラムを実行しようとする段階において、前記ロード対象であるプログラムにおける前記所定位置のデータを、当該データと前記ロード先情報との前記可逆演算の逆演算を行うことにより得られる演算結果に置き換え、置換後のプログラムに固有な値を算出して、算出された値と前記認証子とを比較することでなされる
ことを特徴とする請求項１記載のプログラムローダ。
【請求項４】
前記プログラムローダは、
前記ロード対象であるプログラムをそのロード先情報に従ってロードした場合に、前記メモリ上において定められているセキュア領域内に収まるか否かを検証する領域検証手段を備え、
前記検証手段による検証は、前記ロード対象であるプログラムがセキュア領域内に収まると検証された場合に行われる
ことを特徴とする請求項１記載のプログラムローダ。
【請求項５】
前記ロードオブジェクトが、改ざんされたロード先情報を回復するための回復情報を含んでいる場合、前記取得手段は、前記回復情報を用いた算出処理にて、ロード先情報を取得し、
ロードオブジェクトが、回復情報を含んでいる場合、前記逆演算の対象となるのは、前記算出により得られたロード先情報である
ことを特徴とする請求項３記載のプログラムローダ。
【請求項６】
前記ロードオブジェクトは、前記取得手段が前記回復情報を用いた算出処理にて、ロード先情報を取得する処理を行うか否かを示すフラグを含み、
前記取得手段は、
前記フラグが処理を行う旨を示すものである場合に、前記回復情報を用いた算出処理にて、ロード先情報を取得する
ことを特徴とする請求項５記載のプログラムローダ。
【請求項７】
前記ロードオブジェクトは、前記取得手段による処理の内容をユーザに通知するか否かを示すフラグを含み、
前記プログラムローダは、
前記フラグがユーザに通知を行う旨を示すものである場合に、前記取得手段による処理の内容をユーザに通知する
ことを特徴とする請求項５記載のプログラムローダ。
【請求項８】
前記ロード対象であるプログラムは、ロードオブジェクトの形態で記録媒体に記録されており、
ロードオブジェクトは、前記プログラム、前記ロード先情報、改ざんされたロード先情報を回復するための回復情報を含み、
前記プログラムの所定位置には、前記回復情報を用いて所定の演算を行うと正しい値が得られるよう変換されたロード先情報が埋め込まれており、
前記プログラムローダは、さらに、
前記検証により改ざんがあることが判明した場合、前記回復情報を用いて前記プログラムの所定位置に前記所定の演算を行って、ロード先情報を取得するロード先情報回復手段を備え、
前記ロード手段は、前記検証により前記ロードオブジェクトに含まれるロード先情報に対する改ざんがあることが判明した場合、前記ロード先情報回復手段が取得したロード先情報に示されるメモリ領域に、プログラムをロードする
ことを特徴とする請求項１記載のプログラムローダ。
【請求項９】
前記検証手段は、さらに、前記ロード先情報回復手段が取得したロード先情報に対する改ざんの有無を検証し、
前記ロード手段は、前記検証により前記ロードオブジェクトに含まれるロード先情報に対する改ざんがあることが判明し、かつ、前記ロード先情報回復手段が取得したロード先情報に改ざんがないことが判明した場合に、前記ロード先情報回復手段が取得したロード先情報に示されるメモリ領域に、プログラムをロードする
ことを特徴とする請求項８記載のプログラムローダ。
【請求項１０】
前記プログラムがロードされた後、改竄があると検証された場合に、
前記ロード手段は、
前記領域上のプログラムまたは前記プログラムがロードされた前記メモリ上の領域を無効化して、前記実行に供されないようにする
ことを特徴とする請求項１記載のプログラムローダ。
【請求項１１】
請求項１に記載のプログラムローダと、
改ざんがないと検証された場合に、ロードされた前記プログラムを実行する実行手段と
を１チップ構造に封入したプロセッサ。
【請求項１２】
メモリと、
前記メモリにプログラムを含むロードオブジェクトを格納する格納手段と、
請求項１に記載のプログラムローダと、
改ざんがないと検証された場合に、ロードされた前記プログラムを実行する実行手段と、
を含んで構成されるデータ処理装置。
【請求項１３】
ロード対象であるプログラムをそのロード先情報に従ってメモリ上にロードするプログラムロード方法であって、
ロード先情報を、前記プログラムが記録されている記録媒体から取得する取得ステップと、
前記ロード先情報に対する改竄の有無を検証する検証ステップと、
プログラムのロードを実行するロードステップと、を備え、
ロード先情報は、前記メモリ上のアドレス空間のうち、プログラムの実行イメージが占めるべきメモリ領域を示し、
前記ロードステップは、前記検証により、改竄が無いことが判明した場合、前記ロード先情報に示されるメモリ領域に、プログラムの実行イメージを生成して、実行に供することでロードを行う
ことを特徴とするプログラムロード方法。
【請求項１４】
ロード対象であるプログラムをそのロード先情報に従ってメモリ上にロードするプログラムローダであって、
前記プログラムは、ロードオブジェクトの形態で記録媒体に記録されており、
ロードオブジェクトは、前記プログラムと、前記プログラムのロード先情報を回復するための回復情報とを含み、
前記回復情報を用いて、ロード先情報を算出する回復手段と、
算出された情報に従って前記プログラムをロードするロード処理手段と、
を備えることを特徴とするプログラムローダ。
【請求項１５】
ロードオブジェクトを作成する作成方法であって、
プログラムのロード先情報と、前記プログラムとそのロード先情報とをパラメータとして所定の関数を実行することにより求まる認証子とを前記プログラムに付加する付加ステップと、
前記プログラムを指定された方式に従って変換する変換ステップと、
を含む作成方法。
【請求項１６】
ロードオブジェクトを作成する作成方法であって、
プログラムのロード先情報と、前記プログラムをパラメータとして所定の関数を実行することにより求まる認証子とを前記プログラムに付加する付加ステップと、
前記プログラムにおける所定位置のデータと前記ロード先情報とを可逆演算し、前記所定位置のデータを演算結果に置換する置換ステップと、
置換後のプログラムを指定された方式に従って変換する変換ステップと、
を含む作成方法。
【請求項１７】
ロード対象であるプログラムをそのロード先情報に従ってメモリ上にロードする集積回路であって、
ロード先情報を、前記プログラムが記録されている記録媒体から取得する取得手段と、
前記ロード先情報に対する改竄の有無を検証する検証手段と
プログラムのロードを実行するロード手段と、を備え、
ロード先情報は、前記メモリ上のアドレス空間のうち、プログラムの実行イメージが占めるべきメモリ領域を示し、
前記ロード手段は、前記検証により、改竄が無いことが判明した場合、前記ロード先情報に示されるメモリ領域に、プログラムの実行イメージを生成して、実行に供することでロードを行う
ことを特徴とする集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムを指定された領域にロードする技術に関する。
【背景技術】
【０００２】
従来、プログラムを安全にプロセッサ内のメモリにロードするための装置および方法に関する技術が開示されている。
ここでロードとは記録媒体上のプログラムの実行イメージ(オブジェクト、インスタンス)をメモリ領域上に生成して、プロセッサによる実行に供することをいう。
例えば、プロセッサ外部にある記憶装置からプロセッサ内にプログラムを安全にロードする方法では、プログラムが外部装置に格納される前に暗号化され、また、プログラムの正当性を検証するための認証情報が付与された状態で外部装置に格納される。そして、プロセッサがプログラムを実行できるようになる前に、プログラムを復号化し、該プログラムを認証している（例えば、特許文献１参照）。
【０００３】
これにより、プロセッサ上で動作する他のプログラム内容を暴露する等の望ましくないプログラムがプロセッサ上で実行されることを阻止することができる。
ところで、プログラムのロード先となるメモリには、何らかの保護の仕組みが施されたメモリ（セキュアメモリ）と、そのような仕組みが施されていないメモリ（通常メモリ）との２種類ある。
【０００４】
例えば、著作権保護方式をソフトウェアで実現する場合には、ソフトウェアの解析や、不正に処理方式を改ざんされたプログラムの実行が、困難な環境にプログラムをロードして実行することが要求されるため、プログラムローダはセキュアメモリにプログラムをロードする必要がある。上述のようにプロセッサ内部に配置されているＲＡＭにプログラムをロードすると、ＲＡＭとプロセッサの演算器との間のデータ送信路であるバスがプロセッサ内部に物理的に隠蔽できるので、プロセッサ外部からのプログラム解析行為や改ざん行為への耐性を高くすることができる。すなわち、秘密にする必要があるアルゴリズムが実装されたプログラムは、プロセッサ内部に備えられる保護されたＲＡＭにロードして実行される仕組みとすることで、該プログラムの暴露、及び改ざんの危険性を極小化できる。
【特許文献１】特表２００２−５０７３０７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、上述したセキュアメモリは、暗号化されたプログラムを復号するにあたって、復号化がなされたプログラムの一時的な格納先として用いられる場合がある。そして、コンピュータシステムは、かかる格納先に存在するプログラムが、正当なものであるとして、プロセッサによる実行に供する。ここで、悪意をもった者が、ロード先アドレスを不当に書き換えた場合を想定する。この場合、プログラムローダは改ざんされたロード先アドレスに従ってプログラムをセキュア領域にロードし、プロセッサは、このセキュア領域内のプログラムを実行しようとする。しかし、かかるプログラムは、悪意をもった者が、ロード先アドレスを書き換えることにより、セキュア領域にロードされたものなので、これをプロセッサが実行しようとすると、システムが例外動作を起こすことがある。この場合、第３者はシステムに対する攻撃の糸口をつかむことになる。
【０００６】
また、セキュア領域を設けていたとしても、プログラムによっては、セキュア領域以外のメモリ空間（通常メモリ）にロードされることがある。そのように通常メモリにロードされたプログラムが存在する場合、そのプログラムが、果たして、セキュア領域に格納する必要がないため、通常メモリにロードされたのか、又は、悪意をもった者によりロード先アドレスが不当に改ざんされたため、通常メモリにロードされたものなのか、区別がつかない。もし後者のロードを認めるのなら、プログラムに対するリバース行為が容認されるため、セキュア領域をもっていることの意義が、ほとんど失われる。
【０００７】
本発明の目的は、セキュア領域の格納内容の信頼性を高めて、悪意をもった者に不正の糸口を与えることがないプログラムローダを提供すること、及び、悪意をもった者により改ざんがされたプログラムが、通常メモリにロードされることを防止するプログラムローダを提供することである。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、本発明は、ロード対象であるプログラムをそのロード先情報に従ってメモリ上にロードするプログラムローダであって、ロード先情報を、前記プログラムが記録されている記録媒体から取得する取得手段と、前記ロード先情報に対する改竄の有無を検証する検証手段と、プログラムのロードを実行するロード手段と、を備え、ロード先情報は、前記メモリ上のアドレス空間のうち、プログラムの実行イメージが占めるべきメモリ領域を示し、前記ロード手段は、前記検証により、改竄が無いことが判明した場合、前記ロード先情報に示されるメモリ領域に、プログラムの実行イメージを生成して、実行に供することでロードを行うことを特徴とするプログラムローダである。
【発明の効果】
【０００９】
本発明は、上記の構成を備えることにより、ロード先情報に対する改ざんの有無を検証するので、改ざんの存在が判明すれば、かかるプログラムがロードされたセキュア領域を無効化することにより、あるいは、かかるプログラムのロードを行わないことにより、プロセッサによる当該プログラムの実行を回避することができる。これにより、不正行為の糸口を与えるような、プログラム実行を未然に防止することができる。すなわち、セキュア領域の格納内容の信頼性を高めることができ、システムの安定性を高めることができる。
【００１０】
また、ロード先情報に対する改ざんの有無を検証するので、セキュア領域以外の通常メモリにプログラムがロードされようとしている場合、セキュア領域に格納する必要がないため、通常メモリにロードされたのか、又は、悪意をもった者により不当に改ざんされたため、通常メモリにロードされたものなのかの区別がつき、後者のロードをとりやめることができる。これによりプログラムが通常メモリにロードされることによるリバース行為を未然防止することができる。
【００１１】
ここで、ロード先情報に対する改ざんを検証しようとすると、別の問題が浮上する。それは、ハッシュアルゴリズムの実行など、余分な処理がロード時に必要になるので、ユーザによるプログラム起動指示から、実際にプログラムが起動するまでの期間が間延びし、レスポンスが低下するという問題である。かかる問題を解消するには、前記ロード対象であるプログラムは、ロードオブジェクトの形態で記録媒体に記録されており、ロードオブジェクトは、前記プログラム、前記ロード先情報、及び認証子を含み、前記認証子は、改ざんがないとの仮定下において、プログラム及びそのロード先情報の組合せに固有となる値であり、ユーザへのプログラム供給の前段階において、予め算出されており、改ざんの有無の検証は、プログラムを実行しようとする段階において、前記ロード対象であるプログラム及びそのロード先情報の組合せに固有な値を算出して、算出された値と前記認証子とを比較することでなされる、とすることが望ましい。
【００１２】
ハッシュ値等を認証子として用いてロード先情報に対する改ざんの有無を検証する場合、ロード先領域を示す情報に対する改ざんの有無の検証のための演算処理は、プログラム自体に対する検証のための演算処理と一本化される。これにより、ロード先情報に対する検証処理を追加したとしても、レスポンス低下は発生し得ない。
ここで、前記ロード対象であるプログラムは、ロードオブジェクトの形態で記録媒体に記録されており、ロードオブジェクトは、前記プログラム、前記ロード先情報、及び認証子を含み、前記認証子は、改ざんがないとの仮定下において、プログラムに固有となる値であり、ユーザへのプログラム供給の前段階において、予め算出されており、前記認証子が算出された後、ユーザへのプログラム供給の前段階において、前記プログラムは、当該プログラムにおける所定位置のデータを、当該データとそのロード先情報とを可逆演算することにより得られる演算結果に置き換えられており、改ざんの有無の検証は、プログラムを実行しようとする段階において、前記ロード対象であるプログラムにおける前記所定位置のデータを、当該データと前記ロード先情報との前記可逆演算の逆演算を行うことにより得られる演算結果に置き換え、置換後のプログラムに固有な値を算出して、算出された値と前記認証子とを比較することでなされるとしてもよい。
【００１３】
これにより、上記と同様の効果に加え、さらに、悪意のある第三者が前記プログラムのフォーマットを知り得たとしても、前記所定位置、及び可逆演算の方法を秘密にしておくことで、正しくロードできるプログラムを作り出すことを困難にさせることができる。
ここで、前記プログラムローダは、前記ロード対象であるプログラムをそのロード先情報に従ってロードした場合に、前記メモリ上において定められているセキュア領域内に収まるか否かを検証する領域検証手段を備え、前記検証手段による検証は、前記ロード対象であるプログラムがセキュア領域内に収まると検証された場合に行われるとしてもよい。
【００１４】
前記検証手段による検証は、例えば、信頼性の高いハッシュアルゴリズムを使用したデータ検証処理であり、処理負荷が高く、検証処理対象のデータサイズが大きくなるほど処理コスト面で不利になる。他方、前記領域検証手段による検証は、領域の比較であるので、処理負荷は小さい。このように、通常、前記検証手段による検証よりも前記領域検証手段による検証の方が処理負荷は小さいため、前記領域検証手段による検証を前記検証手段による検証に先駆けて行うことにより、常に前記検証手段による検証を行う必要はないので、処理コストを低減させることができる。
【００１５】
ここで、前記ロードオブジェクトが、改ざんされたロード先情報を回復するための回復情報を含んでいる場合、前記取得手段は、前記回復情報を用いた算出処理にて、ロード先情報を取得し、ロードオブジェクトが、回復情報を含んでいる場合、前記逆演算の対象となるのは、前記算出により得られたロード先情報であるとしてもよい。
これにより、前記検証手段は、回復されたロード先情報を用いて、改めてプログラムを再検証し、検証結果が正常であれば、再ロード処理の簡略化が可能となるので、ロード処理の効率化を図ることができる。
【発明を実施するための最良の形態】
【００１６】
以下本発明の実施の形態について、図面を参照しながら説明する。
（実施の形態１）
＜構成＞
図１は本発明の実施の形態１に係るプログラムローダ１００、プログラムローダ１００を備えたプロセッサ１１０、及びプロセッサ１１０を備えたデータ処理装置１２０を示している。
【００１７】
データ処理装置１２０は、プロセッサ１１０、通常ＲＡＭ１２１、及び入出力部１２２を含んで構成される。
プロセッサ１１０は、ＣＰＵ１１１、保護ＲＡＭ１１２、及びプログラムローダ１００を含んで構成される。
ＣＰＵ１１１は、保護ＲＡＭ１１２やプロセッサ１１０外部に接続される通常ＲＡＭ１２１にロードされているプログラムコード及びデータをフェッチしてプログラムを実行する。
【００１８】
保護ＲＡＭ１１２とは、何らかの保護的な仕組みが施されているＲＡＭをいい、保護すべきプログラムがロードされるＲＡＭである。保護的な仕組みは、具体的には、ＲＡＭ全体を暗号化して、実際に使用するときに復号化するというソフトウェア的なものと、メモリ自体にアクセスできないようにバスを遮断するというハードウェア的なものが代表的であるが、どのような方法を用いて実現してもよい。本実施の形態では、ハードウェア的な実装として、例えば、バスにスイッチを設け、改ざんはないと検証された場合に、スイッチによりバスの線をつなぎ、ＣＰＵ１１１が保護ＲＡＭ１１２にアクセスできるようにする。ここで、保護すべきプログラムとは、機密度の高いプログラムであり、具体的には、権利情報、及び鍵情報を含んでいるプログラムである。あるいはリッチコンテンツであってもよい。保護ＲＡＭ１１２は、保護ＲＡＭ１１２上のデータがプロセッサ外部に流れないように、ＣＰＵ１１１やプログラムローダ１００とは内部バスで接続される形態が望ましい。このようにプロセッサ１１０は、保護されたプログラム実行環境を提供する。
【００１９】
プログラムローダ１００は、ロードアドレス検証部１０１、実行イメージ検証部１０２、及びロード処理部１０３を含んで構成される。
ロードアドレス検証部１０１は、ロード対象であるプログラムのロード先として指定されたロードアドレス空間が保護ＲＡＭ１１２に割り当てられているアドレス空間に収まっているか否かを検証する機能を有する。この機能により、ロードアドレスが誤って保護ＲＡＭ以外の領域に指定されている場合に、秘匿性の高いプログラムを保護ＲＡＭ１１２以外のＲＡＭに転送してしまうことを防ぐことができる。ここでロードアドレス空間とは、プログラムをロードする先頭アドレスから末尾アドレスまでの領域を指し、ロードアドレス及びロードサイズから求まる。
【００２０】
実行イメージ検証部１０２は、ロード対象であるプログラム、ロードアドレス、及びロードサイズの少なくとも何れかが不正に改ざんされているか否かを検証する機能を有する。具体的な検証方法については後述する。この機能によって、意図しない不正な処理を行うプログラムを実行してしまうことを防ぐことができる。改ざんの検証は、例えば、ハッシュ値生成アルゴリズムであるＳＨＡ−１アルゴリズムや、共通鍵ブロック暗号アルゴリズムのＣＢＣモードを使用したＭＡＣ生成アルゴリズムを利用して実施される。
【００２１】
ロード処理部１０３は、ロードアドレス検証部による検証結果が正常であった場合に、通常ＲＡＭ１２１に配置されたロード対象のプログラムを復号化しつつ、指定されたアドレス空間（例えば、保護ＲＡＭ１１２）にロードする機能を有する。また、実行イメージ検証部１０２によりプログラム、ロードアドレス、及びロードサイズの何れかが不正に改ざんされていると検証された場合、保護ＲＡＭ１１２上にロードされたプログラムが実行されないよう無効化処理を施す。無効化処理は、例えば、ロードされたプログラムを無効にしたり、保護ＲＡＭ１１２自体を無効にしたりする処理である。保護ＲＡＭ１１２自体を無効にするには、例えばバスを遮断し、ＣＰＵ１１１からアクセスできないようにする。
【００２２】
通常ＲＡＭ１２１は、保護ＲＡＭ１１２とは異なり、何らかの保護の仕組みが施されていないＲＡＭである。通常ＲＡＭ１２１には、ロード対象オブジェクトが格納されるほか、特に保護する必要のないプログラムコード及びデータがロードされる。
入出力部１２２は、データ処理装置１２０外部に接続される各種装置とのデータ入出力を制御する。データ処理装置１２０に接続される装置としては、例えば、メモリカード１４０やハードディスク（ＨＤＤ）１４１のような記憶媒体や、通信回線１４２、及び受信器１４３のようなデータ送受信機能を備える機器がある。入出力部１２２はデータ処理装置１２０で実行するロード対象オブジェクトを装置外部から受信（ダウンロード）して、通常ＲＡＭ１２１に格納する。通常ＲＡＭ１２１に格納されたロード対象オブジェクにおけるプログラムは、プログラムローダ１００によって保護ＲＡＭ１１２上にロードされるので、プロセッサ１１０は前記プログラムを保護された実行環境で実行できる。
【００２３】
＜アドレスマップ＞
図２はＣＰＵ１１１から見えるメモリ空間アドレスマップの一例を示している。この例では、０ｘ００００００００〜０ｘ００ＦＦＦＦＦＦにＲＯＭ空間２０１、０ｘ２０００００００〜０ｘ２００ＦＦＦＦＦに保護ＲＡＭ空間２０２、０ｘ８０００００００〜０ｘ８ＦＦＦＦＦＦＦに通常ＲＡＭ空間２０３、及び０ｘＥ０００００００〜０ｘＥＦＦＦＦＦＦＦにプロセッサ１１０に接続される各種デバイスのＩ／Ｏレジスタ空間２０４が割り当てられている。プログラムローダ１００では、ロードアドレス検証部１０１がロードアドレス３０２とロードするプログラムのサイズであるロードサイズ３０３とを基にロードアドレス空間を算出し、ロードアドレス空間が保護ＲＡＭ空間２０２に収まっているか否かを検証し、検証結果が肯定的な場合に、ロード処理部１０３がプログラムのロードを実施するので、保護すべきプログラムが保護されていない通常ＲＡＭ空間へロードされてしまう危険性が無い。
【００２４】
＜データ構造＞
図３は、本実施の形態におけるロード対象オブジェクトのフォーマットの一例を示している。
ロード対象オブジェクト３００は、ヘッダ情報３０４と実行イメージ３０５とが結合されて構成される。
【００２５】
ヘッダ情報３０４は、実行イメージ認証子３０１、ロードアドレス３０２、及びロードサイズ３０３を含んで構成される。
実行イメージ認証子３０１は、少なくともロードアドレス３０２、ロードサイズ３０３、及び実行イメージ３０５を含むデータに対して、ハッシュアルゴリズムを適用して生成された認証用データである。
【００２６】
実行イメージ３０５は、プログラムのコード及びデータで構成される。実行イメージ３０５は、暗号化される（以下、暗号化された実行イメージ３０５を実行イメージ３０５ａと表記する）。また、実行イメージ認証子３０１の生成において、ロードアドレス３０２、ロードアドレス３０３、及び実行イメージ３０５は図示するように連続して配置していることが好ましいが、必ずしもその限りではない。
【００２７】
＜実行イメージ検証部１０２による改ざん検出方法＞
ここでは、実行イメージ検証部１０２が、具体的にどのように、実行イメージ及びロードアドレスの改ざんの有無を検証するかを説明する。実行イメージ検証部１０２は、ロードアドレス３０２、ロードサイズ３０３、及び保護ＲＡＭ１１２上にロードされた実行イメージ３０５を含むデータに対して、実行イメージ認証子３０１の生成時と同じ方法でハッシュ値を生成し、生成したハッシュ値を実行イメージ認証子３０１と比較し、ロードアドレス３０２、ロードサイズ３０３、及び実行イメージ３０５の正当性を検証する。生成したハッシュ値が一致する場合には正当であると検証される。上述したように実行イメージ認証子３０１は、少なくともロードアドレス３０２、ロードサイズ３０３、及び実行イメージ３０５を含むデータに対して、ハッシュアルゴリズムを適用して生成された認証用データであるので、ロードアドレス３０２、ロードサイズ３０３、及び実行イメージ３０５の何れかが改ざんされていれば、実行イメージ認証子３０１とは異なるハッシュ値が算出される。したがって、一度の検証でロードアドレス３０２、ロードサイズ３０３、及び実行イメージ３０５に対する改ざんの有無を検出することができる。
【００２８】
＜処理フロー＞
図４はロード対象となる実行イメージ３０５ａを保護ＲＡＭ１１２へロードする場合の処理フローを示している。まず、入出力部１２２は通常ＲＡＭ１２１にロード対象オブジェクトを構成する実行イメージ３０５ａと、ヘッダ情報３０４とを格納する（ステップＳ４０１）。ロードアドレス検証部１０１は、ロードアドレス３０２とロードサイズ３０３とから算出されるロードアドレス空間が保護ＲＡＭアドレス空間内に収まっているか否かを検証する（ステップＳ４０２）。検証結果が異常の場合は（ステップＳ４０３でＮｏ）、ロードせずに、処理を終了する。検証結果が正常の場合は（ステップＳ４０３でＹｅｓ）、ロード処理部１０３は、通常ＲＡＭ上の実行イメージ３０５ａを復号化しながら保護ＲＡＭ１１２上にロードする（ステップＳ４０４）。次に、実行イメージ検証部１０２は、前記ロードアドレス３０２、ロードサイズ３０３、及び保護ＲＡＭ１１２上にロードされた実行イメージ３０５を含むデータに対して、前記実行イメージ認証子３０１の生成時と同じ方法でハッシュ値を生成し、生成したハッシュ値を実行イメージ認証子３０１と比較し、実行イメージ３０５、ロードアドレス３０２、及びロードサイズ３０３の正当性を検証する（ステップＳ４０５）。検証結果が異常の場合は（ステップＳ４０６でＮｏ）、ロード処理部１０３はロードした実行イメージを実行されないよう無効化処理を施す。（ステップＳ４０８）。検証結果が正常の場合は（ステップＳ４０６でＹｅｓ）、プログラムローダ１００はロード処理を正常終了し、ロードした実行イメージ３０５に制御を移す（ステップＳ４０７）。
【００２９】
本実施の形態によると、ロードアドレス及びロードサイズの正当性検証が実行イメージの検証に包含されるかたちで実施できるので、改ざんを検証するための処理コストを最小限にできるという有利な効果がある。 
（実施の形態２）
本実施の形態は、実施の形態１とは異なる方式でロード対象オブジェクトの正当性を検証する実施の形態である。以下に、実施の形態１との相違点であるロード対象オブジェクトのフォーマット、実行イメージ検証部による改ざん検出方法、及びロード処理フローについて説明する。
【００３０】
＜データ構造＞
図５は、本実施の形態におけるロード対象オブジェクトのフォーマットの一例を示している。
ロード対象オブジェクト５００は、ヘッダ情報５０４と実行イメージ５０５とが結合されている。
【００３１】
ヘッダ情報５０４は、少なくとも実行イメージ認証子５０１、ロードアドレス３０２、及びロードサイズ３０３とで構成される。ヘッダ情報５０４を構成する各データの順序についての制約は無い。
実行イメージ認証子５０１は、実行イメージ５０５を含むデータに対してハッシュアルゴリズムを適用して生成した認証用データである。
【００３２】
実行イメージ５０５は、プログラムのコード及びデータで構成される。実行イメージ認証子５０１が生成された後に、実行イメージ５０５の先頭から予め決められたオフセット５０６の位置にあるロードアドレス演算対象領域５０７のデータは、所定の値に置換される。ここで、所定の値とは、予め決められた演算方法を用いて、ロードアドレス演算対象領域５０７のデータとロードアドレス３０２の値とを演算して得られた結果である。また、前記演算方法とは、可逆性を有する演算方法であり、ここでは排他的論理和とする。実行イメージ５０５は、前記置換処理をした後に暗号化される（以下、暗号化された実行イメージ５０５を実行イメージ５０５ａと表記する）。
【００３３】
＜構成＞
本実施の形態にかかるプログラムローダ１００ａは、実施の形態１に係る実行イメージ検証部１０２の代わりに実行イメージ検証部１０２ａを含んで構成される。本実施の形態に係る実行イメージ検証部１０２ａは、実施の形態１に係る実行イメージ検証部１０２と同様に、ロード対象プログラム、及びロードアドレスの少なくとも何れかが不正に改ざんされているか否かを検証する機能を有するが、その検証方法が実行イメージ検証部１０２とは異なる。実行イメージ検証部１０２ａは、保護ＲＡＭ１１２上にロードされた実行イメージ５０５の先頭から予め決められたオフセット５０６の位置にあるデータを、所定の値に置換する。ここで、所定の値とは予め決められた演算方法を用いて、前記位置にあるデータとロードアドレス３０２の値とを演算して得られる結果である。また、前記演算とは、図５で説明した演算方法の逆演算であり、ここでは排他的論理和となる。引き続き、実行イメージ検証部１０２ａは、前記置換処理を施した保護ＲＡＭ１１２上の実行イメージ５０５に対して、実行イメージ認証子５０１の生成時と同じ方法でハッシュ値を生成し、生成したハッシュ値と実行イメージ認証子５０１とを比較し、正当性を検証する。
【００３４】
実行イメージ５０５におけるロードアドレス演算対象領域５０７のデータは、当該データとロードアドレス３０２の値とを演算して得られた結果に置換されているので、ロードアドレス３０２及び実行イメージ５０５の何れかが改ざんされていれば、実行イメージ認証子５０１とは異なるハッシュ値が算出される。したがって、実行イメージ５０５に対する一度の検証でロードアドレス３０２及び実行イメージ５０５に対する改ざんの有無を検出することができる。つまり、本実施の形態では、正しいロードアドレス３０２と実行イメージ５０５とが揃わなくては、正しい実行イメージ認証子５０１は得られないのでロードアドレス３０２又は実行イメージ５０５のいずれかに改竄があったことを検出することができる。すなわち、ロードアドレス３０２を改めて検証しなくともロードアドレス３０２に改竄があったことを検証することができる。
【００３５】
＜処理フロー＞
図６はロード対象となる実行イメージ５０５ａを保護ＲＡＭ１１２へロードする場合の処理フローを示している。まず、入出力部１２２は、通常ＲＡＭ１２１にロード対象オブジェクトを構成する実行イメージ５０５ａと、ヘッダ情報５０４とを格納する（ステップＳ６０１）。ロードアドレス検証部１０１は、ロードアドレス３０２とロードサイズ３０３とから算出されるロードアドレス空間が保護ＲＡＭ１１２のアドレス空間内に収まっているか否かを検証する（ステップＳ６０２）。検証結果が異常の場合は（ステップＳ６０３でＮｏ）、ロードせずに、処理を終了する。検証結果が正常の場合は（ステップＳ６０３でＹｅｓ）、ロード処理部１０３は、通常ＲＡＭ１２１上の実行イメージ５０５ａを復号化しながら保護ＲＡＭ１１２上にロードする（ステップＳ６０４）。次に、実行イメージ検証部１０２ａは、保護ＲＡＭ１１２上にロードされた実行イメージ５０５の先頭から予め決められたオフセット５０６の位置にあるデータと、ロードアドレス３０２の値との排他的論理和を演算し、前記位置にあるデータを演算結果に置換する（ステップＳ６０５）。引き続き、実行イメージ検証部１０２ａは、前記置換処理を施した保護ＲＡＭ１１２上の実行イメージ５０５に対して、前記実行イメージ認証子５０１の生成時と同じ方法でハッシュ値を生成し、生成したハッシュ値と実行イメージ認証子５０１とを比較し、正当性を検証する（ステップＳ６０６）。検証結果が異常の場合は、ロード処理部１０３はロードした実行イメージが実行されないよう無効化処理を施す（ステップＳ６０９）。検証結果が正常の場合、プログラムローダ１００ａはロード処理を正常終了し、ロードした実行イメージ５０５に制御を移す（ステップＳ６０８）。
【００３６】
＜ロード対象オブジェクトの作成＞
図７は本実施の形態で使用するロード対象オブジェクトの作成過程を説明する図である。実行イメージ７０５ｂに対してハッシュ生成処理７２１を施して得られるハッシュ値を実行イメージ認証子５０１とする。次に、実行イメージ７０５ｂの先頭からのオフセット５０６の位置にあるロードアドレス演算対象領域７１１のデータ７０２に対して、演算処理７２２を用いてロードアドレス３０２と演算し、得られた結果（演算済みデータ７０２ａ）を前記ロードアドレス演算対象領域７１１のデータ７０２と置換する。ここで演算処理７２２は可逆性を有する演算であり、例えば排他的論理和や加算（または減算）が相当する。また、それら以外のさらに複雑なアルゴリズムであってもよい。次に、前記演算済みデータ７０２ａに置換した後の実行イメージ７０５に対して、暗号化７２３を施して、暗号化済み実行イメージ７０５ａを得る。最後に、実行イメージ認証子５０１、ロードアドレス３０２、及びロードサイズを少なくとも含むヘッダ情報７０４を構成して、当該ヘッダ情報７０４と暗号化済み実行イメージ７０５ａとを結合したものをロード対象オブジェクトとする。
【００３７】
＜ロード対象オブジェクトの正当性検証＞
図８は本実施の形態で使用するロード対象オブジェクトの正当性検証過程を説明する図である。まず、暗号化済み実行イメージ５０５ａに対して復号化８２１を実施して、実行イメージ５０５を得る。次に、実行イメージ５０５の先頭からのオフセット５０６の位置にあるロードアドレス演算対象領域７１１のデータ８０２ａに対して、演算処理８２２を用いてロードアドレス３０２と演算し、得られた結果（演算済みデータ８０２）を前記ロードアドレス演算対象領域７１１のデータ８０２ａと置換する。ここで演算処理８２２は、演算処理７２２の逆演算であり、演算処理７２２が排他的論理和の場合は排他的論理和、演算処理７２２が加算の場合は減算である。次に、前記置換処理を実施した後の実行イメージ５０５ｂに対して、ハッシュ生成処理８２３を実施し、その結果得られるハッシュ値を実行イメージ認証子８０１とする。そして、前記得られた実行イメージ認証子８０１と、ヘッダ情報５０４に含まれる実行イメージ認証子５０１とを比較し、それらが一致した場合にはロードアドレス３０２、及び実行イメージが正しいものであると判定する。
【００３８】
本実施の形態によると、ロードアドレスの正当性検証が実行イメージの検証に包含されるかたちで実施できるので、改ざんを検証するための処理コストを最小限にできるという有利な効果がある。また、オフセットの値、及びロードアドレス演算対象領域に施す演算方法を秘密にしておくことで、悪意ある第３者がロード対象オブジェクトのフォーマットを知り得たとしても、正しくロードできるロード対象オブジェクトを作り出すことを困難にするという有利な効果がある。
【００３９】
つまり、不正な第３者がフォーマットを知っている場合、ロード対象オブジェクトから実行イメージ５０５ａの部分だけを取り出し、ロードアドレス検証部のない他の不正な装置で動作させるような攻撃を行うことが考えられる。しかし、本実施の形態では、ロードアドレス検証部が、正しいロードアドレス３０２を用いてロードアドレス演算対象領域のデータに演算を加えなくては正しく動作する実行イメージ５０５ａを復元できない。そのため、不正な第３者は、上記のような攻撃を行ったとしても、他の装置でロード対象オブジェクトを正しく動作させることはできない。
【００４０】
（実施の形態３）
本実施の形態は、ロード対象オブジェクトを構成するヘッダ情報に含まれるロードアドレス回復情報を用いて、改ざんされたロードアドレスを回復する実施の形態である。
＜構成＞
図９は、本発明の実施の形態によるプログラムローダ１００ｂ、プログラムローダを備えたプロセッサ１１０ｂ、及びプロセッサを備えたデータ処理装置１２０ｂを示している。
【００４１】
プログラムローダ１００ｂは、ロードアドレス検証部１０１、実行イメージ検証部１０２ａ、ロード処理部１０３、及びロードアドレス回復部１０４を含んで構成される。図１とはプログラムローダ１００ｂがロードアドレス回復部１０４を含む点、及び実行イメージ検証部１０２の代わりに実行イメージ検証部１０２ａを含む点で異なる。
ロードアドレス回復部１０４は、ロード対象オブジェクトにおけるロードアドレスが不正に改ざんされていた場合に、正しいロードアドレスを再計算する機能を有する。
【００４２】
プログラムローダ１００ｂは、上記説明したロードアドレス検証部１０１、実行イメージ検証部１０２ａ、ロード処理部１０３、及びロードアドレス回復部１０４の機能を使用して、通常ＲＡＭ１２１に配置されたロード対象オブジェクトにおける実行イメージを保護ＲＡＭ１１２に確実にロードする。また、改ざんされたロードアドレスを持つロード対象オブジェクトに対し、改ざんされたロードアドレスを回復して、回復後のロードアドレスに安全に実行イメージをロードすることを可能とする。
【００４３】
＜データ構造＞
図１０は、本実施の形態におけるロード対象オブジェクトのフォーマットの一例を示している。ロード対象オブジェクト１０００は、ヘッダ情報１００４と実行イメージ５０５とが結合されている。ヘッダ情報１００４は、実行イメージ認証子５０１、ロードアドレス３０２、ロードサイズ３０３、及びロードアドレス回復情報１００１を含んで構成される。
【００４４】
ロードアドレス回復情報１００１は、改ざんされたロードアドレスを回復するのに用いられる情報である。
ヘッダ情報１００４にロードアドレス回復情報１００１を含む点以外は、図５と同様である。
＜処理フロー＞
図１１は、ロード対象である実行イメージ５０５ａを保護ＲＡＭ１１２へロードする場合の処理フローを示している。まず、通常ＲＡＭ１２１にロード対象オブジェクトを構成する実行イメージ５０５ａと、ヘッダ情報１００４を格納する（ステップＳ１１０１）。ロードアドレス検証部１０１は、ロードアドレス空間が保護ＲＡＭアドレス空間内に収まっているか否かを検証する（ステップＳ１１０２）。検証結果が異常の場合は（ステップＳ１１０３でＮｏ）、ロードせずに、処理を終了する。検証結果が正常の場合は、ロード処理部１０３は、通常ＲＡＭ上の実行イメージ５０５ａを復号化しながら保護ＲＡＭ１１２上にロードする（ステップＳ１１０５）。次に、実行イメージ検証部１０２ａは、保護ＲＡＭ１１２上にロードされた実行イメージ５０５の先頭から予め決められたオフセット５０６の位置にあるデータと、ロードアドレス３０２の値との排他的論理和を演算し、前記位置にあるデータを演算結果に置換する（ステップＳ１１０６）。引き続き、実行イメージ検証部１０２ａは、前記置換処理を施した保護ＲＡＭ１１２上の実行イメージ５０５に対して、前記実行イメージ認証子５０１の生成時と同じ方法でハッシュ値を生成し、生成したハッシュ値を実行イメージ認証子５０１と比較し、正当性を検証する（ステップＳ１１０７）。検証結果が正常の場合、プログラムローダ１００ｂはロード処理を正常終了し、ロードした実行イメージに制御を移す（ステップＳ１１０９）。検証結果が異常の場合は、ロードアドレスを回復済みであるかを判定し、ロードアドレスが回復済みの場合、ロード処理部１０３はロードした実行イメージが実行されないよう無効化処理を施す（ステップＳ１１０４）。ロードアドレス状態が回復済みでない場合、ロードアドレス回復部１０４はロードアドレス回復情報１００１を用いて実行イメージ５０５に埋め込まれたロードアドレスを抽出する（ステップＳ１１１１）。ロードアドレス回復部１０４は、抽出したロードアドレスを用いて実行イメージ５０５の先頭から予め決められたオフセット５０６の位置のデータに対して、ロードアドレスとの排他的論理和を演算し、前記位置のデータを演算結果に置換する（ステップＳ１１１２）。実行イメージ検証部１０２ｂは、実行イメージ認証子５０１を用いて再度実行イメージ５０５の正当性を検証する（ステップＳ１１０７）。
【００４５】
なお、ステップＳ１１０６では排他的論理和演算によりデータを置換しているが、実施の形態２と同様、図５で説明した演算方法の逆演算であればよい。
また、ステップＳ１１１２で行う演算も排他的論理和に限られるものではなく、図１２の説明にて後述する演算方法の逆演算であればよい。 
＜ロード対象オブジェクトの作成＞
図１２は、本実施の形態で使用するロード対象オブジェクトの作成過程を説明する図である。実行イメージ１２０５ｂに対してハッシュ生成処理７２１を施して得られるハッシュ値を実行イメージ認証子５０１とする。次に、実行イメージ１２０５ｂの先頭からのオフセット５０６の位置にあるロードアドレス回復情報１２０２に対して、演算処理７２２を用いてロードアドレス３０２と演算し、得られた結果（演算済みデータ７０２ａ）を前記ロードアドレス演算対象領域のデータと置換する。本実施の形態では、ロードアドレス回復情報は、ロードアドレス演算対象領域に配置されるデータ（１２０２）とする。ここで演算処理７２２は可逆性を有する演算であり、ここでは排他的論理和とする。また、それら以外のさらに複雑なアルゴリズムであってもよい。次に、前記演算済みデータ７０２ａに置換済みの実行イメージ１２０５に対して暗号化７２３を施して、暗号化済み実行イメージ１２０５ａを得る。最後に、実行イメージ認証子５０１、ロードアドレス３０２、ロードサイズ、ロードアドレス回復情報を少なくとも含むヘッダ情報１００４を構成して、暗号化済み実行イメージ１２０５ａと結合したものをロード対象オブジェクトとする。
【００４６】
＜ロード対象オブジェクトの正当性検証＞
図１３は、本実施の形態で使用するロード対象オブジェクトの正当性検証過程を説明する図であり、図８とは、ヘッダ情報１００４にロードアドレス回復情報を含む点で異なる。実行イメージ認証子８０１が正当であると判定されると、演算済みデータ８０２はロードアドレス回復情報と一致することになる。
【００４７】
図１４は、図１３に記載の正当性検証過程において、実行イメージが正当でないと判定された際の処理フローを示す図である。改ざん済みロードアドレス１４０２を使用した正当性検証過程において、実行イメージ１４１０のオフセット５０６の地点に配置されるデータは改ざんされた不正データ１４１１となる。不正データ１４１１は、改竄されたロードアドレスを用いて演算処理８２２がなされたことによって生成された演算済みデータ８０２である。そのため、不正データ１４１１をそのまま使って処理を進めても、正しい実行イメージや正しいロードアドレスは得られないので、演算処理８２２による影響を打ち消してロードアドレス演算対象領域のデータを一度復元した上で、処理を続行する必要がある。かかる不正データ１４１１に対して、改ざん済みロードアドレス１４０２を演算処理８２２の逆演算することで、ロードアドレス演算対象領域のデータを復元することができる。すなわち、演算処理１４４１によって、不正データ１４１１が元のロードアドレス演算対象領域７１１におけるデータと同じデータ（復元データ１４２１）に戻る。復元後の実行イメージ１４２０の復元データ１４２１に対して、ロードアドレス回復情報１００１を可逆演算１４４２し、実行イメージ１４３０よりロード対象オブジェクトの作成過程の段階で埋め込んだロードアドレス１４３１を抽出する。抽出したロードアドレス１４３１を用いて実行イメージ５０５の先頭から予め決められたオフセット５０６の位置のデータに対して、ロードアドレスとの可逆演算を行い、前記位置のデータを演算結果に置換する。前記置換後の実行イメージに対して正当性検証を実施する。
【００４８】
本実施の形態によると、ロードアドレスの改ざん発覚後にロードアドレス回復情報を用いて実行イメージに埋め込まれたロードアドレスを抽出し、抽出したロードアドレスを用いてロードアドレス演算対象領域の実行イメージの復元が可能となる。よって、実行イメージの再検証を実施し、結果が正常であれば、再ロード処理の簡略化が可能となり、ロード処理の効率化を図ることができる。また、ロードアドレス回復情報として、本プログラムローダが持つ固定値情報などと実行イメージとの可逆演算を実施した後、ロードアドレス回復情報として使用することで、実行イメージ内のデータをそのままヘッダ情報に流出する必要がなくなり、安全性を向上させることができる。
【００４９】
（変形例１）
＜構成＞
プログラムローダ１００は、ロードアドレス検証部１０１ｃ、実行イメージ検証部１０２ｃ、及びロード処理部１０３を含む。
【００５０】
ロードアドレス検証部１０１ｃは、ロードアドレス検証部１０１の機能に加え、さらに、ロードアドレスが不正に改ざんされているか否かを検証する機能を有する。これらの機能によって、ロードアドレスが誤って指定されたり、悪意を持って変更されてしまったりして、秘匿性の高いプログラムを保護ＲＡＭ１１２以外のＲＡＭに転送してしまうことを防ぐことができる。
【００５１】
実行イメージ検証部１０２ｃは、ロード対象オブジェクトが不正に改ざんされているか否かを検証する機能を有する。この機能によって、意図しない不正な処理を行うプログラムを保護ＲＡＭ１１２上にロードして実行してしまうことを防ぐことができる。
図１５はロード対象オブジェクトの一例を示している。ヘッダ情報１５０４は、少なくともロードアドレス認証子１５０１、実行イメージ認証子１５０２、ロードアドレス３０２、及びロードサイズ３０３を含んで構成される。
【００５２】
ロードアドレス認証子１５０１は、ロードアドレス３０２及びロードサイズ３０３を少なくとも含むデータに対してハッシュアルゴリズムを適用して生成した認証用データである。
実行イメージ認証子１５０２は、プログラムのコード及びデータで構成される実行イメージ３０５に対してハッシュアルゴリズムを適用して生成した認証用データである。
【００５３】
ヘッダ情報１５０４を構成する各データの順序についての制約は無い。
実行イメージ３０５は、暗号化されていてもよい。
図１６はロード対象である実行イメージ３０５ａを保護ＲＡＭ１１２へロードする場合の処理フローを示している。まず、通常ＲＡＭ１２１にロード対象である実行イメージ３０５ａと、ヘッダ情報１５０４とを格納する（ステップＳ１６０１）。ロードアドレス検証部１０１ｃは、前記ロードアドレス３０２とロードサイズ３０３に対して、前記ロードアドレス認証子１５０１の生成時と同じ方法でハッシュ値を生成し、生成したハッシュ値とロードアドレス認証子１５０１とを比較し、正当性を検証する（ステップＳ１６０２）。検証結果が異常の場合は、ロードアドレス３０２またはロードサイズ３０３が改ざんされたと判断して、ロードせずに処理を終了する。検証結果が正常の場合、引き続きロードアドレス検証部１０１ｃは、ロードアドレス３０２とロードサイズ３０３から算出されるロードアドレス空間が保護ＲＡＭアドレス空間内に収まっているか否かを検証する（ステップＳ１６０４）。検証結果が異常の場合は、ロードせずに処理を終了する。検証結果が正常の場合、ロード処理部１０３は、実行イメージ３０５ａを復号化しながら保護ＲＡＭ１１２上にロードする（ステップＳ１６０６）。次に、実行イメージ検証部１０２ｃは、保護ＲＡＭ１１２上にロードされた実行イメージ３０５に対して、実行イメージ認証子１５０２の生成時と同じ方法でハッシュ値を生成し、生成したハッシュ値と実行イメージ認証子１５０２とを比較し、正当性を検証する（ステップＳ１６０７）。検証結果が異常の場合は、ロード処理部１０３はロードした実行イメージが実行されないよう無効化処理を施す（ステップＳ１６１０）。検証結果が正常の場合、プログラムローダ１００ｃはロード処理を正常終了し、ロードした実行イメージ３０５に制御を移す（ステップＳ１６０９）。
【００５４】
（変形例２）
上記の実施の形態では、ロードアドレス検証部１０１は、ロードアドレス空間が保護ＲＡＭ空間に収まっていないと検証した場合には、ロードせずに、処理を終了した。これはロード対象のプログラムが保護すべきプログラムであることを前提としているからである。この変形例では、保護ＲＡＭ空間に収まっていない場合において、もともと保護すべきプログラムではないので保護ＲＡＭ空間に格納する必要がないのか、又は、悪意をもった者により不当に改ざんされたため、保護ＲＡＭ空間に収まっていないのかの判断を行う。図１７は、ロード対象である実行イメージのロード処理のフローチャートである。ステップＳ１７０１、１７０２における処理は、図４におけるステップＳ４０１、４０２と同様である。ステップＳ１７０３において、検証結果が正常か否かを判断し、検証結果が異常の場合は、ステップ１７０５において、ロード処理部１０３は、通常ＲＡＭ上の実行イメージ３０５ａを復号化しながら通常ＲＡＭ上にロードする。この段階において、検証結果が正常か否かの判断は、実行イメージ３０５ａが保護されるべきものであって保護ＲＡＭ１１２にロードされるべきとの仮定のうえでなされている。そのため、実行イメージ３０５ａが、改竄により通常ＲＡＭ１２１にロードされるようになった場合と、元から通常ＲＡＭ１２１にロードされるべきものである場合との両方で検証結果が異常と判断される。ステップＳ１７０６において、ステップＳ４０５と同様の検証処理を行う。ステップＳ１７０７において、検証結果が正常の場合は、プログラムローダはロード処理を正常終了し、ロードした実行イメージ３０５に制御を移す。検証結果が異常の場合は、ステップＳ１７０９において、ロード処理部はロードした実行イメージを実行されないよう無効化処理を施す。このように、ステップＳ１７０６、１７０７は、ステップＳ４０５、４０６と同じ動作を行うので、ロードアドレスまたはロードサイズに改竄があれば、検証結果は異常となる。
【００５５】
以上より、ステップＳ１７０３で異常と検証され、かつ、ステップＳ１７０７で異常と検証された場合は、ロードアドレス等に改竄があった上で通常ＲＡＭにロードされていると判断できる。また、ステップＳ１７０３で異常と検証され、かつ、ステップＳ１７０７で正常と検証された場合は、ロードアドレス等に改竄はないと判断できるので、ステップＳ１７０３の実行イメージが保護ＲＡＭ用という判断の前提が誤りであり、実行イメージ３０５ａがもともと通常ＲＡＭ用のプログラムであったと分かる。
【００５６】
これにより、プログラムが保護ＲＡＭに格納される必要がないため、通常メモリにロードされたのか、又は、悪意をもった者により不当に改ざんされたため、通常メモリにロードされたものなのかの区別がつき、後者のロードをとりやめることができる。また、保護する必要のないプログラムであった場合には、通常ＲＡＭにロードされ、改ざん検証の後、正当であればＣＰＵ１１１により実行されることになる。ここでは実施の形態１における図４の変形例について説明したが、図６、１１、１６においても同様である。
【００５７】
（変形例３）
実施の形態２と３では、復号化された状態の実行イメージ内のロードアドレス演算対象領域にロードアドレスを用いた演算を施しているが、これに限らない。
暗号化された状態での実行イメージ内のロードアドレス演算対象領域にロードアドレスを用いた演算を施してもよい。この場合、ロードアドレス演算対象領域の検証は実行イメージの復号前に行われる。
【００５８】
このようにすると、実行イメージの復号化前に改竄の有無を検出できるので、不正な改竄がなされた実行イメージの処理をより早い段階で検出することができる。
（変形例４）
実施の形態２と３の処理手順は、ロードアドレス演算対象領域５０７のデータを復元してからハッシュ生成を行うという順序となっているが、逆にしても良い。
【００５９】
この場合、実行イメージ認証子は、ロードアドレス演算対象領域７１１のデータに演算が施された状態での実行イメージのハッシュ値となる。 
（変形例５）
実施の形態１から３では、ロードアドレスがセキュア領域に収まるかどうかを確認しているが、逆に通常領域内に収まるかどうかを確認する構成としてもよい。
【００６０】
これにより、例えば、セキュア領域内のデータを外部に出力するよう改竄された通常プログラムを、セキュア領域に読み込ませるような攻撃を防ぐことができる。
（変形例６）
また、上述したプログラムの生成方法における特徴あるステップを実行する装置も本発明に含まれる。
【００６１】
（変形例７）
実施の形態２、３では、ロードアドレス演算対象領域との演算にロードアドレスを用いたが、ロードアドレス演算対象領域に対して、ロードアドレスに替えてロードサイズを用いた演算を施すことで、ロードサイズと実装イメージの検証を一度に行うとしてもよい。
【００６２】
また、ロードアドレス演算対象領域に対して、ロードサイズとロードアドレスとの両方を用いた演算を施すことで、ロードサイズ、ロードアドレス、及び実行イメージのいずれかに改ざんがあるかを一度で検証できるようにしてもよい。 
（変形例８）
上記の実施の形態１では、ロード処理部１０３が実行イメージを保護ＲＡＭ上にロードした後に、実行イメージ検証部１０２が、実行イメージ認証子３０１を用いて、ロードした実行イメージの正当性を検証しているが、本変形例は、保護ＲＡＭ上にロードする前に正当性を検証する場合の実施の形態である。
【００６３】
図１８は、ロード対象となる実行イメージ３０５ａを保護ＲＡＭ１１２へロードする場合の処理フローを示している。ステップＳ１８０１〜Ｓ１８０３は、図４におけるステップＳ４０１〜４０３と同様である。ステップＳ１８０３において、検証結果が正常の場合には、ロード処理部は通常ＲＡＭ１２１上の実行イメージ３０５ａを復号化しつつ、バッファに格納する（ステップＳ１８０４）。検証結果が異常の場合には、処理を終了する。実行イメージ検証部は、実行イメージ認証子３０１を用いて、復号化した実行イメージ、ロードアドレス及びロードサイズの正当性を検証する（ステップＳ１８０５）。検証結果が正常な場合は、ロード処理部は、実行イメージ３０５を保護ＲＡＭ１１２上にロードし（ステップＳ１８０７）、ロードした実行イメージ３０５に制御を移行する（ステップＳ１８０８）。検証結果が異常の場合は、ロード処理部は実行イメージ３０５を保護ＲＡＭ上にロードせず、処理を終了する。
【００６４】
このように、本変形例では、保護ＲＡＭ上にロードする前に、中間バッファに実行イメージを展開し、バッファに展開された実行イメージの正当性を検証する。そして、実行イメージ検証部による検証の結果、正当性が認められた場合に、ロード処理手段は、実行イメージを保護ＲＡＭ上にロードし、正当性が認められない場合にはロードしない。 
（補足）
なお、本発明を上記実施の形態に基づいて説明してきたが、本発明は、上記の実施の形態に限定されないのはもちろんである。以下のような場合も本発明に含まれる。
【００６５】
上記の各装置は、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭ、ハードディスクユニット、ディスプレイユニット、キーボード、マウスなどから構成されるコンピュータシステムである。前記ＲＡＭまたはハードディスクユニットには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、各装置は、その機能を達成する。ここでコンピュータプログラムは、所定の機能を達成するために、コンピュータに対する指令を示す命令コードが複数個組み合わされて構成されたものである。
【００６６】
上記の各装置を構成する構成要素の一部または全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。
【００６７】
また、上記の各装置を構成する構成要素の各部は、個別に１チップ化されていても良いし、一部又は全てを含むように１チップ化されてもよい。
また、ここでは、システムＬＳＩとしたが、集積度の違いにより、ＩＣ、ＬＳＩ、スーパーＬＳＩ、ウルトラＬＳＩと呼称されることもある。また、集積回路化の手法はＬＳＩに限るものではなく、専用回路又は汎用プロセッサで実現してもよい。ＬＳＩ製造後に、プログラムすることが可能なＦＰＧＡ（Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）や、ＬＳＩ内部の回路セルの接続や設定を再構成可能なリコンフィギュラブル・プロセッサーを利用しても良い。
【００６８】
さらには、半導体技術の進歩又は派生する別技術によりＬＳＩに置き換わる集積回路化の技術が登場すれば、当然、その技術を用いて機能ブロックの集積化を行ってもよい。バイオ技術の適応等が可能性としてありえる。
上記の各装置を構成する構成要素の一部または全部は、各装置に脱着可能なＩＣカードまたは単体のモジュールから構成されているとしてもよい。前記ＩＣカードまたは前記モジュールは、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどから構成されるコンピュータシステムである。前記ＩＣカードまたは前記モジュールは、上記の超多機能ＬＳＩを含むとしてもよい。マイクロプロセッサが、コンピュータプログラムにしたがって動作することにより、前記ＩＣカードまたは前記モジュールは、その機能を達成する。このＩＣカードまたはこのモジュールは、耐タンパ性を有するとしてもよい。
【００６９】
本発明は、上記に示す方法であるとしてもよい。また、これらの方法をコンピュータにより実現するコンピュータプログラムであるとしてもよいし、前記コンピュータプログラムからなるデジタル信号であるとしてもよい。
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号をコンピュータ読み取り可能な記録媒体、例えば、フレキシブルディスク、ハードディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ、ＤＶＤ−ＲＯＭ、ＤＶＤ−ＲＡＭ、ＢＤ（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ）、半導体メモリなどに記録したものとしてもよい。また、これらの記録媒体に記録されている前記デジタル信号であるとしてもよい。
【００７０】
また、本発明は、前記コンピュータプログラムまたは前記デジタル信号を、電気通信回線、無線または有線通信回線、インターネットを代表とするネットワーク、データ放送等を経由して伝送するものとしてもよい。
また、本発明は、マイクロプロセッサとメモリを備えたコンピュータシステムであって、前記メモリは、上記コンピュータプログラムを記憶しており、前記マイクロプロセッサは、前記コンピュータプログラムにしたがって動作するとしてもよい。
【００７１】
また、前記プログラムまたは前記デジタル信号を前記記録媒体に記録して移送することにより、または前記プログラムまたは前記デジタル信号を前記ネットワーク等を経由して移送することにより、独立した他のコンピュータシステムにより実施するとしてもよい。
上記実施の形態１では、実行イメージ認証子３０１は、少なくともロードアドレス３０２、ロードサイズ３０３、及び実行イメージ３０５を含むデータに対して、ハッシュアルゴリズムを適用して生成された認証用データであるとしたが、少なくともロードアドレス３０２、及び実行イメージ３０５を含むデータに対して、ハッシュアルゴリズムを適用して生成された認証用データであるとしてもよい。同様に、ロードサイズ３０３、及び実行イメージ３０５を含むデータに対して、ハッシュアルゴリズムを適用して生成された認証用データであるとしてもよい。
【００７２】
上記の実施の形態では、プロセッサ上で動作する基本ソフト（オペレーティングシステム）の存在を省略している。基本ソフトが介在する場合は、プログラムローダの制御・呼出しを基本ソフトが実施する場合もあるし、また、プログラムローダが処理を正常終了した後に、ロードした実行イメージに直接制御を移さずに基本ソフトに一旦制御を戻してからロード済み実行イメージに制御を移す場合もある。また、プログラムローダは、基本ソフトの一部としてソフトウェア実装されていてもよい。その場合、プログラムローダは、プロセッサ内部に備えられるＲＯＭに格納されていると、プログラムローダが改ざんされる可能性が無いので安全である。
【００７３】
上記の実施の形態では、ハッシュ値を用いた検証を行い、実行イメージ検証部が生成したハッシュ値が、実行イメージ認証子と同一の場合には正当であるとしたが、デジタル署名を用いた検証を行う場合には、ロードアドレス３０２、ロードサイズ３０３、及び実行イメージ３０５を含むデータにデジタル署名を施して生成された認証子を用いて、デジタル署名検証を行うとしてもよい。デジタル署名検証では、例えば、署名Ｓと組（r,x）とを次の合同式に代入し、合同式ｇＳ≡ｙｒｒｘｍｏｄｐを解き、ｇＳが≡ｙｒｒｘｍｏｄｐに一致するか否かを検証する。一致する場合は正当である。ここで、ｒ＝ｇｋｍｏｄｐであり、ｋは乱数である。
【００７４】
上記の実施の形態では、入出力部１２２はデータ処理装置１２０で実行するロード対象オブジェクトを装置外部から受信（ダウンロード）して、通常ＲＡＭ１２１に格納するとしたが、データ処理装置１２０は、ＲＯＭ１２３を備えるようにして、予めＲＯＭ１２３に格納されているプログラムを保護ＲＡＭ１１２にロードして実行する構成としてもよいし、また、ＥＥＰＲＯＭ１２４を備えるようにして、入出力部１２２を通じて入力されるプログラムをＥＥＰＲＯＭに記憶し、該プログラムを保護ＲＡＭ１１２にロードして実行する構成としてもよい。
【００７５】
上記の実施の形態では、実行イメージは暗号化されているとしたが、実行イメージが改ざんされることなく保護ＲＡＭ１１２上にロードされることだけが重要な場合、すなわちプログラムに実装しているアルゴリズムは秘密ではないが処理方法やデータの改ざんへの対策が必要な場合は、実行イメージは必ずしも暗号化されている必要はない。
上記の実施の形態３において、上記説明したロードアドレスの回復機能は、本プログラムローダ使用者が回復処理の実施有無を選択することができるようにすることも可能であり、その際には、プログラムのヘッダ情報に回復処理の実行有無選択用のデータを含めてもよいし、ハードウェアに回復処理の実施有無選択用の情報を設定することで実現してもよい。
【００７６】
上記の実施の形態３において、プログラムのロードを行う前に、ロードアドレス回復情報を用いてロードアドレスを検証することも可能である。
上記の実施の形態３において、プログラムローダは、ロードアドレス回復情報を用いることで、実行イメージに埋め込んだロードアドレスを抽出することが可能となるため、プログラムのヘッダ情報にロードアドレスを含めずともロードを行うことも可能である。すなわち、ロードする際には常に実行イメージの中からロードアドレスを抽出する回復処理を行うことにより、ヘッダ情報にロードアドレスは不要とすることが可能となり、ロードアドレス自体を隠蔽することができる。
【００７７】
また、ロードアドレスの回復のみを目的とするのであれば、オリジナルの実行イメージの所定領域のデータに対して、ロードアドレスを用いて可逆な演算処理を施したデータをロードアドレス回復情報とするとしてもよい。この場合、上記の所定領域のデータは特に置換しない。このようにすると、所定領域のデータに対して、ロードアドレス回復情報を用いて上記の演算処理の逆演算を行うことで、ロードアドレスを抽出することができる。さらに、実行イメージ中のデータはオリジナルの実行イメージから置換されていないので、オリジナルの実行イメージを復元するための処理（実施の形態３におけるステップＳ１１１２に相当）を省くことができる。
【００７８】
上記の実施の形態３において、ロードアドレス回復部は、ロードアドレス回復処理を行うか否かの判定を行うことも可能であり、その場合には、プログラムのヘッダ情報に回復処理を行うか否かの判定のためのフラグを設け、このフラグに基づいて判定するとしてもよい。
上記の実施の形態３において、ロードアドレス回復部は、ロードアドレス回復処理内容のログ出力の実施有無を選択することも可能であり、ログ出力によりユーザに処理内容を通知することができる。この場合には、プログラムのヘッダ情報に出力処理の実施有無選択用のデータを含め、当該データによりログ出力の実施の有無を判定してもよいし、ハードウェアに出力処理の実施有無選択用の情報を設定してもよい。
【００７９】
上記の実施の形態３において、上記説明したロードアドレスの回復機能は、本プログラムローダが搭載される装置の提供者により回復処理の実施有無が選択されるとすることも可能であり、実施の有無の選択はハードウェアで固定としてもよいし、電気ヒューズを用いて実現してもよい。
上記の図１４にて説明した演算処理について、演算処理は可逆演算であればどのような演算を用いてもよく、演算処理８２２と演算処理１４４２は別々であってもよい。
【００８０】
上記の図１４において、抽出したロードアドレス１４３１とロードされたアドレスを比較し、同一か否かを判定するとしてもよい。同一の場合には、改ざんされていたのは実行イメージであるので、ロード処理部は、ロードされたプログラムが実行できないように処理を施す。同一でない場合は、抽出したロードアドレス１４３１を用いて実行イメージ５０５の先頭から予め決められたオフセット５０６の位置のデータに対して、ロードアドレスとの可逆演算を行い、前記位置のデータを演算結果に置換する。前記置換後の実行イメージに対して正当性検証を実施する。
【００８１】
上記の図１６において、ロードアドレスを用いた検証処理及び検証結果判定ステップ（ステップＳ１６０２、１６０３）と、ロードアドレス空間と保護ＲＡＭアドレス空間との比較による検証処理及び検証結果判定ステップ（ステップＳ１６０４、１６０５）との実施順序は逆転していてもよい。
なお、クレームにおける「ロード先情報」とは、ロード先の決定に用いられる情報を示し、実施の形態におけるロードアドレスとロードサイズのいずれか、もしくは両方を含む。
【００８２】
なお、上述したＲＡＭに対する保護的な仕組みは、仮想アドレス変換機構で保護する方式であってもよいし、ＣＰＵで制御する方式であってもよい。仮想アドレス変換機構で保護する方式では、セキュアメモリにアクセスするプログラムは、セキュアメモリの実アドレスを知っているプログラマでなくては作れないようにする。具体的には、仮想アドレス変換機構において、仮想メモリから変換できる実アドレスの範囲を、通常メモリの範囲内のみに限定する。
【００８３】
これにより、仮想アドレスを使って実装されているプログラムは、セキュアメモリにアクセスすることができない。
また、ＣＰＵで制御する方式では、ＣＰＵに、特権を持ったプログラムのみが切り替えられるセキュアモードと誰でも使える通常モードを用意する。そして、通常モードで動作している時は、ＣＰＵはセキュアメモリにアクセスしない、とすることにより保護的な仕組みを実現する。
【００８４】
なお、実施の形態１から３では、プロセッサ内にプログラムローダと、ＣＰＵと保護ＲＡＭとが含まれる構成としたが、これに限られるものではない。プログラムローダとＣＰＵと保護ＲＡＭとの間で安全にデータのやり取りが行える仕組みが施されていれば、一つのプロセッサとして実現しなくともよい。
また、上記実施の形態及び上記変形例をそれぞれ組み合わせるとしてもよい。 
【産業上の利用可能性】
【００８５】
本発明にかかるプログラムローダは、秘匿性の高いソフトウェアを保護されたメモリ空間にのみロードを実施するため、悪意あるソフトウェア解析の機会を極小化するという効果を有し、保護されるべきソフトウェアを扱う組み込み機器向けプロセッサ等に有用である。
【図面の簡単な説明】
【００８６】
【図１】本発明の実施の形態１におけるプログラムローダ、プロセッサ、及びデータ処理装置の構成図である。
【図２】本発明の実施の形態１におけるメモリ空間アドレスマップの例を示す図である。
【図３】本発明の実施の形態１におけるロード対象オブジェクトのフォーマット例を示す図である。
【図４】本発明の実施の形態１におけるロード対象である実行イメージのロード処理のフローチャートである。
【図５】本発明の実施の形態２におけるロード対象オブジェクトのフォーマット例を示す図である。
【図６】本発明の実施の形態２におけるロード対象である実行イメージのロード処理のフローチャートである。
【図７】本発明の実施の形態２におけるロード対象オブジェクトの作成過程を示す図である。
【図８】本発明の実施の形態２におけるロード対象オブジェクトの正当性検証過程を示す図である。
【図９】本発明の実施の形態３におけるプログラムローダ、プロセッサ、及びデータ処理装置の構成図である。
【図１０】本発明の実施の形態３におけるロード対象オブジェクトのフォーマット例を示す図である。
【図１１】本発明の実施の形態３におけるロード対象である実行イメージのロード処理のフローチャートである。
【図１２】本発明の実施の形態３におけるロード対象オブジェクトの作成過程を示す図である。
【図１３】本発明の実施の形態３におけるロード対象オブジェクトの正当性検証過程を示す図である。
【図１４】本発明の実施の形態３におけるロード対象オブジェクトにおけるロードアドレス回復過程を示す図である。
【図１５】変形例１におけるロード対象オブジェクトのフォーマット例を示す図である。
【図１６】変形例１におけるロード対象である実行イメージのロード処理のフローチャートである。
【図１７】変形例２におけるロード対象である実行イメージのロード処理のフローチャートである。
【図１８】変形例８におけるロード対象である実行イメージのロード処理のフローチャートである。
【符号の説明】
【００８７】
１００、１００ａ、１００ｂ  プログラムローダ
１０１、１０１ｃ    ロードアドレス検証部
１０２、１０２ａ、１０２ｂ、１０２ｃ  実行イメージ検証部
１０３    ロード処理部
１１０、１１０ａ、１１０ｂ  プロセッサ
１１１    ＣＰＵ
１１２    保護ＲＡＭ
１２０、１２０ａ、１２０ｂ  データ処理装置
１２１    通常ＲＡＭ
１２２    入出力部
１２３    ＲＯＭ
１２４    ＥＥＰＲＯＭ
１４０    メモリカード
１４１    ＨＤＤ
１４２    受信器
１４３    通信回線
【図１】
2007133860.tif 000003
【図２】
2007133860.tif 000004
【図３】
2007133860.tif 000005
【図４】
2007133860.tif 000006
【図５】
2007133860.tif 000007
【図６】
2007133860.tif 000008
【図７】
2007133860.tif 000009
【図８】
2007133860.tif 000010
【図９】
2007133860.tif 000011
【図１０】
2007133860.tif 000012
【図１１】
2007133860.tif 000013
【図１２】
2007133860.tif 000014
【図１３】
2007133860.tif 000015
【図１４】
2007133860.tif 000016
【図１５】
2007133860.tif 000017
【図１６】
2007133860.tif 000018
【図１７】
2007133860.tif 000019
【図１８】
2007133860.tif 000020