説明

情報処理装置、アプリケーションプログラム、及びアプリケーションプログラムの実行方法

【課題】秘匿すべきプログラムが復号された状態で実行用メモリに配置されるタイミングの特定を困難にし、プログラム解析を困難にする。
【解決手段】アプリケーション110は、マルチプログラミング環境上で並行して起動されるプログラムA120およびB140を含む。プログラムB140は、実行用メモリ11に暗号化されたまま配置される部分プログラム143を含む。プログラムB140は、(a)プログラム間通信を用いてプログラムA120から処理要求メッセージを受信し、部分プログラム143の復号化を行う処理、(b)復号後の部分プログラム143を呼び出して処理要求メッセージに応じた演算を行わせる処理、(c)演算完了後に、復号後の部分プログラム143を実行用メモリ11から消去する処理、(d)プログラム間通信を利用して演算結果をプログラムA120に送信する処理、をコンピュータに行わせる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、暗号化されたデジタルコンテンツを取り扱うアプリケーションプログラムを情報処理装置で実行する場合に秘密情報の漏洩を抑止する技術に関する。
【背景技術】
【0002】
音声、映像、プログラム等のデジタルコンテンツに関するDRM(Digital Rights Management)の重要性が増している。デジタルコンテンツの不正利用、不正な複製、改竄などを防止するために、暗号化技術が用いられている。具体的には、デジタルコンテンツを暗号化しておき、権限のある利用が行われる場合に限り、暗号化されたコンテンツを復号化プログラムによって復号することが行われている。しかし、逆アセンブラ等の解析ツール、オペレーティングシステム(OS)が有するメモリダンプ機能、デバッガプログラム等を用いたプログラム解析によって、復号化プログラムの復号処理手順や復号処理に使用される復号鍵等の秘密情報が不正取得されるおそれがある。これらのプログラム解析に対処する技術として特許文献1〜4がある。
【0003】
特許文献1は、暗号化したプログラムをファイル装置に格納しておき、当該プログラムを使用する際に復号化することを開示している。しかしながら、この方法では、復号されたプログラムが情報処理装置内の実行用メモリ(つまりRAM:Random Access Memory)に配置されたままの状態となる。この状態では、メモリダンプ機能を用いて実行用メモリに配置されたプログラムが容易に取得されるおそれがある。また、デバッガプログラムによっても復号化されたプログラムが解析されてしまうおそれがある。
【0004】
特許文献2は、デバッガ等による割り込みの発生を検出した場合に、以降の実行プログラムをダミープログラムに置き換えるかプログラム実行を停止することによって、プログラムコード解析を防止する技術を開示している。しかしながら、特許文献2の方法では、実行用メモリには復号済みのプログラムが配置された状態であるため、メモリダンプ機能を使用したプログラム解析には十分に対処することができないおそれがある。
【0005】
特許文献3は、暗号化されたデータの復号にハッシュ値を用い、デバッガ等の不正アクセスを検出した場合にハッシュ演算手順を変更して異なるハッシュ値を生成することにより、暗号化されたデータの復号を停止する技術を開示している。この手法は、復号鍵に相当するハッシュ値を生成するハッシュ演算システムがハードウェア化されデバッガやメモリダンプ等によるプログラム解析から保護されている場合には有効である。しかしながら、ハッシュ値生成が復号処理プログラムによって行われる場合には、実行用メモリには復号済みのプログラムが配置されている状態となる。このため、メモリダンプ機能を使用したプログラム解析に十分に対処することができないおそれがある。
【0006】
特許文献4は、(i) プログラムを複数のブロック(部分プログラム)に分割して個別に暗号化した状態で記憶装置に保持しておくこと、(ii) 部分プログラムを順次読み出して復号して実行用メモリに配置すること、(iii) 実行の終了した部分プログラムが配置されている実行メモリ内の領域を他のデータ(新たな部分プログラム又はダミーデータ)によって上書きすること、を開示している。これにより、特定の部分プログラムが復号された状態で実行用メモリに存在する時間を短くし、実行用メモリにロードされた部分プログラムが不正に参照されることを抑制できる。また、特許文献4は、最初の部分プログラムがロードされる実行用メモリ上の位置を動的に決定することを開示している。これにより、実行用メモリ上のロード位置がプログラム実行の度に変化するため、ロード位置を予測したメモリ観察によるプログラム内容の不正取得が防止される。
【0007】
なお、特許文献5及び6は、コンテンツデータを複数のブロックに分割し、ブロック毎に異なる暗号鍵を用いて暗号化を行う技術を開示している。しかしながら、これらの文献は、実行用メモリに展開された状態の復号化プログラムに対するメモリダンプやデバッガを用いた解析に対処する技術を開示するものではない。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2000−122861号公報
【特許文献2】特開2002−082732号公報
【特許文献3】特開2006−107274号公報
【特許文献4】特開2005−018725号公報
【特許文献5】特開2004−287566号公報
【特許文献6】特開平07−140896号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
上述したように、特許文献4に開示された技術は、復号された状態の部分プログラムが実行用メモリに存在する時間を短くし、部分プログラムがロードされる実行用メモリ内の位置を変化させることで、メモリダンプを利用したプログラム解析を困難にすることができる。しかしながら、特許文献4に開示された技術は、デバッガ等を用いたプログラム動作の解析に対する耐性が十分でないという問題を有する。具体的には、部分プログラムがアプリケーションプログラムから関数呼び出しによって直接的に呼び出されているような場合、デバッガによって部分プログラムの呼び出しが特定されてしまうと、そのときのメモリダンプを行うことで復号化された部分プログラムが解析されてしまうおそれがある。
【0010】
本発明は、上述した問題点を考慮してなされたものであり、暗号化によって保護されているプログラムが復号された状態で実行用メモリに配置されるタイミングの特定を困難にすることで、メモリダンプやデバッガによるプログラム解析を困難にし、耐タンパ性を向上させることを目的とする。
【課題を解決するための手段】
【0011】
本発明の第1の態様にかかる情報処理装置は、マルチプログラミング環境を提供可能な少なくとも1つのプロセッサと、実行用メモリとを有する。前記少なくとも1つのプロセッサは、以下に示す処理(a)〜(f)を行うよう構成されている。
(a)前記マルチプログラミング環境上で並行して起動される第1及び第2のプログラムを前記実行用メモリに配置する処理と、
ここで前記第2のプログラムは、前記実行用メモリに暗号化されたまま配置される部分プログラムを含み、前記第1及び第2のプログラムは、プログラム間通信機能を利用して互いにメッセージを送受信可能である、
(b)前記第1のプログラムから前記第2のプログラムに前記プログラム間通信によって処理要求メッセージを送信する処理と、
(c)前記第2のプログラムを実行することにより、前記処理要求メッセージの受信を契機として前記部分プログラムの復号化を行い、復号後の前記部分プログラムを前記実行用メモリに配置する処理と、
(d)復号後の前記部分プログラムを実行することにより、前記処理要求メッセージに対応した演算を行う処理と、
(e)復号後の前記部分プログラムによる前記演算の完了後に、復号後の前記部分プログラムを前記実行用メモリから消去する処理と、
(f)前記プログラム間通信によって、前記部分プログラムによる演算結果を前記第2のプログラムから前記第1のプログラムに送信する処理。
【0012】
本発明の第2の態様にかかるアプリケーションプログラムは、マルチプログラミング環境を提供可能な少なくとも1つのプロセッサ及び実行用メモリを含むコンピュータに実行される。当該アプリケーションプログラムは、前記マルチプログラミング環境上で並行して起動される第1及び第2のプログラムを含む。また、前記第2のプログラムは、前記実行用メモリに暗号化されたまま配置される部分プログラムを含む。
前記第1のプログラムは、以下の処理(i)及び(ii)を前記コンピュータに行わせる。
(i)プログラム間通信機能を利用して前記第1のプログラムから前記第2のプログラムに処理要求メッセージを送信する処理と、
(ii)前記処理要求メッセージに対応する演算結果を前記第2のプログラムから前記プログラム間通信機能を利用して受信する処理。
また、前記第2のプログラムは、以下の処理(a)〜(d)を前記コンピュータに行わせる。
(a)前記処理要求メッセージの受信を契機として前記部分プログラムの復号化を行い、復号後の前記部分プログラムを前記実行用メモリに配置する処理と、
(b)復号後の前記部分プログラムを呼び出して前記処理要求メッセージに対応した演算を行わせる処理と、
(c)復号後の前記部分プログラムによる前記演算の完了後に、復号後の前記部分プログラムを前記実行用メモリから消去する処理と、
(d)前記プログラム間通信機能を利用して、復号後の前記部分プログラムによって生成された前記演算結果を前記第1のプログラムに送信する処理。
【0013】
本発明の第3の態様にかかる方法は、マルチプログラミング環境を提供可能な少なくとも1つのプロセッサ及び実行用メモリを含むコンピュータにおけるアプリケーションプログラムの実行方法である。ここで、前記アプリケーションプログラムは、前記マルチプログラミング環境上で並行して起動される第1及び第2のプログラムを含む。また、前記第2のプログラムは、前記実行用メモリに暗号化されたまま配置される部分プログラムを含む。前記方法は、以下のステップ(a)〜(f)を含む。
(a)前記第1及び第2のプログラムを前記実行用メモリに配置すること、
(b)前記第1のプログラムから前記第2のプログラムに前記プログラム間通信によって処理要求メッセージを送信すること、
(c)前記第2のプログラムを実行することにより、前記処理要求メッセージの受信を契機として前記部分プログラムの復号化を行い、復号後の前記部分プログラムを前記実行用メモリに配置すること、
(d)復号後の前記部分プログラムを実行することにより、前記処理要求メッセージに対応した演算を行うこと、
(e)復号後の前記部分プログラムによる前記演算の完了後に、復号後の前記部分プログラムを前記実行用メモリから消去すること、及び
(f)前記プログラム間通信を利用して、前記部分プログラムによる演算結果を前記第2のプログラムから前記第1のプログラムに送信すること。
【発明の効果】
【0014】
上述した本発明の第1〜第3の態様によれば、暗号化によって保護されているプログラムが復号された状態で実行用メモリに配置されるタイミングの特定を困難にすることできる。よって、メモリダンプやデバッガによるプログラム解析を困難にし、耐タンパ性を向上させることが可能な情報処理装置、アプリケーションプログラム、及びアプリケーションプログラムの実行方法を提供できる。
【図面の簡単な説明】
【0015】
【図1】発明の実施の形態1にかかる情報処理装置の構成を示すブロック図である。
【図2】図1の不揮発性メモリ12に格納されたアプリケーションプログラム110を示す図である。
【図3】図1の実行用メモリ11にロードされたアプリケーションプログラム110を示す図である。
【図4】復号された部分プログラム143が実行用メモリ11にロードにロードされる様子を示す図である。
【図5】復号された部分プログラム143が配置されていた領域が上書きされる様子を示す図である。
【図6】発明の実施の形態1におけるアプリケーションプログラムの実行手順を示すフローチャートである。
【図7】発明の実施の形態1におけるアプリケーションプログラムの実行手順を示すフローチャートである。
【図8】図1の不揮発性メモリ12に格納されたアプリケーションプログラム110を示す図である。
【図9】復号されたコンテンツ暗号鍵生成プログラム143Aが実行用メモリ11にロードにロードされる様子を示す図である。
【図10】復号されたコンテンツ復号プログラム143Bが実行用メモリ11にロードにロードされる様子を示す図である。
【図11】コンテンツ復号後に、実行用メモリ11からプログラム削除が行われる様子を示す図である。
【図12】発明の実施の形態2にかかる情報処理装置の構成を示すブロック図である。
【図13】図11に示した情報処理装置の動作を説明するための概念図である。
【図14】図11に示した情報処理装置の動作を説明するための概念図である。
【図15】図11に示した情報処理装置の動作を説明するための概念図である。
【図16】図11に示した情報処理装置の動作を説明するための概念図である。
【図17】図11に示した情報処理装置の動作を説明するための概念図である。
【図18】図11に示した情報処理装置の処理手順を示すフローチャートである。
【発明を実施するための形態】
【0016】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【0017】
<発明の実施の形態1>
図1は、本実施の形態にかかる情報処理装置1の構成例を示すブロック図である。プロセッサ10は、プログラムの取得、プログラムの解析、プログラムの解析結果に応じた演算処理を行う。なお、図1では、1つのプロセッサ10のみを示しているが、情報処理装置1は、複数のプロセッサ10を有するマルチプロセッサ構成であってもよい。プロセッサ10は、オペレーティングシステム(OS)100を実行することによりマルチプログラミング環境を提供する。マルチプログラミング環境とは、複数のプログラムを定期的に切り替えて実行したり、あるイベントの発生に応じて実行するプログラムを切り替えたりすることによって、複数のプログラムがあたかも並列実行されているような環境を意味する。
【0018】
マルチプログラミングは、マルチプロセス、マルチスレッド、マルチタスク等と呼ばれる場合もある。プロセス、スレッド及びタスクは、マルチプログラミング環境で並列実行されるプログラム単位を意味する。これらの用語はしばしば混同して用いられるが、一般的には、プロセスは、メモリ空間などのプログラム実行環境が独立に割り当てられ、他のプロセスとの独立性の高いプログラムモジュールである。一方、スレッドは、並列処理されるプロセスに含まれるさらに細かな並列処理単位である。マルチスレッド環境では、プロセスは複数のスレッドを含む。各スレッドはプロセスに割り当てられた資源にアクセス可能であり、スレッド間はメモリ空間を共有する。本実施の形態のプロセッサ10が具備するマルチプログラミング環境は、マルチプロセス環境でもよいし、マルチスレッド環境でもよい。
【0019】
実行用メモリ11は、プロセッサ10によるプログラム実行のために使用されるメモリである。実行用メモリ11には、不揮発性メモリ12からロードされたプログラム(OS100及びアプリケーションプログラム110)、プロセッサ10の入出力データ等が記憶される。具体的には、実行用メモリ11は、SRAM(Static Random Access Memory)、DRAM(Dynamic Random Access Memory)等のランダムアクセス可能な揮発性メモリとすればよい。なお、図1の実行用メモリ11は、論理的な構成単位を示している。すなわち、実行用メモリ11は、例えば、複数のSRAMデバイスの組み合わせ、複数のDRAMデバイスの組み合わせ、又はSRAMデバイスとDRAMデバイスの組み合わせでもよい。
【0020】
不揮発性メモリ12は、電力の供給を受けることなく、実行用メモリ11に比べて安定的に記憶内容を維持することが可能なメモリデバイスである。例えば、不揮発性メモリ12は、ROM(Read Only Memory)、フラッシュメモリ、ハードディスクドライブ若しくは光ディスクドライブ、又はこれらの組み合わせである。不揮発性メモリ12は、OS100及びアプリケーションプログラム110を格納する。また、不揮発性メモリ12の少なくとも一部は情報処理装置1から取り外し可能に構成されてもよい。例えば、アプリケーションプログラム110を格納したメモリを取り外し可能としてもよい。また、不揮発性メモリ12の少なくとも一部は、情報処理装置1の外部に配置されてもよい。
【0021】
OS100は、プロセッサ10によって実行されることにより、プロセッサ10及びメモリ11及び12等のハードウェア資源を利用して、タスク管理、メモリ管理、時間管理、デバイス管理等を実行する。
【0022】
アプリケーションプログラム110は、OS100を実行するプロセッサ10によって提供されるマルチプログラミング環境で実行される。なお以下では、アプリケーションプログラム110を単にアプリケーション110と呼ぶ。図2は、不揮発性メモリ12に配置された状態のアプリケーション110を示す図である。アプリケーション110は、プログラムA120及びB140を含む。プログラムA及びプログラムBは、プロセッサ10において並列処理される。プログラムA及びプログラムBは、プロセスであってもよし、スレッドであってもよい。図2の例では、プログラムBは、暗号化された状態で暗号部130としてメモリ12に格納されている。このようにプログラムB140を暗号化しておけば、逆アセンブラツールを使用してプログラムB140の静的な解析を行うことが困難となる。
【0023】
さらに、プログラムB140は、部分暗号部142として暗号化された部分プログラム143を含んでいる。部分プログラム143は、外部に対して秘匿されるプログラムである。例えば、部分プログラム143は、DRM実現に必要な、暗号鍵等の秘密情報を扱うプログラムモジュール(暗号鍵生成プログラム、コンテンツ復号プログラム等)である。アプリケーション110が起動される場合、プログラムB140は、プログラムA120によってデコードされた後に実行用メモリ11にロードされる。しかしながら、プログラムB140内の部分プログラム143は、暗号化されたまま実行用メモリ11に配置される。部分プログラム143が暗号化されているため、この状態の実行用メモリ11のメモリダンプを取得された場合であっても部分プログラム143の漏洩を防止できる。
【0024】
以下では、図2に示したアプリケーション110に含まれる各プログラム要素について説明する。プログラムA120に含まれるプログラム間通信部121は、プロセッサ10によって提供されるプログラム間通信(プロセス間通信又はスレッド間通信)機能を利用して、少なくともプログラムB140を含む他の並列処理単位(プロセス又はスレッド)との間で通信を行うプログラムモジュールである。プログラム間通信機能を実現する具体的なメカニズムには、パイプ、ネームドパイプ、ソケット、メッセージキュー等が知られている。本実施の形態におけるプログラムA120とB140の間のプログラム間通信には、これらの公知の具体的メカニズムを利用すればよい。
【0025】
暗号部・復号プログラム122は、暗号化されたプログラムB140を含む暗号部130を復号化するプログラムモジュールである。プログラム配置部123は、復号されたプログラムB140を実行用メモリ11に配置するプログラムモジュールである。
【0026】
プログラムBが有するプログラム間通信部141は、少なくともプログラムB140を含む他の並列処理単位(プロセス又はスレッド)との間で通信を行うプログラムモジュールである。部分暗号部・復号プログラム144は、暗号化された部分プログラム143を含む部分暗号部142を復号化するプログラムモジュールである。
【0027】
プログラム配置部145は、復号された部分プログラム143を実行用メモリ11に配置するプログラムモジュールである。なお、プログラム配置部145は、部分プログラム143のロードを行う度にロード先領域を変更するとよい。ロード先を変更することによって、部分プログラム143の解析を困難にすることができる。
【0028】
部分プログラム143の復号処理は、以下のようにして行われる。実行用メモリ11にロードされ起動されたプログラムA120は、プログラムB140に対する処理要求メッセージをプログラム間通信によって送信する。実行用メモリ11にロードされ起動されたプログラムB140は、プログラムA120からの処理要求メッセージの受信に応じて復号プログラム144を呼び出し、部分プログラム143の復号を行う。つまり、プログラムA120からプログラムB140を関数呼び出しによって直接呼び出していない。このため、仮にデバッガ等によってプログラムA120が解析されたとしてもプログラムB140の解析は容易にできない。よって、暗号化によって保護されている部分プログラム143が復号された状態で実行用メモリ11に配置されるタイミングの特定を困難にすることができる。
【0029】
メモリスクランブル部150は、秘匿すべきデータおよびプログラムをメモリ11上から消去する役割を果たす。メモリスクランブル部150は、実行用メモリ11内の記憶領域を乱数データ(厳密には疑似乱数データ)によって上書きするプログラムモジュールである。メモリスクランブル部150は、プログラムA120又はB140から呼び出され、プログラムA120又はB140によって指定された領域に乱数データを書き込む。メモリスクランブル部150は、書き込みの都度例えば時刻情報を用いて乱数を発生させればよい。これにより、書き込みを行う度に書き込みデータ内容を変更することができる。これにより、同じデータで繰り返し上書きされる実行用メモリ11内の領域を特定する手法を用いたプログラム解析を困難にすることができる。
【0030】
後述するように、本実施の形態では、復号された部分プログラム143が配置されている記憶領域をメモリスクランブル部150が生成する乱数データによって上書きする。これにより、復号された部分プログラム143が実行用メモリ11に配置されたままとなることを防止し、秘匿すべき部分プログラム143が解析されてしまうことを効果的に防止できる。なお、メモリスクランブル部150が書き込むデータは、乱数データでなくてもよい。ただし、メモリスクランブル部150は、実行用メモリ11に書き込みを行う度に書き込みデータを変更するとよい。書き込みデータの変更はランダムに行ってもよいし、周期的に行ってもよい。ただし、周期的に変更する場合の繰り返し周期はできるだけ長くするとよい。
【0031】
なお、図2には、プログラムB140が1つの部分暗号部142を含む例を示した。しかしながら、プログラムB140は、それぞれが暗号化された別個の部分プログラム143を含む複数の部分暗号部142を含んでもよい。この場合、処理要求メッセージに応じた処理を実行する過程で、(i) 部分暗号部142の復号、(ii) 部分プログラム143の実行、および (iii) 復号された部分プログラム143の実行用メモリ11からの消去、を部分プログラム143ごとに順に繰り返すとよい。つまり、一連の処理を行うための複数の部分プログラム143が同時に復号されて実行用メモリ11に配置されている状態を回避するとよい。これにより、仮に、1つの復号された部分プログラム143が実行用メモリ11に配置されているときのメモリダンプを取得された場合でも、他の部分プログラム143は暗号化されているため、メモリダンプを用いてプログラム解析を行うことは困難となる。
【0032】
続いて以下では、プログラムA120及びB140を実行する際の実行用メモリ11の記憶状態の遷移について図3〜5を用いて説明する。始めに図3は、復号されたプログラムB140がロードされる様子を示す図である。アプリケーション110が起動する際に、暗号部・復号プログラム122が暗号部130に対する復号処理を行う。プログラム配置部123は、暗号部・復号プログラム122によって復号されたプログラムB140を実行用メモリ11に配置する。このとき、プログラムB140内の部分プログラム143は、暗号化されたまま実行用メモリ11に配置されているため、この状態の実行用メモリ11のメモリダンプを取得された場合であっても部分プログラム143の漏洩を防止できる。
【0033】
図4は、プログラムA120からプログラムB140への処理要求メッセージの送信を契機として、プログラムB140が部分プログラム143をロードし、処理要求に応じた処理を行う様子を示す図である。プログラムA120は、アプリケーション110から処理要求があると、プログラム間通信部121からプログラムB140のプログラム間通信部141に対して処理要求メッセージを送信する。プログラムB140は、プログラム間通信部141で受信されたメッセージの内容に従って処理を行う。具体的には、プログラムB140が処理要求メッセージを受信した場合、部分暗号部・復号プログラム144が部分暗号部142に対する復号処理を行う。プログラム配置部145は、部分暗号部・復号プログラム144によって復号された部分プログラム143を実行用メモリ11に配置する。この後、プログラムB140は、実行用メモリ11に配置された部分プログラム143を呼び出し、プログラムAからの処理要求に対応した処理を行う。
【0034】
図5は、部分プログラム143による処理が完了した後に、部分プログラム143が配置されている実行用メモリ11内の記憶領域を解放する様子を示す図である。プログラムB140は、部分プログラム143による処理が完了したことに応じて、復号された部分プログラム143が展開されている記憶領域を乱数データで上書きするようメモリスクランブル部150に要求する。これに応じて、メモリスクランブル部150は、部分プログラム143が展開されている記憶領域に乱数データを書き込んだ後に当該領域を解放する。プログラムB140のプログラム間通信部141は、プログラムA120のプログラム間通信部121に対して処理要求に応じた処理結果を含むメッセージを送信する。
【0035】
続いて以下では、アプリケーション110の起動から終了までの処理手順の具体例について図6及び7のフローチャートを用いて説明する。ステップS101では、アプリケーション110が起動する。既に述べたように、アプリケーション110の起動時には、暗号部130に対する復号処理が行われ、デコードされたプログラムB140が実行用メモリ11にロードされる(ステップS102及びS103)。ステップS104では、プログラムA120は、暗号部120の復号に使用される暗号部・復号プログラム122を実行用メモリ11から消去する。具体的には、プログラムA120は、暗号部・復号プログラム122が配置されている記憶領域を乱数データで上書きするようメモリスクランブル部150に要求すればよい。
【0036】
アプリケーション110からプログラムA120に処理要求が発生すると(S105)、プログラムA120は、プログラム間通信によって処理要求メッセージをプログラムB140に送信する(S106)。プログラムB140は、受信した処理要求メッセージを解析し、メッセージに応じた処理を開始する(S107)。
【0037】
ステップS108では、プログラムB140は、部分プログラム143を使用する必要があるか否かを判定する。部分プログラム143を使用する場合(S108でYES)、部分暗号部・復号プログラム144を実行することにより、部分暗号部142を復号する(S109)。ステップS110では、プログラム配置部145は、復号された部分プログラム143を実行用メモリ11にロードする。
【0038】
ステップS111では、実行用メモリ11にロードされた部分プログラム143を呼び出して処理を実行する。ステップS112では、処理の完了した部分プログラム143を実行用メモリ11から消去する。具体的には、上述したように、復号された部分プログラム143が配置されている記憶領域を乱数データによって上書きすればよい。
【0039】
ステップS113では、更に部分プログラム143の実行が必要か否かを判定する。部分プログラム143の更なる実行が必要であれば、ステップS109に戻る。一方、部分プログラム143の更なる実行が必要なければステップS114に進む。
【0040】
ステップS114では、プログラムB140は、部分プログラム143を実行することで得た処理結果を、プログラム間通信を利用してプログラムA120に送信する。ステップS115では、プログラムA120は、プログラム間通信によって受信した処理結果を解析し、アプリケーション110に処理結果を返す。ステップS116では、アプリケーション110は、プログラムA120から受信した処理結果に基づく処理を行う。
【0041】
ステップS117では、アプリケーション110の終了判定を行う。アプリケーション110が終了しない場合、ステップS105〜S116が繰り返し行われる。一方、アプリケーション110が終了する場合(S117でYES)、復号後のプログラムB140を実行用メモリ11から消去する。具体的には、メモリスクランブル部150を起動し、復号後のプログラムB140が配置されている実行用メモリ11内の記憶領域を乱数データによって上書きすればよい。最後に、ステップS119では、アプリケーション110が終了する。
【0042】
上述したように、本実施の形態にかかる情報処理装置1は、秘匿すべき部分プログラム143を必要なときにのみ復号化して実行用メモリ11にロードする。このため、復号化された部分プログラム143が実行用メモリ11に存在する時間を短くし、メモリダンプによるプログラム解析に対する耐性を向上させる。
【0043】
また、情報処理装置1は、部分プログラム143の実行用メモリ11からの消去を行う都度、異なるデータ(疑似乱数データ等)によって部分プログラム143が配置されていた記憶領域を上書きする。これにより、同じデータで繰り返し上書きされる実行用メモリ11内の領域を特定する手法を用いたプログラム解析を困難にすることができる。
【0044】
また、情報処理装置1では、プログラムA120がプログラムB140に処理要求メッセージを送信し、処理要求メッセージの受信に応じてプログラムB140が部分プログラム143の復号化とロードを行う。つまり、プログラムAからプログラムBを関数呼び出しによって明示的に呼び出していないため、仮にデバッガ等によってプログラムA120が解析されたとしてもプログラムB140の解析は容易にできない。
【0045】
以下では、情報処理装置1の具体的な適用先の一例について説明する。ここでは、プログラムB140が2つの部分プログラム143A及びBを含み、これらの部分プログラム143A及びBを用いてデジタルコンテンツの復号処理が行われる場合について説明する。
【0046】
図8は、ロード前のアプリケーション110を示す図であり、図2に対応する。図8の例では、プログラムB140は、2つの部分暗号部142A及び142Bを含む。部分暗号部142Aは、暗号化されたコンテンツ暗号鍵生成プログラム143Aを含む。また、部分暗号部142Bは、暗号化されたコンテンツ復号プログラム143Bを含む。暗号鍵生成プログラム143Aは、デジタルコンテンツの復号化に使用される暗号化鍵を生成する。コンテンツ復号プログラム143Bは、暗号鍵生成プログラム143Aによって生成された暗号鍵を用いてデジタルコンテンツの復号化処理を行う。
【0047】
図9は、アプリケーション11が起動された状態の実行用メモリ11の状態を示している。より具体的に述べると、図9は、プログラムA120からプログラムB140への "コンテンツ復号要求メッセージ"の送信を契機として、プログラムB140が暗号鍵生成プログラム143Aをロードし、暗号鍵データ146を生成する様子を示している。プログラムA120は、アプリケーション110からコンテンツ復号要求があると、プログラム間通信部121からプログラムB140のプログラム間通信部141に対して復号要求メッセージを送信する。
【0048】
プログラムB140は、プログラム間通信部141で受信されたメッセージの内容に従って処理を行う。具体的には、プログラムB140が復号要求メッセージを受信した場合、部分暗号部・復号プログラム144が部分暗号部142Aに対する復号処理を行う。プログラム配置部145は、部分暗号部・復号プログラム144によって復号された暗号鍵生成プログラム143Aを実行用メモリ11に配置する。この後、プログラムB140は、実行用メモリ11に配置された暗号鍵生成プログラム143Aを呼び出し、暗号鍵データ146の生成処理を行う。図9に示す状態のメモリダンプを取得されても、暗号化されているコンテンツ復号プログラム143Bまで解析することは困難である。
【0049】
図10は、暗号鍵データ146の生成が完了した後に、暗号鍵生成プログラム143Aが配置されている実行用メモリ11内の記憶領域を解放する様子を示している。また、図10は、暗号鍵生成プログラム143Aの消去後に、コンテンツ復号プログラム143Bがロードされる様子を示している。プログラムB140は、暗号鍵データ146の生成が完了したことに応じて、暗号鍵生成プログラム143Aが展開されている記憶領域を乱数データで上書きするようメモリスクランブル部150に要求する。これに応じて、メモリスクランブル部150は、暗号鍵生成プログラム143Aが展開されている記憶領域に乱数データを書き込んだ後に当該領域を解放する。次に、部分暗号部・復号プログラム144が部分暗号部142Bに対する復号処理を行う。プログラム配置部145は、部分暗号部・復号プログラム144によって復号されたコンテンツ復号プログラム143Bを実行用メモリ11に配置する。この後、プログラムB140は、実行用メモリ11に配置されたコンテンツ復号プログラム143Bを呼び出し、暗号鍵データ146を用いてデジタルコンテンツの復号化を行う。
【0050】
図11は、デジタルコンテンツの復号が完了した後に、コンテンツ復号プログラム143Bが配置されている実行用メモリ11内の記憶領域を解放する様子を示している。プログラムB140は、デジタルコンテンツの復号が完了したことに応じて、コンテンツ復号プログラム143Bが展開されている記憶領域を乱数データで上書きするようメモリスクランブル部150に要求する。これに応じて、メモリスクランブル部150は、コンテンツ復号プログラム143Bが展開されている記憶領域に乱数データを書き込んだ後に当該領域を解放する。なお、このとき、暗号鍵データ146が保持されている記憶領域も乱数データで上書きした後に解放するとよい。これにより、部分プログラム143だけでなく、部分プログラム143によって生成される一時的なデータも消去でき、漏洩を防止できる。
【0051】
<発明の実施の形態2>
本実施の形態では、(i) プログラム生成する秘密情報を暗号化したうえでメモリに格納すること、(ii) 暗号化後の秘密情報を格納する領域を毎回変化させること、(iii)メモリ上に展開されている平文の(暗号化されていない)秘密情報が不要になった場合には、平文の秘密情報が格納されていた領域を疑似乱数などの規則性のないデータによって上書きした後に記憶領域を解放すること、について述べる。本実施の形態は、例えば図9に示した暗号鍵データ146をメモリ11に配置する際に適用可能である。
【0052】
図12は、本実施の形態にかかる情報処理装置2の構成を示すブロック図である。秘密情報生成プログラム24は、秘密情報を生成するプログラムである。秘密情報使用プログラム25は、プログラム24によって生成された秘密情報を使用するプログラムである。例えば、秘密情報生成プログラム24は暗号鍵を生成するプログラムであり、秘密情報使用プログラム25は暗号鍵を使用して復号処理を行うプログラムである。
【0053】
秘密情報管理部23は、メモリ21に配置される秘密情報の管理を行う。具体的に述べると、秘密情報管理部23は、秘密情報の暗号化と、メモリ21に配置された平文の秘密情報の消去を制御する。秘密情報保護装置22は、秘密情報管理部23の制御に基づいてメモリ21にアクセスし、秘密情報の暗号化、平文の秘密情報の消去を行う。
【0054】
次に、図13〜18を参照して、情報処理装置2の動作について説明する。図13は、秘密情報生成プログラム24が秘密情報を生成する様子を示す図である。秘密情報生成プログラム24は、生成した平文の秘密情報211をメモリ21に格納する(図18のS201)。
【0055】
図14は、平文の秘密情報211を暗号化する様子を示す図である。平文の秘密情報211を生成した秘密情報生成プログラム24は、秘密情報管理部23に秘密情報211の暗号化を要求する(図18のS202)。プログラム24から暗号化要求を受信した暗号処理部231は、秘密情報保護装置22内の変数暗号鍵生成部222に対して、変数暗号鍵の生成を要求する。ここで、変数暗号鍵とは、秘密情報を暗号化するために暗号鍵である。変数暗号鍵生成部222は、変数暗号鍵212を生成してメモリ21に格納する(図18のS203)。なお、変数暗号鍵生成部222は、変数暗号鍵の漏洩に対処するため、変数暗号鍵を生成する度に異なる暗号鍵を生成するとよい。
【0056】
また、暗号処理部231は、変数暗号部221に対して秘密情報211の暗号化を要求する。変数暗号部221は、変数暗号鍵212を用いて秘密情報211を暗号化し、暗号化された秘密情報(暗号化秘密情報)213をメモリ21に格納する(図18のS204)。なお、暗号化秘密情報213のメモリ21における格納位置の特定を困難にするため、変数暗号部221は、暗号化秘密情報213の生成の度に格納先を変更するとよい。
【0057】
図15は、秘密情報管理部23が、平文の秘密情報211を削除する様子を示す図である。暗号処理部231は、メモリ破棄部233に対して秘密情報211の消去を要求する(図18のS205)。メモリ破棄部233は、秘密情報保護装置22内のメモリスクランブル部223に対して、秘密情報211の格納領域を乱数データによって上書きするよう指示する。メモリスクランブル部223は、平文の秘密情報211が格納されている領域に乱数データを書き込んだ後に当該領域を解放する(図18のS206)。なお、同一データによって上書きされる記憶領域をトレースする手法によるプログラム解析に対処するため、メモリスクランブル部223は、上書き処理を行う度に異なる乱数データを生成するとよい。図15の状態でメモリダンプが取得されても、平文の秘密情報211が存在していないため、秘密情報211がメモリ21から容易に読み取られてしまうことを防止できる。
【0058】
図16は、秘密情報使用プログラム25の要求に応じて、暗号化秘密情報213の復号化を行う様子を示す図である。秘密情報使用プログラム25は、復号処理部232に対して暗号化秘密情報213の復号化を要求する(図18のS207)。復号処理部232は、秘密情報保護装置22内の変数復号部224に対して暗号化秘密情報213の復号化を指示する。変数復号部224は、変数暗号鍵212を用いて暗号化秘密情報213を復号し、復号された秘密情報211をメモリ21に格納する(図18のS208)。この後、秘密情報使用プログラム25は、復号された秘密情報211を用いた処理を行う(図18のS209)。
【0059】
図17は、秘密情報使用プログラム25の要求に応じて、平文の秘密情報211の消去を行う様子を示す図である。復号された秘密情報211を用いた処理の完了後、秘密情報使用プログラム25は、メモリ破棄部233に対して、メモリ21からの秘密情報211の消去を要求する(図18のS210)。メモリ破棄部233は、メモリスクランブル部223に対して、秘密情報211の格納領域を乱数データによって上書きするよう指示する。メモリスクランブル部223は、平文の秘密情報211が格納されている領域に乱数データを書き込んだ後に当該領域を解放する(図18のS211)。
【0060】
上述したように、本実施の形態にかかる情報処理装置2は、メモリ21上の秘密情報を暗号化している。このため、メモリ21上のデータ変化等をモニタすることによる秘密情報の検出が困難となる。また、暗号化秘密情報213の配置先を毎回変更することによって、メモリ21をモニタすることによる秘密情報の検出を一層困難にすることができる。
【0061】
また、情報処理装置2は、秘密情報の暗号化に使用する変数暗号鍵212を毎回変更することによって、メモリ21上の変数暗号鍵212の格納位置や変数暗号鍵212自体の検出を困難にすることができる。
【0062】
また、情報処理装置2は、平文の秘密情報211を消去する際に、平文の秘密情報211の記憶領域を乱数等の規則性の無いデータで上書きしてから解放する。このため、メモリ21上に秘密情報を残存させず、秘密情報を保護できる。また、上書きに使用するデータを毎回変更するとよい。これにより、秘密情報211が展開されるメモリ21上の位置の特定を困難にすることができる。
【0063】
なお、上述した例では、1つの秘密情報211が生成される場合を示したが、秘密情報211は、1又は複数の秘密情報生成プログラム24によって複数個生成されてもよい。この場合、変数暗号鍵生成部222は秘密情報ごとに異なる暗号鍵を生成し、変数暗号部221は各秘密情報を異なる暗号鍵によって暗号化するとよい。
【0064】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【符号の説明】
【0065】
1、2 情報処理装置
10 プロセッサ
11 実行用メモリ
12 不揮発性メモリ
100 オペレーティングシステム(OS)
110 アプリケーションプログラム
120 プログラムA
121 プログラム間通信部
122 暗号部・復号プログラム
123 プログラム配置部
130 暗号部
140 プログラムB
141 プログラム間通信部
142、142A、142B 部分暗号部
143 部分プログラム
143A コンテンツ暗号鍵生成プログラム
143B コンテンツ復号プログラム
144 部分暗号部・復号プログラム
145 プログラム配置部
146 暗号鍵データ
150 メモリスクランブル部
21 メモリ
22 秘密情報保護装置
23 秘密情報管理部
24 秘密情報生成プログラム
25 秘密情報使用プログラム
211 平文の秘密情報
212 変数暗号鍵
213 暗号化された秘密情報
221 変数暗号部
222 変数暗号鍵生成部
223 メモリスクランブル部
224 変数復号部
231 暗号処理部
232 復号処理部
233 メモリ破棄部

