(57)【要約】【課題】パスワード等の保護対象プログラムに関連した秘密情報を保持しない不正な利用者によるプログラムの解読を困難とする場合にあって、難読化したプログラムの挙動の推定を困難にした情報処理装置を提供する。【解決手段】情報処理装置のプログラム受付手段は、プログラムを受け付け、変換手段は、前記プログラム受付手段によって受け付けられたプログラム又は該プログラムの一部をチューリングマシーンコードに変換し、ダミーコード生成手段は、前記変換手段によって変換されたチューリングマシーンコードに基づいて、ダミーコードを生成し、合成手段は、前記ダミーコード生成手段によって生成されたダミーコードを前記変換手段によって変換されたチューリングマシーンコードに合成する。【選択図】図１
2009271884.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを受け付けるプログラム受付手段と、
前記プログラム受付手段によって受け付けられたプログラム又は該プログラムの一部をチューリングマシーンコードに変換する変換手段と、
前記変換手段によって変換されたチューリングマシーンコードに基づいて、ダミーコードを生成するダミーコード生成手段と、
前記ダミーコード生成手段によって生成されたダミーコードを前記変換手段によって変換されたチューリングマシーンコードに合成する合成手段
を具備することを特徴とする情報処理装置。
【請求項２】
前記プログラム受付手段によって受け付けられるプログラムは、該プログラムを動作させるための符号を変換するサブプログラムを含み、
前記変換手段によってチューリングマシーンコードに変換されるプログラムの一部は、前記符号を変換するサブプログラムである
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記チューリングマシーンコードをエミュレート実行させるためのサブプログラムを生成するエミュレート生成手段
をさらに具備することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記請求項１から３のいずれか一項に記載の情報処理装置によってダミーコードが合成されたプログラムを受け付けるプログラム受付手段と、
前記プログラム受付手段によって受け付けられたプログラムを実行する実行手段
を具備することを特徴とする情報処理装置。
【請求項５】
コンピュータを、
プログラムを受け付けるプログラム受付手段と、
前記プログラム受付手段によって受け付けられたプログラム又は該プログラムの一部をチューリングマシーンコードに変換する変換手段と、
前記変換手段によって変換されたチューリングマシーンコードに基づいて、ダミーコードを生成するダミーコード生成手段と、
前記ダミーコード生成手段によって生成されたダミーコードを前記変換手段によって変換されたチューリングマシーンコードに合成する合成手段
として機能させることを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理プログラムに関する。
【背景技術】
【０００２】
プログラムを不正なリバースエンジニアリングから保護するために、多くのソフトウェア難読化技術が提案されている。難読化とは、プログラムを複雑に変換することで、プログラムの解析コストを大きくする技術である。
【０００３】
これに関連する技術として、例えば、特許文献１には、ソフトウェア難読化技術の従来手法として、物理的に保護され、内部に一方向性関数の実行部を保有する特殊なＣＰＵを利用し、このＣＰＵとメモリの間の通信に現れるインストラクション列に無関心性（ｏｂｌｉｂｉｏｕｓ）を持たせた上で暗号化処理を施すことによって難読化処理を施すプログラム難読化手法が開示されている。
【０００４】
また、例えば、特許文献２には、保護対象プログラムに対しそれに関連付けられたセキュリティ・プログラム及びエミュレーション・プログラムを用いて難読化処理を施すプログラム難読化手法が開示されている。この難読化手法では、セキュリティ・プログラムが前記保護対象プログラムのアクセスを管理し、前記保護対象プログラムの所定の関数又はルーチンを前記エミュレーション・プログラムによって提供される仮想プロセッサ上で実行可能な簡略化命令セット形式に変換し、難読化されたプログラムを実行する際にはこの簡略化命令セット形式に変換された命令を実行することで保護を実現する。
【特許文献１】米国特許第５１２３０４５号明細書
【特許文献２】特表２００７−５０３０３８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、特許文献１に開示された技術は、物理的に保護されたＣＰＵを実現するための特殊なデバイスを必要とし、難読化処理を施すプログラムのサイズに関する指数関数オーダーの記憶容量を必要とする。このため、極めて小規模なプログラムのみに適用可能であり、また特殊なデバイスを使用できない場合には難読化プログラムを実行することができない。また、特許文献２に開示された技術では、セキュリティ・プログラムを改竄することで難読化を実質的に解除できてしまう。このため、セキュリティ・プログラムの改竄を行うことで、保護対象プログラムへのアクセスを許されていない不正な利用者でも保護対象プログラムを利用することが可能である。
本発明は、パスワード等の保護対象プログラムに関連した秘密情報を保持しない不正な利用者によるプログラムの解読を困難とする場合にあって、難読化したプログラムの挙動の推定を困難にした情報処理装置及び情報処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００６】
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
請求項１の発明は、プログラムを受け付けるプログラム受付手段と、前記プログラム受付手段によって受け付けられたプログラム又は該プログラムの一部をチューリングマシーンコードに変換する変換手段と、前記変換手段によって変換されたチューリングマシーンコードに基づいて、ダミーコードを生成するダミーコード生成手段と、前記ダミーコード生成手段によって生成されたダミーコードを前記変換手段によって変換されたチューリングマシーンコードに合成する合成手段を具備することを特徴とする情報処理装置である。
【０００７】
請求項２の発明は、前記プログラム受付手段によって受け付けられるプログラムは、該プログラムを動作させるための符号を変換するサブプログラムを含み、前記変換手段によってチューリングマシーンコードに変換されるプログラムの一部は、前記符号を変換するサブプログラムであることを特徴とする請求項１に記載の情報処理装置である。
【０００８】
請求項３の発明は、前記チューリングマシーンコードをエミュレート実行させるためのサブプログラムを生成するエミュレート生成手段をさらに具備することを特徴とする請求項１又は２に記載の情報処理装置である。
【０００９】
請求項４の発明は、前記請求項１から３のいずれか一項に記載の情報処理装置によってダミーコードが合成されたプログラムを受け付けるプログラム受付手段と、前記プログラム受付手段によって受け付けられたプログラムを実行する実行手段を具備することを特徴とする情報処理装置である。
【００１０】
請求項５の発明は、コンピュータを、プログラムを受け付けるプログラム受付手段と、前記プログラム受付手段によって受け付けられたプログラム又は該プログラムの一部をチューリングマシーンコードに変換する変換手段と、前記変換手段によって変換されたチューリングマシーンコードに基づいて、ダミーコードを生成するダミーコード生成手段と、前記ダミーコード生成手段によって生成されたダミーコードを前記変換手段によって変換されたチューリングマシーンコードに合成する合成手段として機能させることを特徴とする情報処理プログラムである。
【発明の効果】
【００１１】
請求項１記載の情報処理装置によれば、パスワード等の保護対象プログラムに関連した秘密情報を保持しない不正な利用者によるプログラムの解読を困難とする場合にあって、本構成を有していない場合に比較して、難読化したプログラムの挙動の推定を困難にする。
【００１２】
請求項２記載の情報処理装置によれば、セキュリティ強化に必要な部分に対して、本発明による難読化を施すことができる。
【００１３】
請求項３記載の情報処理装置によれば、難読化後のプログラムを特殊なデバイスを利用することなく実行させることができるように難読化することができる。
【００１４】
請求項４記載の情報処理装置によれば、難読化したプログラムを特殊なデバイスを利用することなく実行することができる。
【００１５】
請求項５記載の情報処理プログラムによれば、パスワード等の保護対象プログラムに関連した秘密情報を保持しない不正な利用者によるプログラムの解読を困難とする場合にあって、本構成を有していない場合に比較して、難読化したプログラムの挙動の推定を困難にする。
【発明を実施するための最良の形態】
【００１６】
まず、本実施の形態の概要を説明する。
本実施の形態では、プログラムのコードの一部又は全部をチューリングマシーンコードの形式に変換し、チューリングマシーンコードのダミーコードを付与することによって難読化を実現する。これにより、任意のプログラムに難読化処理が適用可能となる。チューリングマシーンコードの形式に変換されたプログラムは、Ｃ言語等の高級言語で記述されたものとは異なり、一般にプログラムの挙動を推定することが難しい。
さらに、本実施の形態では、難読化前のプログラムに相当するチューリングマシーンコードにダミーコードの４項系列を挿入することを行う。後述するダミーコードの４項系列の生成法を利用することで、チューリングマシーンの動作及び出力に影響を与えないダミーコードの４項系列を任意の個数作成することが可能である。チューリングマシーンコードの形式への変換及びチューリングマシーンの動作及び出力に影響を与えないダミーコードの４項系列の挿入により、難読化前のプログラム内の重要なアルゴリズム、データ等を難読化する。
【００１７】
以下、図面に基づき本発明を実現するにあたっての好適な一実施の形態の例を説明する。
図１は、本実施の形態の構成例についての概念的なモジュール構成図を示している。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア（コンピュータ・プログラム）、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはコンピュータ・プログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、コンピュータ・プログラム、システム及び方法の説明をも兼ねている。ただし、説明の都合上、「記憶する」、「記憶させる」、これらと同等の文言を用いるが、これらの文言は、実施の形態がコンピュータ・プログラムの場合は、記憶装置に記憶させる、又は記憶装置に記憶させるように制御するの意である。また、モジュールは機能にほぼ一対一に対応しているが、実装においては、１モジュールを１プログラムで構成してもよいし、複数モジュールを１プログラムで構成してもよく、逆に１モジュールを複数プログラムで構成してもよい。また、複数モジュールは１コンピュータによって実行されてもよいし、分散又は並列環境におけるコンピュータによって１モジュールが複数コンピュータで実行されてもよい。なお、１つのモジュールに他のモジュールが含まれていてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続（データの授受、指示、データ間の参照関係等）の場合にも用いる。
また、システム又は装置とは、複数のコンピュータ、ハードウェア、装置等がネットワーク（一対一対応の通信接続を含む）等の通信手段で接続されて構成されるほか、１つのコンピュータ、ハードウェア、装置等によって実現される場合も含まれる。「装置」と「システム」とは、互いに同義の用語として用いる。「所定」という用語は、予め定められたの意の他に、そのときの状況・状態に応じて、又はそれまでの状況・状態に応じての意を含めて用いる。
【００１８】
本実施の形態は、図１に示すように、プログラム受付モジュール１００、チューリングマシーンコード変換モジュール１１０、ダミーコード生成モジュール１２０、難読化プログラム生成モジュール１３０、プログラム出力モジュール１４０を有している。
プログラム受付モジュール１００は、チューリングマシーンコード変換モジュール１１０と接続されており、難読化対象のプログラムを受け付ける。そして、そのプログラムをチューリングマシーンコード変換モジュール１１０に渡す。プログラムを受け付けるとは、例えば、記録媒体（コンピュータに内蔵されているハードディスクの他に、リムーバブルメディアであってもよい）に記録されているプログラムを読み出すこと、通信回線を介してプログラムを受信すること、キーボード等で打ち込まれたプログラムを受け付けること等がある。また、チューリングマシーンコード変換モジュール１１０が受け付けるプログラムには、そのプログラムを動作させるための符号（例えば、パスワード等）を変換するサブプログラム等を含んでいてもよい。
【００１９】
チューリングマシーンコード変換モジュール１１０は、プログラム受付モジュール１００、ダミーコード生成モジュール１２０と接続されており、プログラム受付モジュール１００によって受け付けられたプログラム又はそのプログラムの一部をチューリングマシーンコードに変換する。そして、全部又は一部をチューリングマシーンコードに変換したプログラムをダミーコード生成モジュール１２０に渡す。また、チューリングマシーンコード変換モジュール１１０がチューリングマシーンコードに変換するプログラムの一部は、そのプログラムを動作させるための符号（例えば、パスワード又はそのパスワードに関連するデータ）を変換するサブプログラムであってもよい。
ダミーコード生成モジュール１２０は、チューリングマシーンコード変換モジュール１１０、難読化プログラム生成モジュール１３０と接続されており、チューリングマシーンコード変換モジュール１１０によって変換されたチューリングマシーンコードに基づいて、チューリングマシーンコードであるダミーコードを生成する。そして、チューリングマシーンコード変換モジュール１１０によって変換されたチューリングマシーンコードとダミーコードを難読化プログラム生成モジュール１３０に渡す。
なお、ダミーコードとは、そのプログラムの機能及び出力に変化を及ぼさないコードをいう。
【００２０】
難読化プログラム生成モジュール１３０は、ダミーコード生成モジュール１２０、プログラム出力モジュール１４０と接続されており、ダミーコード生成モジュール１２０によって生成されたダミーコードをチューリングマシーンコード変換モジュール１１０によって変換されたチューリングマシーンコードに合成する。合成としては、具体例として、そのチューリングマシーンコードにダミーコードを挿入することである。
また、難読化プログラム生成モジュール１３０は、プログラムの一部をチューリングマシーンコードに変換している場合は、さらにダミーコードが合成されたチューリングマシーンコードとチューリングマシーンコードに変換していない部分のプログラムを合成する。
また、難読化プログラム生成モジュール１３０は、チューリングマシーンコードをエミュレート実行させるためのサブプログラムを生成するようにしてもよい。その生成したサブプログラムを、前述のプログラムの全部又は一部をチューリングマシーンコードに変換したプログラムに合成する。
そして、難読化プログラム生成モジュール１３０は、難読化処理を施したプログラム（ダミーコードを合成したプログラム）をプログラム出力モジュール１４０に渡す。
プログラム出力モジュール１４０は、難読化プログラム生成モジュール１３０と接続されており、難読化プログラム生成モジュール１３０によって合成されたプログラム（難読化プログラム）を出力する。プログラムを出力するとは、例えば、記録媒体にプログラムを記録すること、通信回線を介してプログラムを送信すること等が含まれる。
【００２１】
図２を用いて、本実施の形態による難読化装置２２の利用形態を説明する。
本実施の形態では、有償ソフトウェアの販売に際し、対価を支払わない不正なユーザによるソフトウェアの不当な利用を防止する目的で、この有償ソフトウェアに難読化を施す場合を例にして説明する。
図２において、配布者２１はプログラムの配布者であり、ユーザ２３はそのプログラムのユーザであり、ユーザ２４はそのプログラムに対する不正なユーザである。なお、配布者２１、ユーザ２３、ユーザ２４は、プログラムの作成、配布、受信、実行を行うためのＰＣ（パーソナルコンピュータ）を所有しており、以下に説明するそれらの処理は、配布者２１又はユーザ２３等の所有しているＰＣによって実行されるものである。
【００２２】
また、矢印はデータ又はプログラムの受け渡しを表す。つまり、矢印の起点から終点の方に、矢印に付記されたデータ又はプログラムが渡されることを示す。例えば、難読化装置２２は、プログラムの配布者２１によって利用されることを想定している。
配布者２１は、ユーザの利用に供されるソフトウェアのプログラムＰと後述するパスワードを難読化装置２２に入力として与える（Ｓ２０１）。ここで、このプログラムＰは、Ｃ言語などの高級言語を用いてテキスト形式で記述されており、正規のパスワードを受け付けると所定の動作を実施し、ユーザに対して予め規定されている機能を提供する。
【００２３】
難読化装置２２は、受け取ったプログラムＰに対し難読化を施し、難読化プログラムを出力する（Ｓ２０２）。難読化装置２２は、受け取ったプログラムＰと難読化プログラムの機能及び出力が変化しないように受け取ったプログラムＰを変換する。なお、難読化プログラムのコードには、難読化装置２２によって難読化処理が施されているので、これを解析してプログラムの秘密情報等を得ることは困難である。
配布者２１は、プログラムの販売目的で、遠隔地に居住する正規のユーザ２３に対し難読化プログラムをインターネット経由で配布する（Ｓ２０３）。配布者２１とユーザ２３は、第三者には秘密のパスワードとしてプログラムの起動に必要となる例えば３２ビットの正の整数を共有している。そして、正規のユーザ２３から前記秘密のパスワードを受け付け、難読化プログラムが実行される。また、ユーザ２４は、難読化プログラムの不正利用を試みるため、配布者２１から正規のユーザ２３にプログラムが配布される経路上で不正なハッキングを行うなどしてこのプログラムを詐取する（Ｓ２０４）。
【００２４】
前記有償ソフトウェアを記述するプログラムＰには、パスワードを用いたプロテクションが施されている。プログラムの不正利用や改竄が成功しないように、プログラムの主要部分のコードＣｐには暗号化が施される。
図３の例に示すように、難読化装置２２による難読化処理が施される前のプログラム３００（プログラムＰ）は、パスワード入出力サブプログラム３１０、パスワード変換サブプログラム３２０、ハッシュ関数計算サブプログラム３３０、復号処理計算サブプログラム３４０、エミュレーション実行サブプログラム３５０を有している。
【００２５】
パスワード入出力サブプログラム３１０は、パスワード変換サブプログラム３２０と接続されており、ユーザによって入力されたパスワード３０１をプログラム３００内のパスワード変換サブプログラム３２０に出力する。
パスワード変換サブプログラム３２０は、パスワード入出力サブプログラム３１０、ハッシュ関数計算サブプログラム３３０と接続され、データＢ３２１を保持しており、データＢ３２１との排他的論理和を用いてパスワード入出力サブプログラム３１０から渡されたパスワード３０１を変換する。変換された値ｗｒをハッシュ関数計算サブプログラム３３０へ出力する。
ハッシュ関数計算サブプログラム３３０は、パスワード変換サブプログラム３２０、復号処理計算サブプログラム３４０と接続されており、パスワード変換サブプログラム３２０からの出力であるｗｒに対してハッシュ関数を計算する。計算結果のｗ’を復号処理計算サブプログラム３４０に出力する。
復号処理計算サブプログラム３４０は、ハッシュ関数計算サブプログラム３３０、エミュレーション実行サブプログラム３５０と接続され、データＸ３４１を保持しており、暗号化された状態で復号処理計算サブプログラム３４０内にストアされているデータＸ３４１をハッシュ関数計算サブプログラム３３０の出力値ｗ’を用いて復号する。復号された結果のコードＣｐをエミュレーション実行サブプログラム３５０に出力する。
エミュレーション実行サブプログラム３５０は、復号処理計算サブプログラム３４０と接続されており、復号処理計算サブプログラム３４０の出力であるコードＣｐをエミュレーション実行する。これによって、プログラム３００の本来の処理（配布者２１がプログラム３００によって提供しようとした機能）が行われる。
【００２６】
次に、パスワード変換サブプログラム３２０について、より詳細に説明する。パスワード変換サブプログラム３２０の内部には、予めランダムに生成された３２ビットの二進数であるデータＢ３２１がハード・コーディングされている。このデータＢ３２１は、配布者２１とユーザ２３との間で共有されるパスワードに乱数性が期待できない場合でも、ハッシュ関数計算サブプログラム３３０の出力に十分な乱数性を付与するためのものである。しかしながら、データＢ３２１の統計的な偏りが攻撃者（ユーザ２４）に露呈すると、プログラム３００に付与されたセキュリティ強度は著しく低減する。このため、データＢ３２１の具体的な値は可能な限り漏洩しないことが望ましい。このため、データＢ３２１を含むパスワード変換サブプログラム３２０は、後述する難読化手法によってプロテクションが施される。
パスワード変換サブプログラム３２０は、このデータＢ３２１と３２ビットのパスワード３０１とのビット毎の排他的論理和を計算し、計算結果ｗｒをハッシュ関数計算サブプログラム３３０に出力する。
【００２７】
次に、復号処理計算サブプログラム３４０について、より詳細に説明する。復号処理計算サブプログラム３４０の内部には、データＸ３４１がハード・コーディングされている。データＸ３４１は、配布者２１とユーザ２３との間で共有されるパスワード３０１を受け付けたときのハッシュ関数計算サブプログラム３３０の出力値ｗ’を鍵として、コードＣｐを暗号化することで生成される。この暗号化には、ＡＥＳ等の対称鍵暗号方式が使用される。
復号処理計算サブプログラム３４０は、ハッシュ関数計算サブプログラム３３０の出力値ｗ’を鍵として、データＸ３４１に復号処理を施すことで、プログラム３００の主要部分のコードＣｐを算出する。
【００２８】
次に、プログラム３００の起動後の処理について説明する。
プログラム３００がユーザ２３の計算機環境において起動されると、プログラム３００のパスワード入出力サブプログラム３１０はパスワード３０１の入力をユーザに対して要求する。パスワード３０１が入力されると、パスワード変換サブプログラム３２０は、このパスワード３０１とデータＢ３２１とのビット毎の排他的論理和を行う。ハッシュ関数計算サブプログラム３３０は、その排他的論理和の結果ｗｒを受け付けて、ハッシュ関数の出力値ｗ’を計算する。復号処理計算サブプログラム３４０は、ｗ’を鍵としてデータＸ３４１に復号処理を施す。さらに、エミュレーション実行サブプログラム３５０は、この復号処理の結果Ｃｐを受け付けて、エミュレータを実行する。
ユーザが入力したパスワード３０１が配布者２１と正規のユーザ２３との間で共有される正規のパスワードと一致する場合、データＸ３４１に施されている暗号化処理は正しく解除され、コードＣｐが算出される。これにより、プログラムの主要部分のコードＣｐがエミュレータによって実行されることになる。この場合は、プログラム３００は所定の動作を実施し、ユーザはこのプログラムが提供する機能を正しく利用することができる。
【００２９】
次に、難読化装置２２が実施する難読化の手順を説明する。
本実施の形態では、難読化装置２２が受け付ける難読化前のプログラムＰはＣ言語を用いて記述されているとする。難読化装置２２は、前記プログラムＰ及び配布者２１とユーザ２３との間で共有するパスワードを入力として受け取り、このプログラムＰに対応する難読化プログラムＰｏｂを出力する。
本実施の形態では、難読化装置２２は難読化前のプログラムＰ（プログラム３００）内にあるパスワード変換サブプログラム３２０をチューリングマシーンコード（Ｔｕｒｉｎｇ  ｍａｃｈｉｎｅ  ｃｏｄｅ）の形式に変換し、これにダミーコードを付加することで難読化を行う。
【００３０】
以下では、前記３２ビットのパスワードを
００１．．．．．．１０
とする。また、難読化前のプログラムＰに保持されている３２ビットの二進数であるデータＢ３２１を
１０１．．．．．．１１
とする。
図４に、前記パスワード変換サブプログラム３２０をＣ言語の関数ＰａｓｓＣｈａｎｇｅとして記述した場合のプログラムを示す。本実施の形態では、チューリングマシーンは一つのヘッドと一つのテープで構成されるものとする。また、前記テープは記号を書き込むためのセルを連結したものとして構成される。初期状態において、チューリングマシーンのテープには、そのチューリングマシーンに与えられる初期値として０番アドレスから順に記号列が書き込まれており、チューリングマシーンのヘッドは、そのテープの０番アドレスにセットされる。
【００３１】
図５に、前記の関数ＰａｓｓＣｈａｎｇｅをチューリングマシーンコードの形式に変換することで得られるチューリングマシーンコード５００を示す。さらに図６に、チューリングマシーンコード５００にダミーコードを付加することで作成されるチューリングマシーンコード６００を示す。
【００３２】
図５及び図６において、
ｑｉＳｊＳｋｑｌ
は、チューリングマシーンの内部状態がｑｉで、チューリングマシーンのヘッドが見ているセルに書かれている記号がＳｊのとき、内部状態をｑｌに、前記セルに書かれた記号をＳｋに変更することを意味する。
また、
ｑｉＳｊＲｑｌ
は、チューリングマシーンの内部状態がｑｉで、チューリングマシーンのヘッドが見ているセルに書かれている記号がＳｊのとき、内部状態をｑｌに、ヘッドを右隣のセルの上に移動することを意味する。
さらに、
ｑｉＳｊＬｑｌ
は、チューリングマシーンの内部状態がｑｉで、チューリングマシーンのヘッドが見ているセルに書かれている記号がＳｊのとき、内部状態をｑｌに、ヘッドを左隣のセルの上に移動することを意味する。
【００３３】
以下において前記のｑｉＳｊＳｋｑｌは４項系列と呼ばれ、特定のチューリングマシーンは４項系列の集合として定義される。記号Ｓ０及びＳ１は、特別な記号で、Ｓ０は‘０’、Ｓ１は‘１’にそれぞれ対応する。
チューリングマシーンコード５００は、チューリングマシーンのテープ上に初期値として書き込まれた記号列と前記データＢ３２１とのビット毎の排他的論理和を０番アドレスから順にテープに上書きする。チューリングマシーンコード６００は、チューリングマシーンコード５００（行５０１から行５９９）とダミーコード（行６０１から行６９９）の４項系列をその内部に含んでいるが、チューリングマシーンコード６００のテープに初期値として３２ビットの二進数がＳ０及びＳ１を用いて書き込まれる場合にはチューリングマシーンコード５００と同等の動作を実行する。
【００３４】
前記ダミーコードの４項系列は、以下のように生成される。
まず、チューリングマシーンコード５００に含まれないテープ記号の集合Ｇｓ又はチューリングマシーンコード５００に含まれない内部状態の集合Ｇｑを生成する。次に、集合Ｇｑからランダムに状態を表す記号を２個選択し、これらを４項系列の１番目及び４番目のシンボルとする。さらに、集合Ｇｓの中からランダムに記号を選択し、これを４項系列の２番目のシンボルとする。同様に、集合Ｇｓ、Ｒ及びＬの中からランダムに記号を選択し、これを４項系列の３番目のシンボルとする。
前記手順に従い、ダミーコードの４項系列を一つ又は複数個生成する。これらダミーコードの４項系列は、難読化前のプログラムに相当するチューリングマシーンコード５００には含まれない。よって、Ｓ０及びＳ１を用いて記述される記号列がチューリングマシーンコード６００の初期値として設定される場合、これらダミーコードの４項系列がチューリングマシーンコード６００の動作中に利用されることはない。このため、ダミーコードの４項系列が付加されたチューリングマシーンコード６００の動作は、二進数で記述される初期値に対しチューリングマシーンコード５００の動作と同等になる。
なお、前述のダミーコードの生成では、集合Ｇｑと集合Ｇｓの両方からランダムに選択しているが、いずれか片方の集合からランダムに選択するようにしてもよい。つまり、難読化前のプログラムに相当するチューリングマシーンコード５００に含まれない４項系列を生成すればよい。
【００３５】
難読化装置２２が生成する難読化プログラムＰｏｂ（難読化プログラム７００）の構成は、図７のようになる。
難読化装置２２は、以下の手順に従って元のプログラムＰ（プログラム３００）から難読化プログラムＰｏｂを生成する。
まず、難読化装置２２は、入力として与えられたプログラムＰを解析し、以下に述べるチューリングマシーンエミュレーション実行サブプログラム７２０を作成する。チューリングマシーンエミュレーション実行サブプログラム７２０は、前記チューリングマシーンコード６００に対応するコードを内部データ（ＴＭ２  ７２１）として保持し、ＴＭ２  ７２１をエミュレーション実行するためのプログラムである。チューリングマシーンエミュレーション実行サブプログラム７２０は、パスワード入出力サブプログラム７１０の出力値を受け取り、これをチューリングマシーンコード６００のテープに初期値として書き込み、チューリングマシーンコード６００を動作させた上で、チューリングマシーンコード６００が停止したときのテープの内容をｗｒとして出力する。
難読化装置２２は、プログラムＰからパスワード変換サブプログラム３２０を削除し、代わりにチューリングマシーンエミュレーション実行サブプログラム７２０を埋め込むことで難読化プログラムＰｏｂを生成する。つまり、難読化プログラム７００は、パスワード入出力サブプログラム７１０、チューリングマシーンエミュレーション実行サブプログラム７２０、ハッシュ関数計算サブプログラム７３０、復号処理計算サブプログラム７４０、エミュレーション実行サブプログラム７５０を有しているが、パスワード入出力サブプログラム７１０はパスワード入出力サブプログラム３１０に、ハッシュ関数計算サブプログラム７３０はハッシュ関数計算サブプログラム３３０に、復号処理計算サブプログラム７４０は復号処理計算サブプログラム３４０、エミュレーション実行サブプログラム７５０はエミュレーション実行サブプログラム３５０にそれぞれ対応する。
【００３６】
配布者２１は、難読化装置２２の出力した難読化プログラムＰｏｂをインターネット経由でユーザ２３に配布する。ユーザ２３は、受け取った難読化プログラムＰｏｂをユーザ２３の所有するＰＣ上にダウンロードし、これを実行する。つまり、ユーザ２３の所有するＰＣは、難読化装置２２によって難読化が施された難読化プログラム７００を受信して実行する。
先に述べたように、実行された難読化プログラムＰｏｂはユーザにパスワードの入力を求める。入力されたパスワードが配布者２１とユーザ２３との間で共有されるものに合致すれば、難読化プログラムＰｏｂは正常に動作を行い、ユーザに所定の機能を提供する。
また、ユーザ２４が配布経路上から不正なハッキング等を用いてこの難読化プログラムＰｏｂを詐取したとしても、正しいパスワードを保有していないユーザ２４はプログラムＰｏｂを正常に稼動させることができない。また、プログラムＰｏｂの内部データＢ（データＢ３２１）に関する脆弱性は、データＢを含むコードが前記により難読化されることで著しく低減する。このため、正しいパスワードを保有していないユーザ２４が、難読化プログラムＰｏｂ内にあるチューリングマシーンエミュレーション実行サブプログラム７２０を解析したとしても、データＢに関する脆弱性を利用して難読化プログラムＰｏｂを不正に利用することは困難である。
【００３７】
なお、本実施の形態としてのプログラムが実行されるコンピュータのハードウェア構成は、図８に例示するように、一般的なコンピュータであり、具体的にはパーソナルコンピュータ、サーバーとなり得るコンピュータ等である。チューリングマシーンコード変換モジュール１１０、ダミーコード生成モジュール１２０、難読化プログラム生成モジュール１３０等のプログラムを実行するＣＰＵ８０１（この例では演算部としてＣＰＵを用いた）と、そのプログラムやデータを記憶するＲＡＭ８０２と、本コンピュータを起動するためのプログラム等が格納されているＲＯＭ８０３と、補助記憶装置であるＨＤ８０４（例えばハードディスクを用いることができる）と、キーボード、マウス等のデータを入力する入力装置８０６と、ＣＲＴや液晶ディスプレイ等の出力装置８０５と、通信ネットワークと接続するための通信回線インタフェース８０７（例えばネットワークインタフェースカードを用いることができる）、そして、それらをつないでデータのやりとりをするためのバス８０８により構成されている。これらのコンピュータが複数台互いにネットワークによって接続されていてもよい。
【００３８】
前述の実施の形態のうち、コンピュータ・プログラムによるものについては、本ハードウェア構成のシステムにソフトウェアであるコンピュータ・プログラムを読み込ませ、ソフトウェアとハードウェア資源とが協働して、前述の実施の形態が実現される。
なお、図８に示すハードウェア構成は、１つの構成例を示すものであり、本実施の形態は、図８に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア（例えばＡＳＩＣ等）で構成してもよく、一部のモジュールは外部のシステム内にあり通信回線で接続しているような形態でもよく、さらに図８に示すシステムが複数互いに通信回線によって接続されていて互いに協調動作するようにしてもよい。また、特に、パーソナルコンピュータの他、情報家電、複写機、ファックス、スキャナ、プリンタ、複合機（スキャナ、プリンタ、複写機、ファックス等のいずれか２つ以上の機能を有している画像処理装置）などに組み込まれていてもよい。
【００３９】
前記実施の形態においては、ダミーコードを含むチューリングマシーンコード６００は交互にダミーコードを挿入したチューリングマシーンコード６００を示したが、本来のチューリングマシーンコード５００のランダムな位置に挿入してもよい。また、２つ以上のダミーコードを連続して挿入してもよい。
【００４０】
なお、説明したプログラムについては、記録媒体に格納して提供してもよく、また、そのプログラムを通信手段によって提供してもよい。その場合、例えば、前記説明したプログラムについて、「プログラムを記録したコンピュータ読み取り可能な記録媒体」の発明として捉えてもよい。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通などのために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク（ＤＶＤ）であって、ＤＶＤフォーラムで策定された規格である「ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ−ＲＡＭ等」、ＤＶＤ＋ＲＷで策定された規格である「ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等」、コンパクトディスク（ＣＤ）であって、読出し専用メモリ（ＣＤ−ＲＯＭ）、ＣＤレコーダブル（ＣＤ−Ｒ）、ＣＤリライタブル（ＣＤ−ＲＷ）等、光磁気ディスク（ＭＯ）、フレキシブルディスク（ＦＤ）、磁気テープ、ハードディスク、読出し専用メモリ（ＲＯＭ）、電気的消去及び書換可能な読出し専用メモリ（ＥＥＰＲＯＭ）、フラッシュ・メモリ、ランダム・アクセス・メモリ（ＲＡＭ）等が含まれる。
そして、前記のプログラム又はその一部は、前記記録媒体に記録して保存や流通等させてもよい。また、通信によって、例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、メトロポリタン・エリア・ネットワーク（ＭＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、あるいは無線通信ネットワーク、さらにこれらの組み合わせ等の伝送媒体を用いて伝送させてもよく、また、搬送波に乗せて搬送させてもよい。
さらに、前記のプログラムは、他のプログラムの一部分であってもよく、あるいは別個のプログラムと共に記録媒体に記録されていてもよい。また、複数の記録媒体に分割して
記録されていてもよい。また、圧縮や暗号化など、復元可能であればどのような態様で記録されていてもよい。
【図面の簡単な説明】
【００４１】
【図１】本実施の形態の構成例についての概念的なモジュール構成図である。
【図２】本実施の形態における難読化装置の利用形態例を示す説明図である。
【図３】難読化処理の対象となるプログラムの構成例を示す説明図である。
【図４】パスワード変換サブプログラムの例を示す説明図である。
【図５】チューリングマシーンコードによるプログラム例を示す説明図である。
【図６】チューリングマシーンコードのプログラムにダミーコードを挿入した例を示す説明図である。
【図７】難読化処理が施されたプログラムの構成例を示す説明図である。
【図８】本実施の形態を実現するコンピュータのハードウェア構成例を示すブロック図である。
【符号の説明】
【００４２】
２２…難読化装置
１００…プログラム受付モジュール
１１０…チューリングマシーンコード変換モジュール
１２０…ダミーコード生成モジュール
１３０…難読化プログラム生成モジュール
１４０…プログラム出力モジュール
【図１】
2009271884.tif 000003
【図２】
2009271884.tif 000004
【図３】
2009271884.tif 000005
【図４】
2009271884.tif 000006
【図５】
2009271884.tif 000007
【図６】
2009271884.tif 000008
【図７】
2009271884.tif 000009
【図８】
2009271884.tif 000010