このシリーズの記事では、ソフトウェアを保護するためのJavaスマートカード(電子キーの安価なアナログ)の使用について説明します。 サイクルはいくつかの章に分かれています。
記事の情報を読んで理解するには、次のスキルが必要です。
- Windowsソフトウェア開発の基礎(DelphiやVisual Basicなどの視覚環境でのプログラミングスキルで十分です)
- 暗号化の分野に関する基本的な知識(暗号、対称、非対称アルゴリズム、初期化ベクトル、CBCなど。必須の読み取りにはBruce Schneier Applied Cryptographyをお勧めします)。
- 少なくともリモートで構文(Java、C ++、C#、PHPなど)のJavaを連想させる、あらゆる言語の基本的なプログラミングスキル
サイクルの目標は、読者にJavaマップを紹介することです(ロシア語での使用に関する文献はほとんどありません)。 このサイクルは、「Javaマップに基づくソフトウェア保護の開発のためのガイドライン」のステータスや「Javaマップへのガイド」のタイトルを主張していません。
サイクルの構成:
90%のケースでは、次のすべてのプロパティを持つようなアルゴリズムを思い付くことができません。
- このアルゴリズムをプログラムから削除すると、ソフトウェアは完全に機能しなくなります
- ハッカーはこのアルゴリズムを推測およびシミュレーションできませんでした
これらの90%に該当する場合、間違いなく次のことを行う必要があります。
- カードとのすべての通信を暗号化する
- Themida Mount Protectorでソフトウェアを保護
1.カードとのデータ交換の暗号化
強力な保護を構築する場合は、トラフィック暗号化キーを変更する必要があります。 少なくともアプリケーションを起動するたびに、新しいキーを生成する必要があります。 セッションキーは、カードとプログラムによって提供されるデータに基づいて生成する必要があります。 保護されたセッションのメカニズムは、 プリミティブバージョンでは次のようになります。
- マスターキーDES Mがあります。彼はカードとソフトウェアで知られています。
- カードは4バイトのランダムデータ(Ccard)を生成し、ソフトウェアは4バイトのランダムデータ(Ccard)を生成します。 彼らはこの情報を互いに交換します。
- カードとソフトウェアは両方の配列(Ccard + Csoft)を組み合わせ、結果のバイトセットをマスターキーMで暗号化します。8バイトの1DESキーが判明し、現在のセッションで交換全体を暗号化します。
注意! 説明されているとおりに実行しないでください。
解読されたデータがカードにとって正しくないと思われる場合、ブロックする必要があります。 このようなオプションを実装する最も簡単なオプションは、アプレットクラスにCardIsLockedブール型フィールドを設定し、渡されたコマンドコードに対応するメソッドを呼び出す前に、プロセスメソッドでその内容を確認することです。 CardIsLockedの場合-ソフトウェアにデータの代わりにエラーを返します。
2. Themidaの機能の使用
Themidaは、プロテクターを削除するのが最も難しいものの1つと当然考えられています。 ただし、プロジェクターを上から吊るすだけでは不十分です。 本当に信頼できる保護を構築する場合は、Themida APIを最大限に使用する必要があります。
- 必ずThemida仮想マシンエンジンを使用して保護してください
- SecureEngineマクロと呼ばれるThemidaのヘルプセクションに特に注意してください。 カードと通信するための独自の安全なセッションメカニズムを開発し、VM_Start / End、Code_Replace_Start / Endなどのマクロでカードとの通信を提供するすべてのコードを囲みます。
- 通常、カードとのデータ交換のための安全なセッションは、アプリケーションの起動時に一度設定されます。 これが当てはまる場合は、保護されたセッションをセットアップした後にプロセスのアドレス空間から削除されるように、保護されたセッションを開始するコードをClear_Start / Endマクロに入れます。
- マップで機能する関数内で、CheckProtectionStart / End、CheckCodeIntegrityStart / Endのマクロを使用します。
- プログラムを仮想マシンで実行させないでください(アプリケーションで必要な場合を除く)
3.暗号トラップ。 あなたを待っている数百万人のうちの数人。
暗号化を使用する場合、自分が何をしているか、何ができるか、何ができないかを理解することが重要です。 もちろん、スマートカードでコンソールテトリスを保護している場合は、何でも買うことができます。 しかし、このテトリスが一意であり、明日100万ドルをもたらす場合...そして、たとえば、特定のDESキーで特定の初期化ベクトルを使用したら、再度それをしないでください。
独自の極秘非公開の独自の暗号化およびハッシュアルゴリズムを発明しないでください。 GSM A5 / 3暗号の運命と、それらがスーパークリプトグラフであると決定した貧しい著者たちを思い出してください。
超耐性のセキュリティシステムを設計するときは、BS-Clientに基づく銀行のクライアントのように丸い穴を残さないでください。
4.患者の読者のおかげで
この場所を読んでくれたみんなに感謝します。 感謝とresみが受け入れられます。
コメント内の質問に喜んで対応し、回答が含まれるように記事を更新してみます。