(57)【要約】  本発明はコンピュータセキュリティの分野に関し、殊にソフトウェア暗号化方法およびソフトウェア暗号解読方法およびソフトウェア暗号化装置およびソフトウェア暗号解読装置に関する。本発明の暗号解読プロセスは以下のステップを含んでいる：ステップ２０１、第２のソフトウェア暗号文のｎ個のパラグラフからランダムに、しきい値秘密鍵のｔ個のファクタを選択し；第２のソフトウェア暗号文から第１のソフトウェア暗号文および秘密鍵暗号文ＰＳＫを復元し、ここでｎは１より大きい正の整数であり、ｔはｎ以下であり：ステップ２０２：秘密鍵暗号文ＰＳＫを抽出し、しきい値秘密鍵の前記ｔ個のファクタに従って第２の秘密鍵を作成し、この第２の秘密鍵を用いて秘密鍵暗号文ＰＳＫを第１の秘密鍵ＳＫに暗号解読し；ステップ２０３、前記第１の秘密鍵ＳＫを用いて前記第１のソフトウェア暗号文を暗号解読する。本発明の利点は、ソフトウェア暗号鍵の保護を向上させて、ソフトウェアローディングプロセスを追跡することによってクラッカーがソフトウェアをクラックするのを困難にすることである。
2010528511.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウェアを暗号化する方法であって、当該方法は以下のステップを含んでおり：
ステップ１０１：第１の暗号化モジュールを用いて記憶媒体内のソフトウェア平文を、第１のソフトウェア暗号文に暗号化し、ここで暗号解読のための秘密鍵は第１の秘密鍵ＳＫであり；
ステップ１０２：第２の暗号化モジュールによって、しきい値秘密鍵のｎ個のファクタを用いて、第２の秘密鍵を作成し、ここでｎは１よりも大きい正の整数であり、
前記第１の秘密鍵ＳＫを当該第２の秘密鍵を用いて秘密鍵暗号文ＰＳＫに暗号化し、当該秘密鍵暗号文ＰＳＫを、前記第１のソフトウェア暗号文にスプライス結合し；
ステップ１０３：カプセル化モジュールを用いて、前記秘密鍵暗号文ＰＳＫと前記第１のソフトウェア暗号文を、統合された全体として、ｎ個のパラグラフに分割し、前記しきい値秘密鍵の前記ファクタを前記パラグラフにスプライス結合して、第２のソフトウェア暗号文を形成し、当該第２のソフトウェア暗号文を前記記憶媒体内に格納する、
ことを特徴とする、ソフトウェアを暗号化する方法。
【請求項２】
前記ステップ１０１において特定された前記暗号化方法は、対称暗号アルゴリズムまたは非対称暗号アルゴリズムを含んでいる、請求項１記載のソフトウェア暗号化方法。
【請求項３】
前記ステップ１０２において使用されるしきい値秘密鍵アルゴリズムは、Ｓｈａｍｉｒしきい値秘密鍵スキーム、またはＡｓｍｕｔｈ−Ｂｌｏｏｍしきい値秘密鍵スキームを含んでいる、請求項１記載のソフトウェア暗号化方法。
【請求項４】
前記ステップ１０３において、前記カプセル化モジュールが前記秘密鍵暗号文ＰＳＫと前記第１のソフトウェア暗号文を統合された全体として、ｎ個のパラグラフフに分割し；Ｃは前記ｎ個のパラグラフ内のあらゆるパラグラフをあらわし、パラグラフＣはブロックＣ０，Ｃ２，・・・，Ｃｍ−１を含み、各パラグラフの長さはしきい値秘密鍵ファクタｋの長さと同じであり、以下の式が各パラグラフＣで行われ、これはｋに相応し：
【数１】
2010528511.tif 000007
ここでｘは算術的な乗算演算であり、同時に、しきい値秘密鍵ファクタｋのハッシュ値ｈが計算され、Ｃ’０〜Ｃ’ｍの値が結合され、Ｃ’が形成され、ｎ個のパラグラフの複数のＣ’およびその相応するハッシュ値ｈがスプライス結合され、前記第２のソフトウェア暗号文を形成する、請求項３記載のソフトウェア暗号化方法。
【請求項５】
ソフトウェア暗号解読のための方法であって、ソフトウェアをロードするプロセスの間に以下のステップを含み：
ステップ２０１：カプセル除去モジュールによって、第２のソフトウェア暗号文のｎ個のパラグラフからランダムに、しきい値秘密鍵のｔ個のファクタを選択し、ここでｔは１以上であり、ｎ以下であり、ｎは１より大きい正の整数であり；前記第２のソフトウェア暗号文から第１のソフトウェア暗号文および秘密鍵暗号文ＰＳＫを復元し；
ステップ２０２：前記秘密鍵暗号文ＰＳＫを抽出し、前記しきい値秘密鍵の前記ｔ個のファクタに従って第２の暗号解読モジュールによって第２の秘密鍵を作成し、当該第２の秘密鍵を用いて前記秘密鍵暗号文ＰＳＫを第１の秘密鍵ＳＫに暗号解読し；
ステップ２０３：第１の暗号解読モジュールによって、前記第１の秘密鍵ＳＫを用いて前記第１のソフトウェア暗号文を暗号解読し、ソフトウェア平文をＣＰＵに送り、ソフトウェアを実行する、
ことを特徴とするソフトウェア暗号解読方法。
【請求項６】
前記ステップ２０１において、前記カプセル除去モジュールは、前記第２のソフトウェア暗号文の各ｎ個のパラグラフ上で計算を行い：Ｅ０〜Ｅｍに従ってＣ０，Ｃ１，・・・，Ｃｍ−１を除去し、以下の式を得て、
０＝−Ｃ’ｍｋｍ＋Ｃ’ｍ−１×ｋｍ−１−Ｃ’ｍ−２×ｋｍ−２＋・・・＋（−１）ｍ−１×Ｃ’０（Ｐ０）
ｋのハッシュ値がパラグラフＣ’の相応するハッシュ値ｈと等しい場合に、この式におけるｋが解かれ、Ｃ０〜Ｃｍ−１の値が、Ｃ’０〜Ｃ’ｍ−１から、ｋを用いて復元され、Ｃ０〜Ｃｍ−１が結合されてパラグラフCが得られ、当該パラグラフは第１のソフトウェア暗号文と秘密鍵暗号文の統合された全体のｎ個のパラグラフのうちの１つであり；ｎ個のｋが解かれ、第１のソフトウェア暗号文および秘密鍵暗号文PSKが第２のソフトウェア暗号文から復元される、請求項５記載のソフトウェア暗号解読方法。
【請求項７】
前記多項式ニュートン反復方法が、前記式（Ｐ０）においてｋを解くのに使用される、請求項６記載のソフトウェア暗号解読方法。
【請求項８】
ソフトウェア暗号化装置であって、
当該装置は第１の暗号化モジュール、第２の暗号化モジュールおよびカプセル化モジュールを含み；
前記第１の暗号化モジュールは第１の秘密鍵ＳＫを用いてソフトウェア平文を第１のソフトウェア暗号文に暗号化し；
前記第１の暗号化モジュールと接続されている前記第２の暗号化モジュールは、しきい値秘密鍵のｎ個のファクタを用いて第２の暗号化モジュールを形成し、前記第１の秘密鍵ＳＫを秘密鍵暗号文ＰＳＫに、前記第２の秘密鍵を用いて暗号化し、前記秘密鍵暗号文ＰＳＫを前記第１のソフトウェア暗号文内に格納し；
前記第２の暗号化モジュールと接続されている前記カプセル化モジュールは、前記第１のソフトウェア暗号文をｎ個のパラグラフに分割し、前記しきい値秘密鍵の前記ファクタを、前記パラグラフにスプライス接合し、第２のソフトウェア暗号文を形成する、
ことを特徴とするソフトウェア暗号化装置。
【請求項９】
ソフトウェア暗号解読装置であって、
当該装置はカプセル除去モジュール、第２の暗号解読モジュールおよび第１の暗号解読モジュールを含み；
前記カプセル除去モジュールは、第２のソフトウェア暗号文を、第１のソフトウェア暗号文と秘密鍵暗号文ＰＳＫにカプセル除去し、ランダムに第２のソフトウェア暗号文のｎ個のパラグラフから、しきい値秘密鍵のｔ個のファクタを選択し；
前記カプセル除去モジュールに接続されている前記第２の暗号解読モジュールは、前記しきい値秘密鍵の前記ｔ個のファクタに従って第２の秘密鍵を作成し、当該第２の秘密鍵を用いて秘密鍵暗号文ＰＳＫを第１の秘密鍵ＳＫに暗号解読し；
前記第２の暗号解読モジュールに接続されている前記第１の暗号解読モジュールは、前記第１のソフトウェア暗号文を前記第１の秘密鍵ＳＫを用いて暗号解読し、ソフトウェア平文を得て、当該ソフトウェア平文をＣＰＵに送り、ソフトウェアが実行される、
ことを特徴とするソフトウェア暗号解読装置。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
本発明はコンピュータセキュリティの分野、殊にコンピュータ暗号化の分野に関し、特にソフトウェア暗号化方法およびソフトウェア暗号解読方法およびソフトウェア暗号化装置およびソフトウェア暗号解読装置に関する。
【０００２】
背景技術
近年では、ソフトウェアは独立した価値および機能、実行プロセス、コード化等を伴い、必需品となっている。ソフトウェアの一部において、オブジェクトが競合者およびそのほかの組織または個人によって盗難される傾向がある。従って、ソフトウェア、特に中間言語（Ｊａｖａ、ＮＥＴ等のプログラミング言語）でプログラミングされたソフトウェアは非常に容易に、逆行分析によって逆符号化される。これは例えば、ＮＥＴ  Ｒｅｆｌｅｃｔ（Ｍｉｃｒｏｓｏｆｔからの逆行分析ツール）、ＪＡＤ（Ｊａｖａからの逆行分析ツール）を用いて行われる。これによってコアアルゴリズム、符号化等に関する情報が得られ、このような情報がクラッカーによって悪意で使用される場合、例えばソフトウェアのコアアルゴリズムを模倣して、登録されたソフトウェアに近づく等の場合には、これは開発者にとって損失となる。
【０００３】
従来技術では、内部機能の名前を変える、コントロールフローまたは他の方法を再アレンジすることによる、クラッキング行動においてクラッカーを混乱させるための措置はある程度の効果を有し、この措置によって逆符号化されたソフトウェアプログラムを読み出す、理解するのが困難にされる、または読み出して、理解するのを不可能にしてきた。しかしソースコードに対するこの種の保護メカニズムは、ソフトウェアプログラムが逆符号化されるのを回避することができないので、ソフトウェアプログラムの情報を失う可能性が依然として残る。
【０００４】
記事「Using DES Encryption Algorithm to Protect Java Source Code（2005年5月にComputer and Information technologyに掲載）」には、Ｊａｖａによってコンパイルされたソフトウェアを暗号化し、作動時に解読するためのソリューションが開示されている。このソリューションはData Encryption Standard (DES)を用いて、Ｊａｖａ実行プログラムを暗号化し、暗号化された符号化プログラムおよび秘密鍵をメモリ内に格納し、ローダーを用いて、暗号化されたＪａｖａ符号化プログラムおよび鍵をシステム内にロードし、秘密鍵を取り出し、符号化プログラムを暗号解読し、これを実行可能な符号化の形状に変え、これをＪａｖａバーチャルマシーン内にロードし、作動させる。
【０００５】
上述の方法は非常に容易に、クラッカーによって追跡可能であり、プログラム開始からクラッカーは、デバッグツールを用いるだけで各ステップを追跡することができる。作動時にプログラムが特定のファイルに毎回アクセスし、秘密鍵またはシステムのシンボルネームをこのファイルから得る場合には、これによってクラッカーは、このファイルが、プログラムに対する秘密鍵またはシステムのシンボルネームに対する比較テーブルであることを推測し、クラッカーがこのファイルが秘密鍵ファイルであることを確認すると、クラッカーはファイルをクラックするあらゆる可能な手段を試す；そしてファイルがひとたびクラックされてしまうと、ソフトウェアコーディングの暗号文がソフトウェアコーディングの平文に変えられ、このソフトウェアのソースコードが逆行分析によって生成され、これによってソフトウェア所有者にとって損失が生じる。
【０００６】
本発明の内容
上述の問題を解決し、ソフトウェアデコンパイルの難易度を上げるために、本発明の課題は次のようなソフトウェア暗号化方法および相応する暗号解読方法を提供することである。ここでは、しきい値暗号化フィーチャーが含まれており、ソフトウェアの開始の度に、得られたしきい値秘密鍵ファクタのアドレスが異なっている。これによってクラッカーに秘密鍵アドレスの特定を不可能にさせる。
【０００７】
本発明はまた、ソフトウェア暗号装置および相応する暗号解読装置も提供する。この装置は、しきい値秘密鍵の複数のファクタをソフトウェアの異なるパラグラフ内に格納することができ、暗号解読時に、しきい値秘密鍵のこれらのファクタを幾つかのパラグラフからランダムに、このソフトウェアの暗号解読のために得ることができる。
【０００８】
ステップ１０１：第１の暗号化モジュールを用いて記憶媒体内のソフトウェア平文を、第１のソフトウェア暗号文に暗号化する。ここで暗号解読のための秘密鍵は第１の秘密鍵ＳＫである；
ステップ１０２：第２の暗号化モジュールによって、しきい値秘密鍵のｎ個のファクタを用いて第２の秘密鍵を作成し、前記第１の秘密鍵ＳＫをこの第２の秘密鍵を用いて秘密鍵暗号文ＰＳＫに暗号化し、この秘密鍵暗号文ＰＳＫを、前記第１のソフトウェア暗号文にスプライス接続する。ここでｎは、１よりも大きい正の整数である；
ステップ１０３：カプセル化モジュールを用いて前記秘密鍵暗号文ＰＳＫと前記第１のソフトウェア暗号文を、統合された全体としてｎ個のパラグラフに分割し、前記しきい値秘密鍵のファクタを前記パラグラフにスプライス接続して、第２のソフトウェア暗号文を形成し、この第２のソフトウェア暗号文を前記記憶媒体内に格納する。
【０００９】
本発明の暗号化方法の別の態様では、前記ステップ１０１において特定された前記暗号化方法は、対称暗号アルゴリズムまたは非対称暗号アルゴリズムを含む。
【００１０】
本発明の暗号化方法のさらに別の態様では、前記ステップ１０２内で使用されるしきい値秘密鍵アルゴリズムはＳｈａｍｉｒしきい値秘密鍵スキームを含む。
【００１１】
本発明の暗号化方法のさらに別の態様では、前記ステップ１０３において、前記カプセル化モジュールが前記秘密鍵暗号文ＰＳＫと前記第１のソフトウェア暗号文を統計された全体としてｎ個のパラグラフフに分割する；Ｃは前記ｎ個のパラグラフ内のあらゆるパラグラフをあらわし、パラグラフＣはブロックＣ０，Ｃ２，・・・，Ｃｍ−１を含み、以下の式が各パラグラフＣで行われ、これはｋに相応する：
【数１】
2010528511.tif 000003
ここで×は算術的な乗算演算であり、同時にしきい値秘密鍵ファクタｋのハッシュ値ｈが計算され、Ｃ’０〜Ｃ’ｍの値が結合されてＣ’が形成され、ｎ個のパラグラフの複数のこのＣ’およびその相応するハッシュ値ｈがスプライス接続されて、前記第２のソフトウェア暗号文が形成される。
【００１２】
ソフトウェア暗号解読のための方法は、ソフトウェアをロードするプロセスの間に以下のステップを含む：
ステップ２０１：カプセル除去モジュールによって、第２のソフトウェア暗号文のｎ個のパラグラフからランダムに、しきい値秘密鍵のｔ個のファクタを選択し；前記第２のソフトウェア暗号文から第１のソフトウェア暗号文および秘密鍵暗号文ＰＳＫを復元し、ここでｔは１以上であり、ｎ以下であり、ｎは１より大きい正の整数である；
ステップ２０２：前記秘密鍵暗号文ＰＳＫを抽出し、しきい値秘密鍵の前記ｔ個のファクタに従って第２の暗号解読モジュールによって第２の秘密鍵を作成し、この第２の秘密鍵を用いて前記秘密鍵暗号文ＰＳＫを第１の秘密鍵ＳＫに暗号解読する；
ステップ２０３：第１の暗号解読モジュールによって、前記第１の秘密鍵ＳＫを用いて前記第１のソフトウェア暗号文を暗号解読し、ソフトウェア平文をＣＰＵに送り、ソフトウェアを実行する。
【００１３】
本発明の暗号解読方法の別の態様では、ステップ２０１において、前記カプセル除去モジュールは第２のソフトウェア暗号文の各ｎ個のパラグラフにおいて計算を行い：Ｅ０〜Ｅｍに従ってＣ０，Ｃ１，・・・，Ｃｍ−１を除去し、以下の式を得る。
０＝−Ｃ’ｍｋｍ＋Ｃ’ｍ−１×ｋｍ−１−Ｃ’ｍ−２×ｋｍ−２＋・・・＋（−１）ｍ−１×Ｃ’０（Ｐ０）
ｋのハッシュ値がパラグラフＣ’の相応するハッシュ値ｈに相応する場合に、この式におけるｋが解かれ、Ｃ０〜Ｃｍ−１の値が、Ｃ’０〜Ｃ’ｍ−１からｋを用いて復元され、Ｃ０〜Ｃｍ−１が結合され、パラグラフＣが得られる。このパラグラフは第１のソフトウェア暗号文と第２の秘密鍵暗号文の統合された全体のｎ個のパラグラフのうちの１つであり；ｎ個のｋが解かれ、第１のソフトウェア暗号文および第２の秘密鍵暗号文ＰＳＫが第２のソフトウェア暗号文から復元される。
【００１４】
本発明の暗号解読方法のさらに別の態様では、この式（Ｐ０）におけるｋを解くために多項式ニュートン反復方法が用いられる。
【００１５】
ソフトウェア暗号化装置は次の特徴を有している。すなわち、この装置が第１の暗号化モジュール、第２の暗号化モジュールおよびカプセル化モジュールを含み；第１の秘密鍵ＳＫを用いて前記第１の暗号化モジュールがソフトウェア平文を第１のソフトウェア暗号文に暗号化し；前記第１の暗号化モジュールと接続されている第２の暗号化モジュールがしきい値秘密鍵のｎ個のファクタを用いて第２の暗号化モジュールを形成し、第２の秘密鍵を用いて第１の秘密鍵ＳＫを秘密鍵暗号文ＰＳＫに暗号化し、前記秘密鍵暗号文ＰＳＫを前記第１のソフトウェア暗号文内に格納し；前記第２の暗号化モジュールに接続されている前記カプセル化モジュールは、前記第１のソフトウェア暗号文をｎ個のパラグラフに分け、しきい値秘密鍵の前記ファクタを前記パラグラフにスプライス接合し、第２のソフトウェア暗号文を形成する。
【００１６】
ソフトウェア暗号解読のための装置は次の特徴を有している。すなわち、この装置がカプセル除去モジュール、第２の暗号解読モジュールおよび第１の暗号解読モジュールを含んでいる、という特徴を有している；前記カプセル除去モジュールは、第２のソフトウェア暗号文を第１のソフトウェア暗号文と秘密鍵暗号文ＰＳＫにカプセル除去し（decapsulates）、ランダムに第２のソフトウェア暗号文のｎ個のパラグラフから、しきい値秘密鍵のｔ個のファクタを選択し；前記カプセル除去モジュールに接続されている前記第２の暗号解読モジュールは、しきい値秘密鍵の前記ｔ個のファクタに従って第２の秘密鍵を形成し、この第２の秘密鍵を用いて秘密鍵暗号文ＰＳＫを第１の秘密鍵ＳＫに暗号解読し、前記第２の暗号解読モジュールに結合されている前記第１の暗号解読モジュールは、前記第１のソフトウェア暗号文を前記第１の秘密鍵ＳＫを用いて暗号解読し、ソフトウェア平文を得て、これをＣＰＵに送り、ソフトウェアが実行される。
【００１７】
本発明の効果は、ソフトウェア暗号鍵の保護が高められ、クラッカーにとってソフトウェアをクラックするのをより困難にする。このクラックはソフトウェアのローディングプロセスを追跡し、ソフトウェアローディングプロセスの追跡により秘密鍵の物理アドレスを得ることによって行われる。ここでは秘密鍵の分析によってソフトウェアをクラックするという目的が達成される。さらに本発明はソフトウェアを暗号化する目下のソリューションを向上させ、秘密鍵をダイナミックに格納する技術によってその安全性を改善する。
【図面の簡単な説明】
【００１８】
【図１】本発明に従ってソフトウェア暗号化を実施するフローチャート
【図２】本発明に従ってソフトウェア暗号解読を実施するフローチャート
【図３】本発明に従ってソフトウェア暗号化を実施するための装置の構造スキーム
【図４】本発明に従ってソフトウェア暗号解読を実施するための装置の構造スキーム
【図５】本発明を実行するための装置の構造ダイヤグラム
【００１９】
有利な実施形態の詳細な説明
以下で本発明を、図面と組み合わせて詳細に説明する。
【００２０】
本発明はしきい値秘密鍵理論を用いて、前記第１の秘密鍵に対するさらなる保護を提供し、しきい値秘密鍵のファクタを暗号化されたソフトウェアにスプライス接続し、これによってプログラム走行を追跡する度毎にクラッカーが異なるジャンプアドレスを得るようにする。これによってクラッカーは、前記第１の秘密鍵を探す場所を特定することができない。本発明によって保護されるソフトウェアは、実行可能なプログラムだけに限定されず、機能モジュールおよびソフトウェアコアアルゴリズム等も含む。目下のしきい値暗号化方法は、第２の秘密鍵として乱数を用い、前記第１の秘密鍵ＳＫを秘密鍵暗号文ＰＳＫに暗号化し、同時に、この乱数を計算するためのしきい値秘密鍵のｎ個のファクタを作成する；秘密鍵を解読する必要があるときには、暗号解読のために前記第２の秘密鍵を作成するために、しきい値秘密鍵のｔ個のファクタ（ｔ≦ｎ）が必要となるだけである。しきい値暗号方式を提案する目的は、権利を散乱させ、安全性を高めることにある；権利の散乱は、しきい値暗号方式を暗号解読を行うために使用するときに行われ、各人が１つの秘密鍵ファクタを保持する場合には、この暗号解読は、参加者の数がある程度の数に達している場合にのみ行われる（しきい値ｔ）；一方では安全性が次のようなケースを防ぐ、すなわち１つの鍵ファクタを得たことによって暗号化が無意味になるというケースである。その結果、このグループ内のクラックされた人の数がしきい値に達しない限りは、暗号解読を行うことが依然として不可能である；他方で、通常の暗号解読に悪影響を与える鍵ファクタの損失ケース防がれる。なぜなら暗号解読は、有効な鍵ファクタを有している人の数がしきい値以上である限りには、依然として実行可能だからである。本発明のこの実施形態では、しきい値暗号アルゴリズムは例としてＳｈａｍｉｒスキームを使用する。しかしこれはＳｈａｍｉｒスキームに限定されず、Ａｓｍｕｔｈ−Ｂｌｏｏｍしきい値秘密鍵スキームも使用することができる。
【００２１】
ソフトウェアの一部を売る前に、暗号アルゴリズムを用いてソフトウェアベンダーはソフトウェア平文を暗号化する。この暗号アルゴリズムは、ＡＥＳ、ＤＥＳまたはＲＳＡ、ＥＣＣ等の、目下使用可能な対称または非対称暗号アルゴリズムである。対称暗号アルゴリズムが使用されている場合には、ソフトウェアの暗号秘密鍵は暗号解読秘密鍵と同じである。これは暗号解読にも使用され、暗号解読秘密鍵は秘密鍵ＳＫである（すなわち、第１の秘密鍵）。非対称暗号アルゴリズムが使用されている場合には、暗号秘密鍵は前記非対称暗号アルゴリズムの暗号解読秘密鍵と相応する関係を有しており、暗号解読秘密鍵は本発明における秘密鍵ＳＫである（すなわち、第１の秘密鍵）。ソフトウェアの秘密鍵ＳＫはソフトウェアがクラックされるか、されないかを決定するものであるので、秘密鍵ＳＫのセキュリティは非常に重要であり、本発明は特に、しきい値暗号化のＳｈａｍｉｒスキームを使用して、しきい値秘密鍵Ｋ１，Ｋ２，・・・，Ｋｎのｎ個のファクタを計算することによって第２の秘密鍵を作成し、この第２の秘密鍵は、秘密鍵ＳＫを秘密鍵暗号文ＰＳＫに暗号化するために使用され、秘密鍵暗号文ＰＳＫが暗号化されたソフトウェアにスプライス結合され、例えば、これは暗号化されたソフトウェアの頭部または尾部にスプライス結合される。さらに、しきい値秘密鍵のｎ個のファクタが、強いスプライスアルゴリズム（またはシンプルなスプライシングモード）によって、暗号化されたソフトウェアの異なる物理パラグラフにスプライス結合される。例えばこれは、ソフトウェアの頭部または尾部にスプライス結合される。本発明では、これは次のことによって実行される：ステップ１、保護が必要なソフトウェアを暗号化する；ステップ２、ステップ１から第１の秘密鍵ＳＫを暗号化する；ステップ３、ステップ２における暗号化を実行するために秘密鍵ファクタをスプライス結合する；また、作動のためにソフトウェアが暗号解読される必要がある場合には、しきい値秘密鍵のｔ個（１≦ｔ≦ｎ、ここでｔもｎも正の整数である）のファクタが、ランダムに、保護されているソフトウェア暗号文から得られ、その後、暗号化されたソフトウェアの第１の秘密鍵ＳＫが、Ｓｈａｍｉｒスキームを使用することによって秘密鍵暗号文ＰＳＫから解かれ、ソフトウェア暗号文が暗号解読される。しきい値秘密鍵のこの復元方法は、ソフトウェアローディングプロセスに動的な特性を与え、毎回、暗号解読のためのしきい値秘密鍵がソフトウェアの種々異なるポジションから得られる。従ってこれは効果的に、ソフトウェアローディングプロセスを追跡する方法をクラックすることによるクラックの難易度を高める。
【００２２】
本発明のソフトウェア暗号化プロセスのフローチャートを図１に示す。
【００２３】
ステップ１０１、ＡＥＳ、ＤＥＳ等の適切な対称暗号アルゴリズムを選択し、第１の暗号化モジュールを用いることによってソフトウェア平文を第１のソフトウェア暗号文に暗号化し、ここで、使用されている秘密鍵は第１の秘密鍵ＳＫである。
【００２４】
ステップ１０２、第２の暗号化モジュールによって、しきい値暗号アルゴリズムにおいてＳｈａｍｉｒアルゴリズムを使用することによって、上述した秘密鍵ＳＫを保護し、Ｚｐ領域において言語補完多項式アルゴリズムのＳｈａｍｉｒスキームを使用し、ｔ−１オーダーの多項式を生成し、ここでＺｐは主要領域である：
ｐｎ（ｘ）＝ａ０＋ａ１Ｘ＋ａ２Ｘ２＋・・・＋ａｔ−１Ｘｔ−１
ここで、Ｐｎ（ｘ）の係数ａ０，・・・ａｎは、ランダムに作成されている。
【００２５】
Ｘ１＝１の場合、ｐｎ（１）＝ａ０＋ａ１＋ａ２＋・・・＋ａｔ−１を計算し、
Ｘｎ＝ｎの場合、ｐｎ（ｎ）＝ａ０＋ａ１ｎ＋ａ２ｎ２＋・・・＋ａｔ−１ｎｔ−１を計算する。
【００２６】
ここで、ｐｎ（１），・・・ｐｎ（ｎ）＜２６４であり、ｎは１よりも大きい正の整数であり、ｔは１以上の正の整数であり、ｎよりも小さい。
【００２７】
その後、しきい値秘密鍵のｎ個のファクタペアＫ１＝（１，Ｐｎ（１）），・・・Ｋｎ＝（ｎ，Ｐｎ（ｎ））を作成し、ａ０を第２の秘密鍵として用い、秘密鍵ＳＫを秘密鍵暗号文ＰＳＫに暗号化する。また、暗号化された後に秘密鍵暗号文ＰＳＫを、前記第１のソフトウェア暗号文の頭部または尾部にスプライス結合し、このステップにおいて従来技術の記憶方法が使用され可能である。
【００２８】
ステップ１０３、第１のソフトウェア暗号文と鍵暗号文の統合された全体を、カプセル除去モジュールを用いてｎ個のパラグラフに分割し、その後、このしきい値秘密鍵のｎ個のファクタをｎ個のパラグラフにスプライス結合する。ここで、この秘密鍵のｎ個のファクタは直接的にそれぞれ、第１のソフトウェア暗号文の各パラグラフの頭部および尾部にスプライス結合され、第２のソフトウェア暗号文が形成される。これは記憶媒体に格納される。図示されているように、黒い部分は秘密鍵のファクタであり、白い部分はｎ個のパラグラフである；より複雑な第２のソフトウェア暗号文を形成するために以降のスプライス結合方法を用いることも可能である。
【００２９】
Ｃは、第１のソフトウェア暗号文の特定のパラグラフをあらわし、ここで各パラグラフＣはＣ０，Ｃ２，・・・，Ｃｍ−１を含み、ｋはしきい値秘密鍵ファクタペアＫｉのＰｎ（ｉ）をあらわし、特定のスプライシングプロセスは以下のものである：
【数２】
2010528511.tif 000004
ここで×は算術的な乗算演算である。有利な実施形態として、各パラグラフＣｉの長さはｋの長さに等しい。すなわち、ｌｅｎｇｔｈ（Ｃｉ）＝ｌｅｎｇｔｈ（ｋ）である。例えば、このソフトウェアは暗号化された後にｎ個のパラグラフに分けられる。ここでは特定のパラグラフＣは１２８バイトの長さを有している。また秘密鍵のファクタは１６バイトの長さを有している。その後Ｃは８個のパラグラフに分けられる。すなわちｍ＝７である。Ｃにおける各パラグラフＣｉの長さは、１６バイトの長さを有する。同時にｈ＝ｈａｓｈ（ｋ）が計算される。すなわち、しきい値秘密鍵ファクタｋのハッシュ値が記録される。これは、復元されたしきい値ファクタが、暗号解読時に正しいか否かを検証するために用いられる。完全なＣ’を形成するためにＣ’０〜Ｃ’ｍを結合した後、これはハッシュ値ｈ（ｈはパラグラフＣ’の前または後に加えられる）とともにスプライス結合され、その後、格納のための最終的なソフトウェア暗号文、すなわち第２のソフトウェア暗号文が、全てのパラグラフＣ’および相応するハッシュ値ｈをスプライス結合することによって形成され、この第２のソフトウェア暗号文が記憶媒体内に格納される。
【００３０】
Ｓｈａｍｉｒしきい値暗号スキーム内では、秘密鍵のｔ個のファクタは、第２の秘密鍵ａ０を復元するために使用され、ＰＳＫが暗号解読される。従って、暗号化されたソフトウェアがロードされる度毎に、ソフトウェアローダーは、ＰＳＫを暗号解読するためにランダムに秘密鍵のｎ個のファクタのｔを選択する。従って、動的な特性を備えた高度で強力な保護メカニズムが提供され、クラッカーがソフトウェアローディングプロセスを追跡および分析することが阻止される。
【００３１】
図２は、本発明に従ったソフトウェアのローディングおよび暗号解読のフローチャートである。ソフトウェアを開始するステージで、第２のソフトウェア暗号文が、記憶媒体からローダーによってメモリ内にロードされる。さらにこの図では黒色の部分が秘密鍵ファクタであり、白色の部分が第１のソフトウェア暗号文およびＰＳＫである；ステップ１０３に図示されているスプライス方法が暗号化ステップで使用されず、秘密鍵のｎ個のファクタだけが直接的に、ソフトウェア暗号文の相応するパラグラフの頭部または尾部にスプライス結合されている場合には、秘密鍵のｔ個のファクタが、ステップ２０１においてカプセル除去モジュールによってランダムに、暗号テキストからｔ個のパラグラフを直接的に選択することによって得られる。ステップ１０３において示されたスプライス方法が暗号化の間に使用されている場合には、１つの暗号テキストパラグラフＣ’およびその対応するハッシュ値ｈがカプセル除去モジュールによって選択され、しきい値秘密鍵のファクタｋが、暗号文のパラグラフが復元されるように持ち込まれる。復元アルゴリズムを以下に示す：
Ｅ０〜ＥｍからＣ０〜Ｃｍ−１を除去し、（Ｅｍ−１）にＣｍ−１＝Ｃ’ｍを代入し、式Ｃｍ−２＝Ｃ’ｍ−１−Ｃ’ｍ×ｋ＋Ｃｍ×Ｋ２を得る。これは（Ｅｍ−２），・・・，（Ｅ０）までに代入される；最終的に以下の多項式が形成される。
０＝−Ｃ’ｍｋｍ＋Ｃ’ｍ−１×ｋｍ−１−Ｃ’ｍ−２×ｋｍ−２＋・・・＋（−１）ｍ−１×Ｃ’０、これはＰ０としてラベリングされる；秘密鍵ファクタｋは上述した多項式の根であり、この根は多項式を数値領域において計算することによって見つけられ、ｋは第２のソフトウェア暗号文Ｃ’０，Ｃ’１，・・・，Ｃ’ｍから復元される。ニュートン反復アルゴリズムが、この実施例において多項式Ｐ０の１つまたは複数の根を探すために使用される。
【００３２】
（ａ）ｙ＝−Ｃ’ｍｋｍ＋Ｃ’ｍ−１×ｋｍ−１−Ｃ’ｍ−２×ｋｍ−２＋・・・＋（−１）ｍ−１×Ｃ’０＝ｆ（ｋ）（Ｐ１）とし、ここで初期値ｋ０を任意に選択し、例えばｋ０＝２lenｇｔｈ（ｋ）−１とする。
（ｂ）
【数３】
2010528511.tif 000005
を計算する。ここでｉ＝０〜ｍであり、ｆ’（ｋ）はｆ（ｋ）の導関数であり、すなわち、
ｆ’（ｋ）＝−Ｃ’ｍ×ｍ×ｋｍ−１＋Ｃ’ｍ−１×（ｍ−１）×ｋｍ−２−Ｃ’ｍ−２×（ｍ−２）×ｋｍ−３＋・・・＋（−１）ｍ−２×Ｃ’１
（ｃ）｜ｋｉ−１−ｋｉ｜＜１になるまでステップｂを繰り返す、その後ｋｉ＋１はＰ１の根に近似する。
【００３３】
（ｄ）ｈａｓｈ（ｋｉ＋１）＝ｈ、またはｈａｓｈ（ｋｉ＋１＋１）＝ｈ、ｈａｓｈ（ｋｉ＋１−１）＝ｈであり、ここでｈが暗号化ステップ（４）におけるｈ値である場合、このステップにおいて計算されたｋｉ＋１が、暗号化ステップにおけるしきい値秘密鍵のファクタｋであり、ステップ（ｆ）に飛ぶ；これがイコールでない場合には、数の根を見つけるためのアルゴリズムは無く、ステップ（ｅ）に入る。前記ハッシュアルゴリズムは本発明において片道のアルゴリズムであり、つまり、データが計算された後にオリジナルデータが逆に導出されず、従って、伝送される前と後にデータが古いか否かを比較することが必要である場合には、伝送前と後にハッシュ値の比較を行うことだけが必要とされる。
【００３４】
（ｅ）ｋがステップ（ｄ）において見つけられない場合、これはＰ０が複数の根を有することを意味し、他の実際の根が以下の方法によって得られる。
【００３５】
ステップ（ｄ）において得られた根ｋｉ＋１を新しいｋ０として使用する。
ｂ０＝−Ｃ’ｍ，ｂｋ＝（−１）ｋ−１×Ｃ’ｍ−ｋ＋ｋ０×ｂｋ−１とすると（ここでｋ＝１，２，・・・，ｍ−１である）、新たな多項式ｆ（ｋ）＝ｂ０×ｋｍ−１＋ｂ１×ｋｍ−２＋・・・＋ｂｎ−１（Ｐ２）が生じる；
上述のステップｂ〜ｃを使用して、新たな式Ｐ２の実際の根を計算し、従ってＰ０の他の実際のルートが得られる。
【００３６】
このステップ（ｅ）によってＰ０の全ての実際の根を計算し、ステップ（ｅ）が行われる度にチェックステップ（ｄ）をチェックし、実際の秘密鍵ファクタが得られたか否かを定め、しきい値秘密鍵のファクタｋが得られる。
【００３７】
（ｆ）暗号文パラグラフにおける秘密鍵のファクタｋを得た後、Ｅ０をＥｍに代入し返し、第１のソフトウェア暗号文Ｃ１，Ｃ２，・・・，Ｃｍを、第２のソフトウェア暗号文Ｃ’０，Ｃ’１，・・・，Ｃ’ｍから復元する。
【００３８】
ｎ個のパラグラフＣ’上でステップａ〜ｆを行い、秘密鍵暗号文ＰＳＫを解読するのに必要なしきい値秘密鍵の全てのファクタｋを得て、ｋを使用する全ての暗号文Ｃ’を復元し、第１のソフトウェア暗号文を形成する。
【００３９】
ステップ２０２は、しきい値秘密鍵のｔ個のファクタを復元した後、
Ｋｉ＝（ｘｉ，ｐｎ（ｘｉ））、１≦ｉ≦ｔ、第２の暗号解読モジュールによって、ｔ個のｋを使用して新たな多項式を形成する。
【数４】
2010528511.tif 000006
ここでｙｋ＝Ｐｎ（ｘｋ）であり、ｘｉおよびｘｎは復元されたしきい値秘密鍵ファクタペアにおいてｘｉであり、ここでｉ≠ｋであり、最終的にｘ＝０とすると、Ｐｎ（０）＝ａ０が得られる。
【００４０】
第１のソフトウェア暗号文においてＰＳＫを抽出し、ａ０を、秘密鍵暗号文ＰＳＫを暗号解読するための秘密鍵として使用し、暗号化されたソフトウェアを暗号解読するために第１の秘密鍵ＳＫを得る。
【００４１】
ステップ２０３、ＳＫを用いて、第１の暗号化モジュールによって、暗号化されたソフトウェアを暗号解読する。これによって元来のソフトウェア平文が得られる。
【００４２】
ＣＰＵが、このソフトウェア平文に従って作動する。
【００４３】
本発明の暗号化装置の概略的なダイヤグラムが図３に示されている。この装置は第１の暗号化モジュール、第２の暗号化モジュールおよびカプセル化モジュールを含み；前記第１の暗号化モジュールは第１の秘密鍵ＳＫを用いてソフトウェア平文を第１のソフトウェア暗号文に暗号化し；前記第１の暗号化モジュールと接続されている前記第２の暗号化モジュールはしきい値秘密鍵のｎ個のファクタを用いて第２の暗号化モジュールを形成し、前記第１の秘密鍵ＳＫを秘密鍵暗号文ＰＳＫに、第２の秘密鍵を用いて暗号化し、前記秘密鍵暗号文ＰＳＫを前記第１のソフトウェア暗号文内に格納し；前記第２の暗号化モジュールに接続されている前記カプセル化モジュールは、前記第１のソフトウェア暗号文をｎ個のパラグラフに分け、しきい値秘密鍵の前記ファクタを前記パラグラフにスプライス接合し、第２のソフトウェア暗号文を形成する。
【００４４】
本発明の暗号解読装置の概略的なダイヤグラムが図４に示されている。この装置はカプセル除去モジュール、第２の暗号解読モジュールおよび第１の暗号解読モジュールを含んでいる；前記カプセル除去モジュールは、第２のソフトウェア暗号文を第１のソフトウェア暗号文にカプセル除去し、ランダムに第２のソフトウェア暗号文のｎ個のパラグラフからしきい値秘密鍵のｔ個のファクタを選択し；前記カプセル除去モジュールに接続されている前記第２の暗号解読モジュールはしきい値秘密鍵の前記ｔ個のファクタに従って第２の秘密鍵を形成し、この第２の秘密鍵を用いて秘密鍵暗号文ＰＳＫを第１の秘密鍵ＳＫに暗号解読し；前記第２の暗号解読モジュールに接続されている前記第１の暗号解読モジュールは、第１のソフトウェア暗号文を前記第１の秘密鍵ＳＫを用いて暗号解読し、ソフトウェア平文を得る。
【００４５】
本発明の装置の概略的な作動ダイヤグラムが図５に示されている。これは記憶媒体からソフトウェアをロードするためのローダーおよび、図４に示された暗号化装置も含んでいる。ここでは同じ部分の冗長的な記述を繰り返さない。ローダーは第２のソフトウェア暗号文を記憶媒体（例えばハードディスク）からロードし、前記暗号解読装置に入力する。この暗号解読装置は前記第２のソフトウェア暗号文をソフトウェア平文に変え、これを実行のためにＣＰＵに伝送する。
【００４６】
本発明の効果は次のようなものである。すなわち、実行可能なソフトウェアを暗号化し、クラッカーにとって、ソフトウェアのローディングプロセスを追跡するだけで秘密鍵を得ることを困難にし、ソフトウェアが解読され、逆行分析等の方法でコンパイルされることが阻止される、というものである。これによってソフトウェアの暗号鍵の保護が向上され、クラッカーにとって、ソフトウェアローディングプロセスを追跡することによって、秘密鍵の物理アドレスを得て、この秘密鍵を分析することによってソフトウェアをクラックするという目的を達することが困難になる；さらに本発明は秘密鍵をダイナミックに格納する技術によって、その安全性を高めるためにソフトウェアを暗号化するという、目下使用されているソリューションを改善する。
【００４７】
上述の特定の実施形態は、単に本発明を説明するために用いられているものであり、本発明をこれに限定するものではない。
【図１】
2010528511.tif 000008
【図２】
2010528511.tif 000009
【図３】
2010528511.tif 000010
【図４】
2010528511.tif 000011
【図５】
2010528511.tif 000012
【国際調査報告】
2010528511.tif 000013
2010528511.tif 000014
2010528511.tif 000015