(57)【要約】【課題】メモリに格納された特定の情報のメモリダンプによる取得を困難にする。【解決手段】難読化プログラムであって、第１の領域と第２の領域を有し、オブジェクトが生成される毎に該オブジェクトを順次第１の領域に格納するメモリを含み、予め設定された期間毎に、オブジェクトのそれぞれについて、オブジェクトの使用頻度に応じて、第１の領域から第２の領域に移動させるとともに、不使用のオブジェクトについては消去する移動消去処理を行うコンピュータで用いられるプログラムであって、あらかじめ設定された情報を保持する第１のオブジェクトを生成する第１のオブジェクト生成手段、第２のオブジェクトを生成する第２のオブジェクト生成手段、第２のオブジェクトに情報を格納させる格納手段、及び、第１のオブジェクトに移動消去処理において第１のオブジェクトを消去するための消去識別情報を格納させる消去指示手段、としてコンピュータを機能させる。【選択図】図６
2015069624.tif 000002
【特許請求の範囲】
【請求項１】
第１の領域と第２の領域を有し、オブジェクトが生成される毎に該オブジェクトを順次前記第１の領域に格納するメモリを含み、予め設定された期間毎に、前記オブジェクトのそれぞれについて、オブジェクトの使用頻度に応じて、前記第１の領域から前記第２の領域に移動させるとともに、不使用のオブジェクトについては消去する移動消去処理を行うコンピュータで用いられるプログラムであって、
あらかじめ設定された情報を保持する第１のオブジェクトを生成する第１のオブジェクト生成手段、
第２のオブジェクトを生成する第２のオブジェクト生成手段、
前記第２のオブジェクトに前記情報を格納させる格納手段、及び、
前記第１のオブジェクトに前記移動消去処理において前記第１のオブジェクトを消去するための消去識別情報を格納させる消去指示手段、
としてコンピュータを機能させるための難読化プログラム。
【請求項２】
前記移動消去処理は、世代別ガーベージコレクション手法であることを特徴とする請求項１記載の難読化プログラム。
【請求項３】
前記難読化プログラムは、更に、
あらかじめ設定された期間毎にタイミング情報を生成するタイマ手段としてコンピュータを機能させ、
前記第１及び第２のオブジェクト生成手段は、前記タイミング情報に応じて、第１及び第２のオブジェクトを生成することを特徴とする請求項１または２に記載の難読化プログラム。
【請求項４】
前記あらかじめ設定された情報は、暗号化されたデータを復号化するための鍵情報を含むことを特徴とする請求項１乃至３のいずれかに記載の難読化プログラム。
【請求項５】
第１の領域と第２の領域を有し、オブジェクトが生成される毎に該オブジェクトを順次前記第１の領域に格納するメモリと、
予め設定された期間毎に、前記オブジェクトのそれぞれについて、オブジェクトの使用頻度に応じて、前記第１の領域から前記第２の領域に移動させるとともに、不使用のオブジェクトについては消去する移動消去処理手段と、
あらかじめ設定された情報を保持する第１のオブジェクトを生成する第１のオブジェクト生成手段と、
第２のオブジェクトを生成する第２のオブジェクト生成手段と、
前記第２のオブジェクトに前記情報を格納させる格納手段と、
前記第１のオブジェクトに、前記移動消去処理において前記第１のオブジェクトを消去するための消去識別情報を格納させる消去識別情報を格納させる消去指示手段と、
を含むことを特徴とする情報処理装置。
【請求項６】
オブジェクトが作成される毎に該オブジェクトを順次第１の領域に格納するメモリであって、予め設定された期間毎に、前記オブジェクトのそれぞれについて、オブジェクトの使用頻度に応じて、前記第１の領域から前記第２の領域に移動させるとともに、不使用のオブジェクトについては消去する移動消去処理を行うコンピュータで用いられるプログラムを取得するプログラム取得手段と、
前記プログラムに、更に、あらかじめ設定された情報を保持する第１のオブジェクトを生成する第１のオブジェクト生成手段、第２のオブジェクトを生成する第２のオブジェクト生成手段、前記第２のオブジェクトに前記情報を格納させる格納手段、及び、前記第１のオブジェクトに前記移動消去処理において前記第１のオブジェクトを消去するための消去識別情報を格納させる消去指示手段、として前記コンピュータを機能させるための機能を追加する機能追加手段と、
を含むことを特徴とする難読化装置。
【請求項７】
予め設定された期間毎に、前記オブジェクトのそれぞれについて、オブジェクトの使用頻度に応じて、前記第１の領域から前記第２の領域に移動させるとともに、不使用のオブジェクトについては消去する移動消去処理を行う第１のコンピュータで用いられるプログラムを取得するプログラム取得手段、
前記プログラムに、更に、あらかじめ設定された情報を保持する第１のオブジェクトを生成する第１のオブジェクト生成手段、第２のオブジェクトを生成する第２のオブジェクト生成手段、前記第２のオブジェクトに前記情報を格納させる格納手段、及び、前記第１のオブジェクトに前記移動消去処理において前記第１のオブジェクトを消去するための消去識別情報を格納させる消去指示手段、として前記第１のコンピュータを機能させるための機能を追加する機能追加手段、
として第２のコンピュータを機能させるための難読化プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、難読化プログラム、難読化装置、端末装置に関する。
【背景技術】
【０００２】
コンピュータにおけるメモリに格納された情報の保護技術として、タスクがアクセス可能な論理アドレス空間を制限し、当該論理アドレス空間から外れた領域の情報を取得できなくする技術（下記特許文献１参照）や、基準キーと所有者キーから生成される変換キーによって、メモリ上のデータを暗号化して保護する技術（下記特許文献２参照）が知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１０−２６７０７７号公報
【特許文献２】特開２００９−２５３４９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明は、メモリに格納された特定の情報のメモリダンプによる取得を困難にする難読化プログラム等を実現する。
【課題を解決するための手段】
【０００５】
請求項１に記載の難読化プログラムは、第１の領域と第２の領域を有し、オブジェクトが生成される毎に該オブジェクトを順次前記第１の領域に格納するメモリを含み、予め設定された期間毎に、前記オブジェクトのそれぞれについて、オブジェクトの使用頻度に応じて、前記第１の領域から前記第２の領域に移動させるとともに、不使用のオブジェクトについては消去する移動消去処理を行うコンピュータで用いられるプログラムであって、あらかじめ設定された情報を保持する第１のオブジェクトを生成する第１のオブジェクト生成手段、第２のオブジェクトを生成する第２のオブジェクト生成手段、前記第２のオブジェクトに前記情報を格納させる格納手段、及び、前記第１のオブジェクトに前記移動消去処理において前記第１のオブジェクトを消去するための消去識別情報を保持させる消去指示手段、としてコンピュータを機能させるための難読化プログラムであることを特徴とする。
【０００６】
請求項２に記載の難読化プログラムは、請求項１に記載の難読化プログラムにおいて、前記移動消去処理は、世代別ガーベージコレクション手法であることを特徴とする。
【０００７】
請求項３に記載の難読化プログラムは、請求項１または２に記載の難読化プログラムにおいて、更に、あらかじめ設定された期間毎にタイミング情報を生成するタイマ手段としてコンピュータを機能させ、前記第１及び第２のオブジェクト生成手段は、前記タイミング情報に応じて、第１及び第２のオブジェクトを生成することを特徴とする。
【０００８】
請求項４に記載の難読化プログラムは、請求項１乃至３のいずれかに記載の難読化プログラムにおいて、前記あらかじめ設定された情報は、暗号化されたデータを復号化するための鍵情報を含むことを特徴とする。
【０００９】
請求項５に記載の情報処理装置は、第１の領域と第２の領域を有し、オブジェクトが生成される毎に該オブジェクトを順次前記第１の領域に格納するメモリと、予め設定された期間毎に、前記オブジェクトのそれぞれについて、オブジェクトの使用頻度に応じて、前記第１の領域から前記第２の領域に移動させるとともに、不使用のオブジェクトについては消去する移動消去処理手段と、あらかじめ設定された情報を保持する第１のオブジェクトを生成する第１のオブジェクト生成手段と、第２のオブジェクトを生成する第２のオブジェクト生成手段と、前記第２のオブジェクトに前記情報を格納させる格納手段と、前記第１のオブジェクトに、前記移動消去処理において前記第１のオブジェクトを消去するための消去識別情報を格納させる消去識別情報を格納させる消去指示手段と、を含むことを特徴とする。
【００１０】
請求項６に記載の難読化装置は、オブジェクトが作成される毎に該オブジェクトを順次第１の領域に格納するメモリであって、予め設定された期間毎に、前記オブジェクトのそれぞれについて、オブジェクトの使用頻度に応じて、前記第１の領域から前記第２の領域に移動させるとともに、不使用のオブジェクトについては消去する移動消去処理を行うコンピュータで用いられるプログラムを取得するプログラム取得手段と、前記プログラムに、更に、あらかじめ設定された情報を保持する第１のオブジェクトを生成する第１のオブジェクト生成手段、第２のオブジェクトを生成する第２のオブジェクト生成手段、前記第２のオブジェクトに前記情報を格納させる格納手段、及び、前記第１のオブジェクトに前記移動消去処理において前記第１のオブジェクトを消去するための消去識別情報を保持させる消去指示手段、として前記コンピュータを機能させるための機能を追加する機能追加手段と、を含むことを特徴とする。
【００１１】
請求項７に記載の難読化プログラムは、予め設定された期間毎に、前記オブジェクトのそれぞれについて、オブジェクトの使用頻度に応じて、前記第１の領域から前記第２の領域に移動させるとともに、不使用のオブジェクトについては消去する移動消去処理を行う第１のコンピュータで用いられるプログラムを取得するプログラム取得手段、及び、前記プログラムに、更に、あらかじめ設定された情報を保持する第１のオブジェクトを生成する第１のオブジェクト生成手段、第２のオブジェクトを生成する第２のオブジェクト生成手段、前記第２のオブジェクトに前記情報を格納させる格納手段、及び、前記第１のオブジェクトに前記移動消去処理において前記第１のオブジェクトを消去するための消去識別情報を格納させる消去指示手段、として前記第１のコンピュータを機能させるための機能を追加する機能追加手段、として第２のコンピュータを機能させるための難読化プログラムであることを特徴とする。
【発明の効果】
【００１２】
請求項１、２、５に記載の発明によれば、メモリに格納された特定の情報のメモリダンプによる取得が困難となる。
【００１３】
請求項３に記載の発明によれば、あらかじめ設定された期間毎に特定の情報を格納するオブジェクトが生成される。
【００１４】
請求項４に記載の発明によれば、鍵情報のメモリダンプによる取得が困難となる。
【００１５】
請求項６、７に記載の発明によれば、取得したプログラムに、メモリに格納された特定の情報のメモリダンプによる取得が困難とする難読化機能が追加される。
【図面の簡単な説明】
【００１６】
【図１】難読化システムのハードウェア構成の一例について説明するための図である。
【図２】難読化システムの使用態様の一例について説明するための図である。
【図３Ａ】世代別ガーベージコレクションの概要について説明するための図である。
【図３Ｂ】世代別ガーベージコレクションの概要について説明するための図である。
【図３Ｃ】世代別ガーベージコレクションの概要について説明するための図である。
【図３Ｄ】世代別ガーベージコレクションの概要について説明するための図である。
【図３Ｅ】世代別ガーベージコレクションの概要について説明するための図である。
【図３Ｆ】世代別ガーベージコレクションの概要について説明するための図である。
【図４Ａ】鍵情報を保持するオブジェクトのヒープメモリ上の状態の一例を説明するための図である。
【図４Ｂ】鍵情報を保持するオブジェクトのヒープメモリ上の状態の一例を説明するための図である。
【図４Ｃ】鍵情報を保持するオブジェクトのヒープメモリ上の状態の一例を説明するための図である。
【図４Ｄ】鍵情報を保持するオブジェクトのヒープメモリ上の状態の一例を説明するための図である。
【図４Ｅ】鍵情報を保持するオブジェクトのヒープメモリ上の状態の一例を説明するための図である。
【図４Ｆ】鍵情報を保持するオブジェクトのヒープメモリ上の状態の一例を説明するための図である。
【図５】難読化プログラムが端末装置にインストールされた場合の機能的構成の一例について説明するための図である。
【図６】難読化プログラムの処理のフローの一例について説明するための図である。
【図７】難読化装置における処理のフローの一例について説明するための図である。
【発明を実施するための形態】
【００１７】
以下、本発明の実施形態について、図面を参照しつつ説明する。なお、図面については、同一又は同等の要素には同一の符号を付し、重複する説明は省略する。
【００１８】
図１は、本発明の実施形態に係る難読化システムのハードウェア構成の一例について説明するための図である。図１に示すように、難読化システム１００は、例えば、ネットワーク１４０を介して接続されたサーバ１１０、難読化装置１２０、及び端末装置１３０を有する。なお、図１においては、難読化システム１００は、１の端末装置１３０のみを有しているが、複数の端末装置１３０を有してもよい。
【００１９】
サーバ１１０は、制御部１１１、記憶部１１２、通信部１１３を含む。制御部１１１は、例えば、ＣＰＵ等であって、記憶部１１２に格納されたプログラムに従って動作する。記憶部１１２は、例えば、ハードディスクやＲＯＭやＲＡＭ等の情報記録媒体で構成され、制御部１１１によって実行されるプログラムを保持する情報記録媒体である。また、記憶部１１２は、制御部１１１のワークメモリとしても動作する。
【００２０】
通信部１１３は、ネットワークインターフェースであって、制御部１１１からの指示に応じて、ネットワーク１４０を介して、情報を送受信する。なお、制御部１１１、記憶部１１２、通信部１１３は、それぞれ、バス１１４を介して接続される。
【００２１】
難読化装置１２０は制御部１１１、記憶部１１２、通信部１１３を含む。その他の点についてはサーバ１１０と同様であるので説明を省略する。
【００２２】
また、端末装置１３０は、制御部１２１、通信部１２２、記憶部１２３、表示部１２４、操作部１２５を含む。同様に、各部１２０乃至１２５は、バス１２６を介して接続される。上述したサーバ１１０と同様に、制御部１２１は、例えば、ＣＰＵであって、記憶部１１２に格納されたプログラムに従って動作する。記憶部１２３は、例えば、ハードディスクやＲＯＭやＲＡＭ等の情報記録媒体で構成され、制御部１２１によって実行されるプログラムを保持する情報記録媒体である。また、記憶部１２３は、制御部１２１のワークメモリとしても動作する。
【００２３】
操作部１２５は、例えば、キーボード、マウス、ボタン等のインターフェースで構成され、ユーザの指示操作に応じて、当該指示操作の内容を制御部１２１に出力する。表示部１２４は、例えば、液晶ディスプレイ、ＣＲＴディスプレイ、または有機ＥＬディスプレイ等であって、制御部１２１からの指示に従い、情報を表示する。
【００２４】
なお、上記制御部１１１及び１２１で処理されるプログラムは、例えば、ネットワークを介して、ダウンロードされて提供されてもよいし、または、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭ等のコンピュータで読み取り可能な各種の情報記録媒体によって提供されてもよい。なお、上記難読化システム１００の構成は、一例であって本実施の形態は上記に限定されるものではない。
【００２５】
次に、まず、理解の容易化のため、図２を用いて本実施の形態における難読化システム１００の使用態様の一例について説明する。当該使用態様においては、ユーザの料金支払い中は、配布者２１０から鍵情報が提供されることにより、ユーザ２３０の有するプログラムの一部の処理が正規に使用可能であるが、料金支払い後は鍵情報が提供されなくなり、使用できなくなるように構成する場合を想定する。具体的には、当該プログラムは、画像を閲覧するためのプログラムであって、プログラムが端末装置１３０において起動されると、鍵情報をサーバ１１０から取得し、当該鍵情報を端末装置１３０のメモリに保持する。そして、画像閲覧指示に応じて、端末装置１３０に記憶された暗号化された画像ファイルを当該鍵情報に応じて復号し、表示部１２４に表示するように構成する場合を想定する。
【００２６】
なお、当該プログラムは一例であって、動画情報の提供や音楽情報の提供するプログラム等、その他のプログラムであってもよい。また、図２における配布者２１０及びユーザ２３０は、例えば、上記難読化システム１００におけるサーバ１１０及び端末装置１３０に相当する。また、図２に示すように、プログラムの難読化装置１２０への提供等については、配布者２１０自身が難読化装置１２０に直接入力する等、種々の変形が可能である。
【００２７】
図２に示すように、まず、難読化装置１２０は、配布者２１０から、上記プログラムや鍵情報を取得する（Ｓ１０１）。具体的には、例えば、配布者２１０がインターネット１４０を介して難読化装置１２０に送信し、難読化装置１２０は当該プログラム等を取得する。
【００２８】
そして、難読化装置１２０は、当該プログラムに上記鍵情報をメモリから取得することを困難にする機能を追加した難読化プログラムを生成する。なお、プログラムを難読化する難読化装置１２０や、当該難読化されたプログラムである難読化プログラムの詳細については後述する。
【００２９】
次に、配布者２１０は、当該難読化装置１２０から当該難読化プログラムを取得する（Ｓ１０２）。具体的には、例えば、配布者２１０は、インターネット１４０を介して難読化装置１２から難読化プログラムを取得する。
【００３０】
配布者２１０は、難読化プログラムをユーザ２３０に提供する（Ｓ１０３）。具体的には、例えば、配布者２１０がインターネット１４０を介してユーザ２３０の使用する端末装置１３０に難読化プログラムを送信する。当該難読化プログラム２３０は、暗号化された画像情報を含む。また、難読化プログラムの端末装置１３０における起動時に、配布者２１０は、暗号化された画像情報を復号化するための鍵情報をユーザに提供する。
【００３１】
ここで、当該プログラムは、上記のように例えば、ユーザ２３０から配布者２１０へ使用料金の支払いが行われている期間（料金支払い期間）に限り、当該鍵情報を、ユーザ２３０の使用する端末装置１３０に提供する。これにより、ユーザ２３０は、料金支払い期間中は、難読化プログラムの起動時に暗号化された画像情報を復号化するための鍵情報を配布者２１０から取得し、当該鍵情報を用いて当該画像情報を復号化することにより画像情報を閲覧する。
【００３２】
一方、料金支払い期間経過後は、配布者２１０から鍵情報が提供されなくなるため、暗号化された画像情報を復号化することができない。よって、画像情報の閲覧ができなくなる。ここで、当該鍵情報を、ユーザ２３０の端末装置１３０のメモリから、メモリダンプにより不正に取得して、当該画像情報の復号化を行う場合が想定される。しかしながら、本実施の形態によれば、難読化装置１２０により当該プログラムが難読化されているため、上記のような鍵情報の不正取得を行うことが困難となる。以下具体的に説明する。
【００３３】
端末装置１２０におけるメモリ領域の管理に対し、いわゆる世代別ガーベージコレクション（以下「ガーベージコレクション」という）を採用する場合、例えば、メモリは新しいオブジェクトを格納する第１の領域と、古いオブジェクトを格納する第２の領域を有する。
【００３４】
そして、当該ガーベージコレクションが採用される場合、上記のような鍵情報を保持するオブジェクトなど、頻繁に使用されるオブジェクトについては、上記当該プログラムが難読化されていない場合には、時間の経過に応じて、第１の領域から第２の領域に移動して、その後第２の領域の特定の位置に滞留する。したがって、当該メモリをダンプすることにより、鍵情報が容易に発見され、当該鍵情報を用いて、当該画像情報の閲覧等を行う場合が想定される。
【００３５】
一方、難読化されている場合には、後述するように鍵情報を保持するオブジェクトが第１の領域を時間の経過に伴い移動するとともに、予め設定された期間を超えて存在しない。よって、上記のような鍵情報の発見が困難となり、ユーザ２３０の端末装置１３０のメモリからの鍵の不正取得が効果的に防止される。この点につき、Ｊａｖａ（登録商標）におけるメモリ（ヒープ・メモリ）の世代別ガーベージコレクションの例を用いて下記により具体的に説明する。
【００３６】
まず、当該世代別ガーベージコレクションの概要について説明する。図３Ａに示すように、ヒープメモリは、新しいオブジェクトを格納する第１の領域（New Generation領域）と、古いオブジェクトを格納する第２の領域（Old Generation領域）を含む。そして、生成された後短期間で不要となる短命なオブジェクトは第１の領域のみで過ごし、長期間存在するオブジェクトは第２の領域に留まる。
【００３７】
第１の領域は、更に、Eden、From、Toの３つの領域に分割される。ここで、新しいオブジェクトが生成された際に最初に配置される領域がEden領域である。そして、順次新しいオブジェクトが生成され、Eden領域が飽和すると、第１の領域のみを対象とするガーベージコレクションが実施される。この際、例えば、図３Ｂに示すように、使用中のオブジェクト（例えば、図３Ａに示したKey）については、Eden領域からFrom領域へと移動され、不使用の不要なオブジェクトについては破棄され、Eden領域に空き領域が生じる。
【００３８】
その後、更に、順次新しいオブジェクトが生成され、再度Eden領域が飽和すると、再度上記ガーベージコレクションが実施される。この際、From領域とTo領域が互いに入れ替えられる。そして、図３Ｃに示すように、From領域とTo領域とにある使用中のオブジェクトが再度To領域に移動される。上記のように第１の領域のガーベージコレクションでは、オブジェクトが不要になるまでの間、オブジェクトはFrom領域とTo領域の移動を繰り返し、当該移動回数があらかじめ設定された閾値以上となると、図３Ｄに示すようにOld領域に移動する。そして、更に時間が経過するにつれて、図３Ｅ及び図３Ｆに示すように、例えば、鍵情報を含むオブジェクトのように頻繁に使用されるオブジェクトについてはOld領域の特定の箇所に滞留する。
【００３９】
なお、ガーベージコレクションには、上記のように第１の領域のみを対象とするガーベージコレクションと、第１及び第２の領域を対象とするガーベージコレクションがあり、前者が頻繁に実施されるのに対し、後者は低い頻度で実施される。また、上記ガーベージコレクションは一例であって、本実施の形態は上記に限定されるものではない。
【００４０】
次に、上記ガーベージコレクションが実施されるメモリを前提として、本実施の形態における鍵情報(Key)を保持するオブジェクト(object)のメモリ上の状態の一例について、説明する。
【００４１】
まず、図４Ａに示すように、オブジェクト０が生成されると、Eden領域に格納される。
【００４２】
次に、図４Ｂに示すように、オブジェクト１が生成され、オブジェクト０の鍵情報がオブジェクト１に保持させられる。そして、例えば、上記第１の領域を対象とするガーベージコレクションのタイミングでオブジェクト０が消去され、図４Ｃ、図４Ｄに示すように鍵情報を有するオブジェクト１がメモリ上に存在することとなる。
【００４３】
次に、予め設定された期間経過後、図４Ｅに示すように、今度はオブジェクト０が生成され、オブジェクト１の鍵情報がオブジェクト０に保持させられる。そして、次の第１の領域を対象とするガーベージコレクションのタイミングで、オブジェクト１が削除され、その後、図４Ｆに示すように鍵情報を有するオブジェクト０がメモリ上に存在することとなる。
【００４４】
本実施の形態においては、上記図４Ａ乃至図４Ｆの処理が繰り返し行われる。これにより、鍵情報を有するオブジェクトが時間の経過に伴い第１の領域内をランダムに移動するとともに、オブジェクト０及び１は予め設定された期間を超えては存在しない。結果として、ユーザ２３０がメモリダンプを用いた攻撃を試みても、鍵情報を発見することが困難となる。なお、上記のような処理を行わない場合には、上記図３に示すように、時間の経過につれて鍵情報は、第１の領域から第２の領域に移動し第２の領域の特定の領域にとどまることとなり、例えば、メモリダンプにより容易に発見されることは上述のとおりである。
【００４５】
次に、上記のように難読化装置１２０によって難読化された難読化プログラムが端末装置１３０にインストールされた場合に難読化装置１２０で実現される機能的構成の一例について説明する。図５に示すように、端末装置１３０は、例えば、機能的に、鍵情報取得部５０１、ポインタ部５０２、タイマ部５０３、生成制御部５０４、第１のオブジェクト生成部５０５、第２のオブジェクト生成部５０６、メモリ５０７、格納部５０８、消去指示部５０９、ガーベージコレクション部５１０を含む。
【００４６】
鍵情報取得部５０１は、例えば、端末装置１３０における難読化プログラムの起動に応じて、サーバ１１０から鍵情報を取得する。また、鍵情報取得部５０１は、後述するポインタ部５０２に格納されている識別情報に応じて、第１または第２のオブジェクトに格納された鍵情報を取得する。具体的には、例えば、ポインタ部５０２が識別情報：０を格納している場合には、第１のオブジェクトから鍵情報を取得し、識別情報：１を格納している場合には、第２のオブジェクトから鍵情報を取得する。
【００４７】
タイマ部５０３は、時間を計数し、予め設定された期間毎に、後述する生成制御部５０４に第１または第２のオブジェクトを生成するタイミングを表すタイミング情報を送信する。
【００４８】
生成制御部５０４は、鍵情報取得部５０１がサーバ１１０から鍵情報を取得した際及びタイマ部５０３からのタイミング情報を取得した際に、ポインタ部５０２に格納されている識別情報に応じて、第１のオブジェクト生成部５０５または第２のオブジェクト生成部５０６に第１または第２のオブジェクトを生成するよう指示する。
【００４９】
例えば、生成制御部５０４は、ポインタ部５０２に格納されている識別情報が０の場合には、第２のオブジェクト生成部５０６に第２のオブジェクトを生成するよう指示し、ポインタ部５０２に格納されている識別情報が１の場合には、第１のオブジェクト生成部５０５に第１のオブジェクトを生成するよう指示する。
【００５０】
第１のオブジェクト生成部５０５及び第２のオブジェクト生成部５０６は、生成制御部５０４からの指示に応じて、鍵情報を格納するための第１のオブジェクトまたは第２のオブジェクトをメモリ５０７に生成する。なお、当該メモリ５０７は、例えば、記憶部１２３に含まれる。
【００５１】
ポインタ部５０２は、サーバ１１０から取得された鍵情報の第１のオブジェクトへの格納に応じて、識別情報０を格納する。また、後述する消去識別子の格納に応じて、識別情報１を格納する。
【００５２】
格納部５０８は、第１のオブジェクト生成部５０５により生成された第１オブジェクトに、鍵情報取得部５０１によりサーバ１１０から取得された鍵情報を格納する。また、格納部５０８は、ポインタ部５０２に格納されている識別情報に応じて、第１または第２のオブジェクトに、第２または第１のオブジェクトから取得した鍵情報を格納する。例えば、ポインタ部５０２に識別情報：０が格納されている場合には、第１のオブジェクトから鍵情報を取得して第２のオブジェクトに当該鍵情報を格納する。一方、ポインタ部５０２に識別情報：１が格納されている場合には、第２のオブジェクトから鍵情報を取得して第１のオブジェクトに当該鍵情報を格納する。
【００５３】
消去指示部５０９は、格納部５０８の第１または第２のオブジェクトに第２または第１のオブジェクトから取得した鍵情報を格納に応じて、第２または第１のオブジェクトにオブジェクトが消去されることを示す消去識別子を格納する。具体的には、例えば、ポインタ部５０２に識別情報０が格納されている場合には、第１のオブジェクトに消去を表す消去識別子を格納し、ポインタ部５０２に識別情報１が格納されている場合には、第２のオブジェクトに消去を表す消去識別子を格納する。
【００５４】
メモリ５０７は、上記のように、第１の領域及び第２の領域を有し、第１のオブジェクトや第２のオブジェクト等を格納する。
【００５５】
ガーベージコレクション部５１０（ＧＣ部）は、予め設定された期間毎にガーベージコレクションを行う。例えば、ＧＣ部５１０は、不要なオブジェクトを消去し、また、消去識別子を含む第１または第２のオブジェクトを消去する。なお、ガーベージコレクションの具体的処理については、上述のとおりであるので説明を省略する。
【００５６】
なお、上記難読化プログラムにより端末装置１３０で実現される機能的構成は、一例にすぎず、本実施の形態は上記に限定されるものではない。
【００５７】
次に、図６を用いて、難読化プログラムの処理のフローについて説明する。なお、下記フローにおいては、難読化プログラムがユーザ２３０に提供され、当該ユーザ２３０が用いる端末装置１３０にインストールされているものとする。
【００５８】
例えば、端末装置１３０において難読化プログラムが起動されると、鍵情報取得部５０１は、鍵情報を取得する（Ｓ２０１）。第１のオブジェクト生成部５０５は、当該鍵情報を格納するための第１のオブジェクトをメモリ５０７に生成する（Ｓ２０２）。格納部５０８は、第１のオブジェクト生成部５０５により生成された第１オブジェクトに、鍵情報取得部５０１により取得された鍵情報を格納する（Ｓ２０３）。当該格納に応じて、ポインタ部５０２に識別情報として０を代入する（Ｓ２０４）。
【００５９】
生成制御部５０４はタイマ部５０３からタイミング情報を取得する。当該タイミング情報及び上記識別情報に応じて、第２オブジェクト生成部は第２のオブジェクトをメモリ５０７に生成する（Ｓ２０６）。鍵情報取得部５０１は、第１のオブジェクトから鍵情報を取得する（Ｓ２０７）。格納部５０８は、第１のオブジェクトから取得された鍵情報を第２のオブジェクトに格納する（Ｓ２０８）。消去指示部５０９は、第１のオブジェクトにガーベージコレクションのタイミングで消去される消去識別子を格納する（Ｓ２０９）。当該格納に応じて、ポインタ部５０２に、識別情報として１を代入する（Ｓ２１０）。
【００６０】
生成制御部５０４は、タイマ部５０３からのタイミング情報を取得する（Ｓ２１１）。当該タイミング情報の取得及びポインタ部５０２に格納された識別情報に応じて、第１のオブジェクト生成部５０５は、メモリ５０７に第１のオブジェクトを生成する（Ｓ２１２）。鍵情報取得部５０１は、第２のオブジェクトから鍵情報を取得する（Ｓ２１３）。格納部５０８は、第１のオブジェクトからの鍵情報を第２のオブジェクトに格納する（Ｓ２１４）。消去指示部５０９は、第１のオブジェクトにガーベージコレクションのタイミングで消去される識別子を格納する（Ｓ２１５）。そして、Ｓ２０４に戻る。
【００６１】
上記フローにより、図４を用いて説明したように、鍵情報を有するオブジェクトが時間の経過に伴い第１の領域内をランダムに移動するとともに、第１のオブジェクト及び第2のオブジェクトは予め設定された期間を超えて存在しないこととなる。なお、上記フローは一例であって、本実施の形態は上記に限定されるものではない。例えば、上記においては、難読化プログラムを起動した際に鍵情報が取得される場合について説明したがこれに限られるものではない。
【００６２】
次に、難読化装置１２０の機能的構成について説明する。難読化装置１２０は、機能的に、例えば、サーバ１１０から配布者２１０が難読化を希望するプログラムを取得するプログラム取得手段と、上記難読化プログラムを実現するための機能的構成を当該プログラムに追加する機能追加手段とを有する。以下、図７を用いて難読化前のプログラムPがJava言語を用いて記述されている場合を例として、難読化装置１２０において実施されるプログラムPから難読化プログラムPobを生成するフローの概要について説明する。なお、下記においては、暗号化指定部位として、プログラムPに付属しユーザ２３０のプログラムPの使用において重要な役割を担う画像ファイルPhを対象とする。また、画像ファイルPhはプログラムPに付属しており、プログラムPと同一のフォルダに格納される形で配布者２１０から難読化装置１２０に入力される。また、例えば、暗号鍵Keyは256bitの多倍長整数とする。
【００６３】
まず、難読化装置１２０は、上記プログラムP、暗号鍵Key、暗号化指定部位情報、および配布者２１０により指定される鍵情報参照変数名を入力情報として取得する。そして、画像ファイルPhを、暗号鍵Keyを用いて暗号化し、暗号化画像ファイルPh_encを作成する。また、プログラムPに付属する画像ファイルPhを消去し、代わりに暗号化画像ファイルPh_encを付属させる（Ｓ３０１）。
【００６４】
プログラムPから画像ファイルPhを読み込むコード部位を全て抽出する（Ｓ３０２）。そして、暗号鍵Keyを格納するための変数v_keyをメンバ変数とし、v_keyを返値とするメソッドget_keyを有するクラスC_keyの記述コードをプログラムPに追加する。
【００６５】
次に、メモリを難読化するためのクラス（メモリ難読化クラス）を追加する（Ｓ３０３）。具体的には、例えば、クラスC_keyのオブジェクトobject0, object 1をメンバとし、0または1の値を持つ変数pointをメンバとし、メンバ変数pointが0の場合にobject0、pointが1の場合にobject1を返値とするメソッドget_object、後述の手順を実行することによりメンバ変数pointを更新するパブリックメソッドset_point、更に、クラスC_keyのオブジェクトobject0を生成しpointに0を代入するコンストラクタを保持するクラスC_getKeyを記述するコードをプログラムPに追加する。ここで、メソッドset_pointは、呼び出しを受けた際にメンバ変数pointが0の場合には、object1を生成し、object0のメンバ変数v_keyの値をobject1のメンバ変数v_keyに代入し、object0にnullを代入し、pointの値を1に設定する。更にメンバ変数pointが1の場合には、object0を生成し、object1のメンバ変数v_keyの値をobject0のメンバ変数v_keyに代入し、object1にnullを代入し、pointの値を0に設定する。
【００６６】
次に、タイマ機能を追加する（Ｓ３０４）。具体的には、例えば、タイマにより予め設定された期間毎にset_pointを呼び出すクラスC_timerのコードをプログラムPに追加する。
【００６７】
次にＳ３０２において抽出された画像ファイルPhを読み込む部位を、メモリ難読化クラス・オブジェクトを呼び出すコードに置きかえる（Ｓ３０５）。具体的には、例えば、Ｓ３０２において抽出された画像ファイルPhを読み込む部位全てにおいて、画像ファイルPhを読み込むコードを削除し、代わりにget_objectによって取得されたクラスC_keyのオブジェクトからget_keyメソッドを用いて暗号鍵Keyを取得し、更に暗号鍵Keyを用いて暗号化画像ファイルPh_encを復号し、当該復号結果を画像ファイルPhの代わりに読み込ませるコードを追加する。
【００６８】
最後に、メモリ難読化クラス・オブジェクトへ鍵情報設定用のコードを追加する（Ｓ３０６）。具体的には、例えば、プログラムPの起動直後に通信により配布者２１０のサーバから暗号鍵Keyを取得し、クラスC_getKey、およびクラスC_timerのオブジェクトを生成し、取得した暗号鍵Keyの値をクラスC_getKey のget_objectメソッドの返値として与えられるC_Keyのオブジェクトの変数v_keyに設定するコードを追加する。
【００６９】
上記フローにより、プログラムPから難読化プログラムPobが生成される。そして、配布者２１０は、難読化装置１２０の出力した難読化プログラムPobをネットワーク１４０経由でユーザ２３０に配布する点等は上記のとおりである。なお、上記難読化装置１２０のフローについては、主に、Java言語を用いて実現する場合について説明したが、本実施の形態はこれに限定されるものではない。
【００７０】
本発明は、上記実施の形態に限定されるものではなく、上記実施の形態で示した構成と実質的に同一の構成、同一の作用効果を奏する構成又は同一の目的を達成することができる構成で置き換えてもよい。例えば、上記においては、主に、世代別ガーベージコレクションが行われるメモリ５０７において、鍵情報を含むオブジェクトを時間の経過とともにメモリ５０７の第1の領域を移動させる場合について説明したが、当該オブジェクトに含まれる情報は鍵情報に限られず、その他の情報であってもよいことはいうまでもない。
【符号の説明】
【００７１】
１００  難読化システム、１１０  サーバ、１２０  難読化装置、１３０  端末装置１１１、１２１  制御部、１１２、１２３  記憶部、１１３、１２２  通信部１２４  表示部、１２５  操作部、５０１  鍵情報取得部、５０２  ポインタ部、５０３  タイマ部、５０４  生成制御部、５０５  第１のオブジェクト生成部５０６、第２のオブジェクト生成部、５０７  メモリ、５０８  格納部、５０９  消去指示部、５１０  ガーベージコレクション部。
【図１】
2015069624.tif 000003
【図２】
2015069624.tif 000004
【図３Ａ】
2015069624.tif 000005
【図３Ｂ】
2015069624.tif 000006
【図３Ｃ】
2015069624.tif 000007
【図３Ｄ】
2015069624.tif 000008
【図３Ｅ】
2015069624.tif 000009
【図３Ｆ】
2015069624.tif 000010
【図４Ａ】
2015069624.tif 000011
【図４Ｂ】
2015069624.tif 000012
【図４Ｃ】
2015069624.tif 000013
【図４Ｄ】
2015069624.tif 000014
【図４Ｅ】
2015069624.tif 000015
【図４Ｆ】
2015069624.tif 000016
【図５】
2015069624.tif 000017
【図６】
2015069624.tif 000018
【図７】
2015069624.tif 000019