(57)【特許請求の範囲】
【請求項１】
プログラムの認証情報を受け付ける情報受付手段と、
前記情報受付手段によって受け付けられた認証情報と疑似乱数とを結合し、この結合した情報を入力として一方向性関数又は擬似一方向性関数の計算を繰り返して行い、各計算による結果の一部を取り出す計算手段と、
前記計算手段によって計算された結果又は該結果の一部を排他的論理和の処理又は暗号化処理における鍵として、前記プログラムのコード若しくは該コードを別のコード体系に変換を施したもの又はそれらの一部に対して暗号化処理を行う暗号化手段と、
前記暗号化手段によって暗号化された前記プログラムのコード若しくは該コードに変換を施したもの又はそれらの一部を実行するプログラムを、前記暗号化手段によって暗号化された前記プログラムのコード若しくは該コードを別のコード体系に変換を施したもの又はそれらの一部に付加するプログラム付加手段
を具備し、
前記暗号化手段によって、暗号化処理の対象となる前記プログラムのコードは中間コードを利用するインタープリタ型の言語で記述されたプログラムのソースコードである
ことを特徴とする情報処理装置。
【請求項２】
プログラムの認証情報を受け付ける情報受付手段と、
前記情報受付手段によって受け付けられた認証情報と疑似乱数とを結合し、この結合した情報を入力として一方向性関数又は擬似一方向性関数の計算を繰り返して行い、各計算による結果の一部を取り出す計算手段と、
前記計算手段によって計算された結果又は該結果の一部を排他的論理和の処理又は暗号化処理における鍵として、暗号化処理が施されたプログラムのコード若しくは該コードを別のコード体系に変換を施したもの又はそれらの一部を復号する復号手段と、
前記復号手段によって復号された前記プログラムのコード又は該コードに変換を施したもの又はそれらの一部を実行する実行手段
を具備し、
前記復号手段によって、復号処理の対象となる暗号化処理が施されたプログラムのコードは中間コードを利用するインタープリタ型の言語で記述されたプログラムのソースコードである
ことを特徴とする情報処理装置。
【請求項３】
コンピュータを、
プログラムの認証情報を受け付ける情報受付手段と、
前記情報受付手段によって受け付けられた認証情報と疑似乱数とを結合し、この結合した情報を入力として一方向性関数又は擬似一方向性関数の計算を繰り返して行い、各計算による結果の一部を取り出す計算手段と、
前記計算手段によって計算された結果又は該結果の一部を排他的論理和の処理又は暗号化処理における鍵として、前記プログラムのコード若しくは該コードを別のコード体系に変換を施したもの又はそれらの一部に対して暗号化処理を行う暗号化手段と、
前記暗号化手段によって暗号化された前記プログラムのコード若しくは該コードに変換を施したもの又はそれらの一部を実行するプログラムを、前記暗号化手段によって暗号化された前記プログラムのコード若しくは該コードを別のコード体系に変換を施したもの又はそれらの一部に付加するプログラム付加手段
として機能させ、
前記暗号化手段によって、暗号化処理の対象となる前記プログラムのコードは中間コードを利用するインタープリタ型の言語で記述されたプログラムのソースコードである
ことを特徴とする情報処理プログラム。
【請求項４】
コンピュータを、
プログラムの認証情報を受け付ける情報受付手段と、
前記情報受付手段によって受け付けられた認証情報と疑似乱数とを結合し、この結合した情報を入力として一方向性関数又は擬似一方向性関数の計算を繰り返して行い、各計算による結果の一部を取り出す計算手段と、
前記計算手段によって計算された結果又は該結果の一部を排他的論理和の処理又は暗号化処理における鍵として、暗号化処理が施されたプログラムのコード若しくは該コードを別のコード体系に変換を施したもの又はそれらの一部を復号する復号手段と、
前記復号手段によって復号された前記プログラムのコード又は該コードに変換を施したもの又はそれらの一部を実行する実行手段
として機能させ、
前記復号手段によって、復号処理の対象となる暗号化処理が施されたプログラムのコードは中間コードを利用するインタープリタ型の言語で記述されたプログラムのソースコードである
ことを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置及び情報処理プログラムに関する。
【背景技術】
【０００２】
プログラムを不正なリバースエンジニアリングから保護するために、多くのソフトウェア難読化技術が提案されている。難読化とは、プログラムを複雑に変換することで、プログラムの解析コストを大きくする技術である。
【０００３】
これに関連する技術として、例えば、特許文献１には、ソフトウェア難読化技術の従来手法として、物理的に保護され、内部に一方向性関数の実行部を保有する特殊なＣＰＵを利用し、このＣＰＵとメモリの間の通信に現れるインストラクション列に無関心性（ｏｂｌｉｂｉｏｕｓ）を持たせた上で暗号化処理を施すことによって難読化処理を施すプログラム難読化手法が開示されている。
【０００４】
また、例えば、特許文献２には、保護対象プログラムに対しそれに関連付けられたセキュリティ・プログラム及びエミュレーション・プログラムを用いて難読化処理を施すプログラム難読化手法が開示されている。この難読化手法では、セキュリティ・プログラムが前記保護対象プログラムのアクセスを管理し、前記保護対象プログラムの所定の関数又はルーチンを前記エミュレーション・プログラムによって提供される仮想プロセッサ上で実行可能な簡略化命令セット形式に変換し、難読化されたプログラムを実行する際にはこの簡略化命令セット形式に変換された命令を実行することで保護を実現する。
【特許文献１】米国特許第５１２３０４５号明細書
【特許文献２】特表２００７−５０３０３８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、特許文献１に開示された技術は、物理的に保護されたＣＰＵを実現するための特殊なデバイスを必要とし、難読化処理を施すプログラムのサイズに関する指数関数オーダーの記憶容量を必要とする。このため、極めて小規模なプログラムのみに適用可能であり、また特殊なデバイスを使用できない場合には難読化プログラムを実行することができない。また、特許文献２に開示された技術では、セキュリティ・プログラムを改ざんすることで難読化を実質的に解除できてしまう。このため、セキュリティ・プログラムの改ざんを行うことで、保護対象プログラムへのアクセスを許されていない不正な利用者でも保護対象プログラムを利用することが可能である。
本発明は、パスワード等の保護対象プログラムに関連した秘密情報を保持しない不正な利用者が難読化プログラムを実行することを阻止することを可能とし、難読化の対象とするプログラムのサイズの制限を緩和し、特殊なデバイスを使用できない場合でも難読化プログラムを実行させ得るような難読化処理を行うようにした情報処理装置及び情報処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【０００６】
かかる目的を達成するための本発明の要旨とするところは、次の各項の発明に存する。
請求項１の情報処理装置は、プログラムの認証情報を受け付ける情報受付手段と、前記情報受付手段によって受け付けられた認証情報と疑似乱数とを結合し、この結合した情報を入力として一方向性関数又は擬似一方向性関数の計算を繰り返して行い、各計算による結果の一部を取り出す計算手段と、前記計算手段によって計算された結果又は該結果の一部を排他的論理和の処理又は暗号化処理における鍵として、前記プログラムのコード若しくは該コードを別のコード体系に変換を施したもの又はそれらの一部に対して暗号化処理を行う暗号化手段と、前記暗号化手段によって暗号化された前記プログラムのコード若しくは該コードに変換を施したもの又はそれらの一部を実行するプログラムを、前記暗号化手段によって暗号化された前記プログラムのコード若しくは該コードを別のコード体系に変換を施したもの又はそれらの一部に付加するプログラム付加手段を具備し、前記暗号化手段によって、暗号化処理の対象となる前記プログラムのコードは中間コードを利用するインタープリタ型の言語で記述されたプログラムのソースコードであることを特徴とする。
【０００７】
請求項２の情報処理装置は、プログラムの認証情報を受け付ける情報受付手段と、前記情報受付手段によって受け付けられた認証情報と疑似乱数とを結合し、この結合した情報を入力として一方向性関数又は擬似一方向性関数の計算を繰り返して行い、各計算による結果の一部を取り出す計算手段と、前記計算手段によって計算された結果又は該結果の一部を排他的論理和の処理又は暗号化処理における鍵として、暗号化処理が施されたプログラムのコード若しくは該コードを別のコード体系に変換を施したもの又はそれらの一部を復号する復号手段と、前記復号手段によって復号された前記プログラムのコード又は該コードに変換を施したもの又はそれらの一部を実行する実行手段を具備し、前記復号手段によって、復号処理の対象となる暗号化処理が施されたプログラムのコードは中間コードを利用するインタープリタ型の言語で記述されたプログラムのソースコードであることを特徴とする。
【０００８】
請求項３の情報処理プログラムは、コンピュータを、プログラムの認証情報を受け付ける情報受付手段と、前記情報受付手段によって受け付けられた認証情報と疑似乱数とを結合し、この結合した情報を入力として一方向性関数又は擬似一方向性関数の計算を繰り返して行い、各計算による結果の一部を取り出す計算手段と、前記計算手段によって計算された結果又は該結果の一部を排他的論理和の処理又は暗号化処理における鍵として、前記プログラムのコード若しくは該コードを別のコード体系に変換を施したもの又はそれらの一部に対して暗号化処理を行う暗号化手段と、前記暗号化手段によって暗号化された前記プログラムのコード若しくは該コードに変換を施したもの又はそれらの一部を実行するプログラムを、前記暗号化手段によって暗号化された前記プログラムのコード若しくは該コードを別のコード体系に変換を施したもの又はそれらの一部に付加するプログラム付加手段として機能させ、前記暗号化手段によって、暗号化処理の対象となる前記プログラムのコードは中間コードを利用するインタープリタ型の言語で記述されたプログラムのソースコードであることを特徴とする。
【０００９】
請求項４の情報処理プログラムは、コンピュータを、プログラムの認証情報を受け付ける情報受付手段と、前記情報受付手段によって受け付けられた認証情報と疑似乱数とを結合し、この結合した情報を入力として一方向性関数又は擬似一方向性関数の計算を繰り返して行い、各計算による結果の一部を取り出す計算手段と、前記計算手段によって計算された結果又は該結果の一部を排他的論理和の処理又は暗号化処理における鍵として、暗号化処理が施されたプログラムのコード若しくは該コードを別のコード体系に変換を施したもの又はそれらの一部を復号する復号手段と、前記復号手段によって復号された前記プログラムのコード又は該コードに変換を施したもの又はそれらの一部を実行する実行手段として機能させ、前記復号手段によって、復号処理の対象となる暗号化処理が施されたプログラムのコードは中間コードを利用するインタープリタ型の言語で記述されたプログラムのソースコードであることを特徴とする。
【発明の効果】
【００１２】
請求項１記載の情報処理装置によれば、保護対象プログラムに関連した情報を保持しない不正な利用者が難読化プログラムを実行することを阻止することを可能とし、難読化の対象とするプログラムのサイズの制限を緩和し、特殊なデバイスを使用できない場合でも難読化プログラムを実行させ得るような難読化処理を行うことができるようになり、ソースコードを解釈して実行できるような環境にあっても実行できるような難読化処理を行うことができるようになる。
【００１３】
請求項２記載の情報処理装置によれば、保護対象プログラムに関連した情報を保持しない不正な利用者が難読化プログラムを実行することを阻止することを可能とし、難読化の対象とするプログラムのサイズの制限を緩和し、特殊なデバイスを使用できない場合でも難読化プログラムを実行させることができるようになり、ソースコードを解釈して実行できるような環境にあっても実行できるような難読化処理を行うことができるようになる。
【００１４】
請求項３記載の情報処理プログラムによれば、保護対象プログラムに関連した情報を保持しない不正な利用者が難読化プログラムを実行することを阻止することを可能とし、難読化の対象とするプログラムのサイズの制限を緩和し、特殊なデバイスを使用できない場合でも難読化プログラムを実行させ得るような難読化処理を行うことができるようになり、ソースコードを解釈して実行できるような環境にあっても実行できるような難読化処理を行うことができるようになる。
【００１５】
請求項４記載の情報処理プログラムによれば、保護対象プログラムに関連した情報を保持しない不正な利用者が難読化プログラムを実行することを阻止することを可能とし、難読化の対象とするプログラムのサイズの制限を緩和し、特殊なデバイスを使用できない場合でも難読化プログラムを実行させることができるようになり、ソースコードを解釈して実行できるような環境にあっても実行できるような難読化処理を行うことができるようになる。
【発明を実施するための最良の形態】
【００１８】
本実施の形態は、プログラムの不正対策技術、例えば、不正な逆解析・リバースエンジニアリング防止、難読化、耐タンパ(Anti-Tamper)技術等に関するものである。
【００１９】
以下、図面に基づき本発明を実現するにあたっての好適な各種の実施の形態の例を説明する。
図１は、本実施の形態（第１の実施の形態、第２の実施の形態）である難読化装置側の構成例についての概念的なモジュール構成図を示している。
なお、モジュールとは、一般的に論理的に分離可能なソフトウェア（コンピュータ・プログラム）、ハードウェア等の部品を指す。したがって、本実施の形態におけるモジュールはコンピュータ・プログラムにおけるモジュールのことだけでなく、ハードウェア構成におけるモジュールも指す。それゆえ、本実施の形態は、コンピュータ・プログラム、システム及び方法の説明をも兼ねている。ただし、説明の都合上、「記憶する」、「記憶させる」、これらと同等の文言を用いるが、これらの文言は、実施の形態がコンピュータ・プログラムの場合は、記憶装置に記憶させること、又は記憶装置に記憶させるように制御するの意である。また、モジュールは機能にほぼ一対一に対応しているが、実装においては、１モジュールを１プログラムで構成してもよいし、複数モジュールを１プログラムで構成してもよく、逆に１モジュールを複数プログラムで構成してもよい。また、複数モジュールは１コンピュータによって実行されてもよいし、分散又は並列環境におけるコンピュータによって１モジュールが複数コンピュータで実行されてもよい。なお、１つのモジュールに他のモジュールが含まれていてもよい。また、以下、「接続」とは物理的な接続の他、論理的な接続（データの授受、指示、データ間の参照関係等）を含む。
また、システム又は装置とは、複数のコンピュータ、ハードウェア、装置等がネットワーク（一対一対応の通信接続を含む）等の通信手段で接続されて構成されるほか、１つのコンピュータ、ハードウェア、装置等によって実現される場合も含まれる。
以下、プログラムに関連する情報として、ここでは主にパスワードを例示して説明する。
【００２０】
難読化装置は、プログラムに対して難読化処理を施すものであって、図１に示すように、パスワード受付モジュール１０１、擬似乱数発生モジュール１０２、プログラム受付モジュール１０３、暗号化処理モジュール１０４、実行プログラム付加モジュール１０５を有している。
パスワード受付モジュール１０１は、擬似乱数発生モジュール１０２と接続されており、パスワードを受け付け、そのパスワードを擬似乱数発生モジュール１０２へ渡す。
【００２１】
擬似乱数発生モジュール１０２は、パスワード受付モジュール１０１、暗号化処理モジュール１０４と接続されており、パスワード受付モジュール１０１によって受け付けられたパスワード又はそのパスワードの一部を用いて、一方向性関数又は擬似一方向性関数の計算を行い、その結果を暗号化処理モジュール１０４へ渡す。
擬似乱数発生モジュール１０２が行う一方向性関数又は擬似一方向性関数の計算の組み合わせとして、パスワードを用いた一方向性関数の計算、パスワードの一部を用いた一方向性関数の計算、パスワードを用いた擬似一方向性関数の計算、パスワードの一部を用いた擬似一方向性関数の計算がある。
【００２２】
プログラム受付モジュール１０３は、暗号化処理モジュール１０４と接続されており、難読化処理の対象となるプログラムを受け付け、そのプログラムを暗号化処理モジュール１０４へ渡す。
【００２３】
暗号化処理モジュール１０４は、擬似乱数発生モジュール１０２、プログラム受付モジュール１０３、実行プログラム付加モジュール１０５と接続されており、擬似乱数発生モジュール１０２によって計算された結果又はその結果の一部を用いて、プログラム受付モジュール１０３によって受け付けられたプログラムのコード若しくはそのコードに変換を施したもの又はそれらの一部に対して暗号化処理を行い、暗号化処理（難読化処理）したプログラムを実行プログラム付加モジュール１０５へ渡す。
暗号化処理モジュール１０４が行う暗号化処理の組み合わせとして、計算結果を用いたプログラムのコードに対する暗号化処理、計算結果の一部を用いたプログラムのコードに対する暗号化処理、計算結果を用いたプログラムのコードに変換を施したものに対する暗号化処理、計算結果の一部を用いたプログラムのコードに変換を施したものに対する暗号化処理、計算結果を用いたプログラムのコードの一部に対する暗号化処理、計算結果の一部を用いたプログラムのコードの一部に対する暗号化処理、計算結果を用いたプログラムのコードに変換を施したものの一部に対する暗号化処理、計算結果の一部を用いたプログラムのコードに変換を施したものの一部に対する暗号化処理がある。
【００２４】
難読化処理の対象となるプログラムは、ソースコードのプログラムであり、実行プログラム付加モジュール１０５は、暗号化処理モジュール１０４と接続されており、暗号化処理モジュール１０４によって暗号化されたプログラムのコード若しくはそのコードに変換を施したもの又はそれらの一部を実行する。
実行プログラム付加モジュール１０５が実行するプログラムの組み合わせとして、コードのプログラムの実行、コードに変換を施したもののプログラムの実行、コードの一部のプログラムの実行、コードに変換を施したものの一部のプログラムの実行がある。
【００２５】
図２は、本実施の形態（第１の実施の形態、第２の実施の形態）である実行処理装置側の構成例についての概念的なモジュール構成図を示している。
実行処理装置は、難読化処理を施されたプログラムを解釈して実行処理を施すものであって、図２に示すように、パスワード受付モジュール２０１、擬似乱数発生モジュール２０２、復号モジュール２０３、実行モジュール２０４を有している。
パスワード受付モジュール２０１は、擬似乱数発生モジュール２０２と接続されており、パスワードを受け付け、そのパスワードを擬似乱数発生モジュール２０２へ渡す。
【００２６】
擬似乱数発生モジュール２０２は、パスワード受付モジュール２０１、復号モジュール２０３と接続されており、パスワード受付モジュール２０１によって受け付けられたパスワード又はそのパスワードの一部を用いて、一方向性関数又は擬似一方向性関数の計算を行い、その結果を復号モジュール２０３へ渡す。
擬似乱数発生モジュール２０２が行う一方向性関数又は擬似一方向性関数の計算の組み合わせとして、パスワードを用いた一方向性関数の計算、パスワードの一部を用いた一方向性関数の計算、パスワードを用いた擬似一方向性関数の計算、パスワードの一部を用いた擬似一方向性関数の計算がある。
【００２７】
復号モジュール２０３は、擬似乱数発生モジュール２０２、実行モジュール２０４と接続されており、擬似乱数発生モジュール２０２によって計算された結果又はその結果の一部を用いて、暗号化されたプログラムのコード若しくはそのコードに変換を施したもの又はそれらの一部を復号し、復号の結果を実行モジュール２０４へ渡す。
復号モジュール２０３が行う復号の組み合わせとして、計算結果を用いた暗号化されたプログラムのコードの復号、計算結果の一部を用いた暗号化されたプログラムのコードの復号、計算結果を用いた暗号化されたプログラムのコードに変換を施したものの復号、計算結果の一部を用いた暗号化されたプログラムのコードに変換を施したものの復号、計算結果を用いた暗号化されたプログラムのコードの一部の復号、計算結果の一部を用いた暗号化されたプログラムのコードの一部の復号、計算結果を用いた暗号化されたプログラムのコードに変換を施したものの一部の復号、計算結果の一部を用いた暗号化されたプログラムのコードに変換を施したものの一部の復号がある。
【００２８】
復号モジュール２０３によって復号されたプログラムは、ソースコードのプログラムであり、実行モジュール２０４は、復号モジュール２０３と接続されており、復号モジュール２０３によって復号されたプログラムのコード又は該コードに変換を施したもの又はそれらの一部を実行する。
実行モジュール２０４が行う実行の組み合わせとして、復号されたプログラムのコードの実行、復号されたプログラムのコードに変換を施したものの実行、復号されたプログラムのコードの一部の実行、復号されたプログラムのコードに変換を施したものの一部の実行がある。
【００２９】
第１の実施の形態では、有償ソフトウェアの販売に際し、例えば対価を支払わない不正なユーザによるソフトウェアの不当な利用を防止する目的で、この有償ソフトウェアに難読化処理を施す場合を説明する。
【００３０】
次に、図３を基に第１の実施の形態の難読化装置１２の利用形態を説明する。
図３において、配布者１１はプログラムの配布者であり、ユーザ１３、ユーザ１４はそのプログラムのユーザである。なお、配布者１１、ユーザ１３、ユーザ１４は、プログラムの作成、配布、受信、実行を行うためのＰＣを所有しており、以下に説明するそれらの処理は、難読化装置１２又は配布者１１等の所有しているＰＣによって実行されるものである。
また、矢印はデータ及びプログラムの受け渡しを表す。つまり、矢印の起点から終点の方に、矢印に付記されたデータ又はプログラムが渡されることを示す。
難読化装置１２は、プログラムの配布者１１によって利用されることを想定している。配布者１１は、ユーザの利用に供されるソフトウェアのプログラムと後述するパスワードを難読化装置１２に入力として与える（Ｓ３０１）。ここで、このプログラムはＪａｖａ（登録商標）などの高級言語を用いてテキスト形式で記述されているとする。つまり、ソースコードであり、インタプリター型プログラミング言語、つまりそのプログラムのソースコードを、逐次コンピュータが実行できるように翻訳し、その命令を逐次実行する実行環境を適用させるものである。
【００３１】
難読化装置１２は、受け取ったプログラムに対し難読化処理を施し、難読化プログラムを出力する（Ｓ３０２）。難読化装置１２は、入力プログラムと難読化プログラムの機能及び出力が変化しないように入力プログラムを変換する。ただし、難読化プログラムのコードには暗号化処理が施されているので、これを解析してプログラムの秘密情報等を得ることは困難である。
配布者１１は、プログラムの販売目的で、遠隔地に居住する正規のユーザ１３に対し難読化プログラムをインターネットを経由して配布する（Ｓ３０３）。配布者１１とユーザ１３は有償ソフトウェアの起動に必要となる１２８ビットの擬似乱数を第三者には秘密のパスワードとして共有している。
また、ユーザ１４はプログラムの不正利用を試みるため、配布者１１から正規のユーザ１３にプログラムが配布される経路上で不正なハッキングを行うなどしてこのプログラムを詐取する（Ｓ３０４）。
【００３２】
次に難読化装置１２が実施する難読化の手順を説明する。
難読化装置１２は、配布者１１が与えたプログラム、及びユーザ１３との間で共有するパスワードwを入力として受け取り、このプログラムに対応する難読化プログラムを出力する。
第１の実施の形態では、難読化装置１２に入力される難読化前のプログラムはＪａｖａなどの高級言語を用いて記述されているとする。また、このプログラムのファイルサイズをuビット（u > 0）とし、以下ではこのプログラムのファイルデータをPと表記する。
【００３３】
難読化装置１２は、図４に示す手順に従って２５６ビットの入力を受け取り、２５６ビットの擬似乱数を出力するハッシュ関数を繰り返し用いて、パスワードに関連する２５６ビットの擬似乱数R0、及びuビットの擬似乱数R1を生成する。前記のようなハッシュ関数としてＳＨＡ−２５６などが知られている。
【００３４】
まず、難読化装置１２は、ステップＳ４１において例えば線形符号等の手法を用いて１２８ビットの擬似乱数rsを生成する。
次に、ステップＳ４２において、rsに前記のパスワードを結合することで２５６ビットの擬似乱数r0を生成する。
更に、ステップＳ４３において、以下の手順を用いて[u/256]+2個の擬似乱数を生成する。まず、r0を入力としたときの前記ハッシュ関数の出力をr1とする。更に、r1を入力としたときの前記ハッシュ関数の出力をr2とし、以下同様にriを入力としたときのハッシュ関数の出力をri+1とする。この作業をr[u/256]+2が生成されるまで繰り返す。ここで、正の数xに対して[x]の記号はxよりも小さくxに最も近い正の整数を表す。
【００３５】
次に、ステップＳ４４において、r1からr[u/256]+1までを結合して([u/256]+1)*256ビットの擬似乱数r’を生成する。
更に、ステップＳ４５において、r’のu+1ビット目から([u/256]+1)*256ビット目までを削除することで長さuビットの擬似乱数R1を生成する。更に、難読化装置１２は、前記の擬似乱数r[u/256]+2をR0とする。
【００３６】
次に、難読化装置１２は、以下の手順に従って元のプログラムのファイルデータPから難読化プログラムPobを生成する。
難読化装置１２が生成する難読化プログラムPobの構成は、図５に従う。
まず、難読化装置１２は、入力として与えられたプログラムのファイルデータPとR1とのビット毎の排他的論理和P’を計算する。難読化プログラムPobは、プログラム内部のデータ記憶部Ｍ１にrs、R0、及びP’を保持し、更にプログラム内部に以下で説明するサブルーチン・プログラムp1からp4を保持する。
図５中の矢印は、データ記憶部及びサブルーチン・プログラム間において始点から終点方向にデータの受け渡しが存在することを示している。
【００３７】
ここで、サブルーチン・プログラムp1は、ユーザにパスワードw’の入力を要求し、入力されたw’を出力するプログラムである。
サブルーチン・プログラムp2は、プログラムp1からw’を受け取り、難読化プログラムPob内に記憶してある擬似乱数rsとパスワードw’を用いて前記でR0及びR1を算出したのと同じ手順で２５６ビットの擬似乱数R’0、及びuビットの擬似乱数R’1を生成するプログラムである。
【００３８】
サブルーチン・プログラムp3は、プログラムp2から擬似乱数R’0及びR’1を受け取り、R’0とデータ記憶部内にあるR0を比較した上で、R’0=R0の場合はR’1とデータ記憶部内にあるP’とのビット毎の排他的論理和P”を計算して出力、R’0≠R0の場合には難読化プログラムPobの実行を終了するプログラムである。
サブルーチン・プログラムp4は、プログラムp3からP”を受け取り、P”によって与えられる文字列を入力プログラムとしてエミュレート実行するプログラムである。
難読化装置１２は、サブルーチン・プログラムp1からp4を順に作成した上でこれらを結合し、rs、R0、及びP’を保持するデータ記憶部Ｍ1を加えた上で難読化プログラムPobを作成する。
【００３９】
プログラム配布者１１は、難読化装置１２の出力した難読化プログラムPobをインターネット経由でユーザ１３に配布する。
ユーザ１３は、受け取った難読化プログラムPobをユーザ１３の所有するＰＣ上にダウンロードし、これを実行する。
【００４０】
実行された難読化プログラムPobは、その内部に保持するサブルーチン・プログラムp1からp4を順に実行していく。
まず、ユーザ１３にパスワードの入力を求め、入力されたパスワードとプログラム内部に記憶してある擬似乱数rsを用いて前記と同じ手順で２５６ビットの擬似乱数R’0、及びuビットの擬似乱数R’1を計算する。
次に、R’0=R0の場合はP’とR’1とのビット毎の排他的論理和P”を計算した上で、P”により表記される文字列を入力プログラムとしてエミュレーションを実行する。R’0≠R0の場合には難読化プログラムPobの実行を終了する。
【００４１】
もし、ユーザ１３から受け取ったパスワードがwに一致すれば、排他的論理和の性質により元のファイルデータPが正しく復号され、難読化プログラムPobは元のプログラムと同じ計算を実行することになる。また、一致しなければ難読化プログラムPobはその実行を途中で停止し、ユーザが欲する出力を提示しない。
このため、ユーザ１４が配布経路上から不正なハッキング等を用いてこのプログラムを詐取したとしても、正しいパスワードを保有していないユーザ１４はプログラムを正常に稼動させることができない。
【００４２】
前述の第１の実施の形態では、プログラムの配布者１１とユーザ１３の間で共有したパスワードを難読化プログラムPobの起動に利用したが、必ずしも難読化プログラムPobの起動に必要な情報をパスワードに限定する必要はない。例えば、電子チケット・システムや、ユーザ１３のＰＣ上に装備されたアクセス権管理プログラムあるいはこれに類するものを利用して秘密情報を難読化プログラムPobに受け渡すようしてもよい。
【００４３】
また、前述の第１の実施の形態では、ビット毎の排他的論理和を用いて元のプログラムの暗号化、復号を実現しているが、プログラムの暗号化、復号の方法は必ずしもこれに限定されない。例えば、元のプログラムを２５６ビットのサイズのブロックに分割し、各ブロックを順番にr1からr[u/256]+1までの擬似乱数を鍵としてＲＳＡ暗号等を用いて暗号化してもよい。
【００４４】
更に、前述の第１の実施の形態では、擬似乱数を生成する際に一方向性ハッシュ関数を用いたが、擬似乱数生成の方法は必ずしもこれに限定されない。例えば、一方向性あるいは擬似一方向性を有するパーミュテーションを利用して擬似乱数を生成してもよい。一方向性あるいは擬似一方向性を有するパーミュテーションを構成する方法としては、文献[H. Wee, ACM/STOC, 2005]に記載された方法などが知られている。
【００４５】
前述の第１の実施の形態では、暗号化、復号を施すプログラムはテキスト形式で記述されるとしたが、必ずしもこの形態に拠らない。例えば、プログラムをゲーデル数によって符号化し、これに暗号化、復号を施してもよい。この場合は、難読化プログラムの実行に際し、まず暗号化された整数の符号を復号し、更に復号された整数をプログラムの形式に変換した後にエミュレート実行を行う。また、例えば、プログラムのコードをそのプログラムのコード体系とは別のコード体系に変換し、これに暗号化、復号を施してもよい。
【００４６】
また、ユーザ１３へのプログラムの配布は、必ずしもインターネットを利用しなくともよい。例えば、ＣＤ−ＲＯＭなどの電子媒体や衛星通信方式を用いてこれを配布してもよい。
また、前述の第１の実施の形態では、元のプログラムをＪａｖａなどの高級言語を用いて記述し、復号されたプログラムの実行のためにエミュレータを利用したが、プログラムの記述方法、及び復号されたプログラムを実行する方法は必ずしもこれらに限定されない。例えば、処理時間のオーバーヘッドを減じる目的で、プログラムをコンパイル後の実行形式で与え、難読化のための暗号化、復号処理を実行形式のプログラムに対して実施することで、エミュレータの使用を回避してもよい。
また、前述の第１の実施の形態では、プログラムの全体に難読化処理を施したが、例えば難読化によって生じる処理時間のオーバーヘッドやファイルサイズの増加を減じるために、プログラムの一部分のみに対して難読化処理を施してもよい。
【００４７】
図６、７を用いて、第２の実施の形態を説明する。前述した第１の実施の形態とは異なる形態の難読化装置に関するものである。
第２の実施の形態における難読化装置４２の基本的な利用形態は図６に従う。第１の実施の形態と同様、第２の実施の形態では、有償ソフトウェアの販売に際し、例えば対価を支払わない不正なユーザによるソフトウェアの不当な利用を防止する目的で、この有償ソフトウェアに難読化処理を施す場合を説明する。
【００４８】
また、第１の実施の形態とは異なり、第２の実施の形態では難読化のための暗号化、復号処理をＡＥＳ等の対称鍵暗号を用いて実現する。
図６において、配布者４１はプログラムの配布者であり、ユーザ４３、ユーザ４４はそのプログラムのユーザである。難読化装置４２は配布者４１によって使用され、起動プログラム４４はユーザ４３によって使用される。なお、配布者４１、ユーザ４３、ユーザ４５は、プログラムの作成、配布、受信、実行を行うためのＰＣを所有しており、以下に説明するそれらの処理は、難読化装置４２又は配布者４１等の所有しているＰＣによって実行されるものである。
また、矢印はデータ又はプログラムの受け渡しを表す。つまり、矢印の起点から終点の方に、矢印に付記されたデータ及びプログラムが渡されることを示す。
難読化装置４２は、プログラムの配布者４１によって利用されることを想定している。配布者４１は、ユーザの利用に供されるソフトウェアのプログラムと後述する秘密乱数wRを難読化装置４２に入力として与える（Ｓ６０１）。ここで、このプログラムはＪａｖａなどの高級言語を用いてテキスト形式で記述されているとする。
【００４９】
難読化装置４２は、受け取ったプログラムに対し難読化処理を施し、難読化プログラムを出力する（Ｓ６０２）。
難読化装置４２は、入力プログラムと難読化プログラムの機能及び出力が変化しないように入力プログラムを変換する。ただし、難読化プログラムのコードには暗号化が施されているので、これを解析してプログラムの秘密情報等を得ることは困難である。
【００５０】
配布者４１は、プログラムの販売目的で、遠隔地に居住する正規のユーザ４３に対し難読化プログラムをインターネット経由で配布する（Ｓ６０３）。
配布者４１は、正規のユーザ４３に難読化プログラムの起動を行う起動プログラム４４を予め配布しているとする。起動プログラム４４は、難読化プログラムの起動に必要な秘密乱数wRを内部に保持している。正規のユーザ４３は、起動プログラム４４を保有し、所有するＰＣに予めこれをインストールしている。また、起動プログラム４４を保有していない、不正なユーザ４５はプログラムの不当な利用を試みるため、配布者４１から正規のユーザ４３にプログラムが配布される経路上でハッキングを行うなどしてこのプログラムを詐取する（Ｓ６０４）。
【００５１】
次に、難読化装置４２が、実施する難読化の手順を説明する。
難読化装置４２は、配布者４１が与えたプログラム及び秘密乱数wRを入力として受け取り、このプログラムに対応する難読化プログラムを出力する。前述の第１の実施の形態と同様、第２の実施の形態では難読化装置４２に入力される難読化前のプログラムはＪａｖａなどの高級言語を用いて記述されているとする。また第１の実施の形態と同様に、このプログラムのファイルサイズをuビット（u > 0）とし、以下ではこのプログラムのファイルデータをPと表記する。
【００５２】
まず、難読化装置４２は、２５６ビットの入力を受け取り２５６ビットの擬似乱数を出力するハッシュ関数を用いて、秘密乱数wRに関連する２つの１２８ビットの擬似乱数R0、及びR1を生成する。前記のようなハッシュ関数としてＳＨＡ−２５６などが知られている。
難読化装置４２は、例えば線形符号等の手法を用いて１２８ビットの擬似乱数rsを生成する。次にrsに前記の秘密乱数wRを結合することで２５６ビットの擬似乱数r0を生成する。更に、r0を入力としたときの前記ハッシュ関数の出力をr1とし、この擬似乱数r1の前半の１２８ビットをR0、後半の１２８ビットをR1とする。
【００５３】
次に、第２の実施の形態の難読化装置４２は、以下の手順に従って元のプログラムのファイルデータPから難読化プログラムP’obを生成する。
難読化装置４２が生成する難読化プログラムの構成は図７に従う。
まず、難読化装置４２は、R1を共通鍵としてプログラムのファイルデータPをＡＥＳで暗号化する。この暗号化によって生成されたデータをPEと表記する。
難読化プログラムP’obは、プログラム内部のデータ記憶部Ｍ’1にrs、R0、及びPE、及びプログラム内部に以下で説明するサブルーチン・プログラムp’1からp’4を保持する。
図７中の矢印は、データ記憶部Ｍ’1及びサブルーチン・プログラム間において始点から終点方向にデータの受け渡しが存在することを示している。
【００５４】
ここで、サブルーチン・プログラムp’1は、起動プログラムと通信を行い秘密乱数w’Rの入力を要求し、入力されたw’Rを出力するプログラムである。
サブルーチン・プログラムp’2は、プログラムp’1からw’Rを受け取り、難読化プログラムP’ob内に記憶してある擬似乱数rsとパスワードw’Rを用いて前記と同じ手順で１２８ビットの擬似乱数R’0及びR’1を生成するプログラムである。
【００５５】
サブルーチン・プログラムp’3は、プログラムp’2から擬似乱数R’0及びR’1を受け取り、R’0とデータ記憶部内にあるR0を比較した上で、R’0=R0の場合はR’1を鍵としてＡＥＳを用いてデータ記憶部内にある暗号化データPEを復号してデータPDを出力し、R’0≠R0の場合には難読化プログラムP’obの実行を終了するプログラムである。
サブルーチン・プログラムp’4は、プログラムp’3からPDを受け取り、PDによって与えられる文字列を入力プログラムとしてエミュレート実行するプログラムである。
難読化装置４２は、サブルーチン・プログラムp’1からp’4を順に作成した上でこれらを結合し、rs、R0、及びPEを保持するデータ記憶部Ｍ’1を加えた上で難読化プログラムP’obを作成する。
【００５６】
プログラム配布者４１は、難読化装置４２の出力した難読化プログラムP’obをインターネット経由でユーザ４３に配布する。
ユーザ４３は、受け取った難読化プログラムP’obをユーザ４３の所有するＰＣ上にダウンロードする。
難読化プログラムP’obを実行するために、まずユーザ４３は起動プログラム４４を実行する。実行された起動プログラム４４は難読化プログラムP’obを起動する。起動された難読化プログラムP’obは、その内部に保持するサブルーチン・プログラムp’1からp’4を順に実行していく。
【００５７】
まず、起動プログラム４４に秘密乱数の入力を求め、入力された秘密乱数とプログラム内部に記憶してある擬似乱数rsを用いて前記と同じ手順で１２８ビットの擬似乱数R’0、及びR’1を計算する。
次に、R’0=R0の場合はR’1を鍵としてＡＥＳで暗号化データPEを復号してデータPDを生成し、PDによって与えられる文字列を入力プログラムとしてエミュレート実行する。R’0≠R0の場合には難読化プログラムP’obの実行を終了する。
【００５８】
もし、起動プログラム４４から受け取った秘密乱数がwRに一致すれば、排他的論理和の性質により元のファイルデータPが正しく復号され、難読化プログラムP’obは元のプログラムと同じ計算を実行することになる。
また、一致しなければ難読化プログラムP’obはその実行を途中で停止し、ユーザ４５が欲する出力を提示しない。このため、ユーザ４５が配布経路上から不正なハッキング等を用いてこのプログラムを詐取したとしても、起動プログラム４４を保有していないユーザ４５はプログラムを正常に稼動させることができない。
【００５９】
前述の第２の実施の形態では、起動プログラム４４が保持する秘密乱数を難読化プログラムP’obの起動に利用したが、必ずしも難読化プログラムP’obの起動に必要な情報をこれに限定する必要はない。例えば、電子チケット・システムや、ユーザのＰＣ上に装備されたアクセス権管理プログラムあるいはこれに類するものを利用して秘密情報を難読化プログラムP’obに受け渡すようしてもよい。
【００６０】
また、前述の第２の実施の形態では、擬似乱数を生成する際にハッシュ関数を用いたが、擬似乱数生成の方法は必ずしもこれに限定されない。例えば、一方向性あるいは擬似一方向性を有するパーミュテーションを利用して擬似乱数を生成してもよい。一方向性あるいは擬似一方向性を有するパーミュテーションを構成する方法としては、文献[H. Wee, ACM/STOC, 2005]に記載された方法などが知られている。
【００６１】
更に、前述の第２の実施の形態では、ＡＥＳを用いて暗号化、復号を実現したが、暗号化、復号の実現方法は必ずしもこれに限定されない。例えば、ＤＥＳやＦＥＡＬなどの暗号化方式を利用してもよい。
また、前述の第２の実施の形態では、暗号化、復号を施すプログラムはテキスト形式で記述されるとしたが、必ずしもこの形態に拠らない。例えば、プログラムをゲーデル数によって符号化し、これに暗号化、復号を施してもよい。この場合は、難読化プログラムの実行に際し、まず暗号化された整数の符号を復号し、更に復号された整数をプログラムの形式に変換した後にエミュレート実行を行う。また、例えば、プログラムのコードをそのプログラムのコード体系とは別のコード体系に変換し、これに暗号化、復号を施してもよい。
【００６２】
また、ユーザ４３へのプログラムの配布は、必ずしもインターネットを利用しなくてもよい。例えば、ＣＤ−ＲＯＭなどの電子媒体や衛星通信方式を用いてこれを配布してもよい。
また、前述の第２の実施の形態では、元のプログラムをＪａｖａなどの高級言語を用いて記述し、復号されたプログラムの実行のためにエミュレータを利用したが、プログラムの記述方法、及び復号されたプログラムを実行する方法は必ずしもこれらに限定されない。例えば、処理時間のオーバーヘッドを減じる目的で、プログラムをコンパイル後の実行形式で与え、難読化のための暗号化、復号処理を実行形式のプログラムに対して実施することで、エミュレータの使用を回避してもよい。
また、前述の第２の実施の形態では、プログラムの全体に難読化処理を施したが、例えば難読化によって生じる処理時間のオーバーヘッドやファイルサイズの増加を減じるために、プログラムの一部分のみに対して難読化処理を施してもよい。
【００６３】
前述の実施の形態では、パスワード等のプログラムに関連する情報を一方向性関数又は擬似一方向性関数の入力又は入力の一部とし、この一方向性関数又は擬似一方向性関数の出力又は出力の一部をプログラムのコードの一部又は全部の暗号化に利用する。これにより、堅牢なプログラム難読化手法を提供している。
難読化前の元のプログラムに相当する部分は一方向性関数又は擬似一方向性関数の出力又は出力の一部を用いて暗号化が施されているため、正規のパスワードを所有しない不正なユーザが難読化されたプログラムを実行しようとしても、これを正常に作動させることはできないようにしている。
また、一方向性関数又は擬似一方向性関数の性質により、パスワード等のプログラムに関連する重要情報を難読化プログラムに関する情報から逆算することは事実上不可能である。このため、プログラムの不正な解析を防止し、プログラムの所有者の権利を保護している。
また、前述の実施の形態においてエミュレータを利用して難読化を構成する場合には、実行形式のプログラムの暗号化を必要としない。このため、多くの従来手法では困難であった可読な中間コードを利用するＪａｖａ等の言語で記述されたソフトウェアに対しても高い安全性を保持する難読化処理を施している。
また、暗号化を行うときに、プログラムのコードをそのプログラムのコード体系とは別のコード体系に変換したものを利用するようにしてもよい。
【００６４】
なお、第１及び第２の実施の形態としてのプログラムが実行されるコンピュータのハードウェア構成は、図８に示すように、一般的なコンピュータであり、具体的にはパーソナルコンピュータ、サーバーとなり得るコンピュータ等である。擬似乱数発生モジュール１０２、暗号化処理モジュール１０４、復号モジュール２０３、実行モジュール２０４等のプログラムを実行するＣＰＵ８０１と、そのプログラムやデータを記憶するＲＡＭ８０２と、本コンピュータを起動するためのプログラム等が格納されているＲＯＭ８０３と、補助記憶装置であるＨＤ８０４（例えばハードディスクを用いることができる）と、キーボード、マウス等のデータを入力する入力装置８０６と、ＣＲＴや液晶ディスプレイ等の出力装置８０５と、通信ネットワークと接続するための通信回線インタフェース８０７（例えばネットワークインタフェースカードを用いることができる）、そして、それらをつないでデータのやりとりをするためのバス８０８により構成されている。これらのコンピュータが複数台互いにネットワークによって接続されていてもよい。
【００６５】
前述の実施の形態のうち、コンピュータ・プログラムによるものについては、本ハードウェア構成のシステムにソフトウェアであるコンピュータ・プログラムを読み込ませ、ソフトウェアとハードウェア資源とが協働して、前述の実施の形態が実現される。
なお、図８に示すハードウェア構成は、１つの構成例を示すものであり、本実施の形態は、図８に示す構成に限らず、本実施の形態において説明したモジュールを実行可能な構成であればよい。例えば、一部のモジュールを専用のハードウェア（例えばＡＳＩＣ等）で構成してもよく、一部のモジュールは外部のシステム内にあり通信回線で接続しているような形態でもよく、更に図８に示すシステムが複数互いに通信回線によって接続されていて互いに協調動作するようにしてもよい。また、特に、パーソナルコンピュータの他、情報家電、複写機、ファックス、スキャナ、プリンタ、複合機（スキャナ、プリンタ、複写機、ファックス等のいずれか２つ以上の機能を有している画像処理装置）などに組み込まれていてもよい。
【００６６】
なお、説明したプログラムについては、記録媒体に格納して提供してもよく、また、そのプログラムを通信手段によって提供してもよい。その場合、例えば、前記説明したプログラムについて、「プログラムを記録したコンピュータ読み取り可能な記録媒体」の発明として捉えてもよい。
「プログラムを記録したコンピュータ読み取り可能な記録媒体」とは、プログラムのインストール、実行、プログラムの流通などのために用いられる、プログラムが記録されたコンピュータで読み取り可能な記録媒体をいう。
なお、記録媒体としては、例えば、デジタル・バーサタイル・ディスク（ＤＶＤ）であって、ＤＶＤフォーラムで策定された規格である「ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ、ＤＶＤ−ＲＡＭ等」、ＤＶＤ＋ＲＷで策定された規格である「ＤＶＤ＋Ｒ、ＤＶＤ＋ＲＷ等」、コンパクトディスク（ＣＤ）であって、読出し専用メモリ（ＣＤ−ＲＯＭ）、ＣＤレコーダブル（ＣＤ−Ｒ）、ＣＤリライタブル（ＣＤ−ＲＷ）等、光磁気ディスク（ＭＯ）、フレキシブルディスク（ＦＤ）、磁気テープ、ハードディスク、読出し専用メモリ（ＲＯＭ）、電気的消去及び書換可能な読出し専用メモリ（ＥＥＰＲＯＭ）、フラッシュ・メモリ、ランダム・アクセス・メモリ（ＲＡＭ）等が含まれる。
そして、前記のプログラム又はその一部は、前記記録媒体に記録して保存や流通等させてもよい。また、通信によって、例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、メトロポリタン・エリア・ネットワーク（ＭＡＮ）、ワイド・エリア・ネットワーク（ＷＡＮ）、インターネット、イントラネット、エクストラネット等に用いられる有線ネットワーク、あるいは無線通信ネットワーク、更にこれらの組み合わせ等の伝送媒体を用いて伝送させてもよく、また、搬送波に乗せて搬送させてもよい。
更に、前記のプログラムは、他のプログラムの一部分であってもよく、あるいは別個のプログラムと共に記録媒体に記録されていてもよい。また、複数の記録媒体に分割して記録されていてもよい。また、圧縮や暗号化など、復元可能であればどのような態様で記録されていてもよい。
【００６７】
本実施の形態においては、次のような特徴がある。以下の情報処理装置は、情報処理プログラム又は情報処理方法として把握してもよい。
［Ａ］  プログラムに関連する情報を受け付ける情報受付手段と、
前記情報受付手段によって受け付けられたプログラムに関連する情報又は該情報の一部を用いて、一方向性関数又は擬似一方向性関数の計算を行う計算手段と、
前記計算手段によって計算された結果又は該結果の一部を用いて、前記プログラムのコード若しくは該コードに変換を施したもの又はそれらの一部に対して暗号化処理を行う暗号化手段
を具備することを特徴とする情報処理装置。
【００６８】
［Ｂ］  前記暗号化手段によって暗号化処理を施す場合に、前記計算手段によって計算された結果又は該結果の一部と、前記プログラムのコード若しくは該コードに変換を施したもの又はそれらの一部との排他的論理和を利用する
ことを特徴とする［Ａ］の情報処理装置。
【００６９】
［Ｃ］  前記暗号化手段によって暗号化処理を施す場合に、前記一方向性関数又は前記擬似一方向性関数の出力又は出力に変換を施したものを暗号鍵として用いる
ことを特徴とする［Ａ］又は［Ｂ］の情報処理装置。
【００７０】
［Ｄ］  前記プログラムに関連する情報としてパスワードを利用する
ことを特徴とする［Ａ］〜［Ｃ］の情報処理装置。
【００７１】
［Ｅ］  前記プログラムに関連する情報として前記プログラムの実行を指示するために割り当てられた乱数列である秘密情報を利用する
ことを特徴とする［Ａ］〜［Ｄ］の情報処理装置。
【００７２】
［Ｆ］  ハッシュ関数を用いて前記一方向性関数又は前記擬似一方向性関数を構成する
ことを特徴とする［Ａ］〜［Ｅ］の情報処理装置。
【００７３】
［Ｇ］  一方向性又は擬似一方向性を有するパーミュテーションを用いて前記一方向性関数又は前記擬似一方向性関数を構成する
ことを特徴とする［Ａ］〜［Ｆ］の情報処理装置。
【００７４】
［Ｈ］  暗号化処理を施す前記プログラムのコード又はコードに変換を施したものをゲーデル数などの符号化を用いて記述する
ことを特徴とする［Ａ］〜［Ｇ］の情報処理装置。
【００７５】
［Ｉ］  前記プログラムのコードを該プログラムのコード体系とは別のコード体系に変換したものを利用する
ことを特徴とする［Ａ］〜［Ｈ］の情報処理装置。
【００７６】
［Ｊ］  プログラムに関連する情報を受け付ける情報受付手段と、
前記情報受付手段によって受け付けられたプログラムに関連する情報又は該情報の一部を用いて、一方向性関数又は擬似一方向性関数の計算を行う計算手段と、
前記計算手段によって計算された結果又は該結果の一部を用いて、暗号化が施されたプログラムのコード若しくは該コードに変換を施したもの又はそれらの一部を復号する復号手段
を具備することを特徴とする情報処理装置。
【００７７】
［Ｋ］  前記復号手段によって復号を施す場合に、前記計算手段によって計算された結果又は該結果の一部と、前記プログラムのコード若しくは該コードに変換を施したもの又はそれらの一部との排他的論理和を利用する
ことを特徴とする［Ｊ］の情報処理装置。
【００７８】
［Ｌ］  前記プログラムのコードの一部又は全部に暗号化処理を施す場合に、前記一方向性関数又は前記擬似一方向性関数の出力又は出力に変換を施したものを暗号鍵として用いる
ことを特徴とする［Ｊ］又は［Ｋ］の情報処理装置。
【００７９】
［Ｍ］  前記プログラムに関連する情報としてパスワードを利用する
ことを特徴とする［Ｊ］〜［Ｌ］の情報処理装置。
【００８０】
［Ｎ］  前記プログラムに関連する情報として前記プログラムの実行を指示するために割り当てられた乱数列である秘密情報を利用する
ことを特徴とする［Ｊ］〜［Ｍ］の情報処理装置。
【００８１】
［Ｏ］  ハッシュ関数を用いて前記一方向性関数又は前記擬似一方向性関数を構成する
ことを特徴とする［Ｊ］〜［Ｎ］の情報処理装置。
【００８２】
［Ｐ］  一方向性又は擬似一方向性を有するパーミュテーションを用いて前記一方向性関数又は前記擬似一方向性関数を構成する
ことを特徴とする［Ｊ］〜［Ｏ］の情報処理装置。
【００８３】
［Ｑ］  暗号化された該プログラムのコード又はコードに変換を施したものをゲーデル数などの符号化を用いて記述する
ことを特徴とする［Ｊ］〜［Ｐ］の情報処理装置。
【００８４】
［Ｒ］  前記プログラムのコードを該プログラムのコード体系とは別のコード体系に変換したものを利用する
ことを特徴とする［Ｊ］〜［Ｑ］の情報処理装置。
【００８５】
［Ｓ］  暗号化されたオブジェクトコードを復号する復号手段を有する
ことを特徴とする［Ｊ］〜［Ｒ］の情報処理装置。
【図面の簡単な説明】
【００８６】
【図１】第１及び第２の実施の形態（難読化装置）の構成例についての概念的なモジュール構成図である。
【図２】第１及び第２の実施の形態（実行処理装置）の構成例についての概念的なモジュール構成図である。
【図３】第１の実施の形態における難読化装置の利用形態例を示す説明図である。
【図４】擬似乱数の生成手順の例を示すフローチャートである。
【図５】第１の実施の形態における難読化プログラムの構成例を示す説明図である。
【図６】第２の実施の形態における難読化装置の利用形態例を示す説明図である。
【図７】第２の実施の形態における難読化プログラムの構成例を示す説明図である。
【図８】第１及び第２の実施の形態を実現するコンピュータのハードウェア構成例を示すブロック図である。
【符号の説明】
【００８７】
１１…配布者
１２…難読化装置
１３、１４…ユーザ
４１…配布者
４２…難読化装置
４３、４５…ユーザ
４４…起動プログラム
１０１…パスワード受付モジュール
１０２…擬似乱数発生モジュール
１０３…プログラム受付モジュール
１０４…暗号化処理モジュール
１０５…実行プログラム付加モジュール
２０１…パスワード受付モジュール
２０２…擬似乱数発生モジュール
２０３…復号モジュール
２０４…実行モジュール
【図１】
0004470982.tif 000002
【図２】
0004470982.tif 000003
【図３】
0004470982.tif 000004
【図４】
0004470982.tif 000005
【図５】
0004470982.tif 000006
【図６】
0004470982.tif 000007
【図７】
0004470982.tif 000008
【図８】
0004470982.tif 000009