説明

メモリ管理方法

【課題】従来、情報処理装置で実行されるプログラムを暗号化した状態でハードディスクなどにストレージしておいて、実行時に復号化することでプログラムの秘匿性を維持することが行なわれているが、メモリには復号化されたプログラムが展開されているため、第三者によって不正に解析される可能性がある。
【解決手段】本発明はかかる実情に鑑みて、仮想メモリ上に展開されているプログラムのコード情報あるいはデータをCPUにとって暗号化されてかつアクセス不可能なデータとしておいて、暗号化された領域をコードフェッチあるいはデータアクセスした場合に割込処理により前記領域を含むメモリ管理装置の管理単位に対するアクセス不可能状態をアクセス可能状態に変更して復号化するメモリ管理方法を提案するものである。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、メモリ管理方法に関するものである。
【背景技術】
【0002】
従来、情報処理装置で実行されるプログラムを暗号化した状態でハードディスクなどにストレージしておいて、プログラム実行時に復号化することでプログラムの秘匿性を維持することが行なわれている。このとき、メモリには復号化されたプログラムが展開されているため、第三者によって不正に解析される可能性がある。
【0003】
この不都合を軽減すべく、復号化されたプログラムを、装置ごとに、あるいは、時刻などのパラメータに基づいて、メモリの異なる位置に展開する技術はすでに特許文献1に開示されている。
【特許文献1】特開2005−71055号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
しかしながら、上記特許文献1で示される手法では、復号化されたプログラム自体はメモリに存在するため、第三者によって不正に解析されるおそれは依然として残っており、課題となっていた。
【課題を解決するための手段】
【0005】
本発明はかかる実情に鑑みて、仮想メモリ上に展開されているプログラムのコード情報をCPUにとって暗号化されてかつアクセス不可能なデータとしておいて、暗号化された領域に対してデータ読込要求あるいはデータ書込要求をする場合)に割込処理により前記領域を含むメモリ管理装置の管理単位に対するアクセス不可能状態をアクセス可能状態に変更して復号化するメモリ管理方法を提案するものである。
より具体的には、以下の通りである。
(1)仮想メモリ上に展開されているプログラムのコード情報の処理方法であって、前記コード情報を暗号化しかつCPUからデータ読込あるいはデータ書込不可能なデータとする暗号化ステップと、前記コード情報に対するCPUによるデータ読込要求あるいはデータ書込要求があった場合に、それに伴って暗号化された領域を含むメモリ管理装置の管理単位に対するアクセス不可能状態をアクセス可能状態に変更しかつ復号化する割り込み処理を実行する復号化ステップと、前記データ読込要求あるいはデータ書込要求が他の管理単位の情報を指定した場合に、復号化ステップによってデータ読込要求あるいはデータ書込要求が可能となった管理単位のデータに対して再び暗号化ステップを実行させるための再帰ステップと、を含むメモリ管理方法。
(2) (1)における暗号化ステップは、プログラムの起動によりこのプログラムのプログラムカウンタが実行ファイルのエントリアドレスを指定する以前に実行されるメモリ管理方法。
(3)仮想メモリ上に展開されているプログラムのコード情報の処理プログラムであって、
前記コード情報を暗号化しかつCPUからデータ読込あるいはデータ書込不可能なデータとする暗号化ステップと、前記コード情報に対するCPUによるデータ読込要求あるいはデータ書込要求があった場合に、それに伴って暗号化された領域を含むメモリ管理装置の管理単位に対するアクセス不可能状態をアクセス可能状態に変更しかつ復号化する割り込み処理を実行する復号化ステップと、前記データ読込要求あるいはデータ書込要求が他の管理単位の情報を指定した場合に、復号化ステップによってデータ読込要求あるいはデータ書込要求が可能となった管理単位のデータに対して再び暗号化ステップを実行させるための再帰ステップと、を有する計算機に実行可能なプログラム。
(4) (3)の暗号化ステップは、プログラムの起動によりこのプログラムのプログラムカウンタが実行ファイルのエントリアドレスを指定する以前に実行されるプログラム。
(5)仮想メモリ上に展開されているプログラムのコード情報の処理プログラムを記録した記録媒体であって、前記コード情報を暗号化しかつCPUからデータ読込あるいはデータ書込不可能なデータとする暗号化ステップと、前記コード情報に対するCPUによるデータ読込要求あるいはデータ書込要求があった場合に、それに伴って暗号化された領域を含むメモリ管理装置の管理単位に対するアクセス不可能状態をアクセス可能状態に変更しかつ復号化する割り込み処理を実行する復号化ステップと、前記データ読込要求あるいはデータ書込要求が他の管理単位の情報を指定した場合に、復号化ステップによってデータ読込要求あるいはデータ書込要求が可能となった管理単位のデータに対して再び暗号化ステップを実行させるための再帰ステップと、を計算機に実行させるためのプログラムを計算機読み取り可能に記録した記録媒体。
(6) (5)の暗号化ステップは、プログラムの起動によりこのプログラムのプログラムカウンタが実行ファイルのエントリアドレスを指定する以前に実行されるプログラムを記録した記録媒体。
【発明の効果】
【0006】
本件発明に係るメモリの管理方法は、仮想メモリ上に展開されているプログラムのコード情報暗号化されてかつCPUからアクセス不可能なデータとすることで、メモリが第三者によって不正に解析されることを困難にする。なお、OSの心臓部分で、プロセス制御やメモリ管理などを行なうカーネルの有する特権モードを利用すれば、メモリの吸出しが可能となる場合があるが、その場合でもメモリ自体が暗号化されているのと同じ効果を有するため、メモリに格納されたデータの内容を知ることはできず、信頼性が高い。
【0007】
また、暗号化された領域に対してデータ読込要求あるいはデータ書込要求をした場合に割込処理により前記領域を含むメモリ管理装置の管理単位に対するアクセス不可能状態をアクセス可能状態に変更し、アクセス可能とされた前記管理単位のCPUにとってデータ読込あるいはデータ書込不可能なデータのみをCPUが処理可能な状態に復号することによって、ユーザ自身は特段の不便を感じることなく処理操作を実行することができるという効果を有する。
【発明を実施するための最良の形態】
【0008】
以下に、本発明を実施するための最良の形態を説明する。なお、本発明はこれら実施の形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、種々なる態様で実施しうる。
【0009】
また、以下に記載する各構成要素は、ハードウェア、またはメモリ上に展開しハードウェアを制御することでその作用が得られるソフトウェア、またはハードウェア及びソフトウェアの両方として実現されうる。具体的には、コンピュータを利用するものであれば、CPU、メモリ、ハードディスクドライブ、CD−ROM/DVD−ROMなどの読み取りドライブ、各種通信用の送受信ポート・インターフェイス・その他の周辺装置などのハードウェア構成部、それらハードウェアを制御するためのドライバプログラム、その他アプリケーションプログラムなどが挙げられる。
【0010】
さらに、この発明は方法として実現できるのみでなく、装置またはシステムとしても実現可能である。またこのような発明の一部をソフトウェアとして構成することもできる。さらにそのようなソフトウェアをコンピュータに実行させるために用いるソフトウェア製品、及び同製品を固定した記録媒体も、当然にこの発明の技術的な範囲に含まれる(本明細書の全体を通じて同様である。)
【0011】
<<実施形態>>
【0012】
<概要> 本発明の概要について説明する。本発明は、仮想メモリ上に展開されているプログラムのコード情報あるいはデータをCPUにとって暗号化されてかつアクセス不可能なデータとしておいて、暗号化された領域に対してデータ読込要求あるいはデータ書込要求をした場合に割込処理により前記領域を含むメモリ管理装置の管理単位に対するアクセス不可能状態をアクセス可能状態に変更して復号化するメモリ管理方法である。データ読込要求やデータ書込要求とは、たとえばプログラムカウンタでデータ読込対象のアドレスが指定されたタイミングなどをさす。
【0013】
<構成> 図1は、本発明の一実施形態にかかる情報処理装置であるメモリ管理装置の構成を示すブロック図である。図で示したように、メモリ管理装置(0100)は主として、ハードディスクドライブ(0101)と、CPU(0102)と、メモリマネージメントユニット(0103)と、メインメモリ(0104)と、システムバス(0105)と、から構成されている。
【0014】
ハードディスクドライブ(0101)(以下、HDDと記す。)は、各種プログラムファイル(0106)や、データなどを格納する。HDDコントローラは、HDDへのアクセスを制御する。
【0015】
メインメモリ(0104)は、HDDに格納されているプログラムを実行するために、そのプログラムを読み出して展開(ロード)する領域であるワーク領域と、データなどを一時的に格納するデータ領域とを提供する。例えばアプリケーションプログラム(0109)は、実行時にHDDからメインメモリに一定サイズのページ単位(1ページ=4Kバイト)でロードされ、メインメモリのワーク領域に格納される。また、メインメモリはオペレーティングシステム(以下、OSと記す。)(0108)を格納する。OSは、情報処理装置の起動時にHDDからメインメモリにロードされる。
【0016】
なお、このメインメモリやHDDにはそれぞれ複数のメモリアドレスが割り当てられており、CPUで実行されるプログラムは、そのメモリアドレスを特定しアクセスすることで相互にデータのやり取りを行い、処理することが可能となっている。
【0017】
また、メインメモリは、物理メモリ−仮想メモリ変換テーブル(0110)を有する。物理メモリ−仮想メモリ変換テーブルは、仮想メモリアドレス空間と、メインメモリのアドレス空間としての物理メモリ空間との間のページ単位のマッピングを管理するためのテーブルである。この変換テーブルに基づいて、仮想メモリアドレス空間に配置されるプログラムの各ページに、物理メモリ空間内のいずれのページが割り当てられるかが定まる。一般に、仮想メモリアドレス空間のサイズの方が、物理メモリ空間サイズよりも大きい。この場合、仮想メモリアドレス空間に配置されるプログラムの一部のページのみが物理メモリ空間に配置される。
【0018】
CPU(0102)は、メインメモリにロードされているアプリケーションプログラム及びOS等を実行する。システムバス(0105)は、メモリマネージメントユニット(0103)、メインメモリ、CPUを相互に接続する。
【0019】
図2は、プログラムが実行中の場合に、当該プログラムが配置されている仮想メモリアドレス空間のページと、物理メモリ空間のページとの対応付けの例を示したものである。図は、仮想メモリアドレスの各ページ(仮想ページ)に、矢印で指定される物理メモリ空間のページ(物理ページ)が割り当てられていることを示している。このように、プログラムのコード情報は、仮想メモリ上に展開(ロード)することができる。なお、「プログラムのコード情報」とは、プログラム言語の記述仕様に沿って記述されたソースコードをバイナリコードに変換した情報である。また、プログラムには、EXEファイルの他、EXEファイルが参照するDLL(Dynamic−Link Library)ファイルなども含まれる場合がある。さらに場合により「プログラムのコード情報」には、プログラムが処理する対象となる情報資源も含まれる。たとえばグラフィックのための情報、プログラムの実行処理に利用する各種の数値、など各種のものが含まれうる。
【0020】
図3は、メモリ空間に配置されているプログラムの例を示したものである。図で網掛けされている部分は暗号化が施されている部分である。図で示すように、プログラムに含まれるヘッダ部について暗号化は行なわず、コード部について暗号化を行なう。なお、データ部については、暗号化することは可能であるが、ここでは暗号化しない例を示した。また暗号化は必ずしも複雑な変換をするもののみならず、単純な演算によって元のデータを変換する処理をも含む。たとえば単純に各値に1を足したり、1を引いたりする、単純に特定の数値との積をとるというようなものも含む。
【0021】
最初に、プログラム起動命令によって、ヘッダの解析を実行し、実行ファイルのエントリアドレス(ここでは4000番地)が取得できたら、プログラムカウンタ(以下、PCと記す。)をエントリアドレスの値にセットする。CPUは、PCの示す番地のコード情報にアクセスすることで、データ読込(あるいはデータ書込)を行い(本図においては「コードフェッチ」あるいは「データアクセス」と表記した。以下他の図面においても同じ。)、解析を実行する(A)。なお、このとき、4000番地のコード情報はCPUにとってデータ読込不可能(あるいはデータ書込不可能)であるため、エラーコードが発生する(B)。エラーコードの発生がトリガとなり、割込処理が発生する。処理不可能化された領域を含むメモリ管理装置の管理単位(例えば、ページ単位:4Kバイト)に対するアクセス不可能状態をアクセス可能状態に変更する(C)。この処理は、当該ページのアクセス状態を示すフラグレジスタなどを書き換えることによって実行する。なお、データ読込とは、CPUによるコード情報のフェッチを含む広い概念である。
【0022】
続いて、図4は、第2ページ(先頭アドレスが4000番地のページ)がアクセス可能状態となったメモリを示した。前記と同様に、エラーコードの発生がトリガとなり、割込処理によりアクセス可能とされた前記管理単位のCPUにとってデータ読込あるいはデータ書込不可能なデータのみをCPUが処理可能な状態に書き換える(D)。この処理は、割込処理によって呼び出された復号化プログラムが実行されることによって実現する。復号化プログラムは、所定の関数を実行するものなどが例示できる(復号化プログラムの種類については、後で詳述する。)。復号化プログラムは、管理単位である1ページ(4Kバイト)分のデータをデコードし、元のメモリ領域である第2ページに上書きする。これによって、CPUは、第2ページのデータ読込あるいはデータ書込が可能となる。このとき、CPUは、PC(プログラムカウンタ)をインクリメントしながら順次プログラムを実行することになるが、PCがデータ読込あるいはデータ書込が可能な領域以外の領域を指定する事態も生じうる。
【0023】
さらに、図5は、PCが8000番地をアクセスしようとしている場面を示した。8000番地のコード情報はCPUにとってコードフェッチ(あるいはデータアクセス)不可能であるため、エラーコードが発生する(E)。エラーコードの発生がトリガとなり、割込処理によりアクセス可能化処理と、復号処理が実行されることはすでに説明したとおりである(F)。ここでは加えて、CPUが、コードフェッチ(あるいはデータアクセス)可能となった管理単位のデータに対して再び暗号化をする再帰処理を実行する(G)。この再帰処理は、割り込み処理によって呼び出された暗号化プログラムが実行されるものの他に、割り込み処理をトリガとして正しいコード情報以外のデータを当該ページに上書きするものなどが例示できる。なお、暗号化プログラムは、所定の関数を実行するものなどが例示できる(暗号化プログラムの種類については、後で詳述する。)。最後に、メモリ領域のアクセス状態を示すフラグレジスタをアクセス不可の状態に書き換える。
【0024】
なお、暗号化処理は、プログラムの起動によりこのプログラムのPCが実行ファイルのエントリアドレスを指定する以前に実行されることがある。このとき、処理不可能化処理はプログラムがメモリにロードされると直ちに実行されるとしてもよい。あるいは、所定の単位ごとにプログラムのロード、暗号化、上書きの一連の処理を繰り返し、処理不可能化処理を実現する場合もある。
【0025】
ここで、コード情報を暗号化/復号化する手法について説明する。コード情報を暗号化するためには、元のデータに所定の定数(例えば、2など)の四則演算(加減乗除)をそれぞれ行なうなどの方法にて実現できる。これを復号化するには、逆に所定の定数をそれぞれ減算、加算、除算、乗算すればよい。
【0026】
あるいは、図6で示すように、排他的論理和を行なうことによっても実現できる。具体的には、元のデータ(0601)であるFFHに対して、88HのXOR演算を実施すると、77Hという結果が得られる。このとき得られた値が、暗号化データ(0602)である。他方、暗号化データを復号化する場合には、同様に暗号化データ77Hに対して、88HのXOR演算を実施するとよい。演算結果はFFHとなり、復号化すると元のデータが得られることが確認できる。ただし、オーバーフローが発生しないことを保障する必要がある。
【0027】
また、暗号化技術として、例えば、DES、FEAL、MISTY、IDEAといった秘密鍵暗号化方式を用いることもできる。また、例えば、RSA、楕円曲線、ElGamalといった公開鍵暗号化方式を用いることもある。公開鍵暗号化方式の場合には、プログラムの製作者などが、暗号化されたプログラムに加えて、復号プログラムに秘密鍵に対応する公開鍵を含めるなどしてユーザに配布することになる。暗号化プログラムと、復号化プログラムは一体として動作するが、必ずしも同一ファイルである必要はない。
【0028】
<処理の流れ> 図7は、本実施形態のメモリ管理方法の一例を示したものである。なお、以下に示す処理の流れは、計算機に実行させるためのプログラムで実行することができ、またこのプログラムを計算機によって読取り可能な記録媒体に記録することができる。(本明細書のその他の処理の流れについても同様である。)
【0029】
まず、仮想メモリ上に展開されているプログラムのコード情報あるいはデータを暗号化されてかつアクセス不可能なデータとする(暗号化ステップ S0701)。
【0030】
次に、前記プログラムの実行のために暗号化された領域をコードフェッチあるいはデータアクセスしたかの判断を実行し(領域指定判断ステップ S0702)、暗号化された領域を指定したとの判断結果の場合には、現在CPUがコードフェッチあるいはデータアクセス可能となっている管理単位のデータに対してCPUにとってコード処理不可能かつアクセス不可能なデータとする(再帰ステップ S0703)。
なお、領域指定判断ステップ(S0702)にて、PCが処理可能な領域を指定したとの判断結果の場合には、指定アドレスにアクセスし、PCを進める(指定アドレスアクセスステップ S0706)とともに、領域指定判断ステップ(S0702)を繰り返す。
また、割込処理により前記領域を含むメモリ管理装置の管理単位に対するアクセス不可能状態をアクセス可能状態に変更する(アクセス可能化ステップ S0704)。同じく、割込処理によりアクセス可能とされた前記管理単位のCPUにとってコードフェッチあるいはデータアクセス不可能なデータのみをCPUが処理可能な状態に書き換えて復号化する(復号ステップ S0705)。その後、指定アドレスアクセスステップ(S0706)に遷移して、指定アドレスにアクセスし、PCを進める。
【0031】
また、図8は、プログラム起動時における処理不可能化処理の一例を示したものである。最初に、プログラムコードを仮想メモリ上に展開する(ロードステップ S0801)。次に、プログラムのコード情報あるいはデータを暗号化されてかつアクセス不可能なデータとする(暗号化ステップ S0802)。続いて、実行ファイルのエントリアドレスを取得するまで、ヘッダの解析を実行する(ヘッダ解析ステップ S0803、S0804)。最後に、プログラムカウンタに取得したエントリアドレスの値を設定する(PC設定ステップ S0805)。
【0032】
<効果> 本発明は、仮想メモリ上に展開されているプログラムのコード情報あるいはデータをCPUにとって暗号化されてかつアクセス不可能なデータとすることで、メモリが第三者によって不正に解析されることを困難にする。なお、OSの心臓部分で、プロセス制御やメモリ管理などを行なうカーネルの有する特権モードを利用すれば、メモリの吸出しが可能となる場合があるが、その場合でもメモリ自体が暗号化されているのと同じ効果を有するため、メモリに格納されたデータの内容を知ることはできず、信頼性が高い。
【0033】
また、暗号化された領域をコードフェッチあるいはデータアクセスした場合に割込処理により前記領域を含むメモリ管理装置の管理単位に対するアクセス不可能状態をアクセス可能状態に変更し、アクセス可能とされた前記管理単位のCPUにとってコードフェッチあるいはデータアクセス不可能なデータのみをCPUが処理可能な状態に復号することによって、ユーザ自身は特段の不便を感じることなく処理操作を実行することができる。
【図面の簡単な説明】
【0034】
【図1】メモリ管理装置のハードウェア構成の一例を示した図
【図2】仮想メモリアドレス空間と実アドレス空間の対応関係を示した図
【図3】メモリ空間に配置されているプログラムの例を示した図(その1)
【図4】メモリ空間に配置されているプログラムの例を示した図(その2)
【図5】メモリ空間に配置されているプログラムの例を示した図(その3)
【図6】排他的論理和を用いた暗号化の一例を示した図
【図7】処理の流れの一例の示した図
【図8】プログラム起動時の処理の流れの一例の示した図
【符号の説明】
【0035】
0100 メモリ管理装置
0101 HDD
0102 CPU
0103 MMU
0104 メインメモリ
0105 システムバス
0106 プログラムファイル
0107 ページングファイル
0108 OS
0109 アプリケーションプログラム
0110 物理メモリ−仮想メモリ変換テーブル

