説明

ソフトウェア暗号化方法およびソフトウェア暗号解読方法およびソフトウェア暗号化装置およびソフトウェア暗号解読装置

本発明はコンピュータセキュリティの分野に関し、殊にソフトウェア暗号化方法およびソフトウェア暗号解読方法およびソフトウェア暗号化装置およびソフトウェア暗号解読装置に関する。本発明の暗号解読プロセスは以下のステップを含んでいる:ステップ201、第2のソフトウェア暗号文のn個のパラグラフからランダムに、しきい値秘密鍵のt個のファクタを選択し;第2のソフトウェア暗号文から第1のソフトウェア暗号文および秘密鍵暗号文PSKを復元し、ここでnは1より大きい正の整数であり、tはn以下であり:ステップ202:秘密鍵暗号文PSKを抽出し、しきい値秘密鍵の前記t個のファクタに従って第2の秘密鍵を作成し、この第2の秘密鍵を用いて秘密鍵暗号文PSKを第1の秘密鍵SKに暗号解読し;ステップ203、前記第1の秘密鍵SKを用いて前記第1のソフトウェア暗号文を暗号解読する。本発明の利点は、ソフトウェア暗号鍵の保護を向上させて、ソフトウェアローディングプロセスを追跡することによってクラッカーがソフトウェアをクラックするのを困難にすることである。

【発明の詳細な説明】
【技術分野】
【0001】
技術分野
本発明はコンピュータセキュリティの分野、殊にコンピュータ暗号化の分野に関し、特にソフトウェア暗号化方法およびソフトウェア暗号解読方法およびソフトウェア暗号化装置およびソフトウェア暗号解読装置に関する。
【0002】
背景技術
近年では、ソフトウェアは独立した価値および機能、実行プロセス、コード化等を伴い、必需品となっている。ソフトウェアの一部において、オブジェクトが競合者およびそのほかの組織または個人によって盗難される傾向がある。従って、ソフトウェア、特に中間言語(Java、NET等のプログラミング言語)でプログラミングされたソフトウェアは非常に容易に、逆行分析によって逆符号化される。これは例えば、NET Reflect(Microsoftからの逆行分析ツール)、JAD(Javaからの逆行分析ツール)を用いて行われる。これによってコアアルゴリズム、符号化等に関する情報が得られ、このような情報がクラッカーによって悪意で使用される場合、例えばソフトウェアのコアアルゴリズムを模倣して、登録されたソフトウェアに近づく等の場合には、これは開発者にとって損失となる。
【0003】
従来技術では、内部機能の名前を変える、コントロールフローまたは他の方法を再アレンジすることによる、クラッキング行動においてクラッカーを混乱させるための措置はある程度の効果を有し、この措置によって逆符号化されたソフトウェアプログラムを読み出す、理解するのが困難にされる、または読み出して、理解するのを不可能にしてきた。しかしソースコードに対するこの種の保護メカニズムは、ソフトウェアプログラムが逆符号化されるのを回避することができないので、ソフトウェアプログラムの情報を失う可能性が依然として残る。
【0004】
記事「Using DES Encryption Algorithm to Protect Java Source Code(2005年5月にComputer and Information technologyに掲載)」には、Javaによってコンパイルされたソフトウェアを暗号化し、作動時に解読するためのソリューションが開示されている。このソリューションはData Encryption Standard (DES)を用いて、Java実行プログラムを暗号化し、暗号化された符号化プログラムおよび秘密鍵をメモリ内に格納し、ローダーを用いて、暗号化されたJava符号化プログラムおよび鍵をシステム内にロードし、秘密鍵を取り出し、符号化プログラムを暗号解読し、これを実行可能な符号化の形状に変え、これをJavaバーチャルマシーン内にロードし、作動させる。
【0005】
上述の方法は非常に容易に、クラッカーによって追跡可能であり、プログラム開始からクラッカーは、デバッグツールを用いるだけで各ステップを追跡することができる。作動時にプログラムが特定のファイルに毎回アクセスし、秘密鍵またはシステムのシンボルネームをこのファイルから得る場合には、これによってクラッカーは、このファイルが、プログラムに対する秘密鍵またはシステムのシンボルネームに対する比較テーブルであることを推測し、クラッカーがこのファイルが秘密鍵ファイルであることを確認すると、クラッカーはファイルをクラックするあらゆる可能な手段を試す;そしてファイルがひとたびクラックされてしまうと、ソフトウェアコーディングの暗号文がソフトウェアコーディングの平文に変えられ、このソフトウェアのソースコードが逆行分析によって生成され、これによってソフトウェア所有者にとって損失が生じる。
【0006】
本発明の内容
上述の問題を解決し、ソフトウェアデコンパイルの難易度を上げるために、本発明の課題は次のようなソフトウェア暗号化方法および相応する暗号解読方法を提供することである。ここでは、しきい値暗号化フィーチャーが含まれており、ソフトウェアの開始の度に、得られたしきい値秘密鍵ファクタのアドレスが異なっている。これによってクラッカーに秘密鍵アドレスの特定を不可能にさせる。
【0007】
本発明はまた、ソフトウェア暗号装置および相応する暗号解読装置も提供する。この装置は、しきい値秘密鍵の複数のファクタをソフトウェアの異なるパラグラフ内に格納することができ、暗号解読時に、しきい値秘密鍵のこれらのファクタを幾つかのパラグラフからランダムに、このソフトウェアの暗号解読のために得ることができる。
【0008】
ステップ101:第1の暗号化モジュールを用いて記憶媒体内のソフトウェア平文を、第1のソフトウェア暗号文に暗号化する。ここで暗号解読のための秘密鍵は第1の秘密鍵SKである;
ステップ102:第2の暗号化モジュールによって、しきい値秘密鍵のn個のファクタを用いて第2の秘密鍵を作成し、前記第1の秘密鍵SKをこの第2の秘密鍵を用いて秘密鍵暗号文PSKに暗号化し、この秘密鍵暗号文PSKを、前記第1のソフトウェア暗号文にスプライス接続する。ここでnは、1よりも大きい正の整数である;
ステップ103:カプセル化モジュールを用いて前記秘密鍵暗号文PSKと前記第1のソフトウェア暗号文を、統合された全体としてn個のパラグラフに分割し、前記しきい値秘密鍵のファクタを前記パラグラフにスプライス接続して、第2のソフトウェア暗号文を形成し、この第2のソフトウェア暗号文を前記記憶媒体内に格納する。
【0009】
本発明の暗号化方法の別の態様では、前記ステップ101において特定された前記暗号化方法は、対称暗号アルゴリズムまたは非対称暗号アルゴリズムを含む。
【0010】
本発明の暗号化方法のさらに別の態様では、前記ステップ102内で使用されるしきい値秘密鍵アルゴリズムはShamirしきい値秘密鍵スキームを含む。
【0011】
本発明の暗号化方法のさらに別の態様では、前記ステップ103において、前記カプセル化モジュールが前記秘密鍵暗号文PSKと前記第1のソフトウェア暗号文を統計された全体としてn個のパラグラフフに分割する;Cは前記n個のパラグラフ内のあらゆるパラグラフをあらわし、パラグラフCはブロックC,C,・・・,Cm−1を含み、以下の式が各パラグラフCで行われ、これはkに相応する:
【数1】

