(57)【要約】【課題】秘匿すべきプログラムが復号された状態で実行用メモリに配置されるタイミングの特定を困難にし、プログラム解析を困難にする。【解決手段】アプリケーション１１０は、マルチプログラミング環境上で並行して起動されるプログラムＡ１２０およびＢ１４０を含む。プログラムＢ１４０は、実行用メモリ１１に暗号化されたまま配置される部分プログラム１４３を含む。プログラムＢ１４０は、（ａ）プログラム間通信を用いてプログラムＡ１２０から処理要求メッセージを受信し、部分プログラム１４３の復号化を行う処理、（ｂ）復号後の部分プログラム１４３を呼び出して処理要求メッセージに応じた演算を行わせる処理、（ｃ）演算完了後に、復号後の部分プログラム１４３を実行用メモリ１１から消去する処理、（ｄ）プログラム間通信を利用して演算結果をプログラムＡ１２０に送信する処理、をコンピュータに行わせる。【選択図】図４
2010217975.tif 000002
【特許請求の範囲】
【請求項１】
マルチプログラミング環境を提供可能な少なくとも１つのプロセッサと、
実行用メモリと、
を備え、
前記少なくとも１つのプロセッサは、
（ａ）前記マルチプログラミング環境上で並行して起動される第１及び第２のプログラムを前記実行用メモリに配置する処理と、
ここで前記第２のプログラムは、前記実行用メモリに暗号化されたまま配置される部分プログラムを含み、前記第１及び第２のプログラムは、プログラム間通信機能を利用して互いにメッセージを送受信可能である、
（ｂ）前記第１のプログラムから前記第２のプログラムに前記プログラム間通信によって処理要求メッセージを送信する処理と、
（ｃ）前記第２のプログラムを実行することにより、前記処理要求メッセージの受信を契機として前記部分プログラムの復号化を行い、復号後の前記部分プログラムを前記実行用メモリに配置する処理と、
（ｄ）復号後の前記部分プログラムを実行することにより、前記処理要求メッセージに対応した演算を行う処理と、
（ｅ）復号後の前記部分プログラムによる前記演算の完了後に、復号後の前記部分プログラムを前記実行用メモリから消去する処理と、
（ｆ）前記プログラム間通信によって、前記部分プログラムによる演算結果を前記第２のプログラムから前記第１のプログラムに送信する処理と、
を行うよう構成されている、
情報処理装置。
【請求項２】
前記処理（ｅ）における前記部分プログラムの消去は、復号後の前記部分プログラムが配置されていた前記実行用メモリ内の領域を前記部分プログラムとは異なる他のデータで上書きすることにより行われ、前記他のデータは、前記上書き処理が行われる都度変更される、請求項１に記載の情報処理装置。
【請求項３】
前記処理（ｃ）において復号後の前記部分プログラムが配置される前記実行用メモリ内の領域は、復号後の前記部分プログラムの配置が行われる都度変更される、請求項１又は２に記載の情報処理装置。
【請求項４】
前記部分プログラムは、第１及び第２の部分プログラムを含み、
前記処理（ｃ）では、前記第１及び第２の部分プログラムが復号化され、
前記処理（ｄ）では、復号後の前記第１の部分プログラムの実行によって第１の演算結果を得るとともに、復号後の前記第２の部分プログラムの実行によって前記第１の演算結果を利用した演算を行って第２の演算結果を得て、
前記処理（ｆ）では、前記第２の演算結果が前記プログラム間通信によって前記第１のプログラムに送信される、
請求項１〜３のいずれか１項に記載の情報処理装置。
【請求項５】
前記少なくとも１つのプロセッサは、前記処理（ｃ）〜（ｅ）を繰り返し行い、
先の前記処理（ｃ）〜（ｅ）において前記第１の部分プログラムの復号化、復号された前記第１の部分プログラムによる前記第１の演算結果の生成、復号された前記第１の部分プログラムの前記実行用メモリからの消去を行った後に、
後の前記処理（ｃ）〜（ｅ）において前記第２の部分プログラムの復号化、復号された前記第２の部分プログラムによる前記第２の演算結果の生成、復号された前記第２の部分プログラムの前記実行用メモリからの消去を行う、
請求項４に記載の情報処理装置。
【請求項６】
前記処理要求は暗号化コンテンツの復号化要求であり、
前記第１の部分プログラムは、前記暗号化コンテンツの復号に必要な暗号鍵を前記第１の演算結果として生成する処理を前記少なくとも１つのプロセッサに行わせるための記述を含み、
前記第２の部分プログラムは、前記暗号鍵を用いて前記暗号化コンテンツの復号化を行い、復号後のコンテンツを前記第２の演算結果として生成する処理を前記少なくとも１つのプロセッサに行わせるための記述を含む、
請求項４又は５に記載の情報処理装置。
【請求項７】
前記処理（ｅ）は、前記暗号鍵が配置されていた前記実行用メモリ内の領域を前記暗号鍵とは異なる他のデータで上書きすることをさらに含む、
請求項６に記載の情報処理装置。
【請求項８】
前記第１の演算結果が配置される前記実行用メモリ内の領域は、前記第１の演算結果が生成される都度変更される、請求項４〜７のいずれか１項に記載の情報処理装置。
【請求項９】
マルチプログラミング環境を提供可能な少なくとも１つのプロセッサ及び実行用メモリを含むコンピュータに実行されるアプリケーションプログラムであって、
前記アプリケーションプログラムは、前記マルチプログラミング環境上で並行して起動される第１及び第２のプログラムを含み、
前記第２のプログラムは、前記実行用メモリに暗号化されたまま配置される部分プログラムを含み、
前記第１のプログラムは、
（ｉ）プログラム間通信機能を利用して前記第２のプログラムに処理要求メッセージを送信する処理と、
（ｉｉ）前記処理要求メッセージに対応する演算結果を前記第２のプログラムから前記プログラム間通信機能を利用して受信する処理と、
を前記コンピュータに行わせ、
前記第２のプログラムは、
（ａ）前記処理要求メッセージの受信を契機として前記部分プログラムの復号化を行い、復号後の前記部分プログラムを前記実行用メモリに配置する処理と、
（ｂ）復号後の前記部分プログラムを呼び出して前記処理要求メッセージに対応した演算を行わせる処理と、
（ｃ）復号後の前記部分プログラムによる前記演算の完了後に、復号後の前記部分プログラムを前記実行用メモリから消去する処理と、
（ｄ）前記プログラム間通信機能を利用して、復号後の前記部分プログラムによって生成された前記演算結果を前記第１のプログラムに送信する処理と、
を前記コンピュータに行わせる、
アプリケーションプログラム。
【請求項１０】
前記処理（ｃ）における前記部分プログラムの消去は、復号後の前記部分プログラムが配置されていた前記実行用メモリ内の領域を前記部分プログラムとは異なる他のデータで上書きすることにより行われ、前記他のデータは、前記上書き処理が行われる都度変更される、請求項９に記載のアプリケーションプログラム。
【請求項１１】
前記処理（ａ）において復号後の前記部分プログラムが配置される前記実行用メモリ内の領域は、復号後の前記部分プログラムの配置が行われる都度変更される、請求項９又は１０に記載のアプリケーションプログラム。
【請求項１２】
前記部分プログラムは、第１及び第２の部分プログラムを含み、
前記処理（ｉ）では、前記第１及び第２の部分プログラムが暗号化されたまま前記実行用メモリに配置され、
前記処理（ａ）では、前記第１及び第２の部分プログラムが復号化され、
前記処理（ｂ）では、復号後の前記第１の部分プログラムに従った演算によって第１の演算結果が生成され、復号後の前記第２の部分プログラムに従った演算によって前記第１の演算結果に基づいて第２の演算結果が生成され、
前記処理（ｄ）では、前記第２の演算結果が前記プログラム間通信によって前記第１のプログラムに送信される、
請求項９〜１１のいずれか１項に記載のアプリケーションプログラム。
【請求項１３】
前記第２のプログラムは、前記処理（ａ）〜（ｃ）を前記コンピュータに繰り返し行わせるための記述を含み、
前記コンピュータは、
先の前記処理（ａ）〜（ｃ）において、前記第１の部分プログラムの復号化、復号された前記第１の部分プログラムに従った演算による前記第１の演算結果の生成、復号された前記第１の部分プログラムの前記実行用メモリからの消去を行った後に、
後の前記処理（ａ）〜（ｃ）において、前記第２の部分プログラムの復号化、復号された前記第２の部分プログラムに従った演算による前記第２の演算結果の生成、復号された前記第２の部分プログラムの前記実行用メモリからの消去を行う、
請求項１２に記載のアプリケーションプログラム。
【請求項１４】
前記処理要求は暗号化コンテンツの復号化要求であり、
前記第１の部分プログラムは、前記暗号化コンテンツの復号に必要な暗号鍵を前記第１の演算結果として生成する処理を前記コンピュータに行わせるための記述を含み、
前記第２の部分プログラムは、前記暗号鍵を用いて前記暗号化コンテンツの復号化を行い、復号後のコンテンツを前記第２の演算結果として生成する処理を前記コンピュータに行わせるための記述を含む、
請求項１２又は１３に記載のアプリケーションプログラム。
【請求項１５】
前記処理（ｃ）は、前記暗号鍵が配置されていた前記実行用メモリ内の領域を前記暗号鍵とは異なる他のデータで上書きすることをさらに含む、
請求項１４に記載のアプリケーションプログラム。
【請求項１６】
前記第１の演算結果が配置される前記実行用メモリ内の領域は、前記第１の演算結果が生成される都度変更される、請求項１２〜１５のいずれか１項に記載のアプリケーションプログラム。
【請求項１７】
マルチプログラミング環境を提供可能な少なくとも１つのプロセッサ及び実行用メモリを含むコンピュータにおけるアプリケーションプログラムの実行方法であって、
前記アプリケーションプログラムは、前記マルチプログラミング環境上で並行して起動される第１及び第２のプログラムを含み、
前記第２のプログラムは、前記実行用メモリに暗号化されたまま配置される部分プログラムを含み、
前記方法は、
（ａ）前記第１及び第２のプログラムを前記実行用メモリに配置すること、
（ｂ）前記第１のプログラムから前記第２のプログラムに前記プログラム間通信によって処理要求メッセージを送信すること、
（ｃ）前記第２のプログラムを実行することにより、前記処理要求メッセージの受信を契機として前記部分プログラムの復号化を行い、復号後の前記部分プログラムを前記実行用メモリに配置すること、
（ｄ）復号後の前記部分プログラムを実行することにより、前記処理要求メッセージに対応した演算を行うこと、
（ｅ）復号後の前記部分プログラムによる前記演算の完了後に、復号後の前記部分プログラムを前記実行用メモリから消去すること、及び
（ｆ）前記プログラム間通信を利用して、前記部分プログラムによる演算結果を前記第２のプログラムから前記第１のプログラムに送信すること、
を備える、アプリケーションプログラムの実行方法。
【請求項１８】
前記部分プログラムは、第１及び第２の部分プログラムを含み、
前記ステップ（ｃ）では、前記第１及び第２の部分プログラムが復号化され、
前記ステップ（ｄ）では、復号後の前記第１の部分プログラムの実行によって第１の演算結果を得るとともに、復号後の前記第２の部分プログラムの実行によって前記第１の演算結果を利用した演算を行って第２の演算結果を得て、
前記ステップ（ｆ）では、前記第２の演算結果が前記プログラム間通信によって前記第１のプログラムに送信される、
請求項１に記載の方法。
【請求項１９】
前記少なくとも１つのプロセッサは、前記ステップ（ｃ）〜（ｅ）を繰り返し行い、
先の前記ステップ（ｃ）〜（ｅ）において前記第１の部分プログラムの復号化、復号された前記第１の部分プログラムによる前記第１の演算結果の生成、復号された前記第１の部分プログラムの前記実行用メモリからの消去を行った後に、
後の前記処理（ｃ）〜（ｅ）において前記第２の部分プログラムの復号化、復号された前記第２の部分プログラムによる前記第２の演算結果の生成、復号された前記第２の部分プログラムの前記実行用メモリからの消去を行う、
請求項１８に記載の方法。
【請求項２０】
前記処理要求は暗号化コンテンツの復号化要求であり、
前記第１の部分プログラムは、前記暗号化コンテンツの復号に必要な暗号鍵を前記第１の演算結果として生成する処理を前記少なくとも１つのプロセッサに行わせるための記述を含み、
前記第２の部分プログラムは、前記暗号鍵を用いて前記暗号化コンテンツの復号化を行い、復号後のコンテンツを前記第２の演算結果として生成する処理を前記少なくとも１つのプロセッサに行わせるための記述を含む、
請求項１８又は１９に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化されたデジタルコンテンツを取り扱うアプリケーションプログラムを情報処理装置で実行する場合に秘密情報の漏洩を抑止する技術に関する。
【背景技術】
【０００２】
音声、映像、プログラム等のデジタルコンテンツに関するＤＲＭ（Digital Rights Management）の重要性が増している。デジタルコンテンツの不正利用、不正な複製、改竄などを防止するために、暗号化技術が用いられている。具体的には、デジタルコンテンツを暗号化しておき、権限のある利用が行われる場合に限り、暗号化されたコンテンツを復号化プログラムによって復号することが行われている。しかし、逆アセンブラ等の解析ツール、オペレーティングシステム（ＯＳ）が有するメモリダンプ機能、デバッガプログラム等を用いたプログラム解析によって、復号化プログラムの復号処理手順や復号処理に使用される復号鍵等の秘密情報が不正取得されるおそれがある。これらのプログラム解析に対処する技術として特許文献１〜４がある。
【０００３】
特許文献１は、暗号化したプログラムをファイル装置に格納しておき、当該プログラムを使用する際に復号化することを開示している。しかしながら、この方法では、復号されたプログラムが情報処理装置内の実行用メモリ（つまりＲＡＭ：Random Access Memory）に配置されたままの状態となる。この状態では、メモリダンプ機能を用いて実行用メモリに配置されたプログラムが容易に取得されるおそれがある。また、デバッガプログラムによっても復号化されたプログラムが解析されてしまうおそれがある。
【０００４】
特許文献２は、デバッガ等による割り込みの発生を検出した場合に、以降の実行プログラムをダミープログラムに置き換えるかプログラム実行を停止することによって、プログラムコード解析を防止する技術を開示している。しかしながら、特許文献２の方法では、実行用メモリには復号済みのプログラムが配置された状態であるため、メモリダンプ機能を使用したプログラム解析には十分に対処することができないおそれがある。
【０００５】
特許文献３は、暗号化されたデータの復号にハッシュ値を用い、デバッガ等の不正アクセスを検出した場合にハッシュ演算手順を変更して異なるハッシュ値を生成することにより、暗号化されたデータの復号を停止する技術を開示している。この手法は、復号鍵に相当するハッシュ値を生成するハッシュ演算システムがハードウェア化されデバッガやメモリダンプ等によるプログラム解析から保護されている場合には有効である。しかしながら、ハッシュ値生成が復号処理プログラムによって行われる場合には、実行用メモリには復号済みのプログラムが配置されている状態となる。このため、メモリダンプ機能を使用したプログラム解析に十分に対処することができないおそれがある。
【０００６】
特許文献４は、(i) プログラムを複数のブロック（部分プログラム）に分割して個別に暗号化した状態で記憶装置に保持しておくこと、(ii) 部分プログラムを順次読み出して復号して実行用メモリに配置すること、(iii) 実行の終了した部分プログラムが配置されている実行メモリ内の領域を他のデータ（新たな部分プログラム又はダミーデータ）によって上書きすること、を開示している。これにより、特定の部分プログラムが復号された状態で実行用メモリに存在する時間を短くし、実行用メモリにロードされた部分プログラムが不正に参照されることを抑制できる。また、特許文献４は、最初の部分プログラムがロードされる実行用メモリ上の位置を動的に決定することを開示している。これにより、実行用メモリ上のロード位置がプログラム実行の度に変化するため、ロード位置を予測したメモリ観察によるプログラム内容の不正取得が防止される。
【０００７】
なお、特許文献５及び６は、コンテンツデータを複数のブロックに分割し、ブロック毎に異なる暗号鍵を用いて暗号化を行う技術を開示している。しかしながら、これらの文献は、実行用メモリに展開された状態の復号化プログラムに対するメモリダンプやデバッガを用いた解析に対処する技術を開示するものではない。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０００−１２２８６１号公報
【特許文献２】特開２００２−０８２７３２号公報
【特許文献３】特開２００６−１０７２７４号公報
【特許文献４】特開２００５−０１８７２５号公報
【特許文献５】特開２００４−２８７５６６号公報
【特許文献６】特開平０７−１４０８９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上述したように、特許文献４に開示された技術は、復号された状態の部分プログラムが実行用メモリに存在する時間を短くし、部分プログラムがロードされる実行用メモリ内の位置を変化させることで、メモリダンプを利用したプログラム解析を困難にすることができる。しかしながら、特許文献４に開示された技術は、デバッガ等を用いたプログラム動作の解析に対する耐性が十分でないという問題を有する。具体的には、部分プログラムがアプリケーションプログラムから関数呼び出しによって直接的に呼び出されているような場合、デバッガによって部分プログラムの呼び出しが特定されてしまうと、そのときのメモリダンプを行うことで復号化された部分プログラムが解析されてしまうおそれがある。
【００１０】
本発明は、上述した問題点を考慮してなされたものであり、暗号化によって保護されているプログラムが復号された状態で実行用メモリに配置されるタイミングの特定を困難にすることで、メモリダンプやデバッガによるプログラム解析を困難にし、耐タンパ性を向上させることを目的とする。
【課題を解決するための手段】
【００１１】
本発明の第１の態様にかかる情報処理装置は、マルチプログラミング環境を提供可能な少なくとも１つのプロセッサと、実行用メモリとを有する。前記少なくとも１つのプロセッサは、以下に示す処理（ａ）〜（ｆ）を行うよう構成されている。
（ａ）前記マルチプログラミング環境上で並行して起動される第１及び第２のプログラムを前記実行用メモリに配置する処理と、
ここで前記第２のプログラムは、前記実行用メモリに暗号化されたまま配置される部分プログラムを含み、前記第１及び第２のプログラムは、プログラム間通信機能を利用して互いにメッセージを送受信可能である、
（ｂ）前記第１のプログラムから前記第２のプログラムに前記プログラム間通信によって処理要求メッセージを送信する処理と、
（ｃ）前記第２のプログラムを実行することにより、前記処理要求メッセージの受信を契機として前記部分プログラムの復号化を行い、復号後の前記部分プログラムを前記実行用メモリに配置する処理と、
（ｄ）復号後の前記部分プログラムを実行することにより、前記処理要求メッセージに対応した演算を行う処理と、
（ｅ）復号後の前記部分プログラムによる前記演算の完了後に、復号後の前記部分プログラムを前記実行用メモリから消去する処理と、
（ｆ）前記プログラム間通信によって、前記部分プログラムによる演算結果を前記第２のプログラムから前記第１のプログラムに送信する処理。
【００１２】
本発明の第２の態様にかかるアプリケーションプログラムは、マルチプログラミング環境を提供可能な少なくとも１つのプロセッサ及び実行用メモリを含むコンピュータに実行される。当該アプリケーションプログラムは、前記マルチプログラミング環境上で並行して起動される第１及び第２のプログラムを含む。また、前記第２のプログラムは、前記実行用メモリに暗号化されたまま配置される部分プログラムを含む。
前記第１のプログラムは、以下の処理（ｉ）及び（ｉｉ）を前記コンピュータに行わせる。
（ｉ）プログラム間通信機能を利用して前記第１のプログラムから前記第２のプログラムに処理要求メッセージを送信する処理と、
（ｉｉ）前記処理要求メッセージに対応する演算結果を前記第２のプログラムから前記プログラム間通信機能を利用して受信する処理。
また、前記第２のプログラムは、以下の処理（ａ）〜（ｄ）を前記コンピュータに行わせる。
（ａ）前記処理要求メッセージの受信を契機として前記部分プログラムの復号化を行い、復号後の前記部分プログラムを前記実行用メモリに配置する処理と、
（ｂ）復号後の前記部分プログラムを呼び出して前記処理要求メッセージに対応した演算を行わせる処理と、
（ｃ）復号後の前記部分プログラムによる前記演算の完了後に、復号後の前記部分プログラムを前記実行用メモリから消去する処理と、
（ｄ）前記プログラム間通信機能を利用して、復号後の前記部分プログラムによって生成された前記演算結果を前記第１のプログラムに送信する処理。
【００１３】
本発明の第３の態様にかかる方法は、マルチプログラミング環境を提供可能な少なくとも１つのプロセッサ及び実行用メモリを含むコンピュータにおけるアプリケーションプログラムの実行方法である。ここで、前記アプリケーションプログラムは、前記マルチプログラミング環境上で並行して起動される第１及び第２のプログラムを含む。また、前記第２のプログラムは、前記実行用メモリに暗号化されたまま配置される部分プログラムを含む。前記方法は、以下のステップ（ａ）〜（ｆ）を含む。
（ａ）前記第１及び第２のプログラムを前記実行用メモリに配置すること、
（ｂ）前記第１のプログラムから前記第２のプログラムに前記プログラム間通信によって処理要求メッセージを送信すること、
（ｃ）前記第２のプログラムを実行することにより、前記処理要求メッセージの受信を契機として前記部分プログラムの復号化を行い、復号後の前記部分プログラムを前記実行用メモリに配置すること、
（ｄ）復号後の前記部分プログラムを実行することにより、前記処理要求メッセージに対応した演算を行うこと、
（ｅ）復号後の前記部分プログラムによる前記演算の完了後に、復号後の前記部分プログラムを前記実行用メモリから消去すること、及び
（ｆ）前記プログラム間通信を利用して、前記部分プログラムによる演算結果を前記第２のプログラムから前記第１のプログラムに送信すること。
【発明の効果】
【００１４】
上述した本発明の第１〜第３の態様によれば、暗号化によって保護されているプログラムが復号された状態で実行用メモリに配置されるタイミングの特定を困難にすることできる。よって、メモリダンプやデバッガによるプログラム解析を困難にし、耐タンパ性を向上させることが可能な情報処理装置、アプリケーションプログラム、及びアプリケーションプログラムの実行方法を提供できる。
【図面の簡単な説明】
【００１５】
【図１】発明の実施の形態１にかかる情報処理装置の構成を示すブロック図である。
【図２】図１の不揮発性メモリ１２に格納されたアプリケーションプログラム１１０を示す図である。
【図３】図１の実行用メモリ１１にロードされたアプリケーションプログラム１１０を示す図である。
【図４】復号された部分プログラム１４３が実行用メモリ１１にロードにロードされる様子を示す図である。
【図５】復号された部分プログラム１４３が配置されていた領域が上書きされる様子を示す図である。
【図６】発明の実施の形態１におけるアプリケーションプログラムの実行手順を示すフローチャートである。
【図７】発明の実施の形態１におけるアプリケーションプログラムの実行手順を示すフローチャートである。
【図８】図１の不揮発性メモリ１２に格納されたアプリケーションプログラム１１０を示す図である。
【図９】復号されたコンテンツ暗号鍵生成プログラム１４３Ａが実行用メモリ１１にロードにロードされる様子を示す図である。
【図１０】復号されたコンテンツ復号プログラム１４３Ｂが実行用メモリ１１にロードにロードされる様子を示す図である。
【図１１】コンテンツ復号後に、実行用メモリ１１からプログラム削除が行われる様子を示す図である。
【図１２】発明の実施の形態２にかかる情報処理装置の構成を示すブロック図である。
【図１３】図１１に示した情報処理装置の動作を説明するための概念図である。
【図１４】図１１に示した情報処理装置の動作を説明するための概念図である。
【図１５】図１１に示した情報処理装置の動作を説明するための概念図である。
【図１６】図１１に示した情報処理装置の動作を説明するための概念図である。
【図１７】図１１に示した情報処理装置の動作を説明するための概念図である。
【図１８】図１１に示した情報処理装置の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略される。
【００１７】
＜発明の実施の形態１＞
図１は、本実施の形態にかかる情報処理装置１の構成例を示すブロック図である。プロセッサ１０は、プログラムの取得、プログラムの解析、プログラムの解析結果に応じた演算処理を行う。なお、図１では、１つのプロセッサ１０のみを示しているが、情報処理装置１は、複数のプロセッサ１０を有するマルチプロセッサ構成であってもよい。プロセッサ１０は、オペレーティングシステム（ＯＳ）１００を実行することによりマルチプログラミング環境を提供する。マルチプログラミング環境とは、複数のプログラムを定期的に切り替えて実行したり、あるイベントの発生に応じて実行するプログラムを切り替えたりすることによって、複数のプログラムがあたかも並列実行されているような環境を意味する。
【００１８】
マルチプログラミングは、マルチプロセス、マルチスレッド、マルチタスク等と呼ばれる場合もある。プロセス、スレッド及びタスクは、マルチプログラミング環境で並列実行されるプログラム単位を意味する。これらの用語はしばしば混同して用いられるが、一般的には、プロセスは、メモリ空間などのプログラム実行環境が独立に割り当てられ、他のプロセスとの独立性の高いプログラムモジュールである。一方、スレッドは、並列処理されるプロセスに含まれるさらに細かな並列処理単位である。マルチスレッド環境では、プロセスは複数のスレッドを含む。各スレッドはプロセスに割り当てられた資源にアクセス可能であり、スレッド間はメモリ空間を共有する。本実施の形態のプロセッサ１０が具備するマルチプログラミング環境は、マルチプロセス環境でもよいし、マルチスレッド環境でもよい。
【００１９】
実行用メモリ１１は、プロセッサ１０によるプログラム実行のために使用されるメモリである。実行用メモリ１１には、不揮発性メモリ１２からロードされたプログラム（ＯＳ１００及びアプリケーションプログラム１１０）、プロセッサ１０の入出力データ等が記憶される。具体的には、実行用メモリ１１は、ＳＲＡＭ（Static Random Access Memory）、ＤＲＡＭ（Dynamic Random Access Memory）等のランダムアクセス可能な揮発性メモリとすればよい。なお、図１の実行用メモリ１１は、論理的な構成単位を示している。すなわち、実行用メモリ１１は、例えば、複数のＳＲＡＭデバイスの組み合わせ、複数のＤＲＡＭデバイスの組み合わせ、又はＳＲＡＭデバイスとＤＲＡＭデバイスの組み合わせでもよい。
【００２０】
不揮発性メモリ１２は、電力の供給を受けることなく、実行用メモリ１１に比べて安定的に記憶内容を維持することが可能なメモリデバイスである。例えば、不揮発性メモリ１２は、ＲＯＭ（Read Only Memory）、フラッシュメモリ、ハードディスクドライブ若しくは光ディスクドライブ、又はこれらの組み合わせである。不揮発性メモリ１２は、ＯＳ１００及びアプリケーションプログラム１１０を格納する。また、不揮発性メモリ１２の少なくとも一部は情報処理装置１から取り外し可能に構成されてもよい。例えば、アプリケーションプログラム１１０を格納したメモリを取り外し可能としてもよい。また、不揮発性メモリ１２の少なくとも一部は、情報処理装置１の外部に配置されてもよい。
【００２１】
ＯＳ１００は、プロセッサ１０によって実行されることにより、プロセッサ１０及びメモリ１１及び１２等のハードウェア資源を利用して、タスク管理、メモリ管理、時間管理、デバイス管理等を実行する。
【００２２】
アプリケーションプログラム１１０は、ＯＳ１００を実行するプロセッサ１０によって提供されるマルチプログラミング環境で実行される。なお以下では、アプリケーションプログラム１１０を単にアプリケーション１１０と呼ぶ。図２は、不揮発性メモリ１２に配置された状態のアプリケーション１１０を示す図である。アプリケーション１１０は、プログラムＡ１２０及びＢ１４０を含む。プログラムＡ及びプログラムＢは、プロセッサ１０において並列処理される。プログラムＡ及びプログラムＢは、プロセスであってもよし、スレッドであってもよい。図２の例では、プログラムＢは、暗号化された状態で暗号部１３０としてメモリ１２に格納されている。このようにプログラムＢ１４０を暗号化しておけば、逆アセンブラツールを使用してプログラムＢ１４０の静的な解析を行うことが困難となる。
【００２３】
さらに、プログラムＢ１４０は、部分暗号部１４２として暗号化された部分プログラム１４３を含んでいる。部分プログラム１４３は、外部に対して秘匿されるプログラムである。例えば、部分プログラム１４３は、ＤＲＭ実現に必要な、暗号鍵等の秘密情報を扱うプログラムモジュール（暗号鍵生成プログラム、コンテンツ復号プログラム等）である。アプリケーション１１０が起動される場合、プログラムＢ１４０は、プログラムＡ１２０によってデコードされた後に実行用メモリ１１にロードされる。しかしながら、プログラムＢ１４０内の部分プログラム１４３は、暗号化されたまま実行用メモリ１１に配置される。部分プログラム１４３が暗号化されているため、この状態の実行用メモリ１１のメモリダンプを取得された場合であっても部分プログラム１４３の漏洩を防止できる。
【００２４】
以下では、図２に示したアプリケーション１１０に含まれる各プログラム要素について説明する。プログラムＡ１２０に含まれるプログラム間通信部１２１は、プロセッサ１０によって提供されるプログラム間通信（プロセス間通信又はスレッド間通信）機能を利用して、少なくともプログラムＢ１４０を含む他の並列処理単位（プロセス又はスレッド）との間で通信を行うプログラムモジュールである。プログラム間通信機能を実現する具体的なメカニズムには、パイプ、ネームドパイプ、ソケット、メッセージキュー等が知られている。本実施の形態におけるプログラムＡ１２０とＢ１４０の間のプログラム間通信には、これらの公知の具体的メカニズムを利用すればよい。
【００２５】
暗号部・復号プログラム１２２は、暗号化されたプログラムＢ１４０を含む暗号部１３０を復号化するプログラムモジュールである。プログラム配置部１２３は、復号されたプログラムＢ１４０を実行用メモリ１１に配置するプログラムモジュールである。
【００２６】
プログラムＢが有するプログラム間通信部１４１は、少なくともプログラムＢ１４０を含む他の並列処理単位（プロセス又はスレッド）との間で通信を行うプログラムモジュールである。部分暗号部・復号プログラム１４４は、暗号化された部分プログラム１４３を含む部分暗号部１４２を復号化するプログラムモジュールである。
【００２７】
プログラム配置部１４５は、復号された部分プログラム１４３を実行用メモリ１１に配置するプログラムモジュールである。なお、プログラム配置部１４５は、部分プログラム１４３のロードを行う度にロード先領域を変更するとよい。ロード先を変更することによって、部分プログラム１４３の解析を困難にすることができる。
【００２８】
部分プログラム１４３の復号処理は、以下のようにして行われる。実行用メモリ１１にロードされ起動されたプログラムＡ１２０は、プログラムＢ１４０に対する処理要求メッセージをプログラム間通信によって送信する。実行用メモリ１１にロードされ起動されたプログラムＢ１４０は、プログラムＡ１２０からの処理要求メッセージの受信に応じて復号プログラム１４４を呼び出し、部分プログラム１４３の復号を行う。つまり、プログラムＡ１２０からプログラムＢ１４０を関数呼び出しによって直接呼び出していない。このため、仮にデバッガ等によってプログラムＡ１２０が解析されたとしてもプログラムＢ１４０の解析は容易にできない。よって、暗号化によって保護されている部分プログラム１４３が復号された状態で実行用メモリ１１に配置されるタイミングの特定を困難にすることができる。
【００２９】
メモリスクランブル部１５０は、秘匿すべきデータおよびプログラムをメモリ１１上から消去する役割を果たす。メモリスクランブル部１５０は、実行用メモリ１１内の記憶領域を乱数データ（厳密には疑似乱数データ）によって上書きするプログラムモジュールである。メモリスクランブル部１５０は、プログラムＡ１２０又はＢ１４０から呼び出され、プログラムＡ１２０又はＢ１４０によって指定された領域に乱数データを書き込む。メモリスクランブル部１５０は、書き込みの都度例えば時刻情報を用いて乱数を発生させればよい。これにより、書き込みを行う度に書き込みデータ内容を変更することができる。これにより、同じデータで繰り返し上書きされる実行用メモリ１１内の領域を特定する手法を用いたプログラム解析を困難にすることができる。
【００３０】
後述するように、本実施の形態では、復号された部分プログラム１４３が配置されている記憶領域をメモリスクランブル部１５０が生成する乱数データによって上書きする。これにより、復号された部分プログラム１４３が実行用メモリ１１に配置されたままとなることを防止し、秘匿すべき部分プログラム１４３が解析されてしまうことを効果的に防止できる。なお、メモリスクランブル部１５０が書き込むデータは、乱数データでなくてもよい。ただし、メモリスクランブル部１５０は、実行用メモリ１１に書き込みを行う度に書き込みデータを変更するとよい。書き込みデータの変更はランダムに行ってもよいし、周期的に行ってもよい。ただし、周期的に変更する場合の繰り返し周期はできるだけ長くするとよい。
【００３１】
なお、図２には、プログラムＢ１４０が１つの部分暗号部１４２を含む例を示した。しかしながら、プログラムＢ１４０は、それぞれが暗号化された別個の部分プログラム１４３を含む複数の部分暗号部１４２を含んでもよい。この場合、処理要求メッセージに応じた処理を実行する過程で、(i) 部分暗号部１４２の復号、(ii) 部分プログラム１４３の実行、および (iii) 復号された部分プログラム１４３の実行用メモリ１１からの消去、を部分プログラム１４３ごとに順に繰り返すとよい。つまり、一連の処理を行うための複数の部分プログラム１４３が同時に復号されて実行用メモリ１１に配置されている状態を回避するとよい。これにより、仮に、１つの復号された部分プログラム１４３が実行用メモリ１１に配置されているときのメモリダンプを取得された場合でも、他の部分プログラム１４３は暗号化されているため、メモリダンプを用いてプログラム解析を行うことは困難となる。
【００３２】
続いて以下では、プログラムＡ１２０及びＢ１４０を実行する際の実行用メモリ１１の記憶状態の遷移について図３〜５を用いて説明する。始めに図３は、復号されたプログラムＢ１４０がロードされる様子を示す図である。アプリケーション１１０が起動する際に、暗号部・復号プログラム１２２が暗号部１３０に対する復号処理を行う。プログラム配置部１２３は、暗号部・復号プログラム１２２によって復号されたプログラムＢ１４０を実行用メモリ１１に配置する。このとき、プログラムＢ１４０内の部分プログラム１４３は、暗号化されたまま実行用メモリ１１に配置されているため、この状態の実行用メモリ１１のメモリダンプを取得された場合であっても部分プログラム１４３の漏洩を防止できる。
【００３３】
図４は、プログラムＡ１２０からプログラムＢ１４０への処理要求メッセージの送信を契機として、プログラムＢ１４０が部分プログラム１４３をロードし、処理要求に応じた処理を行う様子を示す図である。プログラムＡ１２０は、アプリケーション１１０から処理要求があると、プログラム間通信部１２１からプログラムＢ１４０のプログラム間通信部１４１に対して処理要求メッセージを送信する。プログラムＢ１４０は、プログラム間通信部１４１で受信されたメッセージの内容に従って処理を行う。具体的には、プログラムＢ１４０が処理要求メッセージを受信した場合、部分暗号部・復号プログラム１４４が部分暗号部１４２に対する復号処理を行う。プログラム配置部１４５は、部分暗号部・復号プログラム１４４によって復号された部分プログラム１４３を実行用メモリ１１に配置する。この後、プログラムＢ１４０は、実行用メモリ１１に配置された部分プログラム１４３を呼び出し、プログラムＡからの処理要求に対応した処理を行う。
【００３４】
図５は、部分プログラム１４３による処理が完了した後に、部分プログラム１４３が配置されている実行用メモリ１１内の記憶領域を解放する様子を示す図である。プログラムＢ１４０は、部分プログラム１４３による処理が完了したことに応じて、復号された部分プログラム１４３が展開されている記憶領域を乱数データで上書きするようメモリスクランブル部１５０に要求する。これに応じて、メモリスクランブル部１５０は、部分プログラム１４３が展開されている記憶領域に乱数データを書き込んだ後に当該領域を解放する。プログラムＢ１４０のプログラム間通信部１４１は、プログラムＡ１２０のプログラム間通信部１２１に対して処理要求に応じた処理結果を含むメッセージを送信する。
【００３５】
続いて以下では、アプリケーション１１０の起動から終了までの処理手順の具体例について図６及び７のフローチャートを用いて説明する。ステップＳ１０１では、アプリケーション１１０が起動する。既に述べたように、アプリケーション１１０の起動時には、暗号部１３０に対する復号処理が行われ、デコードされたプログラムＢ１４０が実行用メモリ１１にロードされる（ステップＳ１０２及びＳ１０３）。ステップＳ１０４では、プログラムＡ１２０は、暗号部１２０の復号に使用される暗号部・復号プログラム１２２を実行用メモリ１１から消去する。具体的には、プログラムＡ１２０は、暗号部・復号プログラム１２２が配置されている記憶領域を乱数データで上書きするようメモリスクランブル部１５０に要求すればよい。
【００３６】
アプリケーション１１０からプログラムＡ１２０に処理要求が発生すると（Ｓ１０５）、プログラムＡ１２０は、プログラム間通信によって処理要求メッセージをプログラムＢ１４０に送信する（Ｓ１０６）。プログラムＢ１４０は、受信した処理要求メッセージを解析し、メッセージに応じた処理を開始する（Ｓ１０７）。
【００３７】
ステップＳ１０８では、プログラムＢ１４０は、部分プログラム１４３を使用する必要があるか否かを判定する。部分プログラム１４３を使用する場合（Ｓ１０８でＹＥＳ）、部分暗号部・復号プログラム１４４を実行することにより、部分暗号部１４２を復号する（Ｓ１０９）。ステップＳ１１０では、プログラム配置部１４５は、復号された部分プログラム１４３を実行用メモリ１１にロードする。
【００３８】
ステップＳ１１１では、実行用メモリ１１にロードされた部分プログラム１４３を呼び出して処理を実行する。ステップＳ１１２では、処理の完了した部分プログラム１４３を実行用メモリ１１から消去する。具体的には、上述したように、復号された部分プログラム１４３が配置されている記憶領域を乱数データによって上書きすればよい。
【００３９】
ステップＳ１１３では、更に部分プログラム１４３の実行が必要か否かを判定する。部分プログラム１４３の更なる実行が必要であれば、ステップＳ１０９に戻る。一方、部分プログラム１４３の更なる実行が必要なければステップＳ１１４に進む。
【００４０】
ステップＳ１１４では、プログラムＢ１４０は、部分プログラム１４３を実行することで得た処理結果を、プログラム間通信を利用してプログラムＡ１２０に送信する。ステップＳ１１５では、プログラムＡ１２０は、プログラム間通信によって受信した処理結果を解析し、アプリケーション１１０に処理結果を返す。ステップＳ１１６では、アプリケーション１１０は、プログラムＡ１２０から受信した処理結果に基づく処理を行う。
【００４１】
ステップＳ１１７では、アプリケーション１１０の終了判定を行う。アプリケーション１１０が終了しない場合、ステップＳ１０５〜Ｓ１１６が繰り返し行われる。一方、アプリケーション１１０が終了する場合（Ｓ１１７でＹＥＳ）、復号後のプログラムＢ１４０を実行用メモリ１１から消去する。具体的には、メモリスクランブル部１５０を起動し、復号後のプログラムＢ１４０が配置されている実行用メモリ１１内の記憶領域を乱数データによって上書きすればよい。最後に、ステップＳ１１９では、アプリケーション１１０が終了する。
【００４２】
上述したように、本実施の形態にかかる情報処理装置１は、秘匿すべき部分プログラム１４３を必要なときにのみ復号化して実行用メモリ１１にロードする。このため、復号化された部分プログラム１４３が実行用メモリ１１に存在する時間を短くし、メモリダンプによるプログラム解析に対する耐性を向上させる。
【００４３】
また、情報処理装置１は、部分プログラム１４３の実行用メモリ１１からの消去を行う都度、異なるデータ（疑似乱数データ等）によって部分プログラム１４３が配置されていた記憶領域を上書きする。これにより、同じデータで繰り返し上書きされる実行用メモリ１１内の領域を特定する手法を用いたプログラム解析を困難にすることができる。
【００４４】
また、情報処理装置１では、プログラムＡ１２０がプログラムＢ１４０に処理要求メッセージを送信し、処理要求メッセージの受信に応じてプログラムＢ１４０が部分プログラム１４３の復号化とロードを行う。つまり、プログラムＡからプログラムＢを関数呼び出しによって明示的に呼び出していないため、仮にデバッガ等によってプログラムＡ１２０が解析されたとしてもプログラムＢ１４０の解析は容易にできない。
【００４５】
以下では、情報処理装置１の具体的な適用先の一例について説明する。ここでは、プログラムＢ１４０が２つの部分プログラム１４３Ａ及びＢを含み、これらの部分プログラム１４３Ａ及びＢを用いてデジタルコンテンツの復号処理が行われる場合について説明する。
【００４６】
図８は、ロード前のアプリケーション１１０を示す図であり、図２に対応する。図８の例では、プログラムＢ１４０は、２つの部分暗号部１４２Ａ及び１４２Ｂを含む。部分暗号部１４２Ａは、暗号化されたコンテンツ暗号鍵生成プログラム１４３Ａを含む。また、部分暗号部１４２Ｂは、暗号化されたコンテンツ復号プログラム１４３Ｂを含む。暗号鍵生成プログラム１４３Ａは、デジタルコンテンツの復号化に使用される暗号化鍵を生成する。コンテンツ復号プログラム１４３Ｂは、暗号鍵生成プログラム１４３Ａによって生成された暗号鍵を用いてデジタルコンテンツの復号化処理を行う。
【００４７】
図９は、アプリケーション１１が起動された状態の実行用メモリ１１の状態を示している。より具体的に述べると、図９は、プログラムＡ１２０からプログラムＢ１４０への "コンテンツ復号要求メッセージ"の送信を契機として、プログラムＢ１４０が暗号鍵生成プログラム１４３Ａをロードし、暗号鍵データ１４６を生成する様子を示している。プログラムＡ１２０は、アプリケーション１１０からコンテンツ復号要求があると、プログラム間通信部１２１からプログラムＢ１４０のプログラム間通信部１４１に対して復号要求メッセージを送信する。
【００４８】
プログラムＢ１４０は、プログラム間通信部１４１で受信されたメッセージの内容に従って処理を行う。具体的には、プログラムＢ１４０が復号要求メッセージを受信した場合、部分暗号部・復号プログラム１４４が部分暗号部１４２Ａに対する復号処理を行う。プログラム配置部１４５は、部分暗号部・復号プログラム１４４によって復号された暗号鍵生成プログラム１４３Ａを実行用メモリ１１に配置する。この後、プログラムＢ１４０は、実行用メモリ１１に配置された暗号鍵生成プログラム１４３Ａを呼び出し、暗号鍵データ１４６の生成処理を行う。図９に示す状態のメモリダンプを取得されても、暗号化されているコンテンツ復号プログラム１４３Ｂまで解析することは困難である。
【００４９】
図１０は、暗号鍵データ１４６の生成が完了した後に、暗号鍵生成プログラム１４３Ａが配置されている実行用メモリ１１内の記憶領域を解放する様子を示している。また、図１０は、暗号鍵生成プログラム１４３Ａの消去後に、コンテンツ復号プログラム１４３Ｂがロードされる様子を示している。プログラムＢ１４０は、暗号鍵データ１４６の生成が完了したことに応じて、暗号鍵生成プログラム１４３Ａが展開されている記憶領域を乱数データで上書きするようメモリスクランブル部１５０に要求する。これに応じて、メモリスクランブル部１５０は、暗号鍵生成プログラム１４３Ａが展開されている記憶領域に乱数データを書き込んだ後に当該領域を解放する。次に、部分暗号部・復号プログラム１４４が部分暗号部１４２Ｂに対する復号処理を行う。プログラム配置部１４５は、部分暗号部・復号プログラム１４４によって復号されたコンテンツ復号プログラム１４３Ｂを実行用メモリ１１に配置する。この後、プログラムＢ１４０は、実行用メモリ１１に配置されたコンテンツ復号プログラム１４３Ｂを呼び出し、暗号鍵データ１４６を用いてデジタルコンテンツの復号化を行う。
【００５０】
図１１は、デジタルコンテンツの復号が完了した後に、コンテンツ復号プログラム１４３Ｂが配置されている実行用メモリ１１内の記憶領域を解放する様子を示している。プログラムＢ１４０は、デジタルコンテンツの復号が完了したことに応じて、コンテンツ復号プログラム１４３Ｂが展開されている記憶領域を乱数データで上書きするようメモリスクランブル部１５０に要求する。これに応じて、メモリスクランブル部１５０は、コンテンツ復号プログラム１４３Ｂが展開されている記憶領域に乱数データを書き込んだ後に当該領域を解放する。なお、このとき、暗号鍵データ１４６が保持されている記憶領域も乱数データで上書きした後に解放するとよい。これにより、部分プログラム１４３だけでなく、部分プログラム１４３によって生成される一時的なデータも消去でき、漏洩を防止できる。
【００５１】
＜発明の実施の形態２＞
本実施の形態では、(i) プログラム生成する秘密情報を暗号化したうえでメモリに格納すること、(ii) 暗号化後の秘密情報を格納する領域を毎回変化させること、(iii)メモリ上に展開されている平文の（暗号化されていない）秘密情報が不要になった場合には、平文の秘密情報が格納されていた領域を疑似乱数などの規則性のないデータによって上書きした後に記憶領域を解放すること、について述べる。本実施の形態は、例えば図９に示した暗号鍵データ１４６をメモリ１１に配置する際に適用可能である。
【００５２】
図１２は、本実施の形態にかかる情報処理装置２の構成を示すブロック図である。秘密情報生成プログラム２４は、秘密情報を生成するプログラムである。秘密情報使用プログラム２５は、プログラム２４によって生成された秘密情報を使用するプログラムである。例えば、秘密情報生成プログラム２４は暗号鍵を生成するプログラムであり、秘密情報使用プログラム２５は暗号鍵を使用して復号処理を行うプログラムである。
【００５３】
秘密情報管理部２３は、メモリ２１に配置される秘密情報の管理を行う。具体的に述べると、秘密情報管理部２３は、秘密情報の暗号化と、メモリ２１に配置された平文の秘密情報の消去を制御する。秘密情報保護装置２２は、秘密情報管理部２３の制御に基づいてメモリ２１にアクセスし、秘密情報の暗号化、平文の秘密情報の消去を行う。
【００５４】
次に、図１３〜１８を参照して、情報処理装置２の動作について説明する。図１３は、秘密情報生成プログラム２４が秘密情報を生成する様子を示す図である。秘密情報生成プログラム２４は、生成した平文の秘密情報２１１をメモリ２１に格納する（図１８のＳ２０１）。
【００５５】
図１４は、平文の秘密情報２１１を暗号化する様子を示す図である。平文の秘密情報２１１を生成した秘密情報生成プログラム２４は、秘密情報管理部２３に秘密情報２１１の暗号化を要求する（図１８のＳ２０２）。プログラム２４から暗号化要求を受信した暗号処理部２３１は、秘密情報保護装置２２内の変数暗号鍵生成部２２２に対して、変数暗号鍵の生成を要求する。ここで、変数暗号鍵とは、秘密情報を暗号化するために暗号鍵である。変数暗号鍵生成部２２２は、変数暗号鍵２１２を生成してメモリ２１に格納する（図１８のＳ２０３）。なお、変数暗号鍵生成部２２２は、変数暗号鍵の漏洩に対処するため、変数暗号鍵を生成する度に異なる暗号鍵を生成するとよい。
【００５６】
また、暗号処理部２３１は、変数暗号部２２１に対して秘密情報２１１の暗号化を要求する。変数暗号部２２１は、変数暗号鍵２１２を用いて秘密情報２１１を暗号化し、暗号化された秘密情報（暗号化秘密情報）２１３をメモリ２１に格納する（図１８のＳ２０４）。なお、暗号化秘密情報２１３のメモリ２１における格納位置の特定を困難にするため、変数暗号部２２１は、暗号化秘密情報２１３の生成の度に格納先を変更するとよい。
【００５７】
図１５は、秘密情報管理部２３が、平文の秘密情報２１１を削除する様子を示す図である。暗号処理部２３１は、メモリ破棄部２３３に対して秘密情報２１１の消去を要求する（図１８のＳ２０５）。メモリ破棄部２３３は、秘密情報保護装置２２内のメモリスクランブル部２２３に対して、秘密情報２１１の格納領域を乱数データによって上書きするよう指示する。メモリスクランブル部２２３は、平文の秘密情報２１１が格納されている領域に乱数データを書き込んだ後に当該領域を解放する（図１８のＳ２０６）。なお、同一データによって上書きされる記憶領域をトレースする手法によるプログラム解析に対処するため、メモリスクランブル部２２３は、上書き処理を行う度に異なる乱数データを生成するとよい。図１５の状態でメモリダンプが取得されても、平文の秘密情報２１１が存在していないため、秘密情報２１１がメモリ２１から容易に読み取られてしまうことを防止できる。
【００５８】
図１６は、秘密情報使用プログラム２５の要求に応じて、暗号化秘密情報２１３の復号化を行う様子を示す図である。秘密情報使用プログラム２５は、復号処理部２３２に対して暗号化秘密情報２１３の復号化を要求する（図１８のＳ２０７）。復号処理部２３２は、秘密情報保護装置２２内の変数復号部２２４に対して暗号化秘密情報２１３の復号化を指示する。変数復号部２２４は、変数暗号鍵２１２を用いて暗号化秘密情報２１３を復号し、復号された秘密情報２１１をメモリ２１に格納する（図１８のＳ２０８）。この後、秘密情報使用プログラム２５は、復号された秘密情報２１１を用いた処理を行う（図１８のＳ２０９）。
【００５９】
図１７は、秘密情報使用プログラム２５の要求に応じて、平文の秘密情報２１１の消去を行う様子を示す図である。復号された秘密情報２１１を用いた処理の完了後、秘密情報使用プログラム２５は、メモリ破棄部２３３に対して、メモリ２１からの秘密情報２１１の消去を要求する（図１８のＳ２１０）。メモリ破棄部２３３は、メモリスクランブル部２２３に対して、秘密情報２１１の格納領域を乱数データによって上書きするよう指示する。メモリスクランブル部２２３は、平文の秘密情報２１１が格納されている領域に乱数データを書き込んだ後に当該領域を解放する（図１８のＳ２１１）。
【００６０】
上述したように、本実施の形態にかかる情報処理装置２は、メモリ２１上の秘密情報を暗号化している。このため、メモリ２１上のデータ変化等をモニタすることによる秘密情報の検出が困難となる。また、暗号化秘密情報２１３の配置先を毎回変更することによって、メモリ２１をモニタすることによる秘密情報の検出を一層困難にすることができる。
【００６１】
また、情報処理装置２は、秘密情報の暗号化に使用する変数暗号鍵２１２を毎回変更することによって、メモリ２１上の変数暗号鍵２１２の格納位置や変数暗号鍵２１２自体の検出を困難にすることができる。
【００６２】
また、情報処理装置２は、平文の秘密情報２１１を消去する際に、平文の秘密情報２１１の記憶領域を乱数等の規則性の無いデータで上書きしてから解放する。このため、メモリ２１上に秘密情報を残存させず、秘密情報を保護できる。また、上書きに使用するデータを毎回変更するとよい。これにより、秘密情報２１１が展開されるメモリ２１上の位置の特定を困難にすることができる。
【００６３】
なお、上述した例では、１つの秘密情報２１１が生成される場合を示したが、秘密情報２１１は、１又は複数の秘密情報生成プログラム２４によって複数個生成されてもよい。この場合、変数暗号鍵生成部２２２は秘密情報ごとに異なる暗号鍵を生成し、変数暗号部２２１は各秘密情報を異なる暗号鍵によって暗号化するとよい。
【００６４】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。
【符号の説明】
【００６５】
１、２  情報処理装置
１０  プロセッサ
１１  実行用メモリ
１２  不揮発性メモリ
１００  オペレーティングシステム（ＯＳ）
１１０  アプリケーションプログラム
１２０  プログラムＡ
１２１  プログラム間通信部
１２２  暗号部・復号プログラム
１２３  プログラム配置部
１３０  暗号部
１４０  プログラムＢ
１４１  プログラム間通信部
１４２、１４２Ａ、１４２Ｂ  部分暗号部
１４３  部分プログラム
１４３Ａ  コンテンツ暗号鍵生成プログラム
１４３Ｂ  コンテンツ復号プログラム
１４４  部分暗号部・復号プログラム
１４５  プログラム配置部
１４６  暗号鍵データ
１５０  メモリスクランブル部
２１  メモリ
２２  秘密情報保護装置
２３  秘密情報管理部
２４  秘密情報生成プログラム
２５  秘密情報使用プログラム
２１１  平文の秘密情報
２１２  変数暗号鍵
２１３  暗号化された秘密情報
２２１  変数暗号部
２２２  変数暗号鍵生成部
２２３  メモリスクランブル部
２２４  変数復号部
２３１  暗号処理部
２３２  復号処理部
２３３  メモリ破棄部
【図１】
2010217975.tif 000003
【図２】
2010217975.tif 000004
【図３】
2010217975.tif 000005
【図４】
2010217975.tif 000006
【図５】
2010217975.tif 000007
【図６】
2010217975.tif 000008
【図７】
2010217975.tif 000009
【図８】
2010217975.tif 000010
【図９】
2010217975.tif 000011
【図１０】
2010217975.tif 000012
【図１１】
2010217975.tif 000013
【図１２】
2010217975.tif 000014
【図１３】
2010217975.tif 000015
【図１４】
2010217975.tif 000016
【図１５】
2010217975.tif 000017
【図１６】
2010217975.tif 000018
【図１７】
2010217975.tif 000019
【図１８】
2010217975.tif 000020