暗号化の基本。 パート0

この一連の記事の目的は、通信、ネットワークプロトコル、グラフィックス、その他すべての技術的詳細を考慮しないことを除き、暗号化のみに重点を置いた、最も簡単な暗号化保護メッセンジャーの作成をセットアップすることです。



プロトコルがゼロから開発した脆弱性を段階的に回避することで、最終的には、膨大な数の攻撃の変動に耐える自己組織化された暗号化システムが得られます。



暗号化に不慣れなほとんどの人は、暗号化について考え、元の情報がきれいな形で保存される一種の金庫を想像し、ユーザーにそれを受け取るために、安全なロックのロックを解除し、抽象的なボックスから情報を取得する組み合わせをシステムに提示する必要があります。



ただし、このアプローチでは、多くの問題が発生します。







まず、暗号化は軍事分野の情報を隠すように設計されており、そのために金庫の類似物は受け入れられません。 敵対行為の間、法律や規制は適用されないため、金庫にアクセスする人はロックのコードを見つけようとしません。ロックを使用して強制的に開くか、安全な製造元に連絡して保護をバイパスします。



したがって、暗号化は、「安全な」ものが敵の手に渡ったとしても、情報の整合性をどのように保持するかという問題に直面しています。



これに必要な条件は、元のデータセットよりもサイズがはるかに小さい特定のキーを使用することでのみ回復が可能になるように情報の構造を変更することです。



画像

暗号化により、情報はほぼこの形式のままになりますが、唯一の違いは、キーが既知である限り、回復可能なままであることです



情報は、相手側の受信情報が知っている必要がある同じキーを使用してのみ復元できます。



このような情報の混乱は、オープンな通信チャネルを介して送信される可能性があり、パスワードを知っている人以外の誰にとっても価値がありません。



このような暗号化は、復号化とまったく同じ暗号を使用して情報を暗号化するため、対称と呼ばれます。



将来的には、このような暗号化方式には欠点がないわけではないため、非対称暗号化方式が考案されましたが、それらについては後で説明します。



対称暗号化では、次の情報転送プロトコルが使用されます。





画像



パスワードが12文字で、各文字が8ビットである場合、完全な検索にはアリス(2 ^ 8)^(12)、または2 ^ 96の操作が必要です。 そのような列挙には、攻撃者が数世紀かかることがあり、この時点までに暗号化された情報が関連し続けることはほとんどありません。



アリスは自分のコンピューターに簡単なプログラムを持っています



public class User { private String password = "qdghjfTTfbfs4852"; // SymmEncrypor - ,     private SymmEncryptor SE = new SymmEncryptor(); //     private String encryptMessage(String message) { String encMessage = SE.encrypt(message, password); System.out.print(" : " + encMessage); return encMessage; } //     private String decryptMessage(String EncryptedMessage) { String encMessage = SE.decrypt(EncryptedMessage, password); System.out.print(" : " + decMessage); return decMessage; } public static void main(String[] args) { String message = encryptMessage("Hello, Bob!"); } }
      
      





アリスは暗号化された回線を受信し、イブが盗聴した電話回線を介してボブに送信します。 暗号化されたメッセージを傍受すると、イブはそれを使用して何もできなくなりますが、ボブはメッセージを受信すると、同じプログラムで事前に知っているパスワードddghjfTTfbfs4852を適用し、メッセージを復号化できます。



ボブによってインストールされたプログラム:



 public class User { private String password = "qdghjfTTfbfs4852"; private SymmEncryptor SE = new SymmEncryptor(); private String encryptMessage(String message) { SymmEncryptor SE = new SymmEncryptor(); String encMessage = SE.encrypt(message, password); System.out.print(" : " + encMessage); return encMessage; } private String decryptMessage(String message) { String encMessage = SE.decrypt(message, password); System.out.print(" : " + decMessage); return decMessage; } public static void main(String[] args) { // ,        String message = "FJekjfisdf7f33fFFDf788dsfvUHVUDIUSiusdyf&D&F^8" //   ,   ,    qdghjfTTfbfs4852 String DecryptedMessage = decryptMessage(message); *  :  : Hello, Bob! } }
      
      





SymmEncryptorメソッドは依然としてブラックボックスのままです。どのように機能するかはわかりませんが、信頼性のみに依存しています



一般的に認識されている暗号化アルゴリズムは、世界中の暗号化コミュニティによって10年にわたって強度がテストされており、この期間内にその妥協の証拠が提供されない場合、アルゴリズムが信頼できると安全に仮定できます。暗号学の専門家でなくても、独立して古い暗号化アルゴリズムを検証するのに十分です難しい



デフォルトでは、十分な強度テストに合格するまで、新しい暗号化アルゴリズムを信頼しないでください。 さらには、潜在的なクラッカーが気付く可能性のあるすべてのニュアンスを考慮に入れることができると単純に信じて、独自のものを作成しようとしないでください。



次回は、SymmEncryptorクラスのブラックボックスを分析し、個人的な例を理解するための最も単純な暗号化メカニズムを作成します-それが何であり、どのように機能するか



All Articles