ここで×は算術的な乗算演算であり、同時にしきい値秘密鍵ファクタkのハッシュ値hが計算され、C’〜C’の値が結合されてC’が形成され、n個のパラグラフの複数のこのC’およびその相応するハッシュ値hがスプライス接続されて、前記第2のソフトウェア暗号文が形成される。
【0012】
ソフトウェア暗号解読のための方法は、ソフトウェアをロードするプロセスの間に以下のステップを含む:
ステップ201:カプセル除去モジュールによって、第2のソフトウェア暗号文のn個のパラグラフからランダムに、しきい値秘密鍵のt個のファクタを選択し;前記第2のソフトウェア暗号文から第1のソフトウェア暗号文および秘密鍵暗号文PSKを復元し、ここでtは1以上であり、n以下であり、nは1より大きい正の整数である;
ステップ202:前記秘密鍵暗号文PSKを抽出し、しきい値秘密鍵の前記t個のファクタに従って第2の暗号解読モジュールによって第2の秘密鍵を作成し、この第2の秘密鍵を用いて前記秘密鍵暗号文PSKを第1の秘密鍵SKに暗号解読する;
ステップ203:第1の暗号解読モジュールによって、前記第1の秘密鍵SKを用いて前記第1のソフトウェア暗号文を暗号解読し、ソフトウェア平文をCPUに送り、ソフトウェアを実行する。
【0013】
本発明の暗号解読方法の別の態様では、ステップ201において、前記カプセル除去モジュールは第2のソフトウェア暗号文の各n個のパラグラフにおいて計算を行い:E0〜Emに従ってC,C,・・・,Cm−1を除去し、以下の式を得る。
0=−C’+C’m−1×km−1−C’m−2×km−2+・・・+(−1)m−1×C’(P0)
kのハッシュ値がパラグラフC’の相応するハッシュ値hに相応する場合に、この式におけるkが解かれ、C〜Cm−1の値が、C’〜C’m−1からkを用いて復元され、C〜Cm−1が結合され、パラグラフCが得られる。このパラグラフは第1のソフトウェア暗号文と第2の秘密鍵暗号文の統合された全体のn個のパラグラフのうちの1つであり;n個のkが解かれ、第1のソフトウェア暗号文および第2の秘密鍵暗号文PSKが第2のソフトウェア暗号文から復元される。
【0014】
本発明の暗号解読方法のさらに別の態様では、この式(P0)におけるkを解くために多項式ニュートン反復方法が用いられる。
【0015】
ソフトウェア暗号化装置は次の特徴を有している。すなわち、この装置が第1の暗号化モジュール、第2の暗号化モジュールおよびカプセル化モジュールを含み;第1の秘密鍵SKを用いて前記第1の暗号化モジュールがソフトウェア平文を第1のソフトウェア暗号文に暗号化し;前記第1の暗号化モジュールと接続されている第2の暗号化モジュールがしきい値秘密鍵のn個のファクタを用いて第2の暗号化モジュールを形成し、第2の秘密鍵を用いて第1の秘密鍵SKを秘密鍵暗号文PSKに暗号化し、前記秘密鍵暗号文PSKを前記第1のソフトウェア暗号文内に格納し;前記第2の暗号化モジュールに接続されている前記カプセル化モジュールは、前記第1のソフトウェア暗号文をn個のパラグラフに分け、しきい値秘密鍵の前記ファクタを前記パラグラフにスプライス接合し、第2のソフトウェア暗号文を形成する。
【0016】
ソフトウェア暗号解読のための装置は次の特徴を有している。すなわち、この装置がカプセル除去モジュール、第2の暗号解読モジュールおよび第1の暗号解読モジュールを含んでいる、という特徴を有している;前記カプセル除去モジュールは、第2のソフトウェア暗号文を第1のソフトウェア暗号文と秘密鍵暗号文PSKにカプセル除去し(decapsulates)、ランダムに第2のソフトウェア暗号文のn個のパラグラフから、しきい値秘密鍵のt個のファクタを選択し;前記カプセル除去モジュールに接続されている前記第2の暗号解読モジュールは、しきい値秘密鍵の前記t個のファクタに従って第2の秘密鍵を形成し、この第2の秘密鍵を用いて秘密鍵暗号文PSKを第1の秘密鍵SKに暗号解読し、前記第2の暗号解読モジュールに結合されている前記第1の暗号解読モジュールは、前記第1のソフトウェア暗号文を前記第1の秘密鍵SKを用いて暗号解読し、ソフトウェア平文を得て、これをCPUに送り、ソフトウェアが実行される。
【0017】
本発明の効果は、ソフトウェア暗号鍵の保護が高められ、クラッカーにとってソフトウェアをクラックするのをより困難にする。このクラックはソフトウェアのローディングプロセスを追跡し、ソフトウェアローディングプロセスの追跡により秘密鍵の物理アドレスを得ることによって行われる。ここでは秘密鍵の分析によってソフトウェアをクラックするという目的が達成される。さらに本発明はソフトウェアを暗号化する目下のソリューションを向上させ、秘密鍵をダイナミックに格納する技術によってその安全性を改善する。
【図面の簡単な説明】
【0018】
【図1】本発明に従ってソフトウェア暗号化を実施するフローチャート
【図2】本発明に従ってソフトウェア暗号解読を実施するフローチャート
【図3】本発明に従ってソフトウェア暗号化を実施するための装置の構造スキーム
【図4】本発明に従ってソフトウェア暗号解読を実施するための装置の構造スキーム
【図5】本発明を実行するための装置の構造ダイヤグラム
【0019】
有利な実施形態の詳細な説明
以下で本発明を、図面と組み合わせて詳細に説明する。
【0020】
本発明はしきい値秘密鍵理論を用いて、前記第1の秘密鍵に対するさらなる保護を提供し、しきい値秘密鍵のファクタを暗号化されたソフトウェアにスプライス接続し、これによってプログラム走行を追跡する度毎にクラッカーが異なるジャンプアドレスを得るようにする。これによってクラッカーは、前記第1の秘密鍵を探す場所を特定することができない。本発明によって保護されるソフトウェアは、実行可能なプログラムだけに限定されず、機能モジュールおよびソフトウェアコアアルゴリズム等も含む。目下のしきい値暗号化方法は、第2の秘密鍵として乱数を用い、前記第1の秘密鍵SKを秘密鍵暗号文PSKに暗号化し、同時に、この乱数を計算するためのしきい値秘密鍵のn個のファクタを作成する;秘密鍵を解読する必要があるときには、暗号解読のために前記第2の秘密鍵を作成するために、しきい値秘密鍵のt個のファクタ(t≦n)が必要となるだけである。しきい値暗号方式を提案する目的は、権利を散乱させ、安全性を高めることにある;権利の散乱は、しきい値暗号方式を暗号解読を行うために使用するときに行われ、各人が1つの秘密鍵ファクタを保持する場合には、この暗号解読は、参加者の数がある程度の数に達している場合にのみ行われる(しきい値t);一方では安全性が次のようなケースを防ぐ、すなわち1つの鍵ファクタを得たことによって暗号化が無意味になるというケースである。その結果、このグループ内のクラックされた人の数がしきい値に達しない限りは、暗号解読を行うことが依然として不可能である;他方で、通常の暗号解読に悪影響を与える鍵ファクタの損失ケース防がれる。なぜなら暗号解読は、有効な鍵ファクタを有している人の数がしきい値以上である限りには、依然として実行可能だからである。本発明のこの実施形態では、しきい値暗号アルゴリズムは例としてShamirスキームを使用する。しかしこれはShamirスキームに限定されず、Asmuth−Bloomしきい値秘密鍵スキームも使用することができる。
【0021】
ソフトウェアの一部を売る前に、暗号アルゴリズムを用いてソフトウェアベンダーはソフトウェア平文を暗号化する。この暗号アルゴリズムは、AES、DESまたはRSA、ECC等の、目下使用可能な対称または非対称暗号アルゴリズムである。対称暗号アルゴリズムが使用されている場合には、ソフトウェアの暗号秘密鍵は暗号解読秘密鍵と同じである。これは暗号解読にも使用され、暗号解読秘密鍵は秘密鍵SKである(すなわち、第1の秘密鍵)。非対称暗号アルゴリズムが使用されている場合には、暗号秘密鍵は前記非対称暗号アルゴリズムの暗号解読秘密鍵と相応する関係を有しており、暗号解読秘密鍵は本発明における秘密鍵SKである(すなわち、第1の秘密鍵)。ソフトウェアの秘密鍵SKはソフトウェアがクラックされるか、されないかを決定するものであるので、秘密鍵SKのセキュリティは非常に重要であり、本発明は特に、しきい値暗号化のShamirスキームを使用して、しきい値秘密鍵K,K,・・・,Kのn個のファクタを計算することによって第2の秘密鍵を作成し、この第2の秘密鍵は、秘密鍵SKを秘密鍵暗号文PSKに暗号化するために使用され、秘密鍵暗号文PSKが暗号化されたソフトウェアにスプライス結合され、例えば、これは暗号化されたソフトウェアの頭部または尾部にスプライス結合される。さらに、しきい値秘密鍵のn個のファクタが、強いスプライスアルゴリズム(またはシンプルなスプライシングモード)によって、暗号化されたソフトウェアの異なる物理パラグラフにスプライス結合される。例えばこれは、ソフトウェアの頭部または尾部にスプライス結合される。本発明では、これは次のことによって実行される:ステップ1、保護が必要なソフトウェアを暗号化する;ステップ2、ステップ1から第1の秘密鍵SKを暗号化する;ステップ3、ステップ2における暗号化を実行するために秘密鍵ファクタをスプライス結合する;また、作動のためにソフトウェアが暗号解読される必要がある場合には、しきい値秘密鍵のt個(1≦t≦n、ここでtもnも正の整数である)のファクタが、ランダムに、保護されているソフトウェア暗号文から得られ、その後、暗号化されたソフトウェアの第1の秘密鍵SKが、Shamirスキームを使用することによって秘密鍵暗号文PSKから解かれ、ソフトウェア暗号文が暗号解読される。しきい値秘密鍵のこの復元方法は、ソフトウェアローディングプロセスに動的な特性を与え、毎回、暗号解読のためのしきい値秘密鍵がソフトウェアの種々異なるポジションから得られる。従ってこれは効果的に、ソフトウェアローディングプロセスを追跡する方法をクラックすることによるクラックの難易度を高める。
【0022】
本発明のソフトウェア暗号化プロセスのフローチャートを図1に示す。
【0023】
ステップ101、AES、DES等の適切な対称暗号アルゴリズムを選択し、第1の暗号化モジュールを用いることによってソフトウェア平文を第1のソフトウェア暗号文に暗号化し、ここで、使用されている秘密鍵は第1の秘密鍵SKである。
【0024】
ステップ102、第2の暗号化モジュールによって、しきい値暗号アルゴリズムにおいてShamirアルゴリズムを使用することによって、上述した秘密鍵SKを保護し、Z領域において言語補完多項式アルゴリズムのShamirスキームを使用し、t−1オーダーの多項式を生成し、ここでZは主要領域である:
(x)=a+aX+a+・・・+at−1t−1
ここで、P(x)の係数a0,・・・aは、ランダムに作成されている。
【0025】
=1の場合、p(1)=a+a+a+・・・+at−1を計算し、
=nの場合、p(n)=a+an+a+・・・+at−1t−1を計算する。
【0026】
ここで、p(1),・・・p(n)<264であり、nは1よりも大きい正の整数であり、tは1以上の正の整数であり、nよりも小さい。
【0027】
その後、しきい値秘密鍵のn個のファクタペアK=(1,P(1)),・・・K=(n,P(n))を作成し、aを第2の秘密鍵として用い、秘密鍵SKを秘密鍵暗号文PSKに暗号化する。また、暗号化された後に秘密鍵暗号文PSKを、前記第1のソフトウェア暗号文の頭部または尾部にスプライス結合し、このステップにおいて従来技術の記憶方法が使用され可能である。
【0028】
ステップ103、第1のソフトウェア暗号文と鍵暗号文の統合された全体を、カプセル除去モジュールを用いてn個のパラグラフに分割し、その後、このしきい値秘密鍵のn個のファクタをn個のパラグラフにスプライス結合する。ここで、この秘密鍵のn個のファクタは直接的にそれぞれ、第1のソフトウェア暗号文の各パラグラフの頭部および尾部にスプライス結合され、第2のソフトウェア暗号文が形成される。これは記憶媒体に格納される。図示されているように、黒い部分は秘密鍵のファクタであり、白い部分はn個のパラグラフである;より複雑な第2のソフトウェア暗号文を形成するために以降のスプライス結合方法を用いることも可能である。
【0029】
Cは、第1のソフトウェア暗号文の特定のパラグラフをあらわし、ここで各パラグラフCはC,C,・・・,Cm−1を含み、kはしきい値秘密鍵ファクタペアKのP(i)をあらわし、特定のスプライシングプロセスは以下のものである:
【数2】

