(57)【特許請求の範囲】
【請求項１】
プログラムコード（ＣＯ）のコンピュータ支援難読化方法であって、
前記プログラムコード（ＣＯ）に複数の計算ステップ（ＳＴ）が実装され、
前記複数の計算ステップ（ＳＴ）の所定の計算ステップが前記プログラムコード（ＣＯ）の実行時に所定の順序で呼び出され、前記所定の計算ステップの少なくとも一部が予め決められた所与の計算ステップ（ＳＴｉ）であり、該所与の計算ステップ（ＳＴｉ）のそれぞれにおいて、前記プログラムコード（ＣＯ）に保存された、複数のデジタルの第１のテーブル値（Ｔ１ｉ）からなる第１のテーブル（Ｔ１）がアクセスされ、前記所与の計算ステップ（ＳＴｉ）のそれぞれに必要な前記第１のテーブル値（Ｔ１ｉ）が前記第１のテーブル（Ｔ１）から読み出され、
前記プログラムコード（ＣＯ）を変更するために、
複数のデジタルのマスク値（Ｍｉ）を含む動的マスク（Ｍ）を生成し、前記マスク（Ｍ）の少なくとも一部の前記マスク値（Ｍｉ）が互いに異なり、前記各マスク値（Ｍｉ）が前記所与の計算ステップ（ＳＴｉ）のそれぞれに有効である、過程と、
前記第１のテーブル（Ｔ１）の前記第１のテーブル値（Ｔ１ｉ）のそれぞれを、前記所与の計算ステップ（ＳＴｉ）それぞれにおける前記第１のテーブル値（Ｔ１ｉ）の読み取り時に有効な前記マスク値（Ｍｉ）を使用してデジタルの第２のテーブル値（Ｔ２ｉ）に変換し、これにより前記第２のテーブル値（Ｔ２ｉ）からなる第２のテーブル（Ｔ２）を取得し、該第２のテーブル（Ｔ２）を、前記第１のテーブル（Ｔ１）の代わりに前記プログラムコード（ＣＯ）に保存する、過程と、
前記所与の計算ステップ（ＳＴｉ）ごとに追加の計算ステップ（ｆｉ，Ｍ−１）が前記プログラムコード（ＣＯ）に実装され、前記追加の計算ステップ（ｆｉ，Ｍ−１）は、読み出された前記第２のテーブル値（Ｔ２ｉ）を、前記所与の計算ステップ（ＳＴｉ）それぞれに必要な前記第１のテーブル値（Ｔ１ｉ）に逆変換する、過程とを実行する、コンピュータ支援難読化方法。
【請求項２】
前記動的マスク（Ｍ）を生成するために初期マスク値及び更新ステップを決定し、
連続する１つ以上の前記更新ステップを現在有効なマスク値（Ｍｉ）に適用することによって、次の前記所与の計算ステップ（ＳＴｉ）に有効なマスク値（Ｍｉ）を計算し、
前記更新ステップも前記プログラムコード（ＣＯ）に実装されることで、前記所与の計算ステップ（ＳＴｉ）それぞれに前記現在有効なマスク値（Ｍｉ）が存在し、
前記追加の計算ステップ（ｆｉ，Ｍ−１）が、前記所与の計算ステップにおいて前記現在有効なマスク値（Ｍｉ）により決まり、
前記更新ステップは、前記更新ステップが適用される前記マスク値（Ｍｉ）の少なくとも一部に対して別々となるように決定する、請求項１に記載のコンピュータ支援難読化方法。
【請求項３】
前記更新ステップは、前記所与の計算ステップ（ＳＴｉ）のそれぞれに実装される、請求項２に記載のコンピュータ支援難読化方法。
【請求項４】
前記所与の計算ステップ（ＳＴｉ）ではない前記所定の計算ステップの少なくとも一部にも更新ステップが実装される、請求項３に記載のコンピュータ支援難読化方法。
【請求項５】
少なくとも前記初期マスク値（Ｍｉ）又は前記更新ステップは、乱数ジェネレータを使用して決定する、請求項２〜４のいずれか１項に記載のコンピュータ支援難読化方法。
【請求項６】
前記第１のテーブル値（Ｔ１ｉ）及び前記第２のテーブル値（Ｔ２ｉ）と前記マスク値（Ｍｉ）は、それぞれがビットシーケンスを示す、請求項１〜５のいずれか１項に記載のコンピュータ支援難読化方法。
【請求項７】
前記第１のテーブル値（Ｔ１ｉ）の前記第２のテーブル値（Ｔ２ｉ）への変換は、前記第１のテーブル値の前記ビットシーケンスと前記現在有効なマスク値（Ｍｉ）の前記ビットシーケンスとの間に論理演算を適用することによって行い、
前記論理演算の適用によって前記第２のテーブル値（Ｔ２ｉ）を得る、請求項６に記載のコンピュータ支援難読化方法。
【請求項８】
前記論理演算は、前記第１のテーブル値（Ｔ１ｉ）の前記ビットシーケンス及び前記現在有効なマスク値（Ｍｉ）の前記ビットシーケンスの互いに対応するビットに対しビットごとに適用し、
前記論理演算は、１つ以上の、ＯＲ演算、ＸＯＲ演算、ＮＯＲ演算、ＸＮＯＲ演算、ＡＮＤ演算、又はＮＡＮＤ演算を少なくとも含むことを特徴とする、請求項７に記載のコンピュータ支援難読化方法。
【請求項９】
前記現在有効なマスク値（Ｍｉ）の前記ビットシーケンスが、前記第１のテーブル値（Ｔ１ｉ）の前記ビットシーケンスよりも短い場合、前記第１のテーブル値（Ｔ１ｉ）の前記ビットシーケンスのビットごとに、前記現在有効なマスク値（Ｍｉ）の前記ビットシーケンスの対応するビットが存在するように、前記現在有効なマスク値（Ｍｉ）の元の前記ビットシーケンスを、該元のビットシーケンスのビットの複数回使用によって、拡張する、請求項８に記載のコンピュータ支援難読化方法。
【請求項１０】
前記現在有効なマスク値（Ｍｉ）の前記ビットシーケンスが、前記第１のテーブル値（Ｔ１ｉ）の前記ビットシーケンスよりも短い場合、前記第１のテーブル値（Ｔ１ｉ）の前記ビットシーケンスのビットごとに、前記現在有効なマスク値（Ｍｉ）の前記ビットシーケンスの対応するビットが存在するように、前記現在有効なマスク値（Ｍｉ）の元の前記ビットシーケンスを、該元のビットシーケンスの１回以上の繰り返しによって、拡張する、請求項８に記載のコンピュータ支援難読化方法。
【請求項１１】
プログラムコードフラグメントを有するコンピュータプログラムを保存した機械可読媒体であって、前記プログラムコードフラグメントは、コンピュータで実行されると、請求項１〜１０のいずれか１項に記載のコンピュータ支援難読化方法を実行する、機械可読媒体。
【請求項１２】
プログラムコードフラグメントを有するコンピュータプログラムであって、前記プログラムコードフラグメントは、コンピュータで実行されると、請求項１〜１０のいずれか１項に記載のコンピュータ支援難読化方法を実行する、コンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムコードのコンピュータ支援難読化方法と、その難読化プログラムコードを実行する方法に関する。さらに、本発明は、技術システム、コンピュータプログラムを入れた製品及びコンピュータプログラムにも関わる。
【背景技術】
【０００２】
多くの場合、プログラムコードからなる情報を第三者による不正アクセスに対して保護する必要がある。一般的なアプローチは、適切な暗号化機能で情報を暗号化するか、又はコードパッカーを使用してプログラムコードをパッケージ化することである。その場合の欠点とは、プログラムコードの実行中に情報を復号して元に戻すか、又はコードをアンパックして元に戻すことになるため、機密情報がプログラム実行時に完全に平文でプログラムメモリ内に存在することとなり、攻撃者がそれらの情報を簡便な手法によりメモリから読み出せるリスクが生じることである。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明は、第三者による不正アクセスに対してプログラムコード内の機密情報を、プログラムコードの実行中に的確に保護する、コンピュータ支援方法を実現することを目的とする。
【課題を解決するための手段】
【０００４】
上記目的は、独立形式請求項によって解決される。本発明の発展態様が引用形式請求項において定義されている。
【０００５】
本発明に係る方法は、プログラムコードのコンピュータ支援難読化（すなわち、秘匿化）に用いられる。秘匿化（難読化）すべきプログラムコードに複数の計算ステップが実装されており、この複数の計算ステップのうちの所定の計算ステップが、当該プログラムコードの実行時に所定の順序で呼び出される。この場合に、計算ステップ及び後述する更新ステップの概念は、広義に理解すべきである。計算ステップは、単一の算術演算のみを含む必要はなく、必要に応じて、条件、ループ、ネスティングなどに関する複数の算術演算から構成することができる。したがって、計算ステップ又は更新ステップにより、一連の演算をカプセル化することができる。
【０００６】
秘匿化すべきプログラムコードの予定された計算ステップは、予め決めてある所与の計算ステップを含む。所与の計算ステップは、例えば、その所与の計算ステップのみから構成されていてもよいが、所与の計算ステップに加えて、必要に応じて、別の計算ステップも備え得る。所与の計算ステップは、そのステップのそれぞれで、プログラムコードに保存された、複数のデジタルの第１のテーブル値からなる第１のテーブルがアクセスされ、各所与の計算ステップに必要な第１のテーブル値を第１のテーブルから読み出すことを、特徴とする。所与の計算ステップではないすべての予定された計算ステップは（存在する場合）、その呼び出しの順序が確かに決まっているが、これらの計算ステップが第１のテーブルにアクセスすることはない。
【０００７】
テーブルという用語は、広義に理解すべきである。テーブルは、対応するコマンドを有するプログラムコードによって的確にアクセスできる多数のデジタル値から構成される。さらに、テーブル値という用語もまた、広義に理解すべきである。特に、テーブル値は、対応する呼び出された計算ステップにおいて異なる時点で処理される複数のサブ値で構成することができる。
【０００８】
本発明に係るプログラムコードの難読化の過程では、複数のデジタルマスク値を含む動的マスクが生成され、該マスクの少なくとも一部のマスク値、好ましくは、該マスクのすべてのマスク値は、互いに異なり、マスク値のそれぞれが所与の計算ステップのそれぞれに対して有効である。
【０００９】
本発明に係る方法の過程では、第１のテーブルの各第１のテーブル値は、所与の計算ステップのそれぞれで第１のテーブル値が読み出されるときに該所与の計算ステップにおいて有効なマスク値によって、デジタルの第２のテーブル値に変換され、これにより第２のテーブル値からなる第２のテーブルが得られ、そして該第２のテーブルが、第１のテーブルの代わりにプログラムコードに保存される。言い換えると、難読化プログラムコードの実行時に、第１のテーブル値はもはやアクセスされないが、その代わりに、対応する第２のテーブル値がアクセスされる。所与の計算ステップそれぞれにおける第１のテーブル値の読み出し時に有効なマスク値は、以下において、現在有効なマスク値とも呼ぶ。
【００１０】
難読化プログラムコードが非難読化プログラムコードと同じ結果をもたらすように、難読化の過程では、所与の計算ステップ毎に追加の計算ステップがプログラムコードに実装され、この追加の計算ステップは、対応する所与の計算ステップの実行時に読み出された第２のテーブル値を、該所与の計算ステップに必要な第１のテーブル値に逆変換する。
【００１１】
本発明に係る方法は、テーブル形式で保存されている動的マスクを使用することで機密情報が的確に秘匿化されるという利点をもつ。この場合、デマスキング（マスク解除）又は秘匿化解除の演算は、プログラムコード全体の複数の計算ステップに割り当てられる。したがって、難読化プログラムコード実行中の秘匿化情報の再構築は、非常に困難である。
【００１２】
好ましい態様において、動的マスクを生成するために、初期マスク値及び更新ステップが決定され、現在有効なマスク値に１つ以上の連続する更新ステップを適用することによって、次の所与の計算ステップに有効なマスク値が計算される。初期マスク値及び更新ステップもプログラムコードに実装されるため、現在有効なマスク値は、所与の計算ステップそれぞれに存在し、追加の計算ステップは、所与の計算ステップそれぞれにおいて現在有効なマスク値により決まる。プログラムコードに更新ステップを実装することによって、攻撃者にとっては、所与の計算ステップで第１のテーブル値を再構築するために、初期マスク値及び先行する更新ステップに関する知識が必要となる。この知識は、プログラムコードに割り当てられているため、プログラムコード内の情報の格段に的確な保護が実現される。
【００１３】
元の第１のテーブル値の逆変換をより難しくするために、上記態様の好ましい変形において、更新ステップは、マスク値の少なくとも一部、好ましくは、更新ステップが適用されるすべてのマスク値に対して、別々となるように決定される。さらに好ましい変形態様では、更新ステップは、所与の計算ステップのそれぞれに提供され、好ましくは、所与の計算ステップではない所定の計算ステップの少なくとも一部において（好ましくはすべての所定の計算ステップにおいて）も（存在する場合）、それぞれ、更新ステップが設けられる。
【００１４】
好ましい態様において、初期マスク値及び更新ステップは、乱数ジェネレータによって決定される。これによると、これらの値又はステップの十分に無作為な決定が達成され、したがって、プログラムコードの難読化がさらに向上する。
【００１５】
好ましい態様において、第１のテーブル値及び第２のテーブル値、そしてマスク値も、それぞれビットシーケンスを表す。好ましくは、各第１のテーブル値の第２のテーブル値への変換は、第１のテーブル値のビットシーケンスと現在有効なマスク値のビットシーケンスとの間に論理演算を適用することにより行われる。この場合、当該論理演算を適用して、第２のテーブル値が得られる。
【００１６】
好ましくは、上記の論理演算は、各第１のテーブル値及び現在有効なマスク値のビットシーケンスの互いに対応するビットにビット単位で適用され、該論理演算は、好ましくは、１つ以上の、ＯＲ演算、ＸＯＲ演算、ＮＯＲ演算、ＸＮＯＲ演算、ＡＮＤ演算、又はＮＡＮＤ演算を少なくとも含む。したがって、現在有効なマスク値のビットシーケンスが第１のテーブル値のビットシーケンスよりも長い場合、現在有効なマスク値のすべてのビットが第１のテーブル値の変更に使用されるわけではない。
【００１７】
現在有効なマスク値のビットシーケンスが、各第１のテーブル値のビットシーケンスよりも短い場合、本発明に係る方法の好ましい態様では、現在有効なマスク値の元のビットシーケンスを、元のビットシーケンスのビットを複数回使用することにより拡張するので、各第１のテーブル値のそれぞれのビットに対して、現在有効なマスク値のビットシーケンスの対応するビットが存在する。ビットシーケンスの延長は、好ましくは、元のビットシーケンスが１回以上繰り返されるように行われる。この方法により、マスク値のビット長が、対応するテーブル値のビット長よりも短い場合でも、対応する（第１の）テーブル値の的確な秘匿化が達成される。
【００１８】
プログラムコードを難読化する方法に加えて、本発明は、難読化プログラムコードを実行する方法にも関する。この場合、（難読化）プログラムコードの各所与の計算ステップの呼び出し時に、第２のテーブル値が第２のテーブルから読み出され、各所与の計算ステップに対して追加の計算ステップが実行され、該追加の計算ステップが、読み出された第２のテーブル値を、各所与の計算ステップに必要な第１のテーブル値に逆変換する。
【００１９】
現在有効なマスク値を決定するための更新ステップを使用する態様により難読化プログラムコードが生成されている場合、難読化プログラムコードの実行の過程では、難読化プログラムコードに実装された更新ステップもまた実行される。
【００２０】
本発明はさらに、上記方法に従って難読化プログラムコードを実行するように構成されたコンピュータ手段を含む、技術システムに関する。技術システムという用語は、この場合広義に理解すべきであり、本明細書において、技術システムは、単一の技術装置であってもよい。この場合、難読化プログラムコードは様々な技術システムに保存できる。技術システムは、例えば、自動化システム、自動化システムのコンポーネント、発電システムやエネルギー分配システム、発電システムやエネルギー分配システムのコンポーネント、又は医療機器である。
【００２１】
さらに、本発明は、プログラムコードフラグメント（セクション）を有するコンピュータプログラムを保存した機械可読媒体に関し、そのプログラムコードフラグメントは、コンピュータで実行されると、本発明に係るプログラムコードのコンピュータ支援難読化方法、又は、本発明に係る難読化プログラムコードを実行する方法、又は、これらの方法の好ましい変形態様、を実行する。
【００２２】
さらに、本発明は、プログラムコードフラグメントを有するコンピュータプログラムに関し、そのプログラムコードフラグメントは、コンピュータで実行されると、本発明に係るプログラムコードのコンピュータ支援難読化方法、又は、本発明に係る難読化プログラムコードを実行する方法、又は、これらの方法の好ましい変形態様、を実行する。
【００２３】
上記コンピュータプログラムを保存した機械可読媒体又はコンピュータプログラムが、プログラムコードの難読化方法を実行するために用いられる場合、当該難読化は、対応するプログラムコードフラグメントにより行われる。すなわち、このプログラムコードフラグメントは、難読化すべきプログラムコードを表すものではない。
【００２４】
コンピュータプログラムを保存した機械可読媒体又はコンピュータプログラムが難読化プログラムコードの実行のために用いられる場合、そのプログラムコードフラグメントは、難読化プログラムコードに相当する。
【図面の簡単な説明】
【００２５】
【図１】本発明に係るプログラムコードを難読化する方法の実施形態に関するフローチャート。
【発明を実施するための形態】
【００２６】
本発明の実施形態について、図１を参照して以下に詳細に説明する。図１は、本発明に係るプログラムコードを難読化する方法の実施形態に関するフローチャートを示す。
【００２７】
図１によれば、方法の開始点は、本発明の範囲において秘匿化されるプログラムコードＣＯである。このプログラムコードＣＯは、図１において「ＳＴ」で示した複数の計算ステップを有する。これらの計算ステップＳＴｉ（ｉ＝１，・・・，ｎ）の一部は、第１のテーブルＴ１にアクセスし、当該各計算ステップは、対応するエントリＴ１ｉをテーブルから読み出す。インデックスｉが所定の順序を規定し、この順序で計算ステップＳＴｉが次々に実行される。このときの計算ステップＳＴｉは、請求項１との関係で言うと、所与の計算ステップに相当する。計算ステップＳＴｉの間において、プログラムコードＣＯの別の計算ステップも実行できるが、これら別の計算ステップは、テーブルＴ１にアクセスしない。
【００２８】
したがって、プログラムコードＣＯによれば、計算ステップＳＴｉにおいてのみ、第１のテーブルＴ１の特定のエントリＴ１ｉがアクセスされる。このときの各テーブルエントリは、対応する計算ステップにおいて処理されるビットシーケンスを表す。個々のテーブルエントリのビットシーケンスの長さは、この場合ｌ（ｉ）である。これらの長さは、テーブルエントリごとに異なるサイズであってもよい。
【００２９】
実行時のプログラムコードＣＯは、既知の入力から計算ステップＳＴを使用して特定の出力を生成する。基本的にこの場合の計算ステップＳＴは任意の順序で実行してもよいが、特定の（所与の）計算ステップＳＴｉは、互いに常に同じ順序で、入力とは無関係に常に１回だけ実行される。各計算ステップＳＴｉは、常に１つのテーブルエントリＴ１ｉのみにアクセスするが、計算ステップは、実行時、このテーブルエントリに任意の回数アクセスすることができる。
【００３０】
適用可能なテーブルエントリＴ１ｉをもつ非秘匿化テーブルＴ１が機密情報を含んでいて、以下に説明する実施形態の目的は、不正な第三者がテーブルエントリをプログラムコードから再構築できないようにするか、又は多大な努力を払わなければ再構築できないようにするために、プログラムコードＣＯを難読化することである。テーブルＴ１全体に暗号化関数を１回適用するのとは対照的に、この秘匿化はプログラムコード全体に割り当てられるため、元のテーブル値の逆変換は、非常に困難である。
【００３１】
図１のステップＳ１によれば、プログラムコードＣＯの難読化のために、マスクエントリＭｉ（ｉ＝１，・・・，ｎ）を有する動的マスクＭが最初に決定される。したがって、所与の計算ステップＳＴｉのそれぞれに対して、対応するマスク値Ｍｉが存在する。このマスク値Ｍｉは、計算ステップＳＴｉに対してのみ有効である。マスク値にインデックス付与することによって、計算ステップＳＴｉの実行に対応する順序が決定される。個々のマスク値Ｍｉは、それぞれ特定の長さのビットシーケンスを表し、この長さは、ここで説明する実施形態ではマスク値Ｍｉにわたって同じままであるが、必ずしも同じである必要はない。
【００３２】
個々のマスク値Ｍｉは、一連の更新ステップを介して決定され、更新ステップは、無作為な初期マスク値から始まって順番に最後に更新されたマスク値まで適用される。更新ステップという用語は、広義に理解すべきである。特に、更新ステップは、単一の演算だけでなく、必要に応じて、複数の演算を含んでもよい。ここに説明する実施形態では、更新ステップは、無作為に決定されており、したがって少なくとも部分的に互いに異なっている。それにもかかわらず、個々の更新ステップは、予め決定されており、その更新ステップに含まれる演算は、規定の順序で実行される。したがって、ステップＳ１によれば、無作為のマスク割り当て又はマスク値Ｍｉを有するマスクＭが生成される。好ましくはこのときに、マスクの初期値を決定し、更新ステップを決定するために、乱数ジェネレータを使用する。
【００３３】
ステップＳ２において、各計算ステップＳＴｉにおいて読み出されたテーブルエントリＴ１ｉは、対応する計算ステップＳＴｉに有効なマスク値Ｍｉにより決まる関数ｆｉ，Ｍを使用して変更される。このときの関数ｆｉ，Ｍは任意に決定することができ、該関数は、それぞれのマスク値Ｍｉにより決まり、テーブルエントリＴ１ｉを第２のテーブルＴ２の新しいテーブルエントリＴ２ｉ上に全単射写像を形成することのみが必須である。図１から明らかなように、関数ｆｉ，Ｍは、本実施形態において、テーブルエントリＴ１ｉのビットシーケンスを同じ長さの別のビットシーケンスに写像形成する写像であり、この別のビットシーケンスが新しいテーブルエントリＴ２ｉに相当する。
【００３４】
書き換えられたテーブルエントリのＴ２ｉがすべての計算ステップＳＴｉについて生成された後は、元のテーブルエントリＴ１ｉは、これらの新たなテーブルエントリＴ２ｉによって置換されているので、攻撃者にとって、元のテーブルエントリは、プログラムコードＣＯからそれ以上は何も読み出すことができない。テーブルエントリの変更に基づいて、プログラムコードＣＯも、対応する計算ステップＳＴｉで読み出されたテーブルエントリＴ２ｉを元のテーブルエントリＴ１ｉに変換する目的で変更される。これは、図１によれば、ステップＳ３で達成される。このステップでは、初期マスク値はプログラムコードの先頭に保存され、上記の更新ステップもプログラムコードに実装され、ここに説明する実施形態では、各計算ステップＳＴｉが呼び出されると、対応する更新ステップが、現在有効なマスク値を決定するために実行される。さらに、各計算ステップには、現在有効なマスク値Ｍｉにより決まる逆関数ｆｉ，Ｍ−１を使用して、読み出されたテーブルエントリＴ２ｉを元のテーブルエントリＴ１ｉに変換する、追加のステップが実装される。
【００３５】
ステップＳ１〜ステップＳ３の結果として、元のテーブルＴ１が秘匿化された難読化プログラムコードＣＯ’が得られる。ただし、元のテーブル値への逆変換ステップによって、非難読化プログラムコードＣＯを用いた場合と同じ計算結果が得られる。難読化プログラムコードＣＯ’は、任意の技術的機器に保存して実行することができる。この保存は、図１において矢印Ｐで示されている。図示の場合、難読化プログラムコードＣＯ’は、難読化プログラムコードＣＯ’を実行するために使用されるコンピュータ手段２を有する技術的機器１に保存される。
【００３６】
上記のプログラムコードの難読化は、様々な技術分野で使用することができる。特に例をあげると、ＳＣＡＤＡシステム、ＰＬＣ（プログラマブルロジックコントローラ）、モーションコントロールシステム、自動化ソフトウェア、コンピュータ断層撮影装置、スマートグリッドなどでプログラムコードを変更することができる。任意のアルゴリズム、例えば、ＰＣ（パーソナルコンピュータ）のプログラム又はデバイスのファームウェアを難読化することができる。プログラムは任意のタスクを引き受けることができ、例えば、開ループ制御アルゴリズムや閉ループ制御アルゴリズム、又はニューラルネットワークに基づくアルゴリズムである。
【００３７】
一般的に言って、本発明による難読化により、テーブル形式で保存された機密データのソフトウェアにおける秘匿化が達成される。機密データは、例えば、暗号化情報又はライセンス認証に関連する情報である。
【００３８】
本発明に係る方法の上述の実施形態は、多くの利点を有する。特に、攻撃者は、テーブルのマスキングにより、このテーブルから情報をもはや抽出できない。マスクされた形式のテーブルを意味があるものとして解釈できるようにするには、マスクの初期化値及びマスクに対する一連の更新ステップ全体に関する追加の知識が実際に必要である。
【００３９】
１回限りの復号演算又はアンパック演算とは対照的に、テーブルのデマスキングのステップは、プログラムコードのスポット部位では行われず、その代わりにデマスキングは、プログラムコード全体に割り当てられている。したがって、攻撃者は、プログラムコード全体を解析して、テーブルの元の値について逆推論をしなければならない。これとは対照的に、攻撃者は、テーブルの１回限りの暗号化の場合には、復号に関する知識があれば、テーブルエントリの平文に直接アクセスすることができる。
【００４０】
さらに、本発明による難読化の場合、プログラムコードの実行の時点で、メモリ状態に基づいて、すなわち特に現在のマスク値に基づいて、現在のステップで使用されるテーブルエントリを超えて推論することはできない。マスク値の次の更新時にすでに、以前のテーブルエントリの逆推論は、もはや不可能である。
【００４１】
さらに、本発明による難読化方法は、例えば、アンチデバッグ手法又は自己書き換えコードの使用などの、リバースエンジニアリングの他の技術とも的確に組み合わせることができる。このようにして、攻撃者にとって、元のテーブル値を抽出するためにデマスキング演算のシーケンス全体を再構築することは、さらに困難になる。
【図１】
0006919973.tif 000002