【特許請求の範囲】
【請求項1】
仮想メモリ上に展開されているプログラムのコード情報の処理方法であって、
前記コード情報を暗号化しかつCPUからデータ読込あるいはデータ書込不可能なデータとする暗号化ステップと、
前記コード情報に対するCPUによるデータ読込要求あるいはデータ書込要求があった場合に、それに伴って暗号化された領域を含むメモリ管理装置の管理単位に対するアクセス不可能状態をアクセス可能状態に変更しかつ復号化する割り込み処理を実行する復号化ステップと、
前記データ読込要求あるいはデータ書込要求が他の管理単位の情報を指定した場合に、復号化ステップによってデータ読込要求あるいはデータ書込要求が可能となった管理単位のデータに対して再び暗号化ステップを実行させるための再帰ステップと、
を含むメモリ管理方法。
【請求項2】
暗号化ステップは、プログラムの起動によりこのプログラムのプログラムカウンタが実行ファイルのエントリアドレスを指定する以前に実行される請求項1に記載のメモリ管理方法。
【請求項3】
仮想メモリ上に展開されているプログラムのコード情報の処理プログラムであって、
前記コード情報を暗号化しかつCPUからデータ読込あるいはデータ書込不可能なデータとする暗号化ステップと、
前記コード情報に対するCPUによるデータ読込要求あるいはデータ書込要求があった場合に、それに伴って暗号化された領域を含むメモリ管理装置の管理単位に対するアクセス不可能状態をアクセス可能状態に変更しかつ復号化する割り込み処理を実行する復号化ステップと、
前記データ読込要求あるいはデータ書込要求が他の管理単位の情報を指定した場合に、復号化ステップによってデータ読込要求あるいはデータ書込要求が可能となった管理単位のデータに対して再び暗号化ステップを実行させるための再帰ステップと、
を有する計算機に実行可能なプログラム。
【請求項4】
暗号化ステップは、プログラムの起動によりこのプログラムのプログラムカウンタが実行ファイルのエントリアドレスを指定する以前に実行される請求項3に記載のプログラム。
【請求項5】
仮想メモリ上に展開されているプログラムのコード情報の処理プログラムを記録した記録媒体であって、
前記コード情報を暗号化しかつCPUからデータ読込あるいはデータ書込不可能なデータとする暗号化ステップと、
前記コード情報に対するCPUによるデータ読込要求あるいはデータ書込要求があった場合に、それに伴って暗号化された領域を含むメモリ管理装置の管理単位に対するアクセス不可能状態をアクセス可能状態に変更しかつ復号化する割り込み処理を実行する復号化ステップと、
前記データ読込要求あるいはデータ書込要求が他の管理単位の情報を指定した場合に、復号化ステップによってデータ読込要求あるいはデータ書込要求が可能となった管理単位のデータに対して再び暗号化ステップを実行させるための再帰ステップと、
を計算機に実行させるためのプログラムを計算機読み取り可能に記録した記録媒体。
【請求項6】
暗号化ステップは、プログラムの起動によりこのプログラムのプログラムカウンタが実行ファイルのエントリアドレスを指定する以前に実行されるプログラムを記録した請求項5に記載の記録媒体。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2010−39576(P2010−39576A)
【公開日】平成22年2月18日(2010.2.18)
【国際特許分類】
【出願番号】特願2008−198870(P2008−198870)
【出願日】平成20年7月31日(2008.7.31)
【出願人】(508232541)
【Fターム(参考)】