ここで×は算術的な乗算演算である。有利な実施形態として、各パラグラフCの長さはkの長さに等しい。すなわち、length(C)=length(k)である。例えば、このソフトウェアは暗号化された後にn個のパラグラフに分けられる。ここでは特定のパラグラフCは128バイトの長さを有している。また秘密鍵のファクタは16バイトの長さを有している。その後Cは8個のパラグラフに分けられる。すなわちm=7である。Cにおける各パラグラフCの長さは、16バイトの長さを有する。同時にh=hash(k)が計算される。すなわち、しきい値秘密鍵ファクタkのハッシュ値が記録される。これは、復元されたしきい値ファクタが、暗号解読時に正しいか否かを検証するために用いられる。完全なC’を形成するためにC’〜C’を結合した後、これはハッシュ値h(hはパラグラフC’の前または後に加えられる)とともにスプライス結合され、その後、格納のための最終的なソフトウェア暗号文、すなわち第2のソフトウェア暗号文が、全てのパラグラフC’および相応するハッシュ値hをスプライス結合することによって形成され、この第2のソフトウェア暗号文が記憶媒体内に格納される。
【0030】
Shamirしきい値暗号スキーム内では、秘密鍵のt個のファクタは、第2の秘密鍵aを復元するために使用され、PSKが暗号解読される。従って、暗号化されたソフトウェアがロードされる度毎に、ソフトウェアローダーは、PSKを暗号解読するためにランダムに秘密鍵のn個のファクタのtを選択する。従って、動的な特性を備えた高度で強力な保護メカニズムが提供され、クラッカーがソフトウェアローディングプロセスを追跡および分析することが阻止される。
【0031】
図2は、本発明に従ったソフトウェアのローディングおよび暗号解読のフローチャートである。ソフトウェアを開始するステージで、第2のソフトウェア暗号文が、記憶媒体からローダーによってメモリ内にロードされる。さらにこの図では黒色の部分が秘密鍵ファクタであり、白色の部分が第1のソフトウェア暗号文およびPSKである;ステップ103に図示されているスプライス方法が暗号化ステップで使用されず、秘密鍵のn個のファクタだけが直接的に、ソフトウェア暗号文の相応するパラグラフの頭部または尾部にスプライス結合されている場合には、秘密鍵のt個のファクタが、ステップ201においてカプセル除去モジュールによってランダムに、暗号テキストからt個のパラグラフを直接的に選択することによって得られる。ステップ103において示されたスプライス方法が暗号化の間に使用されている場合には、1つの暗号テキストパラグラフC’およびその対応するハッシュ値hがカプセル除去モジュールによって選択され、しきい値秘密鍵のファクタkが、暗号文のパラグラフが復元されるように持ち込まれる。復元アルゴリズムを以下に示す:
E0〜EmからC〜Cm−1を除去し、(Em−1)にCm−1=C’を代入し、式Cm−2=C’m−1−C’×k+C×Kを得る。これは(Em−2),・・・,(E0)までに代入される;最終的に以下の多項式が形成される。
0=−C’+C’m−1×km−1−C’m−2×km−2+・・・+(−1)m−1×C’、これはP0としてラベリングされる;秘密鍵ファクタkは上述した多項式の根であり、この根は多項式を数値領域において計算することによって見つけられ、kは第2のソフトウェア暗号文C’,C’,・・・,C’から復元される。ニュートン反復アルゴリズムが、この実施例において多項式P0の1つまたは複数の根を探すために使用される。
【0032】
(a)y=−C’+C’m−1×km−1−C’m−2×km−2+・・・+(−1)m−1×C’=f(k)(P1)とし、ここで初期値kを任意に選択し、例えばk=2length(k)−1とする。
(b)
【数3】

