(57)【特許請求の範囲】
【請求項１】
プログラムであるデータを取得するデータ取得部と、
前記データ取得部で取得したデータを暗号化するための関数である暗号化関数を取得する暗号化関数取得部と、
前記暗号化関数取得部で取得された暗号化関数により、前記データ取得部で取得されたデータを暗号化して暗号化データを生成するデータ暗号化部と、
前記データ暗号化部により生成される暗号化データを復号化するための復号化関数を取得する復号化関数取得部と、
前記データ暗号化部により生成された暗号化データと、前記復号化関数取得部で取得された復号化関数と、に基づいて、復号化関数の識別子である復号化関数識別子を含み、かつ暗号化された復号化関数を含まない統合データを生成する統合データ生成部と、
を有し、
前記統合データ生成部で生成された統合データは、計算機における実行操作により前記復号化関数、及び、前記暗号化データを取得可能であるとともに、取得された復号化関数、及び、暗号化データを前記復号化関数に適用して得られるデータを前記計算機の主記憶にのみ保持するように構成されるプログラムである処理装置。
【請求項２】
前記復号化関数は、統合データが実行される計算機内にデバッガが存在するかどうかを確認する機能を有する請求項１に記載の処理装置。
【請求項３】
プログラムであるデータを取得するデータ取得ステップと、
前記データ取得ステップで取得したデータを暗号化するための関数である暗号化関数を取得する暗号化関数取得ステップと、
前記暗号化関数取得ステップで取得された暗号化関数により、前記データ取得ステップで取得されたデータを暗号化して暗号化データを生成するデータ暗号化ステップと、
前記データ暗号化ステップにより生成される暗号化データを復号するための復号化関数を取得する復号化関数取得ステップと、
前記データ暗号化ステップにより生成された暗号化データと前記復号化関数取得ステップにより取得された復号化関数と、に基づいて復号化関数の識別子である復号化関数識別子を含み、かつ暗号化された復号化関数を含まない統合データを生成する統合データ生成ステップと、
を含む計算機の処理方法であって、
前記統合データ生成ステップで生成された統合データは、
計算機における実行操作により前記復号化関数、及び、前記暗号化データを取得可能であるとともに、取得された復号化関数、及び、暗号化データを前記復号化関数に適用して得られるデータを前記計算機の主記憶にのみ保持するように構成されるプログラムである計算機の処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを暗号化して含み、所定の操作を加えることにより復号化をすることが可能な統合データを生成する処理装置及び処理方法に関する。
【背景技術】
【０００２】
データを暗号化して統合データに含ませ、データが必要となった場合にのみ、暗号化されたデータを符号化することは、コンテンツの配信やプログラムの配布において行なわれている。
【０００３】
例えば、コンテンツの配信においては、著作権などの保護のためにコンテンツを暗号化して配信し、コンテンツを再生する間だけ暗号化されたコンテンツが復号化され、保持される。また、プログラムの配布においては、権原を有する者だけがそのプログラムを実行可能とするため、様々な保護手段が用いられるが、その保護手段を破られないようにするために、プログラムを暗号化して配布し、実行時に暗号化されたプログラムを復号化することが行なわれる。例えば、非特許文献１の第５章には、プログラムを暗号化し、実行時に復号化を行なってそのプログラムを実行するプログラムを生成するフリーウェアなどが紹介されている。
【０００４】
図１５は、上記のフリーウェアなどにより、データであるプログラムを暗号化した状態を例示する。生成されたプログラム１５０１の中に、復号化関数１５０２と暗号化データ１５０３とが含まれている。プログラム１５０１を実行すると、復号化関数１５０２を暗号化データ１５０３に適用して、暗号化データが復号化され、データが得られる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Ｐａｖｏｌ  ▲Ｃ▼ｅｒｖｅ▲ｎ▼著、"ＣＲＡＣＫＰＲＯＯＦ  ＹＯＵＲ  ＳＯＦＴＷＡＲＥ"、ＮＯ  ＳＴＡＲＣＨ  ＰＲＥＳＳ、米国、２００２年
【発明の概要】
【発明が解決しようとする課題】
【０００６】
図１５に例示されたような形式でプログラムなどを暗号化した場合、例えば、復号化関数１５０２を逆アセンブルなどすることにより、復号化関数の動作が容易に解析されてしまう。これにより、暗号化データ部分を取り出して、解析した結果に基づいて復号化をすることにより、暗号化データが容易に復号化されてしまうという課題がある。
【０００７】
そこで、本発明は、暗号化データが容易に復号化されないようなプログラムなどを生成する処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
かかる課題を解決するために、本発明が提供する処理装置は、データを取得し、取得したデータを暗号化するための暗号化関数を取得し、その暗号化関数によりデータを暗号化して暗号化データを生成し、また、暗号化データを復号化するための復号化関数を取得し、暗号化データと復号化関数に基づいて、直接的には復号化関数を示す情報を含まない統合データを生成する。なお、その統合データは、所定の操作を加えることにより、復号化関数と暗号化データとを取得可能に構成されているものとする。
【０００９】
このような処理装置により、生成される統合データには、直接的には復号化関数が含まれていないので、復号化関数を解析されることがなく、課題が解決される。
【００１０】
なお、取得したデータを暗号化する暗号化関数は、暗号化前と暗号化後のデータのサイズが等しくなるようなものであってもよい。これにより、統合データに含まれる暗号化データを復号化して得られるデータで置き換えることが可能となり、復号化して得られるデータがハードディスクなどに別途記録される可能性が少なくなる。
【００１１】
また、復号化関数は、暗号化されるようになっていてもよい。
【００１２】
また、復号化関数の暗号化は、暗号化前と暗号化後とでサイズが等しくなるようなものを用いてもよい。
【００１３】
また、復号化関数、復号化で得られるデータは、計算機の主記憶にのみ保持されるようになっていてもよい。
【００１４】
また、暗号化関数により暗号化されるデータはプログラムであってもよく、統合データは、復号化関数を取得して、復号化関数を暗号化データに適用し、得られたデータを実行するプログラムであってもよい。
【発明の効果】
【００１５】
本発明により、生成される統合データには、直接的には復号化関数が含まれていないので、復号化関数を解析されることがなく、権原無く復号化がされることを防止することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施形態１に係る処理装置の機能ブロック図
【図２】統合データと暗号化データと復号化関数との関係の一例図
【図３】本発明の実施形態１に係る処理装置の処理の流れ図
【図４】可逆的なインストラクションの一例図
【図５】可逆的なインストラクションで構成される暗号化関数と復号化関数との関係を示す図
【図６】発明の効果を説明する一例図
【図７】本発明の実施形態３に係る処理装置の機能ブロック図
【図８】統合データの構造の一例図
【図９】暗号化関数を復号化するための情報を含む統合データの構造の一例図
【図１０】本発明の実施形態５に係る処理装置により生成された統合データの処理の流れ図
【図１１】本発明の実施形態７に係る処理装置が生成する統合データの構造
【図１２】プログラムである統合データの動作を説明する流れ図
【図１３】ランニングラインを説明するための図
【図１４】統合データの変化を説明するための図
【図１５】従来の暗号化の形式の一例図
【発明を実施するための形態】
【００１７】
以下、本発明を実施するために最良の形態について、実施形態として図を用いて説明する。なお、本発明はこれら実施形態に何ら限定されるものでなく、その要旨を逸脱しない範囲において、種々なる態様で実施し得る。
【００１８】
（実施形態１：主に請求項１、９について説明する）
【００１９】
本発明の実施形態１として、データを取得し、暗号化データを生成し、その暗号化データと、その暗号化データを復号化する関数と、に基づいて、直接的には復号化する関数を含まない統合データを生成する処理装置について説明する。
【００２０】
（実施形態１：構成）
【００２１】
図１は、本発明の実施形態１に係る処理装置の機能ブロック図を例示する。処理装置１００は、データ取得部１０１と、暗号化関数取得部１０２と、データ暗号化部１０３と、復号化関数取得部１０４と、統合データ生成部１０５と、を有する。
【００２２】
「データ取得部」１０１は、データを取得する。データは特定の種類や形式のものに限定されることはない。本発明に係る処理装置が、主にデジタルデータを扱う装置であれば、計算機にファイルとして格納できるデータであればよい。例えば、テキストデータ、プログラム（コンパイル済のものを含む）、静止画データ、音声データ、動画データなどがある。データの取得の態様には様々あり、例えば、ファイル名を指定したり、データそのものあるいは、ＢＡＳＥ６４などでテキストデータにエンコードしたデータを入力ウィンドウに入力したりする。また、処理装置に接続されたカメラやマイクなどにより、撮影などにより、データが得られるようになっていてもよい。また、処理装置内でのシミュレーションなどを行なった結果のデータを得るようになっていてもよい。この意味で、本明細書においては、「取得」には「生成」という意味も含まれるものとする。
【００２３】
「暗号化関数取得部」１０２は、データ取得部１０１で取得したデータを暗号化するための関数である暗号化関数を取得する。本実施形態では、暗号化関数については特に限定はしない。いずれの暗号化関数であってもよい。なお、「暗号化関数」と述べているが、これは暗号化を行なうためのプログラム全般を意味するために「関数」という名称を使用している。プログラミング言語によっては、「手続き（ｐｒｏｃｅｄｕｒｅ）」という名前である場合もあるが、手続きという言葉も本明細書の関数という言葉の意味に含まれるものとする。
【００２４】
「データ暗号化部」１０３は、暗号化関数取得部１０２で取得された暗号化関数により、データ取得部１０１で取得されたデータを暗号化して暗号化データを生成する。すなわち、暗号化関数をデータに対して適用する部である。
【００２５】
「復号化関数取得部」１０４は、データ暗号化部１０３により生成される暗号化データを復号化するための復号化関数を取得する。すなわち、暗号化関数取得部１０２で取得された暗号化関数と対になる復号化関数を取得する。「対になる」とは、暗号化関数で暗号化されたデータを復号化関数に適用することにより、暗号化関数を適用する前のデータが得られることをいう。例えば、暗号化関数が特定のビットパターンでビット毎にＸＯＲ（排他的論理和）を適用する場合には、復号化関数は同じビットパターンでＸＯＲを適用する関数である。また、暗号化関数が、公開鍵暗号方式の秘密鍵で暗号化を行なう関数であれば、復号化関数は、秘密鍵に対応する公開鍵で復号化を行なう関数となる。
【００２６】
「統合データ生成部」１０５は、データ暗号化部１０３により生成された暗号化データと、復号化関数取得部１０４で取得された復号化関数と、に基づいて、直接的には前記復号化関数を示す情報を含まない統合データを生成する。
【００２７】
「前記復号化関数」とは、復号化関数取得部１０４で取得された復号化関数を意味する。また、「直接的には前記復号化関数を示す情報を含まない」とは、復号化関数そのものを含まず、また、統合データのみによっては復号化関数を導出できないことを意味する。例えば、統合データが復号化関数やそれを示す情報を全く含まない場合がある。また、予め、復号化関数に識別子を付与しておき、統合データには、復号化関数に付与した識別子を含ませるようにしておき、復号化関数と識別子の関係は秘密に保持されるようになっていてもよい。
【００２８】
本実施形態においては、統合データ生成部１０５で生成された統合データは、所定の操作を加えることにより、前記復号化関数、及び、前記暗号化データを取得可能に構成されている。
【００２９】
図２は、統合データと暗号化データと復号化関数との関係を模式的に示す。例えば、統合データ２００に、暗号化データ２０１と、復号化関数の識別子である復号化関数識別子２０２が含まれており、所定の操作を行なうことにより、暗号化データ２０１と、復号化関数２０３と、が得られるようになっている。
【００３０】
「所定の操作」とは、予め定められた操作を意味する。例えば、予め定められたプログラムに統合データを入力することを意味する。そのプログラムは、統合データを読み取り、統合データより暗号化データを取得し、また、例えば、自身に含まれる復号化関数を取得する。あるいは、統合データに図２に例示されるように復号化関数識別子が含まれている場合には、復号化関数識別子で識別される復号化関数を取得する。例えば、インターネットなどの通信網により通信が可能なサーバとＳＳＬなどでセキュアな通信路を確保して、復号化関数識別子をそのサーバに送信して、復号化関数を取得するようになっていてもよい。
【００３１】
（実施形態１：処理）
【００３２】
図３は、本実施形態に係る処理装置の処理の流れ図を例示する。ステップＳ３０１において、データ取得部１０１などにより、データを取得する（データ取得ステップ）。ステップＳ３０２において、暗号化関数取得部１０２などにより、暗号化関数を取得する（暗号化関数取得ステップ）。ステップＳ３０３において、データ暗号化部１０３などにより、暗号化データを生成する（データ暗号化ステップ）。ステップＳ３０４において、復号化関数取得部１０４などにより、復号化関数を取得する（復号化関数取得ステップ）。ステップＳ３０５において、統合データ生成部１０５などにより、統合データを生成する（統合データ生成ステップ）。
【００３３】
以上の説明のように、本実施形態に係る処理装置は、データ取得ステップ、暗号化関数取得ステップ、データ暗号化ステップ、復号化関数取得ステップ、統合データ生成ステップを含む処理方法を使用するための装置と見ることもできる。ただし、本実施形態に係る処理方法を使用する装置は、本実施形態に係る処理装置に限定されることはない。
【００３４】
また、本実施形態に限らず、本発明に係る処理装置の構成要素である各部、各手段は、ハードウェア、ソフトウェア、ハードウェアとソフトウェア（プログラム）の両者、のいずれかによって構成することが可能である。たとえば、これらを実現する一例として、計算機を利用する場合には、ＣＰＵ、メモリ、バス、インターフェース、周辺装置などから構成されるハードウェアと、これらのハードウェア上にて実行可能なソフトウェアを挙げることができる。
【００３５】
（実施形態１：主な効果）
【００３６】
本実施形態によれば、統合データには、直接的には復号化関数を示す情報が含まれないので、統合データに含まれる暗号化データの復号化を解析（リバースエンジニアリング）することが困難となり、権原無く復号化がされることを防止することができる。
（実施形態２：主に請求項２について説明する）
【００３７】
本発明の実施形態２として、暗号化関数として、暗号化前と暗号化後とでデータのサイズが等しくなる処理装置について説明する。
【００３８】
（実施形態２：構成）
【００３９】
本発明の実施形態２は、実施形態１において、暗号化関数取得部１０２で取得される暗号化関数は、暗号化前のデータと暗号化後のデータとのサイズが等しくなるようにした処理装置である。
【００４０】
例えば、一バイトずつ、あるいは、一ビットずつ暗号化を行なうストリーム暗号が用いられてもよい。また、もし、データがブロック単位のサイズであれば、ＤＥＳ（Ｄａｔａ  Ｅｎｃｒｙｐｔｉｏｎ  Ｓｔａｎｄａｒｄ）のようなブロック単位で暗号化を行なう暗号化関数が用いられてもよい。
【００４１】
ストリーム暗号の例としては、ＣＰＵの可逆的なインストラクションを用いるものがある。図４は、可逆的なインストラクションの例を、インストラクションのサイズ（バイト数）ごとにまとめたものである。「可逆的なインストラクション」とは、インストラクションによってデータを操作しても、元に戻すインストラクション（対となるインストラクション）が存在するようなインストラクションをいう。例えば、レジスタの値に１を加えるインストラクションは、レジスタの値から１を引くインストラクションが存在するので、可逆的なインストラクションである。
【００４２】
そこで、暗号化関数取得部１０２は、図４に例示されたインストラクションをランダムに選び、また、インストラクションにＩｍｍｅｄｉａｔｅがあれば、その値を生成し、そのインストラクションを並べることにより、暗号化関数を生成するようになっていてもよい。そして、復号化関数取得部１０４は、暗号化関数を構成するインストラクションを逆に並べ、対となるインストラクションに置き換える。
【００４３】
図５は、このように生成される暗号化関数と復号化関数との関係を例示する。暗号化関数の逆順にインストラクションを並べつつ、対となるインストラクションに置換を行なうことにより、復号化関数が生成されることが例示されている。
【００４４】
統合データには、直接的には復号化関数を示す情報が含まれないが、例えば、暗号化関数のハッシュ値を復号化関数識別子として保持するようになっていてもよい。所定の操作を加える際には、ハッシュ値である復号化関数識別子に基づいて、暗号化関数のサーチを行なって、復号化関数を生成する。もちろん、全くランダムに暗号化関数を生成するとサーチの処理が困難となるので、暗号化関数のパターンをいくつか決めておき、サーチの計算量を減少するようになっていてもよい。
【００４５】
（実施形態２：主な効果）
【００４６】
本実施形態では、実施形態１の効果に加えて、データと暗号化データのサイズが等しいので、統合データを生成する際には、データが保持される領域を暗号化データが保持される領域として使用でき、処理装置の作業スペースを増加させないようにすることができる。例えば、図６に例示されるように、まず、データ６０２を統合データ６０１に含ませておき、次にデータを暗号化することにより暗号化データ６０３が統合データに含まれるようにすることができる。
【００４７】
（実施形態３：主に請求項３について説明する）
【００４８】
本発明の実施形態３として、復号化関数を暗号化して統合データに含ませる処理装置について説明する。
【００４９】
（実施形態３：構成）
【００５０】
図７は、本発明の実施形態３に係る処理装置の機能ブロック図を例示する。処理装置７００は、データ取得部１０１と、暗号化関数取得部１０２と、データ暗号化部１０３と、復号化関数取得部１０４と、統合データ生成部１０５と、を有し、統合データ生成部１０５は、復号化関数暗号化手段７０１と、暗号化関数利用生成手段７０２と、を有する。したがって、本実施形態に係る処理装置７００は、実施形態１または２に係る処理装置の統合データ生成部１０５が、復号化関数暗号化手段７０１と、暗号化関数利用生成手段７０２と、を有する構成となっている。
【００５１】
「復号化関数暗号化手段」７０１は、前記復号化関数を暗号化する。例えば、図４と図５を用いて説明したような暗号化方法を使用して暗号化を行なう。
【００５２】
「暗号化関数利用生成手段」７０２は、復号化関数暗号化手段７０１により暗号化された前記復号化関数である暗号化復号化関数に基づいて、前記統合データを生成する。暗号化復号化関数は、直接的には復号化関数を示す情報を含まないので、統合データに暗号化復号化関数を含ませるようにする。
【００５３】
図８は、本実施形態に係る処理装置で生成される統合データの構造を模式的に例示する。統合データ８０１の中に、暗号化復号化関数８０２と暗号化データ８０３とが含まれている。所定の操作を行なう場合には、統合データ８０１の中から暗号化復号化関数を取り出し、暗号化復号化関数を復号する関数を取得して、復号化関数を得る処理を行なうことになる。例えば、暗号化関数のパターンがある程度限定されており、また、復号化関数のパターンもある程度限定されていれば、暗号化復号化関数のパターンもある程度限定されるので、暗号化復号化関数より、復号を行なう関数を取得して、復号化関数を得ることが可能である。
【００５４】
また、図９に示すように統合データ９０１に、暗号化関数９０２を復号化するための情報９０１を含ませておいてもよい。情報９０１は、例えば、暗号化復号化関数を復号化するための復号鍵であったり、暗号化復号化関数を復号するプログラムであってもよい。また、そのような復号鍵やプログラムを所定の方法で暗号化したものであってもよい。
【００５５】
（実施形態３：主な効果）
【００５６】
本実施形態により、実施形態１または２の効果に加え、統合データに暗号化復号化関数を含ませることができるので、所定の処理において、暗号化データを復号化する処理を簡略化できる。
【００５７】
（実施形態４：主に請求項４について説明する）
【００５８】
本発明の実施形態４として、復号化関数と暗号化復号化関数とのサイズが等しい処理装置について説明する。
【００５９】
（実施形態４：構成）
【００６０】
本発明の実施形態４に係る処理装置は、実施形態３に係る処理装置を、復号化関数と暗号化復号化関数とは、サイズが等しくなるようにしたものである。実施形態２で説明したように、ストリーム暗号を用いたり、図４と図５とを用いて説明した暗号化方法を用いたり、復号化関数のサイズがブロック単位のサイズであれば、ブロック単位で暗号化を行なう暗号化関数を用いたりする。
【００６１】
（実施形態４：主な効果）
【００６２】
本実施形態においては、実施形態３の効果に加え、復号化関数と暗号化復号化関数とのサイズが等しいので、所定の操作を行なう場合に、暗号化復号化関数の領域を復号化関数の領域として使用することができるで、作業スペースを増加させないようにすることができる。
【００６３】
（実施形態５：主に請求項５について説明する）
【００６４】
本発明の実施形態５として、統合データがプログラムとなっている処理装置について説明する。
【００６５】
（実施形態５：構成）
【００６６】
本発明の実施形態５に係る処理装置は、実施形態１から４のいずれか一の実施形態に係る処理装置において、統合データがプログラムになるようにしたものであり、所定の操作とは、そのプログラムを実行することとしたものである。
【００６７】
すなわち、統合データは実行することが可能であり、統合データの実行により、復号化関数と暗号化データとが取得され、復号化関数を暗号化データに適用することにより、データが得られることになる。
【００６８】
もし、本実施形態に係る処理装置が実施形態１または２を基にしている場合には、プログラムである統合データは、例えば、インターネットなどの通信網に接続されたサーバより復号化関数を取得するようになっていてもよい。
【００６９】
また、本実施形態に係る処理装置が実施形態３または４を基にしている場合には、プログラムである統合データは、自身に含まれる暗号化復号化関数を取得し、復号化することにより、復号化関数を得て、それを暗号化データに適用することになる。
【００７０】
図１０は、本実施形態に係る処理装置により生成された統合データからデータを得る処理の流れ図を例示する。ステップＳ１００１において、暗号化復号化関数から復号化する関数を用いて、復号化関数を得る。ステップＳ１００２において、復号化関数を用いて暗号化データよりデータを得る。
【００７１】
（実施形態５：主な効果）
【００７２】
本実施形態により、実施形態１から４のいずれかの実施形態の主な効果に加えて、統合データから直接、データを得ることが可能となる。
【００７３】
（実施形態６：主に請求項６について説明する）
【００７４】
本発明の実施形態６として、所定の操作により得られる復号化関数と、データと、が計算機の主記憶にのみ保持されるようにした処理装置について説明する。
【００７５】
（実施形態６：構成）
【００７６】
本発明の実施形態６に係る処理装置は、実施形態５の処理装置を、前記所定の操作により得られる前記復号化関数、及び、前記暗号化データを前記復号化関数に適用して得られるデータは、前記計算機の主記憶にのみ保持されるようにしたものである。「前記所定の操作」とは、統合データを実行することである。「前記復号化関数」とは、復号化関数取得部１０４で取得されたのと同じ復号化関数を意味する。「前記暗号化データ」とは、統合データが生成されるときの基となった暗号化データである。また、「前記計算機」とは、プログラムである統合データが実行される計算機を意味する。
【００７７】
したがって、プログラムである統合データは、データを得るための作業用の領域としてファイルなどを使用せず、主記憶のメモリだけを用いて作業を行なうことになる。
【００７８】
また、復号化関数は、プログラムである統合データを実行するプロセスのメモリが読まれないような処理を行なってもよい。通常の計算機のオペレーティングシステムでは、他のプロセスのメモリが読めないようになっているが、デバッガ用を実現するためなどの特殊なシステムコールなどを使用することにより、他のプロセスのメモリを読むことができる。そこで、特殊なデバイスドライバをオペレーティングシステムに組み込み、他のプロセスのメモリを読むシステムコールをフック（ｈｏｏｋ）し、特定のプロセスのメモリを読めないようにする。そして、復号化関数は、その特殊なデバイスドライバに対して設定を行ない（例えば、ｉｏｃｔｌシステムコールを用いて設定する）、自身のプロセスをその特定のプロセスとして設定する。これにより、デバッガなどを用いても、復号化関数やデータが他人に取得されないようにすることができる。
【００７９】
（実施形態６：主な効果）
【００８０】
本実施形態により、実施形態５の主な効果に加えて、復号化関数と、データと、が主記憶にのみ保持されるので、復号化関数やデータを入手することが困難となる。
【００８１】
（実施形態７：主に請求項７について説明する）
【００８２】
本発明の実施形態７として、プログラムをデータとして取得し、統合データを実行することによりそのプログラムの実行が開始される処理装置について説明する。
【００８３】
（実施形態７：構成）
【００８４】
本発明の実施形態７に係る処理装置は、実施形態５または６の処理装置において、データ取得部１０１で取得されるデータはプログラムである。また、前記統合データは、取得ステップと、データ取得ステップと、実行ステップと、を計算機に実行させるためのプログラムである。ここに、「前記統合データ」とは、統合データ生成部１０５で生成される統合データである。また、「取得ステップ」とは、前記復号化関数、及び、前記暗号化データを取得するステップである。「前記復号化関数」と「前記暗号化データ」は、前記統合データを生成する基となった復号化関数と暗号化データである。「データ取得ステップ」は、前記暗号化データを前記復号化関数に適用してデータを取得するステップである。「実行ステップ」とは、データ取得ステップで取得されたデータを実行するステップである。
【００８５】
取得ステップは、例えば、復号化関数を取得し、メモリなどに保持し、また、統合データに含まれる暗号化データの位置や大きさなどを特定する。
【００８６】
データ取得ステップは、取得ステップで取得された復号化関数に対して、暗号化データの位置と大きさなどを与えて、暗号化データを復号化してデータを得る。得られたデータは、メモリなどに保持される。
【００８７】
実行ステップは、データ取得ステップで得られたデータがメモリ中にあれば、プログラムカウンタを、エントリポイントのアドレスに設定などする。また、データがファイルにあれば、そのファイルを実行するためのシステムコール（例えば、ｅｘｅｃｌｅ）などを実行する。
【００８８】
なお、本実施形態において、データ取得部でプログラムであるデータが取得された場合には、シンボルテーブルをクリアしたり、共有ライブラリのインポートテーブルをクリアするなどの操作を行なってもよい。例えば、シンボルテーブルがクリアされることにより、万一データが他人に取得されたとしても、逆アセンブルなどのプログラムの解析を行なっても関数名などが表示されないので解析が困難となる。また、インポートテーブルのクリアにより、プログラムがどのようなライブラリを使っているかを調べることが困難となり、どのような形でプログラムが書かれているかを知られにくくすることができる。
【００８９】
また、暗号化復号化関数を復号化する際には、トラップハンドラを用いたランニングラインと呼ばれる手法を用いてもよい。ランニングラインとは、ＣＰＵがインストラクションを一つ実行するごとにＣＰＵに割り込みをかけてトラップハンドラを呼び、次に実行するインストラクションのアドレスを決定することを繰り返すことである（図１３参照）。これにより、インストラクションの間に無意味なインストラクションの列を挿入することができ、プログラムの解析を困難なものとする。ランニングラインにおいては、トラップハンドラの解析がされるとプログラムの解析がされるので、トラップハンドラを予め暗号化しておき、実行時に復号化するのが好ましい。
【００９０】
図１１は、本実施形態に係る処理装置が生成する統合データの構造を模式的に例示する。統合データ１１０１には、トラップハンドラの復号化関数が含まれており、これにより、暗号化されたトラップハンドラ１１０３が復号できるようになっている。また、暗号化復号化関数を復号化する関数１１０４も含まれており、これにより暗号化復号化関数１１０５が復号されるが、このときに、ランニングラインを用いてもよい。なお、暗号化復号化関数を復号化する関数１１０４の実行の全体でランニングラインを行なってもよいが、ランニングラインではトラップハンドラが一インストラクションごとに呼ばれて処理速度が低下する。そこで、暗号化復号化関数を復号化する関数１１０４の一部でランニングラインを実行するようになっていてもよい。例えば、暗号化復号化関数を復号化するための復号鍵や図５に例示された復号化関数が暗号化されているときに、暗号化された復号鍵などを復号化するときにだけランニングラインを用いるようになっていてもよい。
【００９１】
図１２は、プログラムである統合データの動作を説明する流れ図である。ステップＳ１２０１において、暗号化されたトラップハンドラを復号化する。例えば、特定のビットパターンにより、ビット毎にＸＯＲを計算することにより復号化を行なう。ステップＳ１２０２において、トラップハンドラをセットする。「セットする」とは、所定の条件が成就した場合に、トラップハンドラが呼ばれるようにすることである。ランニングラインにおいては、所定の条件とは、一インストラクションが実行されることである。ステップＳ１２０３において、復号化する関数を用いて暗号化復号化関数より復号化関数を得る。ステップＳ１２０４において、トラップハンドラをリセットする。ステップＳ１２０５において、復号化関数を用いて暗号化データを復号化する。ステップＳ１２０６において、データを実行する。
【００９２】
図１４は、所定の操作を行なうことにより発生する図１１に例示された統合データの変化を例示する。まず、ステップＳ１２０１において、暗号化されたトラップハンドラが復号化され、図１４の上に例示される統合データが得られる。次に、ステップＳ１２０３により、暗号化復号化関数が復号化され、図１４の中央に例示される統合データが得られる。ステップＳ１２０５により、暗号化データが復号化され、図１４の下に例示される統合データが得られる。
【００９３】
（実施形態７：主な効果）
【００９４】
本実施形態により、実施形態５または６の主な効果に加えて、プログラムを暗号化して統合データに含ませることにより、解析が困難な状態でプログラムを安全に配布することができる。
【００９５】
（実施形態８：主に請求項８について説明する）
【００９６】
本発明の実施形態８として、復号化関数がデバッガの存在を確認する機能を有した処理装置について説明する。
【００９７】
（実施形態８：構成）
【００９８】
本発明の実施形態８に係る処理装置は、実施形態６または７に係る処理装置において、復号化関数が、統合データの実行される計算機内にデバッガが存在するかどうかを確認する機能を有するようにしたものである。デバッガが計算機に存在することにより、統合データの実行が解析されることを防止する目的を持つ。
【００９９】
デバッガを検出する方法としては、デバッガが通常インストールされているディレクトリやフォルダにデバッガのコマンド名のファイルが存在するかどうかで検出する方法がある。また、オペレーティングシステムによっては、レジストリと呼ばれる場所にデバッガの情報が記録されているので、その記録の有無を調べてもよい。また、ＳｏｆｔＩＣＥというデバッガが存在すると、イベントハンドラのアドレスの差が所定の値になったり、特殊なデバイスが存在するので、それを検出してもよい。ＳｏｆｔＩＣＥの様々な検出方法については、非特許文献１の７章などに説明されている。
【０１００】
もし、デバッガが存在することが検出されれば、暗号化データの復号化は行なわないようにすることができる。
【０１０１】
（実施形態８：主な効果）
【０１０２】
本実施形態においては、実施形態６または７の主な効果に加えて、デバッガなどの存在する場合には、暗号化データの復号化を行なわないようにすることができるので、解析がされにくくすることができる。
【産業上の利用可能性】
【０１０３】
本発明に係る処理装置及び処理方法により生成される統合データには、直接的には復号化関数が含まれていないので、復号化関数を解析されることがなく、権原無く復号化がされることを防止することができるので、有用である。
【符号の説明】
【０１０４】
１００  処理装置
１０１  データ取得部
１０２  暗号化関数取得部
１０３  データ暗号化部
１０４  復号化関数取得部
１０５  統合データ生成部
【図１】
0005493235.tif 000002
【図２】
0005493235.tif 000003
【図３】
0005493235.tif 000004
【図４】
0005493235.tif 000005
【図５】
0005493235.tif 000006
【図６】
0005493235.tif 000007
【図７】
0005493235.tif 000008
【図８】
0005493235.tif 000009
【図９】
0005493235.tif 000010
【図１０】
0005493235.tif 000011
【図１１】
0005493235.tif 000012
【図１２】
0005493235.tif 000013
【図１３】
0005493235.tif 000014
【図１４】
0005493235.tif 000015
【図１５】
0005493235.tif 000016