CodeMeterの保護技術|Blurry Box Cryptography
ケルコフスの原理
Auguste Kerckhoffs |
Auguste Kerckhoffs は19世紀に彼のエポニムの原則を仮定しました。「暗号システムは、キー(鍵)に関することを除くシステムのすべてが公の知識であっても安全でなければなりません」。つまり、効果的なメソッドを秘密にする必要はありません。そのことにあなたは疑問を感じるかもしれません。
Wibu-Systemsは、以前からこの原則に忠実でした。市場にある他の多くのドングルは独自のアルゴリズムに基づく一方、パブリックでよく知られているFEALアルゴリズムをWibu-Systemsはすでに使用し始めており、1992年にWibuKeyが最初に発売されたときに、WibuBoxのマニュアルでキー導出スキームを公開しました。多くの非公開システムが初期段階で解読されましたが、WibuKeyは、40ビットキー(輸出制限のために使用された)が小さくなりすぎるまで、長持ちすることができました。現在のWibuBoxは64ビットのキーを使用しており、一度もクラックされたことはありません。2003年に続くCodeMeterの最初のリリースでは、AES 256ビットというもう1つのパブリック暗号化アルゴリズムが導入されました。 繰り返しになりますが、CmDongleは今日まで一度もクラックされていません。
コンセプト
ドングルで行われる暗号化プロセスとは異なり、ソフトウェアに安全な保護を統合する手段はこれまで公開されていません。これは、「Security by Obscrurity(情報を隠しておくことでセキュリティが確保されると考えること)」につながります。これは、ケルクホフスの原理が仮定するものと正反対にあります。これらの非公開メソッドは、評価したり、相互に比較したりすることはできません。ここでも、Wibu-Systemsは、講義やイベント中にCodeMeter Protection Suiteのメソッドや機能について説明する機会を提供しています。
Blurry Boxにより、暗号化は新しいレベルに引き上げられます。Blurry Box暗号化は、公的に利用可能なメソッドに完全に基づいており、したがってBlurry Boxにより、暗号化は新しいレベルに引き上げられます。Blurry Box暗号化は、公的に利用可能な方法に完全に基づいており、したがってソフトウェア保護を評価および比較できます。言うまでもなく、Blurry Box暗号化は、CodeMeter Protection Suiteの従来のメソッドと組み合わせ可能です。
Blurry Box暗号化の基本原理は、ドングルで1つ以上の安全なキーを使用することと、ソフトウェアが通常は複雑であることです。その目標は、同じソフトウェアを完全に書き直すために必要な労力よりも、ソフトウェアを不正にコピーするために必要な労力に負担をかけることです。本質的には、特定のソフトウェアがどのように機能するかを知っている攻撃者を同様のソフトウェアを単に構築することから阻止することはできず、努力が必要です。
メソッド
Blurry Box暗号化は7つのメソッドで構成されています。これにより、不正コピーを考えるものに対して、似たソフトウェアをゼロから開発する方が容易かつ迅速だと思うまで、偽造しようとする労力をかけさせます。
バリアントの作成
ソフトウェアの複雑さを増すために、ソフトウェアの関数は関数のバリアントとしてコピーします。ラッパー関数は、関数の特定の入力パラメーターに応じて、実行されるバリアントを選択します。
バリアントの修正
個々のバリアントは、各バリアントに有効な値の範囲でのみ機能するように修正されます。これにより、攻撃者がラッパー関数にパッチを適用して、毎回同じバリアントのみを実行することを防ぎます。
バリアントの暗号化
すべてのバリアントは暗号化されており、攻撃者が最初に復号せずにコードをリバースエンジニアリングすることを防ぎます。
トラップの挿入
すでに作成されたバリアントに加えて、さらにトラップとしてバリアントが挿入され、暗号化されます。トラップにはロックコードが含まれており、トラップがドングルを介して復号されるとドングルはセルフロックし、復号に使用できなくなります。これにより、攻撃者がリバースエンジニアリングをせずにすべてのメソッドを解読することを防ぎます。
ドングルのバリアントの選択
ラッパー関数は、ドングルを使用してバリアントを選択します。そのため、入力パラメーターがドングルに送信され、使用されるバリアントが返されます。これにより、解読されたラッパー関数をリバースエンジニアリングするだけでは、攻撃者は必要なバリアントを区別できなくなります。絶対的な確実性を持つには、可能なすべての入力パラメーターのコードを実行する必要があります。
ドングルのステートエンジン
開発者は、関数を選択した順序でのみ実行できることを知っています。直近の復号メソッドは、ステートとしてドングルに保存されます。 次の復号では、このステートが満たされたかどうかを確認します。そうでない場合、トラップが発動し攻撃者がソフトウェアのすべてのバリアントを試行するのをいつでも防ぐことができます。攻撃者は常に開始点に戻る必要があり、攻撃の複雑さが増します。
復号の遅延
通常の操作では、30秒ごとに特定の数の復号しか実行できません。この数は、ドングルの復号しきい値として保存されます。ドングルはそれに応じて復号作業のペースを調整します。このメカニズムはプロセスをより複雑にするだけでなく、攻撃者の速度を低下させます。