を計算する。ここでi=0〜mであり、f’(k)はf(k)の導関数であり、すなわち、
f’(k)=−C’×m×km−1+C’m−1×(m−1)×km−2−C’m−2×(m−2)×km−3+・・・+(−1)m−2×C’
(c)|ki−1−k|<1になるまでステップbを繰り返す、その後ki+1はP1の根に近似する。
【0033】
(d)hash(ki+1)=h、またはhash(ki+1+1)=h、hash(ki+1−1)=hであり、ここでhが暗号化ステップ(4)におけるh値である場合、このステップにおいて計算されたki+1が、暗号化ステップにおけるしきい値秘密鍵のファクタkであり、ステップ(f)に飛ぶ;これがイコールでない場合には、数の根を見つけるためのアルゴリズムは無く、ステップ(e)に入る。前記ハッシュアルゴリズムは本発明において片道のアルゴリズムであり、つまり、データが計算された後にオリジナルデータが逆に導出されず、従って、伝送される前と後にデータが古いか否かを比較することが必要である場合には、伝送前と後にハッシュ値の比較を行うことだけが必要とされる。
【0034】
(e)kがステップ(d)において見つけられない場合、これはP0が複数の根を有することを意味し、他の実際の根が以下の方法によって得られる。
【0035】
ステップ(d)において得られた根ki+1を新しいkとして使用する。
=−C’,b=(−1)k−1×C’m−k+k×bk−1とすると(ここでk=1,2,・・・,m−1である)、新たな多項式f(k)=b×km−1+b×km−2+・・・+bn−1(P2)が生じる;
上述のステップb〜cを使用して、新たな式P2の実際の根を計算し、従ってP0の他の実際のルートが得られる。
【0036】
このステップ(e)によってP0の全ての実際の根を計算し、ステップ(e)が行われる度にチェックステップ(d)をチェックし、実際の秘密鍵ファクタが得られたか否かを定め、しきい値秘密鍵のファクタkが得られる。
【0037】
(f)暗号文パラグラフにおける秘密鍵のファクタkを得た後、E0をEmに代入し返し、第1のソフトウェア暗号文C,C,・・・,Cを、第2のソフトウェア暗号文C’,C’,・・・,C’から復元する。
【0038】
n個のパラグラフC’上でステップa〜fを行い、秘密鍵暗号文PSKを解読するのに必要なしきい値秘密鍵の全てのファクタkを得て、kを使用する全ての暗号文C’を復元し、第1のソフトウェア暗号文を形成する。
【0039】
ステップ202は、しきい値秘密鍵のt個のファクタを復元した後、
=(x,p(x))、1≦i≦t、第2の暗号解読モジュールによって、t個のkを使用して新たな多項式を形成する。
【数4】

