モジュールの暗号化/復号化プログラム
【課題】暗号化されているプログラムでも、実行時に一度に全てのモジュールを復号化すると、記憶域内に保存されたコードを解析することが可能である。このため、リバースエンジニアリングで容易に解析できないプログラムの実行および復号化方式が求められる。
【解決手段】以上課題解決のため、本発明ではプログラムを起動しても、実行時に各モジュールを復号しながらモジュールを実行することができるプログラム複合体を提供する。これにより、容易にモジュールを解析されず、プログラムの耐タンパ性の向上を図ることができる。
【解決手段】以上課題解決のため、本発明ではプログラムを起動しても、実行時に各モジュールを復号しながらモジュールを実行することができるプログラム複合体を提供する。これにより、容易にモジュールを解析されず、プログラムの耐タンパ性の向上を図ることができる。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ソフトウエアの耐タンパ性を向上させる技術に関する。
【背景技術】
【0002】
ソフトウエアのうち、例えば認証アルゴリズムを含むもののように、その中身を知られたくないものが存在する。にもかかわらず、ソースコードはもとより、実行形式のソフトウエアにおいても、逆アセンブルやデバッギングにより、ソフトウエアのアルゴリズム等の内容が明るみにされるという脅威が存在する。特許文献1には以下のような技術が開示されている。該技術では、ソースコードにおける条件分岐命令を複雑化することにより分岐条件の解析を困難とする。これにより、コードの難読性を高め、上記のような脅威を回避することを目指している。つまり、逆アセンブル等が可能であっても、それによって解析され生じたソースコード自体の難読性により、解析の手間が生じる。このようにして、ソフトウエアの耐タンパ性の向上を図ることができる。
【特許文献1】特開2011−28506号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
しかし、ソースコード自体の難読性を上げても、そこから生じる実行形式のコード自体が平文であるため、時間をかければ必ず解析が可能である点が問題となる。そこで、実行形式のコードを暗号化し実行時に復号化するという方法が考えられる。これにより、記憶域に保存された状態の実行形式のファイルについては、暗号化されているため、解析がほぼ不可能である。しかしながら、暗号化するだけでは実行時には何らかの形で復号化する必要があり、復号化し実行中のコードについてはデバッガ等による解析が可能である点が問題となる。例えば、実行時に全てのコードを復号化してから実行する方法であると、実行前においては暗号化されているため、解析はほぼ不可能であるが、実行時にプログラム全てを復号化する方式であると、メモリ上において復号化されたプログラムがロードされた状態のイメージを解析することにより、その内容を把握することが可能である。そうすると、暗号化されたモジュールを容易に解析できないような、プログラムの実行方式の実現という課題が生じる。
【課題を解決するための手段】
【0004】
以上の課題を解決するために、第一に本発明は以下のようなプログラム複合体を提供する。該プログラム複合体は複数のモジュールから構成されている。実行前においては、少なくとも一つのモジュールは暗号化データで保持され、実行時においては暗号化されたモジュールの前に実行されるモジュールが復号化の処理を行い、復号化されたモジュールが実行されるといったプログラム複合体である。
【0005】
具体的には、モジュールの集合体からなるプログラム本体であって、各モジュールのうち少なくとも一つは非実行時には暗号化された状態であるプログラム本体と、次に実行されるモジュールである次モジュールが、暗号化されている場合には、現在実行中のモジュールの終了前のタイミングにて演算装置が実行可能に復号化するための処理を計算機に実行させるための復号化プログラムと、からなるプログラム複合体である。
【0006】
第二は、上記第一のプログラム複合体を基本として、次に実行されるモジュールを呼び出した後、そのモジュールを記憶域から削除する処理を行うプログラム複合体である。
【0007】
具体的には、次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための削除プログラムをさらに有する請求項1に記載のプログラム複合体である。
【0008】
第三は、上記第一のプログラム複合体を基本として、次に実行されるモジュールを呼び出した後、そのモジュールを再度暗号化する処理を行うプログラム複合体である。
【0009】
具体的には、次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための再暗号化プログラムをさらに有する請求項1に記載のプログラム複合体。
【発明の効果】
【0010】
以上のような構成をとる第一の本発明によって、実行前には暗号化データでモジュールを保持し、実行時に暗号化されたモジュールを直前に復号化して実行することが可能である。そうすると、実行直前まで、秘匿したいモジュールを暗号化の状態とすることが可能である。このため、デバッガ等でプログラムを解析する場合においても、一度に全てのモジュールが可読で有る場合に比べて、解析に手間がかかることとなる。これにより、プログラムの耐タンパ性が向上することとなる。
【0011】
また、第二の本発明によって、秘匿したいモジュールを実行した後に速やかに記憶媒体より削除することが可能となる。これにより、実行後に記憶域に残存している平文のモジュールを消去し、その内容を解析することを不可能とすることができる。これにより、実行時のみ平文のモジュールが記憶域に存在する動作が可能となり、プログラムの耐タンパ性が向上することとなる。
【0012】
また、第三の本発明によって、秘匿したいモジュールを実行した後に速やかに再暗号化することが可能となる。これにより、実行後に記憶域に残存している平文のモジュールを暗号化し、その内容を解析することを不可能とすることができる。これにより、実行時のみ平文のモジュールが記憶域に存在する動作が可能となり、プログラムの耐タンパ性が向上することとなる。
【発明を実施するための最良の形態】
【0013】
以下に、図を用いて本発明の実施の形態を説明する。なお、本発明はこれら実施の形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、種々なる態様で実施しうる。なお、実施例1は、主に請求項1、2、3について説明する。また、実施例2は、主に請求項4について説明する。また、実施例3は、主に請求項5について説明する。
【0014】
≪実施例1≫
<概要>
図1は、本実施例のプログラム複合体の動作の一例を説明するための概念図である。この図にあるように、プログラムAとしたプログラム複合体は記憶域のアドレスXからアドレスYの間にモジュールP個が存在している。モジュール2からモジュールPは暗号化されている。プログラムは、モジュール1から順にモジュールPまで実行されることとする。モジュール1はモジュール2を呼び出し、モジュール2はモジュール3を呼び出すという階層的な実行方式をとる。
【0015】
ここで、保護すべきモジュールはモジュールPであるとする。実行前の状態では、解析者はモジュールPがアドレスYの位置に存在することは知ることはない。実際にモジュールP−1まで実行し、解析した後でないと、モジュールPを解析することができない。一方、実行時にすべてのモジュールを先に復号化する暗号化方式であると、復号化した後にはプログラム全体の流れを見渡すことが可能となるので、モジュールPが保護すべきモジュールであることが早期に特定でき、モジュールPを解析することが可能である。
【0016】
図2は図1の内容をさらに概略化したものであり、プログラムAの動作を説明するための図である。この図にあるように、初期状態(0201)ではモジュール1の他は暗号化されている。実行が開始されると、モジュール1が実行され、モジュール1の完了前に、モジュール1がモジュール2を復号化し、順次、次のモジュールを復号化しながら実行していく。そして、保護すべきP番目のモジュールを復号化しながら実行し、終了する(0202)。
【0017】
このように、本実施例のプログラム複合体は、プログラムの実行時において、モジュールが実行され終了する直前に次に実行すべきモジュールを復号化する動作が可能である。これにより、実行時になって初めてモジュールのコードが可読となるため、図2において保護すべきP番目のモジュールを解析しようとした場合には、直接P番目のモジュールを解析することは出来ず、順番に実行して解析する必要がある。このため、デバッガなどでプログラムを解析する場合、一度に全ての関数が可読である場合に比べ、大幅に解析に時間がかかることとなる。さらに、暗号化により保護対象関数Pまでの流れが隠蔽されているので、解析者がプログラムの全体像を十分につかめない。
【0018】
<機能的構成>
図3は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」(0300)は、「プログラム本体」(0301)と、「モジュールの集合体」(0302)と、「復号化プログラム」(0303)と、を有する。
【0019】
「プログラム本体」(0301)は、モジュールの集合体より構成される。モジュールは複数存在し、少なくとも1つの、保護すべきモジュールからなる。保護すべきモジュールは暗号化されている。
【0020】
「モジュールの集合体」(0302)は複数のモジュールからなる。ここでモジュールとは、関数や、サブルーチン、メソッドなどを含む。モジュールは次に実行すべき次モジュールが暗号化されている場合には、復号化プログラム(0303)を呼び出し、当該モジュール終了前のタイミングにおいて次モジュールを復号化し、次モジュールを実行する。図3では、モジュール2の次モジュールが保護すべきモジュールとなっている。したがって、モジュール2は、モジュール2の終了前のタイミングにおいて復号化プログラム(0303)を呼び出し、モジュール3を復号化し、実行させる。
【0021】
ここで、モジュールの「実行」とは、モジュールをメモリ等の記憶域にロードして、演算装置にデータを送り込み、その結果を受け取ることで、システムの内部状態に変化を加えることである。「演算装置」は、CPUやMPU、GPUなどの演算可能な装置を指す。これら「演算装置」を内部に組み込み、演算の結果を記憶域において保持可能な装置を「計算機」とする。
【0022】
暗号化されているモジュールは必ずしも、保護すべきモジュールに限らない。解析者を欺くために、保護すべきモジュール以外のモジュールをも暗号化することによって、保護すべき関数に至るまでの道筋を隠蔽することができる。これにより、解析にかかる手間が増大し、耐タンパ性の向上を見込むことができる。
【0023】
図4は「モジュールの終了前のタイミング」を説明するための図である。図の横軸は時間軸であり、モジュールが実行されるタイミングを示す。モジュール1は平文のモジュールであり、終了前に暗号化モジュールであるモジュール2を復号化するために復号化プログラムを呼び出すと共にモジュール2を実行させる。モジュール2は終了前にモジュール3を実行する。モジュール4はモジュール3の終了前のタイミングにて実行が開始され、同時にモジュール2の終了前のタイミングにて実行が開始されている。この場合はモジュール2が復号化プログラムを呼びだしてモジュール4を復号化し、実行してもよいし、モジュール3が復号化プログラムを呼び出し、終了前にモジュール4を復号化し、実行してもよい。モジュール5はモジュール4の終了後に実行されているから、モジュール2の終了前のタイミングでモジュール2が復号化プログラムを呼び出すことによって復号化され実行される。
【0024】
このように、「次に実行されるモジュールである次モジュール」とは、モジュール2とモジュール4との関係や、モジュール2とモジュール5との関係のように、必ずしも次に実行されるモジュールだけに限られない。上記のとおり、モジュール内の適切な位置に復号化プログラムの呼び出しと、次モジュールの実行命令を組み込むことで、要求されたタイミングでモジュールが実行され、適切なプログラムの動作が得られる。
【0025】
「復号化プログラム」(0303)は、次モジュールの復号化を行う。具体的には、実行中のモジュールより次モジュールの記憶域におけるアドレス情報を受け取り、その情報を元に、復号化を行う。復号化プログラムは図2のように、別個独立として存在し、モジュールから呼び出されるものでもよいし、各モジュールに直接埋め込まれたものでもよい。また、復号化プログラムを複数存在させ、複数の種類の暗号化方式に対応させるものでもよい。この場合、実行中のモジュールには次モジュールに適合する暗号化方式の復号化プログラムの実行命令を含ませることができる。
【0026】
<処理の流れ>
図5は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う(ステップS0501)。暗号化されている場合には、復号化するための処理を実行する(ステップS0502)。暗号化されていない場合には、ステップS0502はスキップする。その後次モジュールを実行し(ステップS0503)、プログラムの終了か否かの判断を行い(ステップS0504)、終了で無ければ、ステップS0501に戻る。終了であれば、プログラムを終了させる。
【0027】
<ハードウエア的構成>
図6は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「CPU(中央演算装置)」(0601)と、「揮発性メモリ」(0602)と、「不揮発性メモリ」(0603)とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力I/F」(0604)を有する。そしてそれらが「システムバス」(0605)などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
【0028】
また、「揮発性メモリ」(0601)は、各種処理を行うプログラムを「CPU」(0601)に実行させるために「不揮発性メモリ」(0602)から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。
【0029】
ここで、入出力I/F(0604)からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ(0603)より揮発性メモリ(0602)にロードされる。プログラムAはCPU(0601)により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU(0601)において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU(0601)において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ(0602)に書きこむ。書きこまれたコードはCPU(0601)において実行される。
【0030】
<効果の簡単な説明>
以上のように本実施例のプログラム複合体によって、暗号化された次に実行されるべきモジュールを呼び出し元のモジュールによって復号化し、実行することができる。これにより、モジュールは階層的に実行されることとなり、実行直前まで保護すべきモジュールを暗号化したままとすることが可能である。これにより、一度に全てのモジュールを復号化する場合よりも、解析に手間がかかることとなるため、プログラムの耐タンパ性が向上する。
【0031】
≪実施例2≫
<概要>
図7は、本実施例のプログラム複合体の適用例について説明するための概念図である。この図にあるように、プログラムの実行開始時(0801)においては、モジュール1以外のモジュールが暗号化されている。復号化プログラムによりモジュール1の実行終了前に、次に実行すべきモジュール2を復号化する。そして、モジュール1の終了後においては、モジュール1を記憶域から削除する(0802)。
【0032】
このように本実施例のプログラム複合体は、次に実行すべきモジュールが開始されると、次モジュールを呼び出したモジュールを記憶域から削除することが可能な切換装置である。これにより、プログラム実行終了時において記憶域に残存しているモジュールのコードを解析することが不可能となり、プログラムの耐タンパ性が向上する。
【0033】
<機能的構成>
図8は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」(0800)は、「プログラム本体」(0801)と、「モジュールの集合体」(0802)と、「復号化プログラム」(0803)と、を有する。なお、これら構成要件については上記実施例にて既に記載済みであるのでその説明は省略する。本実施例のプログラム複合体の特徴点は、「プログラム複合体」(0800)が「削除プログラム」(0804)を新たに有する点である。
【0034】
「削除プログラム」(0804)は、次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための処理を行う。図7において説明すると、モジュール2の動作が完了したのを、モジュール2あるいはモジュール3で検知し、モジュール2またはモジュール3からモジュール2の記憶域のアドレスを取得する。取得したアドレスに基づいて、削除プログラムはモジュール2の削除を実行する。
<処理の流れ>
図9は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う(ステップS0901)。暗号化されている場合には、復号化するための処理を実行する(ステップS0902)。暗号化されていない場合には、ステップS0902はスキップする。その後次モジュールを実行開始(ステップS0903)する。次いで、次モジュールは呼出元モジュールの削除を行う(ステップS0904)。その後、プログラムの終了か否かの判断を行い(ステップS0905)、終了で無ければ、ステップS0901に戻る。終了であれば、プログラムを終了させる。
【0035】
<ハードウエア構成>
図10は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「CPU(中央演算装置)」(1001)と、「揮発性メモリ」(1002)と、「不揮発性メモリ」(1003)とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力I/F」(1004)を有する。そしてそれらが「システムバス」(1005)などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
【0036】
また、「揮発性メモリ」(1002)は、各種処理を行うプログラムを「CPU」(1001)に実行させるために「不揮発性メモリ」(1003)から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。
【0037】
ここで、入出力I/F(1004)からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ(1003)より揮発性メモリ(1002)にロードされる。プログラムAはCPU(1001)により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU(1001)において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU(1001)において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ(1002)に書きこむ。書きこまれたコードはCPU(1001)において実行される。
【0038】
平文となったモジュールを実行する際に、プログラムAは削除プログラムをCPU(1001)にて実行する。削除プログラムは、プログラムAのうち先に実行されたモジュールを揮発性メモリ(1002)から削除する。
【0039】
<効果の簡単な説明>
このようにして、実行後のモジュールを削除していくことによって、実行後に記憶域に残っている平文のコードを除くことができる。これにより、実行後のモジュールのコードを解析することが不可能となる。したがって、耐タンパ性の高いプログラム複合体の実行が可能となる。
【0040】
≪実施例3≫
<概要>
図11は、本実施例のプログラム複合体の適用例について説明するための概念図である。この図にあるように、プログラムの実行開始時(1101)においては、モジュール1以外のモジュールが暗号化されている。復号化プログラムによりモジュール1の実行終了前に、次に実行すべきモジュール2を復号化する。そして、モジュール1の終了後においては、モジュール1を再度暗号化する(1102)。
【0041】
このように本実施例のプログラム複合体は、次モジュールの実行時にそのモジュールを呼出した呼出元のモジュールを再度暗号化する処理が可能である。これにより、モジュールあるいはプログラム本体の実行後において、記憶域に残存しているモジュールのコードを解析されることが不可能となる。したがって、プログラム複合体の耐タンパ性が向上する。
【0042】
<機能的構成>
図12は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」(1200)は、「プログラム本体」(1201)と、「モジュールの集合体」(1202)と、「復号化プログラム」(1203)と、を有する。なお、これら構成要件については上記実施例にて既に記載済みであるのでその説明は省略する。本実施例のプログラム複合体の特徴点は、「プログラム複合体」(1200)が「再暗号化プログラム」(1204)を新たに有する点である。
【0043】
「再暗号化プログラム」(1204)は、次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための処理を行う。具体的には、次モジュールの実行開始後において、呼出元モジュール(モジュール2)のアドレス情報を再暗号化プログラムは呼出元モジュールあるいは実行中モジュール(モジュール3)から取得する。実行中モジュールは再暗号化プログラムを実行し、呼出元モジュールを暗号化する。
【0044】
<処理の流れ>
図13は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う(ステップS1301)。暗号化されている場合には、復号化するための処理を実行する(ステップS1302)。暗号化されていない場合には、ステップS1302はスキップする。その後次モジュールを実行開始(ステップS1303)する。次いで、次モジュールは呼出元モジュールの再暗号化を行う(ステップS1304)。その後、プログラムの終了か否かの判断を行い(ステップS1305)、終了で無ければ、ステップS1301に戻る。終了であれば、プログラムを終了させる。
【0045】
<ハードウエア構成>
図14は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「CPU(中央演算装置)」(1401)と、「揮発性メモリ」(1402)と、「不揮発性メモリ」(1403)とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力I/F」(1404)を有する。そしてそれらが「システムバス」(1405)などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
【0046】
また、「揮発性メモリ」(1402)は、各種処理を行うプログラムを「CPU」(1401)に実行させるために「不揮発性メモリ」(1403)から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。
【0047】
ここで、入出力I/F(1404)からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ(1403)より揮発性メモリ(1402)にロードされる。プログラムAはCPU(1401)により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU(1401)において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU(1401)において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ(1402)に書きこむ。書きこまれたコードはCPU(1401)において実行される。
【0048】
平文となったモジュールを実行する際に、プログラムAは再暗号化プログラムをCPU(1401)にて実行する。再暗号化プログラムは、プログラムAのうち先に実行されたモジュールを再度暗号化し、不揮発性メモリないしは揮発性メモリに保持する。
【0049】
<効果の簡単な説明>
このようにして、本実施例のプログラム複合体は、実行後に記憶域に残っている平文のコードを再び暗号化できる。これにより、実行後のモジュールのコードを解析することが不可能となる。したがって、耐タンパ性の高いプログラム複合体の実行が可能となる。
【図面の簡単な説明】
【0050】
【図1】実施例1のプログラム複合体による処理の概要を説明するための図
【図2】実施例1のプログラム複合体による処理の一例を説明するための図
【図3】実施例1のプログラム複合体の機能ブロックの一例を表す図
【図4】実施例1のプログラム複合体の処理の一例を説明するためのタイミングチャート
【図5】実施例1のプログラム複合体における処理の流れの一例を表すフローチャート
【図6】実施例1のプログラム複合体におけるハードウエア構成の一例を表す概略図
【図7】実施例2のプログラム複合体による処理の一例を説明するための図
【図8】実施例2のプログラム複合体の機能ブロックの一例を表す図
【図9】実施例2のプログラム複合体における処理の流れの一例を表すフローチャート
【図10】実施例2のプログラム複合体におけるハードウエア構成の一例を表す概略図
【図11】実施例3のプログラム複合体による処理の一例を説明するための図
【図12】実施例3のプログラム複合体の機能ブロックの一例を表す図
【図13】実施例3のプログラム複合体における処理の流れの一例を表すフローチャート
【図14】実施例3のプログラム複合体におけるハードウエア構成の一例を表す概略図
【符号の説明】
【0051】
0300 プログラム複合体
0301 プログラム本体
0302 モジュールの集合体
0303 復号化プログラム
【技術分野】
【0001】
本発明は、ソフトウエアの耐タンパ性を向上させる技術に関する。
【背景技術】
【0002】
ソフトウエアのうち、例えば認証アルゴリズムを含むもののように、その中身を知られたくないものが存在する。にもかかわらず、ソースコードはもとより、実行形式のソフトウエアにおいても、逆アセンブルやデバッギングにより、ソフトウエアのアルゴリズム等の内容が明るみにされるという脅威が存在する。特許文献1には以下のような技術が開示されている。該技術では、ソースコードにおける条件分岐命令を複雑化することにより分岐条件の解析を困難とする。これにより、コードの難読性を高め、上記のような脅威を回避することを目指している。つまり、逆アセンブル等が可能であっても、それによって解析され生じたソースコード自体の難読性により、解析の手間が生じる。このようにして、ソフトウエアの耐タンパ性の向上を図ることができる。
【特許文献1】特開2011−28506号公報
【発明の開示】
【発明が解決しようとする課題】
【0003】
しかし、ソースコード自体の難読性を上げても、そこから生じる実行形式のコード自体が平文であるため、時間をかければ必ず解析が可能である点が問題となる。そこで、実行形式のコードを暗号化し実行時に復号化するという方法が考えられる。これにより、記憶域に保存された状態の実行形式のファイルについては、暗号化されているため、解析がほぼ不可能である。しかしながら、暗号化するだけでは実行時には何らかの形で復号化する必要があり、復号化し実行中のコードについてはデバッガ等による解析が可能である点が問題となる。例えば、実行時に全てのコードを復号化してから実行する方法であると、実行前においては暗号化されているため、解析はほぼ不可能であるが、実行時にプログラム全てを復号化する方式であると、メモリ上において復号化されたプログラムがロードされた状態のイメージを解析することにより、その内容を把握することが可能である。そうすると、暗号化されたモジュールを容易に解析できないような、プログラムの実行方式の実現という課題が生じる。
【課題を解決するための手段】
【0004】
以上の課題を解決するために、第一に本発明は以下のようなプログラム複合体を提供する。該プログラム複合体は複数のモジュールから構成されている。実行前においては、少なくとも一つのモジュールは暗号化データで保持され、実行時においては暗号化されたモジュールの前に実行されるモジュールが復号化の処理を行い、復号化されたモジュールが実行されるといったプログラム複合体である。
【0005】
具体的には、モジュールの集合体からなるプログラム本体であって、各モジュールのうち少なくとも一つは非実行時には暗号化された状態であるプログラム本体と、次に実行されるモジュールである次モジュールが、暗号化されている場合には、現在実行中のモジュールの終了前のタイミングにて演算装置が実行可能に復号化するための処理を計算機に実行させるための復号化プログラムと、からなるプログラム複合体である。
【0006】
第二は、上記第一のプログラム複合体を基本として、次に実行されるモジュールを呼び出した後、そのモジュールを記憶域から削除する処理を行うプログラム複合体である。
【0007】
具体的には、次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための削除プログラムをさらに有する請求項1に記載のプログラム複合体である。
【0008】
第三は、上記第一のプログラム複合体を基本として、次に実行されるモジュールを呼び出した後、そのモジュールを再度暗号化する処理を行うプログラム複合体である。
【0009】
具体的には、次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための再暗号化プログラムをさらに有する請求項1に記載のプログラム複合体。
【発明の効果】
【0010】
以上のような構成をとる第一の本発明によって、実行前には暗号化データでモジュールを保持し、実行時に暗号化されたモジュールを直前に復号化して実行することが可能である。そうすると、実行直前まで、秘匿したいモジュールを暗号化の状態とすることが可能である。このため、デバッガ等でプログラムを解析する場合においても、一度に全てのモジュールが可読で有る場合に比べて、解析に手間がかかることとなる。これにより、プログラムの耐タンパ性が向上することとなる。
【0011】
また、第二の本発明によって、秘匿したいモジュールを実行した後に速やかに記憶媒体より削除することが可能となる。これにより、実行後に記憶域に残存している平文のモジュールを消去し、その内容を解析することを不可能とすることができる。これにより、実行時のみ平文のモジュールが記憶域に存在する動作が可能となり、プログラムの耐タンパ性が向上することとなる。
【0012】
また、第三の本発明によって、秘匿したいモジュールを実行した後に速やかに再暗号化することが可能となる。これにより、実行後に記憶域に残存している平文のモジュールを暗号化し、その内容を解析することを不可能とすることができる。これにより、実行時のみ平文のモジュールが記憶域に存在する動作が可能となり、プログラムの耐タンパ性が向上することとなる。
【発明を実施するための最良の形態】
【0013】
以下に、図を用いて本発明の実施の形態を説明する。なお、本発明はこれら実施の形態に何ら限定されるものではなく、その要旨を逸脱しない範囲において、種々なる態様で実施しうる。なお、実施例1は、主に請求項1、2、3について説明する。また、実施例2は、主に請求項4について説明する。また、実施例3は、主に請求項5について説明する。
【0014】
≪実施例1≫
<概要>
図1は、本実施例のプログラム複合体の動作の一例を説明するための概念図である。この図にあるように、プログラムAとしたプログラム複合体は記憶域のアドレスXからアドレスYの間にモジュールP個が存在している。モジュール2からモジュールPは暗号化されている。プログラムは、モジュール1から順にモジュールPまで実行されることとする。モジュール1はモジュール2を呼び出し、モジュール2はモジュール3を呼び出すという階層的な実行方式をとる。
【0015】
ここで、保護すべきモジュールはモジュールPであるとする。実行前の状態では、解析者はモジュールPがアドレスYの位置に存在することは知ることはない。実際にモジュールP−1まで実行し、解析した後でないと、モジュールPを解析することができない。一方、実行時にすべてのモジュールを先に復号化する暗号化方式であると、復号化した後にはプログラム全体の流れを見渡すことが可能となるので、モジュールPが保護すべきモジュールであることが早期に特定でき、モジュールPを解析することが可能である。
【0016】
図2は図1の内容をさらに概略化したものであり、プログラムAの動作を説明するための図である。この図にあるように、初期状態(0201)ではモジュール1の他は暗号化されている。実行が開始されると、モジュール1が実行され、モジュール1の完了前に、モジュール1がモジュール2を復号化し、順次、次のモジュールを復号化しながら実行していく。そして、保護すべきP番目のモジュールを復号化しながら実行し、終了する(0202)。
【0017】
このように、本実施例のプログラム複合体は、プログラムの実行時において、モジュールが実行され終了する直前に次に実行すべきモジュールを復号化する動作が可能である。これにより、実行時になって初めてモジュールのコードが可読となるため、図2において保護すべきP番目のモジュールを解析しようとした場合には、直接P番目のモジュールを解析することは出来ず、順番に実行して解析する必要がある。このため、デバッガなどでプログラムを解析する場合、一度に全ての関数が可読である場合に比べ、大幅に解析に時間がかかることとなる。さらに、暗号化により保護対象関数Pまでの流れが隠蔽されているので、解析者がプログラムの全体像を十分につかめない。
【0018】
<機能的構成>
図3は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」(0300)は、「プログラム本体」(0301)と、「モジュールの集合体」(0302)と、「復号化プログラム」(0303)と、を有する。
【0019】
「プログラム本体」(0301)は、モジュールの集合体より構成される。モジュールは複数存在し、少なくとも1つの、保護すべきモジュールからなる。保護すべきモジュールは暗号化されている。
【0020】
「モジュールの集合体」(0302)は複数のモジュールからなる。ここでモジュールとは、関数や、サブルーチン、メソッドなどを含む。モジュールは次に実行すべき次モジュールが暗号化されている場合には、復号化プログラム(0303)を呼び出し、当該モジュール終了前のタイミングにおいて次モジュールを復号化し、次モジュールを実行する。図3では、モジュール2の次モジュールが保護すべきモジュールとなっている。したがって、モジュール2は、モジュール2の終了前のタイミングにおいて復号化プログラム(0303)を呼び出し、モジュール3を復号化し、実行させる。
【0021】
ここで、モジュールの「実行」とは、モジュールをメモリ等の記憶域にロードして、演算装置にデータを送り込み、その結果を受け取ることで、システムの内部状態に変化を加えることである。「演算装置」は、CPUやMPU、GPUなどの演算可能な装置を指す。これら「演算装置」を内部に組み込み、演算の結果を記憶域において保持可能な装置を「計算機」とする。
【0022】
暗号化されているモジュールは必ずしも、保護すべきモジュールに限らない。解析者を欺くために、保護すべきモジュール以外のモジュールをも暗号化することによって、保護すべき関数に至るまでの道筋を隠蔽することができる。これにより、解析にかかる手間が増大し、耐タンパ性の向上を見込むことができる。
【0023】
図4は「モジュールの終了前のタイミング」を説明するための図である。図の横軸は時間軸であり、モジュールが実行されるタイミングを示す。モジュール1は平文のモジュールであり、終了前に暗号化モジュールであるモジュール2を復号化するために復号化プログラムを呼び出すと共にモジュール2を実行させる。モジュール2は終了前にモジュール3を実行する。モジュール4はモジュール3の終了前のタイミングにて実行が開始され、同時にモジュール2の終了前のタイミングにて実行が開始されている。この場合はモジュール2が復号化プログラムを呼びだしてモジュール4を復号化し、実行してもよいし、モジュール3が復号化プログラムを呼び出し、終了前にモジュール4を復号化し、実行してもよい。モジュール5はモジュール4の終了後に実行されているから、モジュール2の終了前のタイミングでモジュール2が復号化プログラムを呼び出すことによって復号化され実行される。
【0024】
このように、「次に実行されるモジュールである次モジュール」とは、モジュール2とモジュール4との関係や、モジュール2とモジュール5との関係のように、必ずしも次に実行されるモジュールだけに限られない。上記のとおり、モジュール内の適切な位置に復号化プログラムの呼び出しと、次モジュールの実行命令を組み込むことで、要求されたタイミングでモジュールが実行され、適切なプログラムの動作が得られる。
【0025】
「復号化プログラム」(0303)は、次モジュールの復号化を行う。具体的には、実行中のモジュールより次モジュールの記憶域におけるアドレス情報を受け取り、その情報を元に、復号化を行う。復号化プログラムは図2のように、別個独立として存在し、モジュールから呼び出されるものでもよいし、各モジュールに直接埋め込まれたものでもよい。また、復号化プログラムを複数存在させ、複数の種類の暗号化方式に対応させるものでもよい。この場合、実行中のモジュールには次モジュールに適合する暗号化方式の復号化プログラムの実行命令を含ませることができる。
【0026】
<処理の流れ>
図5は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う(ステップS0501)。暗号化されている場合には、復号化するための処理を実行する(ステップS0502)。暗号化されていない場合には、ステップS0502はスキップする。その後次モジュールを実行し(ステップS0503)、プログラムの終了か否かの判断を行い(ステップS0504)、終了で無ければ、ステップS0501に戻る。終了であれば、プログラムを終了させる。
【0027】
<ハードウエア的構成>
図6は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「CPU(中央演算装置)」(0601)と、「揮発性メモリ」(0602)と、「不揮発性メモリ」(0603)とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力I/F」(0604)を有する。そしてそれらが「システムバス」(0605)などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
【0028】
また、「揮発性メモリ」(0601)は、各種処理を行うプログラムを「CPU」(0601)に実行させるために「不揮発性メモリ」(0602)から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。
【0029】
ここで、入出力I/F(0604)からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ(0603)より揮発性メモリ(0602)にロードされる。プログラムAはCPU(0601)により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU(0601)において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU(0601)において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ(0602)に書きこむ。書きこまれたコードはCPU(0601)において実行される。
【0030】
<効果の簡単な説明>
以上のように本実施例のプログラム複合体によって、暗号化された次に実行されるべきモジュールを呼び出し元のモジュールによって復号化し、実行することができる。これにより、モジュールは階層的に実行されることとなり、実行直前まで保護すべきモジュールを暗号化したままとすることが可能である。これにより、一度に全てのモジュールを復号化する場合よりも、解析に手間がかかることとなるため、プログラムの耐タンパ性が向上する。
【0031】
≪実施例2≫
<概要>
図7は、本実施例のプログラム複合体の適用例について説明するための概念図である。この図にあるように、プログラムの実行開始時(0801)においては、モジュール1以外のモジュールが暗号化されている。復号化プログラムによりモジュール1の実行終了前に、次に実行すべきモジュール2を復号化する。そして、モジュール1の終了後においては、モジュール1を記憶域から削除する(0802)。
【0032】
このように本実施例のプログラム複合体は、次に実行すべきモジュールが開始されると、次モジュールを呼び出したモジュールを記憶域から削除することが可能な切換装置である。これにより、プログラム実行終了時において記憶域に残存しているモジュールのコードを解析することが不可能となり、プログラムの耐タンパ性が向上する。
【0033】
<機能的構成>
図8は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」(0800)は、「プログラム本体」(0801)と、「モジュールの集合体」(0802)と、「復号化プログラム」(0803)と、を有する。なお、これら構成要件については上記実施例にて既に記載済みであるのでその説明は省略する。本実施例のプログラム複合体の特徴点は、「プログラム複合体」(0800)が「削除プログラム」(0804)を新たに有する点である。
【0034】
「削除プログラム」(0804)は、次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための処理を行う。図7において説明すると、モジュール2の動作が完了したのを、モジュール2あるいはモジュール3で検知し、モジュール2またはモジュール3からモジュール2の記憶域のアドレスを取得する。取得したアドレスに基づいて、削除プログラムはモジュール2の削除を実行する。
<処理の流れ>
図9は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う(ステップS0901)。暗号化されている場合には、復号化するための処理を実行する(ステップS0902)。暗号化されていない場合には、ステップS0902はスキップする。その後次モジュールを実行開始(ステップS0903)する。次いで、次モジュールは呼出元モジュールの削除を行う(ステップS0904)。その後、プログラムの終了か否かの判断を行い(ステップS0905)、終了で無ければ、ステップS0901に戻る。終了であれば、プログラムを終了させる。
【0035】
<ハードウエア構成>
図10は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「CPU(中央演算装置)」(1001)と、「揮発性メモリ」(1002)と、「不揮発性メモリ」(1003)とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力I/F」(1004)を有する。そしてそれらが「システムバス」(1005)などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
【0036】
また、「揮発性メモリ」(1002)は、各種処理を行うプログラムを「CPU」(1001)に実行させるために「不揮発性メモリ」(1003)から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。
【0037】
ここで、入出力I/F(1004)からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ(1003)より揮発性メモリ(1002)にロードされる。プログラムAはCPU(1001)により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU(1001)において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU(1001)において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ(1002)に書きこむ。書きこまれたコードはCPU(1001)において実行される。
【0038】
平文となったモジュールを実行する際に、プログラムAは削除プログラムをCPU(1001)にて実行する。削除プログラムは、プログラムAのうち先に実行されたモジュールを揮発性メモリ(1002)から削除する。
【0039】
<効果の簡単な説明>
このようにして、実行後のモジュールを削除していくことによって、実行後に記憶域に残っている平文のコードを除くことができる。これにより、実行後のモジュールのコードを解析することが不可能となる。したがって、耐タンパ性の高いプログラム複合体の実行が可能となる。
【0040】
≪実施例3≫
<概要>
図11は、本実施例のプログラム複合体の適用例について説明するための概念図である。この図にあるように、プログラムの実行開始時(1101)においては、モジュール1以外のモジュールが暗号化されている。復号化プログラムによりモジュール1の実行終了前に、次に実行すべきモジュール2を復号化する。そして、モジュール1の終了後においては、モジュール1を再度暗号化する(1102)。
【0041】
このように本実施例のプログラム複合体は、次モジュールの実行時にそのモジュールを呼出した呼出元のモジュールを再度暗号化する処理が可能である。これにより、モジュールあるいはプログラム本体の実行後において、記憶域に残存しているモジュールのコードを解析されることが不可能となる。したがって、プログラム複合体の耐タンパ性が向上する。
【0042】
<機能的構成>
図12は、本実施例のプログラム複合体における機能ブロックの一例を表す図である。この図にあるように、本実施例の「プログラム複合体」(1200)は、「プログラム本体」(1201)と、「モジュールの集合体」(1202)と、「復号化プログラム」(1203)と、を有する。なお、これら構成要件については上記実施例にて既に記載済みであるのでその説明は省略する。本実施例のプログラム複合体の特徴点は、「プログラム複合体」(1200)が「再暗号化プログラム」(1204)を新たに有する点である。
【0043】
「再暗号化プログラム」(1204)は、次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための処理を行う。具体的には、次モジュールの実行開始後において、呼出元モジュール(モジュール2)のアドレス情報を再暗号化プログラムは呼出元モジュールあるいは実行中モジュール(モジュール3)から取得する。実行中モジュールは再暗号化プログラムを実行し、呼出元モジュールを暗号化する。
【0044】
<処理の流れ>
図13は、本実施例のプログラム複合体における処理の流れの一例を表すフローチャートである。まず、次モジュールは暗号化されているか否かの判断を行う(ステップS1301)。暗号化されている場合には、復号化するための処理を実行する(ステップS1302)。暗号化されていない場合には、ステップS1302はスキップする。その後次モジュールを実行開始(ステップS1303)する。次いで、次モジュールは呼出元モジュールの再暗号化を行う(ステップS1304)。その後、プログラムの終了か否かの判断を行い(ステップS1305)、終了で無ければ、ステップS1301に戻る。終了であれば、プログラムを終了させる。
【0045】
<ハードウエア構成>
図14は、上記機能的な各構成要件をハードウエアとして実現した際の、プログラム複合体における構成の一例を表す概略図である。この図を利用してアプリケーション切換処理におけるそれぞれのハードウエア構成部の働きについて説明する。この図にあるように、本実施例のプログラム複合体は、各種演算処理を行う「CPU(中央演算装置)」(1401)と、「揮発性メモリ」(1402)と、「不揮発性メモリ」(1403)とを有している。また、ユーザからの操作入力を受け付けるマウスやキーボードなどや、表示装置などが接続される「入出力I/F」(1404)を有する。そしてそれらが「システムバス」(1405)などのデータ通信経路によって相互に接続され、情報の送受信や処理を行う。
【0046】
また、「揮発性メモリ」(1402)は、各種処理を行うプログラムを「CPU」(1401)に実行させるために「不揮発性メモリ」(1403)から読み出すと同時にそのプログラムの作業領域でもあるワーク領域を提供する。
【0047】
ここで、入出力I/F(1404)からのコマンドにより、プログラムAが起動される。そうすると、プログラムAが不揮発性メモリ(1403)より揮発性メモリ(1402)にロードされる。プログラムAはCPU(1401)により処理が実行される。プログラムAはN個のモジュールと復号化プログラムからなる。モジュールは順にCPU(1401)において実行され、次のモジュールが暗号化されていると判断された場合には現在実行中のモジュールにより、復号化プログラムをCPU(1401)において実行し、暗号化されたモジュールをデコードして平文のモジュールとしそのコードを揮発性メモリ(1402)に書きこむ。書きこまれたコードはCPU(1401)において実行される。
【0048】
平文となったモジュールを実行する際に、プログラムAは再暗号化プログラムをCPU(1401)にて実行する。再暗号化プログラムは、プログラムAのうち先に実行されたモジュールを再度暗号化し、不揮発性メモリないしは揮発性メモリに保持する。
【0049】
<効果の簡単な説明>
このようにして、本実施例のプログラム複合体は、実行後に記憶域に残っている平文のコードを再び暗号化できる。これにより、実行後のモジュールのコードを解析することが不可能となる。したがって、耐タンパ性の高いプログラム複合体の実行が可能となる。
【図面の簡単な説明】
【0050】
【図1】実施例1のプログラム複合体による処理の概要を説明するための図
【図2】実施例1のプログラム複合体による処理の一例を説明するための図
【図3】実施例1のプログラム複合体の機能ブロックの一例を表す図
【図4】実施例1のプログラム複合体の処理の一例を説明するためのタイミングチャート
【図5】実施例1のプログラム複合体における処理の流れの一例を表すフローチャート
【図6】実施例1のプログラム複合体におけるハードウエア構成の一例を表す概略図
【図7】実施例2のプログラム複合体による処理の一例を説明するための図
【図8】実施例2のプログラム複合体の機能ブロックの一例を表す図
【図9】実施例2のプログラム複合体における処理の流れの一例を表すフローチャート
【図10】実施例2のプログラム複合体におけるハードウエア構成の一例を表す概略図
【図11】実施例3のプログラム複合体による処理の一例を説明するための図
【図12】実施例3のプログラム複合体の機能ブロックの一例を表す図
【図13】実施例3のプログラム複合体における処理の流れの一例を表すフローチャート
【図14】実施例3のプログラム複合体におけるハードウエア構成の一例を表す概略図
【符号の説明】
【0051】
0300 プログラム複合体
0301 プログラム本体
0302 モジュールの集合体
0303 復号化プログラム
【特許請求の範囲】
【請求項1】
モジュールの集合体からなるプログラム本体であって、
各モジュールのうち少なくとも一つは非実行時には暗号化された状態であるプログラム本体と、
次に実行されるモジュールである次モジュールが、暗号化されている場合には、現在実行中のモジュールの終了前のタイミングにて演算装置が実行可能に復号化するための処理を計算機に実行させるための復号化プログラムと、からなるプログラム複合体。
【請求項2】
請求項1に記載の復号化プログラム。
【請求項3】
請求項1に記載の復号化プログラムを実行可能に前記暗号化を計算機に実行させるための暗号化プログラム。
【請求項4】
次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための削除プログラムをさらに有する請求項1に記載のプログラム複合体。
【請求項5】
次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための再暗号化プログラムをさらに有する請求項1に記載のプログラム複合体。
【請求項1】
モジュールの集合体からなるプログラム本体であって、
各モジュールのうち少なくとも一つは非実行時には暗号化された状態であるプログラム本体と、
次に実行されるモジュールである次モジュールが、暗号化されている場合には、現在実行中のモジュールの終了前のタイミングにて演算装置が実行可能に復号化するための処理を計算機に実行させるための復号化プログラムと、からなるプログラム複合体。
【請求項2】
請求項1に記載の復号化プログラム。
【請求項3】
請求項1に記載の復号化プログラムを実行可能に前記暗号化を計算機に実行させるための暗号化プログラム。
【請求項4】
次モジュールの実行開始後に次モジュールを呼び出したモジュールである呼出元モジュールを演算装置用記憶媒体から削除する処理を計算機に実行させるための削除プログラムをさらに有する請求項1に記載のプログラム複合体。
【請求項5】
次モジュールの実行開始後に呼出元モジュールを演算装置用記憶媒体にて再暗号化する処理を計算機に実行させるための再暗号化プログラムをさらに有する請求項1に記載のプログラム複合体。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【公開番号】特開2013−65237(P2013−65237A)
【公開日】平成25年4月11日(2013.4.11)
【国際特許分類】
【出願番号】特願2011−204370(P2011−204370)
【出願日】平成23年9月20日(2011.9.20)
【出願人】(398055691)株式会社ハイパーテック (7)
【Fターム(参考)】
【公開日】平成25年4月11日(2013.4.11)
【国際特許分類】
【出願日】平成23年9月20日(2011.9.20)
【出願人】(398055691)株式会社ハイパーテック (7)
【Fターム(参考)】
[ Back to top ]