【特許請求の範囲】
【請求項1】
マルチプログラミング環境を提供可能な少なくとも1つのプロセッサと、
実行用メモリと、
を備え、
前記少なくとも1つのプロセッサは、
(a)前記マルチプログラミング環境上で並行して起動される第1及び第2のプログラムを前記実行用メモリに配置する処理と、
ここで前記第2のプログラムは、前記実行用メモリに暗号化されたまま配置される部分プログラムを含み、前記第1及び第2のプログラムは、プログラム間通信機能を利用して互いにメッセージを送受信可能である、
(b)前記第1のプログラムから前記第2のプログラムに前記プログラム間通信によって処理要求メッセージを送信する処理と、
(c)前記第2のプログラムを実行することにより、前記処理要求メッセージの受信を契機として前記部分プログラムの復号化を行い、復号後の前記部分プログラムを前記実行用メモリに配置する処理と、
(d)復号後の前記部分プログラムを実行することにより、前記処理要求メッセージに対応した演算を行う処理と、
(e)復号後の前記部分プログラムによる前記演算の完了後に、復号後の前記部分プログラムを前記実行用メモリから消去する処理と、
(f)前記プログラム間通信によって、前記部分プログラムによる演算結果を前記第2のプログラムから前記第1のプログラムに送信する処理と、
を行うよう構成されている、
情報処理装置。
【請求項2】
前記処理(e)における前記部分プログラムの消去は、復号後の前記部分プログラムが配置されていた前記実行用メモリ内の領域を前記部分プログラムとは異なる他のデータで上書きすることにより行われ、前記他のデータは、前記上書き処理が行われる都度変更される、請求項1に記載の情報処理装置。
【請求項3】
前記処理(c)において復号後の前記部分プログラムが配置される前記実行用メモリ内の領域は、復号後の前記部分プログラムの配置が行われる都度変更される、請求項1又は2に記載の情報処理装置。
【請求項4】
前記部分プログラムは、第1及び第2の部分プログラムを含み、
前記処理(c)では、前記第1及び第2の部分プログラムが復号化され、
前記処理(d)では、復号後の前記第1の部分プログラムの実行によって第1の演算結果を得るとともに、復号後の前記第2の部分プログラムの実行によって前記第1の演算結果を利用した演算を行って第2の演算結果を得て、
前記処理(f)では、前記第2の演算結果が前記プログラム間通信によって前記第1のプログラムに送信される、
請求項1〜3のいずれか1項に記載の情報処理装置。
【請求項5】
前記少なくとも1つのプロセッサは、前記処理(c)〜(e)を繰り返し行い、
先の前記処理(c)〜(e)において前記第1の部分プログラムの復号化、復号された前記第1の部分プログラムによる前記第1の演算結果の生成、復号された前記第1の部分プログラムの前記実行用メモリからの消去を行った後に、
後の前記処理(c)〜(e)において前記第2の部分プログラムの復号化、復号された前記第2の部分プログラムによる前記第2の演算結果の生成、復号された前記第2の部分プログラムの前記実行用メモリからの消去を行う、
請求項4に記載の情報処理装置。
【請求項6】
前記処理要求は暗号化コンテンツの復号化要求であり、
前記第1の部分プログラムは、前記暗号化コンテンツの復号に必要な暗号鍵を前記第1の演算結果として生成する処理を前記少なくとも1つのプロセッサに行わせるための記述を含み、
前記第2の部分プログラムは、前記暗号鍵を用いて前記暗号化コンテンツの復号化を行い、復号後のコンテンツを前記第2の演算結果として生成する処理を前記少なくとも1つのプロセッサに行わせるための記述を含む、
請求項4又は5に記載の情報処理装置。
【請求項7】
前記処理(e)は、前記暗号鍵が配置されていた前記実行用メモリ内の領域を前記暗号鍵とは異なる他のデータで上書きすることをさらに含む、
請求項6に記載の情報処理装置。
【請求項8】
前記第1の演算結果が配置される前記実行用メモリ内の領域は、前記第1の演算結果が生成される都度変更される、請求項4〜7のいずれか1項に記載の情報処理装置。
【請求項9】
マルチプログラミング環境を提供可能な少なくとも1つのプロセッサ及び実行用メモリを含むコンピュータに実行されるアプリケーションプログラムであって、
前記アプリケーションプログラムは、前記マルチプログラミング環境上で並行して起動される第1及び第2のプログラムを含み、
前記第2のプログラムは、前記実行用メモリに暗号化されたまま配置される部分プログラムを含み、
前記第1のプログラムは、
(i)プログラム間通信機能を利用して前記第2のプログラムに処理要求メッセージを送信する処理と、
(ii)前記処理要求メッセージに対応する演算結果を前記第2のプログラムから前記プログラム間通信機能を利用して受信する処理と、
を前記コンピュータに行わせ、
前記第2のプログラムは、
(a)前記処理要求メッセージの受信を契機として前記部分プログラムの復号化を行い、復号後の前記部分プログラムを前記実行用メモリに配置する処理と、
(b)復号後の前記部分プログラムを呼び出して前記処理要求メッセージに対応した演算を行わせる処理と、
(c)復号後の前記部分プログラムによる前記演算の完了後に、復号後の前記部分プログラムを前記実行用メモリから消去する処理と、
(d)前記プログラム間通信機能を利用して、復号後の前記部分プログラムによって生成された前記演算結果を前記第1のプログラムに送信する処理と、
を前記コンピュータに行わせる、
アプリケーションプログラム。
【請求項10】
前記処理(c)における前記部分プログラムの消去は、復号後の前記部分プログラムが配置されていた前記実行用メモリ内の領域を前記部分プログラムとは異なる他のデータで上書きすることにより行われ、前記他のデータは、前記上書き処理が行われる都度変更される、請求項9に記載のアプリケーションプログラム。
【請求項11】
前記処理(a)において復号後の前記部分プログラムが配置される前記実行用メモリ内の領域は、復号後の前記部分プログラムの配置が行われる都度変更される、請求項9又は10に記載のアプリケーションプログラム。
【請求項12】
前記部分プログラムは、第1及び第2の部分プログラムを含み、
前記処理(i)では、前記第1及び第2の部分プログラムが暗号化されたまま前記実行用メモリに配置され、
前記処理(a)では、前記第1及び第2の部分プログラムが復号化され、
前記処理(b)では、復号後の前記第1の部分プログラムに従った演算によって第1の演算結果が生成され、復号後の前記第2の部分プログラムに従った演算によって前記第1の演算結果に基づいて第2の演算結果が生成され、
前記処理(d)では、前記第2の演算結果が前記プログラム間通信によって前記第1のプログラムに送信される、
請求項9〜11のいずれか1項に記載のアプリケーションプログラム。
【請求項13】
前記第2のプログラムは、前記処理(a)〜(c)を前記コンピュータに繰り返し行わせるための記述を含み、
前記コンピュータは、
先の前記処理(a)〜(c)において、前記第1の部分プログラムの復号化、復号された前記第1の部分プログラムに従った演算による前記第1の演算結果の生成、復号された前記第1の部分プログラムの前記実行用メモリからの消去を行った後に、
後の前記処理(a)〜(c)において、前記第2の部分プログラムの復号化、復号された前記第2の部分プログラムに従った演算による前記第2の演算結果の生成、復号された前記第2の部分プログラムの前記実行用メモリからの消去を行う、
請求項12に記載のアプリケーションプログラム。
【請求項14】
前記処理要求は暗号化コンテンツの復号化要求であり、
前記第1の部分プログラムは、前記暗号化コンテンツの復号に必要な暗号鍵を前記第1の演算結果として生成する処理を前記コンピュータに行わせるための記述を含み、
前記第2の部分プログラムは、前記暗号鍵を用いて前記暗号化コンテンツの復号化を行い、復号後のコンテンツを前記第2の演算結果として生成する処理を前記コンピュータに行わせるための記述を含む、
請求項12又は13に記載のアプリケーションプログラム。
【請求項15】
前記処理(c)は、前記暗号鍵が配置されていた前記実行用メモリ内の領域を前記暗号鍵とは異なる他のデータで上書きすることをさらに含む、
請求項14に記載のアプリケーションプログラム。
【請求項16】
前記第1の演算結果が配置される前記実行用メモリ内の領域は、前記第1の演算結果が生成される都度変更される、請求項12〜15のいずれか1項に記載のアプリケーションプログラム。
【請求項17】
マルチプログラミング環境を提供可能な少なくとも1つのプロセッサ及び実行用メモリを含むコンピュータにおけるアプリケーションプログラムの実行方法であって、
前記アプリケーションプログラムは、前記マルチプログラミング環境上で並行して起動される第1及び第2のプログラムを含み、
前記第2のプログラムは、前記実行用メモリに暗号化されたまま配置される部分プログラムを含み、
前記方法は、
(a)前記第1及び第2のプログラムを前記実行用メモリに配置すること、
(b)前記第1のプログラムから前記第2のプログラムに前記プログラム間通信によって処理要求メッセージを送信すること、
(c)前記第2のプログラムを実行することにより、前記処理要求メッセージの受信を契機として前記部分プログラムの復号化を行い、復号後の前記部分プログラムを前記実行用メモリに配置すること、
(d)復号後の前記部分プログラムを実行することにより、前記処理要求メッセージに対応した演算を行うこと、
(e)復号後の前記部分プログラムによる前記演算の完了後に、復号後の前記部分プログラムを前記実行用メモリから消去すること、及び
(f)前記プログラム間通信を利用して、前記部分プログラムによる演算結果を前記第2のプログラムから前記第1のプログラムに送信すること、
を備える、アプリケーションプログラムの実行方法。
【請求項18】
前記部分プログラムは、第1及び第2の部分プログラムを含み、
前記ステップ(c)では、前記第1及び第2の部分プログラムが復号化され、
前記ステップ(d)では、復号後の前記第1の部分プログラムの実行によって第1の演算結果を得るとともに、復号後の前記第2の部分プログラムの実行によって前記第1の演算結果を利用した演算を行って第2の演算結果を得て、
前記ステップ(f)では、前記第2の演算結果が前記プログラム間通信によって前記第1のプログラムに送信される、
請求項1に記載の方法。
【請求項19】
前記少なくとも1つのプロセッサは、前記ステップ(c)〜(e)を繰り返し行い、
先の前記ステップ(c)〜(e)において前記第1の部分プログラムの復号化、復号された前記第1の部分プログラムによる前記第1の演算結果の生成、復号された前記第1の部分プログラムの前記実行用メモリからの消去を行った後に、
後の前記処理(c)〜(e)において前記第2の部分プログラムの復号化、復号された前記第2の部分プログラムによる前記第2の演算結果の生成、復号された前記第2の部分プログラムの前記実行用メモリからの消去を行う、
請求項18に記載の方法。
【請求項20】
前記処理要求は暗号化コンテンツの復号化要求であり、
前記第1の部分プログラムは、前記暗号化コンテンツの復号に必要な暗号鍵を前記第1の演算結果として生成する処理を前記少なくとも1つのプロセッサに行わせるための記述を含み、
前記第2の部分プログラムは、前記暗号鍵を用いて前記暗号化コンテンツの復号化を行い、復号後のコンテンツを前記第2の演算結果として生成する処理を前記少なくとも1つのプロセッサに行わせるための記述を含む、
請求項18又は19に記載の方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate


【公開番号】特開2010−217975(P2010−217975A)
【公開日】平成22年9月30日(2010.9.30)
【国際特許分類】
【出願番号】特願2009−60875(P2009−60875)
【出願日】平成21年3月13日(2009.3.13)
【出願人】(390001395)NECシステムテクノロジー株式会社 (438)
【Fターム(参考)】