ここでy=P(x)であり、xおよびxは復元されたしきい値秘密鍵ファクタペアにおいてxであり、ここでi≠kであり、最終的にx=0とすると、P(0)=aが得られる。
【0040】
第1のソフトウェア暗号文においてPSKを抽出し、aを、秘密鍵暗号文PSKを暗号解読するための秘密鍵として使用し、暗号化されたソフトウェアを暗号解読するために第1の秘密鍵SKを得る。
【0041】
ステップ203、SKを用いて、第1の暗号化モジュールによって、暗号化されたソフトウェアを暗号解読する。これによって元来のソフトウェア平文が得られる。
【0042】
CPUが、このソフトウェア平文に従って作動する。
【0043】
本発明の暗号化装置の概略的なダイヤグラムが図3に示されている。この装置は第1の暗号化モジュール、第2の暗号化モジュールおよびカプセル化モジュールを含み;前記第1の暗号化モジュールは第1の秘密鍵SKを用いてソフトウェア平文を第1のソフトウェア暗号文に暗号化し;前記第1の暗号化モジュールと接続されている前記第2の暗号化モジュールはしきい値秘密鍵のn個のファクタを用いて第2の暗号化モジュールを形成し、前記第1の秘密鍵SKを秘密鍵暗号文PSKに、第2の秘密鍵を用いて暗号化し、前記秘密鍵暗号文PSKを前記第1のソフトウェア暗号文内に格納し;前記第2の暗号化モジュールに接続されている前記カプセル化モジュールは、前記第1のソフトウェア暗号文をn個のパラグラフに分け、しきい値秘密鍵の前記ファクタを前記パラグラフにスプライス接合し、第2のソフトウェア暗号文を形成する。
【0044】
本発明の暗号解読装置の概略的なダイヤグラムが図4に示されている。この装置はカプセル除去モジュール、第2の暗号解読モジュールおよび第1の暗号解読モジュールを含んでいる;前記カプセル除去モジュールは、第2のソフトウェア暗号文を第1のソフトウェア暗号文にカプセル除去し、ランダムに第2のソフトウェア暗号文のn個のパラグラフからしきい値秘密鍵のt個のファクタを選択し;前記カプセル除去モジュールに接続されている前記第2の暗号解読モジュールはしきい値秘密鍵の前記t個のファクタに従って第2の秘密鍵を形成し、この第2の秘密鍵を用いて秘密鍵暗号文PSKを第1の秘密鍵SKに暗号解読し;前記第2の暗号解読モジュールに接続されている前記第1の暗号解読モジュールは、第1のソフトウェア暗号文を前記第1の秘密鍵SKを用いて暗号解読し、ソフトウェア平文を得る。
【0045】
本発明の装置の概略的な作動ダイヤグラムが図5に示されている。これは記憶媒体からソフトウェアをロードするためのローダーおよび、図4に示された暗号化装置も含んでいる。ここでは同じ部分の冗長的な記述を繰り返さない。ローダーは第2のソフトウェア暗号文を記憶媒体(例えばハードディスク)からロードし、前記暗号解読装置に入力する。この暗号解読装置は前記第2のソフトウェア暗号文をソフトウェア平文に変え、これを実行のためにCPUに伝送する。
【0046】
本発明の効果は次のようなものである。すなわち、実行可能なソフトウェアを暗号化し、クラッカーにとって、ソフトウェアのローディングプロセスを追跡するだけで秘密鍵を得ることを困難にし、ソフトウェアが解読され、逆行分析等の方法でコンパイルされることが阻止される、というものである。これによってソフトウェアの暗号鍵の保護が向上され、クラッカーにとって、ソフトウェアローディングプロセスを追跡することによって、秘密鍵の物理アドレスを得て、この秘密鍵を分析することによってソフトウェアをクラックするという目的を達することが困難になる;さらに本発明は秘密鍵をダイナミックに格納する技術によって、その安全性を高めるためにソフトウェアを暗号化するという、目下使用されているソリューションを改善する。
【0047】
上述の特定の実施形態は、単に本発明を説明するために用いられているものであり、本発明をこれに限定するものではない。

【特許請求の範囲】
【請求項1】
ソフトウェアを暗号化する方法であって、当該方法は以下のステップを含んでおり:
ステップ101:第1の暗号化モジュールを用いて記憶媒体内のソフトウェア平文を、第1のソフトウェア暗号文に暗号化し、ここで暗号解読のための秘密鍵は第1の秘密鍵SKであり;
ステップ102:第2の暗号化モジュールによって、しきい値秘密鍵のn個のファクタを用いて、第2の秘密鍵を作成し、ここでnは1よりも大きい正の整数であり、
前記第1の秘密鍵SKを当該第2の秘密鍵を用いて秘密鍵暗号文PSKに暗号化し、当該秘密鍵暗号文PSKを、前記第1のソフトウェア暗号文にスプライス結合し;
ステップ103:カプセル化モジュールを用いて、前記秘密鍵暗号文PSKと前記第1のソフトウェア暗号文を、統合された全体として、n個のパラグラフに分割し、前記しきい値秘密鍵の前記ファクタを前記パラグラフにスプライス結合して、第2のソフトウェア暗号文を形成し、当該第2のソフトウェア暗号文を前記記憶媒体内に格納する、
ことを特徴とする、ソフトウェアを暗号化する方法。
【請求項2】
前記ステップ101において特定された前記暗号化方法は、対称暗号アルゴリズムまたは非対称暗号アルゴリズムを含んでいる、請求項1記載のソフトウェア暗号化方法。
【請求項3】
前記ステップ102において使用されるしきい値秘密鍵アルゴリズムは、Shamirしきい値秘密鍵スキーム、またはAsmuth−Bloomしきい値秘密鍵スキームを含んでいる、請求項1記載のソフトウェア暗号化方法。
【請求項4】
前記ステップ103において、前記カプセル化モジュールが前記秘密鍵暗号文PSKと前記第1のソフトウェア暗号文を統合された全体として、n個のパラグラフフに分割し;Cは前記n個のパラグラフ内のあらゆるパラグラフをあらわし、パラグラフCはブロックC,C,・・・,Cm−1を含み、各パラグラフの長さはしきい値秘密鍵ファクタkの長さと同じであり、以下の式が各パラグラフCで行われ、これはkに相応し:
【数1】

ここでxは算術的な乗算演算であり、同時に、しきい値秘密鍵ファクタkのハッシュ値hが計算され、C’〜C’の値が結合され、C’が形成され、n個のパラグラフの複数のC’およびその相応するハッシュ値hがスプライス結合され、前記第2のソフトウェア暗号文を形成する、請求項3記載のソフトウェア暗号化方法。
【請求項5】
ソフトウェア暗号解読のための方法であって、ソフトウェアをロードするプロセスの間に以下のステップを含み:
ステップ201:カプセル除去モジュールによって、第2のソフトウェア暗号文のn個のパラグラフからランダムに、しきい値秘密鍵のt個のファクタを選択し、ここでtは1以上であり、n以下であり、nは1より大きい正の整数であり;前記第2のソフトウェア暗号文から第1のソフトウェア暗号文および秘密鍵暗号文PSKを復元し;
ステップ202:前記秘密鍵暗号文PSKを抽出し、前記しきい値秘密鍵の前記t個のファクタに従って第2の暗号解読モジュールによって第2の秘密鍵を作成し、当該第2の秘密鍵を用いて前記秘密鍵暗号文PSKを第1の秘密鍵SKに暗号解読し;
ステップ203:第1の暗号解読モジュールによって、前記第1の秘密鍵SKを用いて前記第1のソフトウェア暗号文を暗号解読し、ソフトウェア平文をCPUに送り、ソフトウェアを実行する、
ことを特徴とするソフトウェア暗号解読方法。
【請求項6】
前記ステップ201において、前記カプセル除去モジュールは、前記第2のソフトウェア暗号文の各n個のパラグラフ上で計算を行い:E0〜Emに従ってC,C,・・・,Cm−1を除去し、以下の式を得て、
0=−C’+C’m−1×km−1−C’m−2×km−2+・・・+(−1)m−1×C’(P0)
kのハッシュ値がパラグラフC’の相応するハッシュ値hと等しい場合に、この式におけるkが解かれ、C〜Cm−1の値が、C’〜C’m−1から、kを用いて復元され、C〜Cm−1が結合されてパラグラフCが得られ、当該パラグラフは第1のソフトウェア暗号文と秘密鍵暗号文の統合された全体のn個のパラグラフのうちの1つであり;n個のkが解かれ、第1のソフトウェア暗号文および秘密鍵暗号文PSKが第2のソフトウェア暗号文から復元される、請求項5記載のソフトウェア暗号解読方法。
【請求項7】
前記多項式ニュートン反復方法が、前記式(P0)においてkを解くのに使用される、請求項6記載のソフトウェア暗号解読方法。
【請求項8】
ソフトウェア暗号化装置であって、
当該装置は第1の暗号化モジュール、第2の暗号化モジュールおよびカプセル化モジュールを含み;
前記第1の暗号化モジュールは第1の秘密鍵SKを用いてソフトウェア平文を第1のソフトウェア暗号文に暗号化し;
前記第1の暗号化モジュールと接続されている前記第2の暗号化モジュールは、しきい値秘密鍵のn個のファクタを用いて第2の暗号化モジュールを形成し、前記第1の秘密鍵SKを秘密鍵暗号文PSKに、前記第2の秘密鍵を用いて暗号化し、前記秘密鍵暗号文PSKを前記第1のソフトウェア暗号文内に格納し;
前記第2の暗号化モジュールと接続されている前記カプセル化モジュールは、前記第1のソフトウェア暗号文をn個のパラグラフに分割し、前記しきい値秘密鍵の前記ファクタを、前記パラグラフにスプライス接合し、第2のソフトウェア暗号文を形成する、
ことを特徴とするソフトウェア暗号化装置。
【請求項9】
ソフトウェア暗号解読装置であって、
当該装置はカプセル除去モジュール、第2の暗号解読モジュールおよび第1の暗号解読モジュールを含み;
前記カプセル除去モジュールは、第2のソフトウェア暗号文を、第1のソフトウェア暗号文と秘密鍵暗号文PSKにカプセル除去し、ランダムに第2のソフトウェア暗号文のn個のパラグラフから、しきい値秘密鍵のt個のファクタを選択し;
前記カプセル除去モジュールに接続されている前記第2の暗号解読モジュールは、前記しきい値秘密鍵の前記t個のファクタに従って第2の秘密鍵を作成し、当該第2の秘密鍵を用いて秘密鍵暗号文PSKを第1の秘密鍵SKに暗号解読し;
前記第2の暗号解読モジュールに接続されている前記第1の暗号解読モジュールは、前記第1のソフトウェア暗号文を前記第1の秘密鍵SKを用いて暗号解読し、ソフトウェア平文を得て、当該ソフトウェア平文をCPUに送り、ソフトウェアが実行される、
ことを特徴とするソフトウェア暗号解読装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate


【公表番号】特表2010−528511(P2010−528511A)
【公表日】平成22年8月19日(2010.8.19)
【国際特許分類】
【出願番号】特願2010−508801(P2010−508801)
【出願日】平成20年5月14日(2008.5.14)
【国際出願番号】PCT/EP2008/055912
【国際公開番号】WO2008/141992
【国際公開日】平成20年11月27日(2008.11.27)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
【出願人】(390039413)シーメンス アクチエンゲゼルシヤフト (2,104)
【氏名又は名称原語表記】Siemens Aktiengesellschaft
【住所又は居所原語表記】Wittelsbacherplatz 2, D−80333 Muenchen, Germany
【Fターム(参考)】