モバイル端末での暗号化と復号化

目次

導入

アルゴリズムの分類

鍵の紹介

モード紹介

アルゴリズムの紹介

まとめ

最後に書きます


導入

今日はモバイルの暗号化と復号化に関する記事を共有します。モバイルデバイスの普及に伴い、ユーザーデータを保護する上で暗号化テクノロジーの重要性がますます高まっています。

この記事では、Androidの暗号化・復号化アルゴリズムの分類、メリット・デメリット、応用例を紹介し、自分に合った暗号化・復号化アルゴリズムを理解して選択するのに役立ちます。また、よりよく理解して使用できるように、アルゴリズムのキー コードも提供します。私と一緒に学びに来てください。

 アルゴリズムの分類

       暗号化結果が復号できるかどうかにより、可逆暗号と不可逆暗号(一方向暗号)に分けられるため、一方向暗号は暗号化・復号アルゴリズムではなく、暗号アルゴリズムとしか言えません。 。可逆暗号化の場合、鍵の対称性により対称暗号化と非対称暗号化に分けられます。具体的な分類構造は次のとおりです。

  • 可逆暗号化
  • 対称暗号化: DES、3DES、AES、PBE
  • 非対称暗号化: RSA、DSA、ECC
  • 不可逆暗号化(一方向暗号化):MD5、SHA、HMAC

鍵の紹介

       さまざまな暗号化および復号化アルゴリズムを詳しく紹介する前に、次の内容の拡張を容易にするために、「キー」の概念について簡単に説明する必要があります。

       キーは暗号化および復号化アルゴリズムのパラメータであり、その長さはアルゴリズムによって異なります。また、同じアルゴリズムでもキーの長さの要件が異なる場合があります。一般に、キーの長さはセキュリティに正比例します。使用する場合は、平文 (または暗号文) をキーとともに対応する暗号化 (または復号化コンテナー) に入れて暗号文 (または平文) を取得し、暗号化と復号化を実現します。

       暗号化アルゴリズムの開始時点では、キーの形式は対称です。これは、暗号化と復号化のキーが同じであることを意味します。これは私たちの思考習慣と一致しています。ただし、ここには問題があります。つまり、送信中または保管中にキーが盗まれた場合、ハッカーが暗号文を復号して正しい平文を取得するのは簡単です。対称形の鍵はシンプルで効率的ですが、安全性はあまり高くありません。

       対称鍵の欠陥を考慮して、新しい鍵形式である非対称鍵が提案されています。非対称キーの暗号化キーと復号化キーは同じではなく、公開キーと秘密キーに分かれており、公開キーは暗号化に使用され、秘密キーは復号化に使用されます。秘密鍵は開示も送信もされず、通信の両当事者によってのみ保持および保持されます。公開鍵は公的に送信でき、たとえ公開鍵が公開されていても紛失する心配はありません。盗まれたとしても、ハッカーは依然として暗号文を平文に復号化できません (この機能は秘密キーによって提供されます)。非対称キーのセキュリティは対称キーよりも優れていることがわかります。

       非対称キーはデジタル署名という機能も提供します。身元認証の目的を達成するために、秘密鍵は署名に使用され、公開鍵は認証に使用されます。

       上記の鍵の紹介は可逆暗号化に基づいており、非可逆暗号化には鍵となる概念がないことに注意してください。

モード紹介

       さまざまな暗号化および復号化アルゴリズムを詳しく紹介する前に、次の内容の拡張を容易にするために、「モード」の概念について簡単に説明する必要があります。

       可逆暗号化では、暗号化中に暗号化モードを選択できますが、暗号化アルゴリズムには異なる作業方法があり、異なる作業方法では効率や方法に違いがあることがわかります。同じデータの場合、暗号化に選択したモードは復号化に選択したモードと同じでなければならないことに注意してください。そうしないと、復号化で正しい結果が得られません。

       Android の可逆暗号化には、ECB (電子コードブック モード)、CBC (グループ接続モード)、CFB (暗号フィードバック モード)、OFB (出力フィードバック モード) の 4 つの主なモードがあります。

       ECB (電子コードブック モード):

       その使用法は、平文ブロックが暗号文ブロックに暗号化され、同じ平文ブロックが常に同じ暗号文ブロックに暗号化されることです。暗号化アルゴリズムを直接使用して、同じ 64 ビット キーで各 64 ビット平文グループを暗号化します。各平文パケットは互いに独立して処理されます。

       欠点: 指定されたキー k の下では、同じ平文グループは常に同じ暗号文グループを生成するため、平文グループのデータ形式が公開されてしまいます。特定の平文データ形式では、平文グループ内で多数の繰り返しや長いゼロ文字列が発生し、いくつかの重要なデータ、特に書式設定されたヘッダー、ジョブ番号、送信時刻、場所、その他の特性が同じ位置に現れることがよくあります。暗号文に漏洩し、攻撃者がこれらの機能を悪用できるようになります。

       長所: 個々のメッセージが同じキーで暗号化されるため、エラーが伝播しません。実際には、各パケットは同じキーで暗号化された個別のメッセージとして見ることができます。暗号文のデータに誤りがある場合、復号化時に対応する平文ブロック全体が正しく復号化されませんが、他の平文には影響しません。ただし、データのビットが時々失われたり、暗号文に追加されたりすると、暗号文シーケンス全体が正しく復号化されなくなります。グループの境界を再配置できる特定のフレーム構造が存在しない限り。

       CBC(パケット接続モード):

       同じ平文でも暗号化結果は異なります。これにより、暗号解読者による解読の難易度が高まります。鍵が固定されると、入力された各平文グループのリンク手法が変更され、暗号文グループが現在の平文グループに関連付けられるだけでなく、フィードバック効果を通じて前の平文グループにも関連付けられます。これは、暗号化の本質からくる一種の難読化操作です。

       利点: 平文のデータパターンを隠蔽することができ、平文グループの再生、埋め込み、削除などのデータ改ざんをある程度防ぐことができます。

       短所: エラー伝播が発生する. 暗号文の変更は後続の暗号文グループに影響を与える. ただし、CBC モードでのエラー伝播は大きくない. 送信エラーは最大でも 2 つのメッセージ グループの受信結果に影響し、エラー伝播はわずかです.最も長く続く2グループ

       CFB (Cipher Feedback Mode):暗号文フィードバック モードは、暗号文間の相関を強化するために使用されます。暗号化するメッセージを文字ビットで処理する必要がある場合は、CFB を使用できます。毎回平文の s ビットを暗号化します。(1<= s<= 元の固有の長さ)

       利点: CBC モードの利点に加えて、CFB モードには、ユーザー データ形式のニーズに特に適しているという独自の利点があります。

       短所: まず、チャネル エラーの影響を受けやすく、エラーの伝播を引き起こします。CFB は暗号文フィードバックを使用するため、送信中に暗号文パケットに 1 つ以上のエラーがあると、現在のパケットと後続の部分パケットで復号化エラーが発生します。次に、データ暗号化の速度が低下します。ただし、このモードは主にデータ ネットワークの下位層で使用され、データ レートはそれほど高くありません。

       OFB (出力フィードバック モード): CBC および CFB モードによって引き起こされるエラー伝播の問題は克服されますが、暗号文の改ざんを検出するのは困難です

アルゴリズムの紹介

一方向暗号化

       前述したように、一方向暗号化の結果は復号化できないため、一方向暗号化の主な目的は、従来の意味での暗号化と復号化ではなく、平文データの機密保持と抽象化です。一方向暗号化には主に MD5、SHA、HMAC などのアルゴリズムが含まれます。

  • 特徴:

    1. 圧縮性: データの長さに関係なく、一方向暗号化後の長さは固定されます。
    2. 変更に対する耐性: 元のデータを変更すると、たとえ 1 バイトだけ変更されたとしても、結果は大きく異なります。
    3. 弱い衝突耐性: 元のデータとその一方向暗号化結果がわかっていると、同じ結果を持つデータ (つまり、偽造データ) を見つけるのは非常に困難です。
    4. 強力な衝突耐性: 同じ一方向暗号化結果を持つ 2 つの異なるデータを見つけることは非常に困難です。
    5. シンプルかつ効率的: データの一方向暗号化は非常に高速です。

    注: 上記の特性は特定の一方向暗号化アルゴリズムに基づいており、異なる一方向暗号化アルゴリズム間では相違点があります。

       一方向暗号化では、データの暗号化結果の一貫性が高度に保証されていることがわかります。つまり、データの一部を暗号化した後で同じ結果を得るためにデータの一部を偽造することはほとんど不可能です。同時に、一方向暗号化の方が高速であり、暗号化結果の長さが固定であるため、一方向暗号化の結果は、後で説明する可逆暗号化の鍵生成の最初のステップとしてよく使用されます。 。

  • 応用:

    1. データ暗号化、安全なアクセス認証

             これは、一方向暗号化の最も広く使用されている方法です。具体的には、ユーザーのパスワードの保護です。Web サイトやアプリケーションにログインするとき、多くの場合、自分のパスワードを入力したり、クライアントやブラウザにパスワードの保存を手伝ってもらったりする必要があります。ただし、パスワードを認証したり、平文で保存したりすることはできません。これは、ユーザーが複数の Web サイトや銀行などで 1 つのパスワードを使用することが多く、いずれかの Web サイトでユーザーのパスワードが漏洩すると、ユーザーの他の Web サイトの情報も盗まれる可能性があるためです。そのため、ユーザーがログインしてパスワードを確認または保存する際に、パスワードの平文に対して単一項目の暗号化を実行し、その結果をサーバー側でのユーザーパスワードの一方向暗号化結果と比較することが一般的です。それらが一貫している場合はアクセスが許可され、そうでない場合は拒否されます。たとえば、2012 年の QQ のパスワードを記憶する機能は、ユーザーのパスワードを MD5 で一度暗号化し、ローカル データベースに保存します。

             読者の中には、同じ平文に対する一方向暗号化の暗号化結果は決して変わらないため、ユーザーのパスワードが変更されていない場合、ハッカーは暗号化結果を取得する限り、対応する Web サイトに自由にログインできることに気づいているかもしれません。安全性は保証されていますか?毛織物ですか? まさにその通りです。このため、エンジニアは、ログインまたはパスワードの保存戦略を設計する際に、暗号化アルゴリズムの選択を公開しないように努める必要がありますが、その一方で、パスワードに「ソルト」を追加するなど、暗号化されたオブジェクトを処理するためにいくつかの特別な手段を使用することもできます。塩を追加するというアイデアは、後の HMAC の紹介に反映されます。

    2. ファイルの完全性検証、デジタル署名

             場合によっては、ファイルやデータが改ざんされていないかどうかを確認する必要があるため、主に圧縮、改ざん防止、一方向暗号化のシンプルさと効率に基づいた一方向暗号化テクノロジを使用します。読者が理解しやすい例を次に示します。ミラー イメージをダウンロードした後、ダウンロード ページには MD5 値のセットも提供されていることがわかります。この MD5 値のセットは、ファイルの一貫性を確認するために使用されます。ミラー イメージをダウンロードした後、次のことを行う必要があります。ミラー上の MD5 キャリブレーション 取得した MD5 値が、ダウンロード ページで提供される MD5 値と比較され、画像が改ざんされていないかどうかが確認されます。

  • 安全性:

           一方向暗号化の安全性は主に暗号化結果の長さに依存し、同じ暗号化アルゴリズムの場合、安全性は暗号化結果の長さに比例します。一方向暗号化は、主にブルート フォース クラッキング、辞書クラッキング、ソーシャル エンジニアリング クラッキングなどによって解読される可能性があります。ただし、クラッキングのコストと時間が非常にかかるため、よほど重要なデータでない限り、クラッキングする必要はほとんどありません。

  • アルゴリズムの分類:

    1. MD5: MD5 は最も広く使用されている一方向暗号化アルゴリズムであり、データ暗号化、セキュリティ アクセス認証、ファイル整合性検証に応用されています。MD5 暗号化の出力は、128 ビットの 16 進数文字列です。Android SDK は、MD5 を使用するためのインターフェイスを提供しており、使用時に直接呼び出すことができます。例は次のとおりです。

       MessageDigest md5 = MessageDigest.getInstance("MD5"); //获得MD5加密实例 
       md5.update(stringToEncrypt.getBytes());  
       byte[] encrypted = md5.digest();//加密返回值为byte[]数组 
    2. SHA: SHA は実際には、SHA-1、SHA-256、SHA-384、SHA-512 などの暗号化アルゴリズムのグループの総称です。その中でもSHA-1が最も広く使われており、HTTPSで使われるHASHハッシュ関数はほとんどがSHA-1を使用しています。SHA ファミリは MD5 に比べてセキュリティが高く、これまで暗号化結果を解読できた人はいませんが、暗号化速度は MD5 よりも遅く、セキュリティは速度と引き換えになります。一方、SHA には暗号化されたデータの長さに一定の制限があります。各 SHA アルゴリズムの具体的な比較は次のとおりです。

      SHA アルゴリズムについては、Android SDK も開発者にとって使いやすい対応するインターフェイスを提供します。MD5 と同様に、SHA-1 を例に挙げます。

       MessageDigest sha = MessageDigest.getInstance("SHA-1"); //获得SHA-1加密实例 
       sha.update(stringToEncrypt.getBytes());  
       byte[] encrypted = sha.digest();//加密返回值为byte[]数组
    3. HMAC: HMAC は、上記の従来の一方向暗号化アルゴリズムとは異なります。その暗号化形式は、可逆暗号化と同じです。暗号化プロセスでは、入力としてキーとメッセージが必要で、出力としてメッセージ ダイジェストが生成されます。HMAC を定義するには、暗号化ハッシュ関数 (H として示され、MD5 または SHA-1 にすることができます) とキー K が必要です。データ ブロック内のバイト数を示すために B を使用します。(上記のハッシュ関数の分割データ ブロックの語長は B=64)、L はハッシュ関数の出力データ バイトを表すために使用されます (MD5 では L=16、SHA-1 では L=20)。認証キーの長さは、データ ブロックのワード長以下の任意の正の整数値にすることができます。アプリケーションで使用されるキーの長さが B より大きい場合は、まずハッシュ関数 H を使用してそれに作用し、次に H によって出力された L 長の文字列を HMAC で実際に使用されるキーとして使用します。一般に、推奨される最小キー K の長さは L バイトです。

      SHA-1 と組み合わせた HMAC コードは次のように実装されます。

       SecretKeySpec secret = new SecretKeySpec(key.getBytes(), type);//key为开发者自己设定的密钥字符串
       Mac mac = Mac.getInstance("HmacSHA1");//SHA-1的HMAC
       mac.init(secret);
       byte[] digest = mac.doFinal(stringToEncrypt.getBytes());//加密返回值为byte[]数组

対称暗号化

       対称暗号アルゴリズムは、以前に適用され、比較的成熟した技術であり、データ送信者が平文(元データ)と暗号鍵を特殊な暗号アルゴリズムで複雑に処理し、暗号化された暗号文を送信します。外。受信者が暗号文を受け取った後、元のテキストを解釈したい場合は、暗号化されたキーと同じアルゴリズムの逆アルゴリズムを使用して暗号文を復号し、読み取り可能な平文に復元する必要があります。対称暗号化アルゴリズムでは、1 つのキーのみが使用され、送信者と受信者の両方がこのキーを使用してデータの暗号化と復号化を行います。そのため、復号化側は事前に暗号化キーを知っている必要があります。対称暗号アルゴリズムの特徴は、アルゴリズムがオープンであり、計算量が少ないことである。欠点は、トランザクションの両当事者が同じキーを使用するため、セキュリティが保証できないことです。

  • 特徴:

    1. キーは小さく (通常は 256 ビット未満)、キーが大きいほど暗号化は強力になりますが、暗号化と復号化は遅くなります。
    2. 利点: オープンなアルゴリズム、少ない計算量、速い暗号化速度、高い暗号化効率、大量のデータの暗号化に適しています
    3. 短所: キーの配布と管理、セキュリティの低さ
    4. 4つのアルゴリズムDES、3DES、AES、PBE
  • アルゴリズム:

    1. DES: DES アルゴリズムは、平文を N 個のグループに分割し、各グループを暗号化して独自の暗号文を形成し、最後にすべてのグループの暗号文を結合して最終的な暗号文を形成するブロック暗号化メカニズムです。64 ビットの平文入力ブロックを 64 ビットの暗号文出力ブロックに変更する場合、使用するキーも 64 ビットになります。

    • 導入:

      DES アルゴリズムは次のように機能します。  

      モードが暗号化の場合、キーを使用してデータ データを暗号化し、DES の出力結果としてパスワード形式のデータ (64 ビット) を生成します。モードが復号の場合、キーを使用してパスワード内のデータ データを復号します。形式を作成し、それをデータに復元します。 の平文 (64 ビット) は DES の出力です。

             通信ネットワークの両端で、両者は一貫したキーに同意し、そのキーを使用して通信元の DES でコア データを暗号化し、それを次の形式で通信ネットワークの端に送信します。公衆通信網(電話網など)でパスワードを入力し、データが到着すると、暗号化されたデータが同じKeyで復号され、平文のコアデータが再生されます。このようにして、公衆通信ネットワーク内で送信されるコア データ (PIN、MAC など) のセキュリティと信頼性が保証されます。

    • サポートされているモード: ECB、CBC、CFB、OFB

    • 長所と短所:

      (1) DES アルゴリズムの暗号化および復号化速度は比較的速く、キーは比較的短く、暗号化効率は高いですが、通信の双方がキーの秘密を保持する必要があり、DES キーは暗号化する必要があります。安全のため頻繁に交換してください。

      (2) 鍵の生成は簡単だが、安全性は鍵に依存しており、鍵の機密性は高くなければならないため、一度限りの暗号化を実現するのは難しい

    • アプリケーション: DES アルゴリズムは、POS、ATM、磁気カードおよびスマート カード (IC カード)、ガソリン スタンド、高速道路料金所などの分野で広く使用されており、クレジット カード所有者の暗号化された送信などの主要データの機密性を実現します。 PIN、IC カードと POS 間の双方向認証、金融取引データ パケットの MAC 検証などはすべて DES アルゴリズムを使用します。

    • アルゴリズムの実装: Android SDK は DES インターフェイスを提供し、実装を直接呼び出すことができます。DES アルゴリズムには、Key、Data、および Mode の 3 つのエントリ パラメータがあります。このうち、Key は合計 8 バイト 64 ビットで、DES アルゴリズムの作業キーです。Data も 8 バイト 64 ビットで、暗号化または復号化されるデータです。Mode は DES の作業モードです。暗号化または復号化の 2 つのタイプがあります。

        加密:
        DESKeySpec dks = new DESKeySpec(key);//创建DESKeySpec对象,其中key为64位的密钥  
        		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");//DES密钥工厂实例	
        		SecretKey securekey = keyFactory.generateSecret(dks);
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");//密钥容器的实例。传入的参数依次为加密算法,加密模式,填充模式(可选NOPadding,PKCS5Padding,PKCS7Padding)
        cipher.init(Cipher.ENCRYPT_MODE, securekey);//初始化密钥容器。加密时第一个参数必须是Cipher.ENCRYPT_MODE
        byte[] encryptResult=cipher.doFinal(stringToEncrypt.getBytes());
      
        解密:
        DESKeySpec dks = new DESKeySpec(key);//key必须与加密时保持一致  
        		SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
        		SecretKey securekey = keyFactory.generateSecret(dks);
        Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");//传入的参数必须与加密时保持一致
        cipher.init(Cipher.DECRYPT_MODE, securekey);//解密时第一个参数必须是Cipher.DECRYPT_MODE
        byte[] decryptResult=cipher.doFinal(encryptResult.getBytes());

    2. 3DES: 3DES アルゴリズムは DES に基づいて開発されています。高度なセキュリティ要件がある一部のシナリオでは、DES の 64 ビット キー セキュリティでは要件を満たすことができないため、データを暗号化するために「単純な暴力」方式 (三重データ暗号化) が採用され、クラッキングの可能性が大幅に低くなります。3DES の鍵の長さは 168 ビットです。3DES の使用方法は、キーの長さが異なることを除いて DES と非常に似ているため、ここでは紹介しません。興味のある読者は、対応するインターフェイスを使用してみてください。

    3.AES

    • はじめに:新世代のデータ暗号化標準として、AES 暗号化アルゴリズムは、強力なセキュリティ、高性能、高効率、使いやすさ、柔軟性という利点を組み合わせています。AES は、128、192、256 ビットの 3 つのキー長で設計されています。これは、現在利用可能な最も安全な暗号化アルゴリズムです。

    • サポートモード: CFB/OFB/ECB/CBC

    • 長所と短所: AES は他の対称暗号化アルゴリズムよりもあらゆる面で優れており、短所は対称暗号化の制限のみです。

    • アプリケーション: AES は広く使用されており、対称暗号化で使用されるアルゴリズムは DES が主流であり、徐々に DES に置き換わる傾向にあります。

    • コード:

       加密:
        SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();//获得密钥实例
        cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//密钥容器的实例。传入的参数依次为加密算法,加密模式,填充模式(可选NOPadding,PKCS5Padding,PKCS7Padding)
        cipher.init(Cipher.ENCRYPT_MODE, secretKey);//使用加密模式初始化 密钥容器
        byte[] encryptResult = cipher.doFinal(stringToEncrypt.getBytes());
      
        解密:
        SecretKey secretKey = KeyGenerator.getInstance("AES").generateKey();//密钥必须与加密时保持一致
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//传入的参数必须与加密时保持一致
       			cipher.init(Cipher.DECRYPT_MODE, secretKey);//解密时必须是Cipher.DECRYPT_MODE
        byte[] decryptResult=cipher.doFinal(encryptResult.getBytes());

    4. PBE: PBE アルゴリズムは多くのシナリオで使用されるわけではないため、その使用と実装にこだわる必要はありませんが、学習し、参照して「ソルト」を追加して破壊する価値のある暗号化のアイデアを提供します。

    • 「ソルトの追加」の導入:前に述べたように、対称暗号化の主要なセキュリティ上の欠陥は、暗号化と復号化に同じキーが使用されることです。このキーの不変性は、キーの安全な送信と保管に大きな問題を引き起こしています。では、この問題を解決する方法はあるのでしょうか? これを行う 1 つの方法は、キーに「ソルト」を適用することです。ここでの「ソルト」には、乱数、ユーザー ID、位置地理情報などが考えられます。「ソルト」の最も重要な機能は、鍵を妨害することで、ハッカーが実際の鍵を特定することを不可能にすることです。通信当事者が「ソルト」の形式に同意し、それを公開しない限り、暗号化のセキュリティは維持されます。保証されます。PBE に塩を加えるという方法を通して、「塩」を加えるという考え方を理解します。

      PBE 暗号化では、まずキーの概念がパスワードに置き換えられます。暗号化する場合、PBE はパスワードを使用して直接暗号化するのではなく、アルゴリズムで KDF 関数を使用して、「ソルト」を通じてパスワードをスクランブルして準キーを生成し、ハッシュ関数を使用して複数回反復して、最終キー。キーが生成された後、PBE は対称暗号化アルゴリズムを使用してデータを暗号化します。

      具体的な実装は次のようになります。

    1. メッセージ転送の 2 つの当事者がパスワードに同意します。ここで、当事者 A がパスワードを構築します。 2. 当事者 A がパスワードを構築した後、それを当事者 B に通知します。 3. パスワード コンストラクタ (当事者 A) がソルトを構築します。このメッセージの送信に使用されます。実際、両当事者は、ハードディスク番号、今日の日付などのデータに同意することができます。両当事者が同意する限り、データを計算するためにセキュリティ アルゴリズムを記述する必要はありません。 4. 当事者 A は、パスワードとソルトを使用してデータを暗号化します 5. 当事者 A は、ソルトと暗号化されたデータをメッセージ受信者 (当事者 B) に送信します 6. 当事者 B は、受信したパスワードとソルトを使用してデータを復号します (合意されたデータである場合もあります)
     
      我们可以看到,对密钥加“盐”实际上是一种混淆扰乱的手段。但我们还可以从PBE的加盐思想中抽取出一种更简单的理解,“盐”就是密钥的一部分,只不过这一部分密钥是通信双方在通信之前就协商好的不被外界所知道的,通信过程中,双方只需传输另一部分非盐密钥即可,即使非盐密钥被截获,黑客也无法拿到整个密钥破解密文。

非対称暗号化

        非対称暗号化アルゴリズムでは、暗号化と復号化に公開キーと秘密キーという 2 つのキーが必要です。公開キーと秘密キーはペアである必要があることに注意してください。データの暗号化に公開キーが使用される場合は、復号化は対応する秘密キーを使用した場合のみ可能であり、その逆も同様です。非対称暗号アルゴリズムの登場により、たった 1 つの鍵で暗号化と復号を解決できるため、この鍵が紛失したり公開されたりすると、暗号化されたデータは簡単に攻撃されてしまいます。同時に、非対称暗号アルゴリズムが登場したからこそ、その後のデジタル署名やデジタル証明書などが誕生しました。

  • 特徴:アルゴリズムの強度が複雑で、安全性はアルゴリズムと鍵に依存しますが、アルゴリズムが複雑なため、暗号化および復号の速度は対称暗号および復号ほど速くありません。

  • 用途: 非対称暗号化には、暗号化と復号化、およびデジタル署名の検証という 2 つの主な用途があります。

    公開鍵暗号化、秘密鍵復号化、秘密鍵署名、公開鍵検証

    主にデジタル署名について話します。

    デジタル署名は公開鍵アルゴリズムを使用して実装されます。デジタル署名は一般的なデータ暗号化アルゴリズムとは異なり、その実装プロセスは使用される鍵とも異なります。デジタル署名は送信者のキー ペアを使用し、送信者は独自の秘密キーを使用して暗号化し、受信者は送信者の公開キーを使用して復号化します。デジタル署名は、ネットワーク上の誰かがメッセージを見たかどうかに関係なく、メッセージが実際にユーザーによって送信されたことを検証するために使用されます。データの暗号化には受信者のキー ペアが使用され、送信者は受信者の公開キーを使用して暗号化され、受信者は独自の秘密キーを使用して復号化されます。暗号化は多対 1 の関係です。受信者の公開キーを知っている人は誰でも、暗号化された情報を受信者に送信できますが、受信者の秘密キーを持っている人だけがメッセージを復号化できます。通常、ユーザーは 2 つのキー ペアを持っており、1 つはデジタル署名の暗号化と復号化に使用され、もう 1 つは秘密キーの暗号化と復号化に使用されます。

  • アルゴリズム:

    1. RSA: RSA はエンタープライズレベルのアプリケーション標準であり、多くのサードパーティ暗号化ソフトウェアは RSA 2048 ビット暗号化を使用しています。

    • 利点:簡単なパスワード割り当て、高いセキュリティ

    • 欠点:

      1. 速度が遅く、最速の RSA は DES に比べて数倍遅く、RSA の速度は同じセキュリティ レベルに対応する対称暗号化アルゴリズムに比べて約 1000 倍遅い

      2. 一般的に、少量のデータ暗号化にのみ使用されます。

      3. 鍵の生成は非常に面倒であり、素数生成技術の限界があるため、ワンタイムパッドの実現は困難である。

      実際、これらの欠点は非対称暗号化自体の制限です。

    • アルゴリズムの実装:

        KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");//产生RSA密钥对产生器
        kpg.initialize(2048);//密钥对产生器初始化,参数为密钥长度,可选长度 512 1024 2048
        KeyPair kp = kpg.genKeyPair();//得到密钥对
        PublicKey publicKey = kp.getPublic();//公钥
        PrivateKey privateKey = kp.getPrivate();//私钥
      		
        加密:
        BigInteger e = publicKey.getPublicExponent();//获取参数
        	BigInteger n = publicKey.getModulus();//获取参数
        BigInteger m = new BigInteger(stringToEncrypt.getBytes());
        BigInteger c = m.modPow(e, n);//计算密文C
      
        解密:
        BigInteger c = new BigInteger(stringToDecrypt);
        BigInteger d = privateKey.getPrivateExponent();//获取参数
        BigInteger n = privateKey.getModulus();//获取参数
        BigInteger m = c.modPow(d, n);//计算解密结果m

    2. DSA:一般にデジタル署名と認証に使用されます。DSA デジタル署名と認証では、送信者は自分の秘密鍵を使用してファイルまたはメッセージに署名し、受信者は送信者の公開鍵を使用して、ファイルまたはメッセージを受信した後に署名を検証します。メッセージの真正性を保証します。DSA は単なるアルゴリズムです。RSA との違いは、暗号化や復号化、鍵交換には使用できず、署名のみに使用されることです。RSA よりもはるかに高速です。

    • 利点:セキュリティは RSA と同様であり、鍵の生成速度は RSA よりもはるかに高速です。

    • 欠点: DSA がデジタル署名の暗号化アルゴリズムとして使用される場合、メッセージ ハッシュ (つまり、メッセージ ダイジェスト) アルゴリズムとして使用できるのは SHA1 のみです。RSA がデジタル署名暗号化アルゴリズムとして使用される場合、メッセージ ダイジェスト アルゴリズムには多くの選択肢があります。

    • アルゴリズムの実装: DSA は主にデジタル署名認証に使用され、暗号化および復号化の作業には使用されないため、暗号化および復号化コードの具体的な実装についてはここでは記述しません。

    3. ECC: ECC は、モバイル デバイスでよく使用される効率的な非対称暗号化アルゴリズムです。

    • 利点: RSA と比較して、ECC には次の利点があります。

      (1) 同じ鍵長であればセキュリティ性能が高く、例えば 160 ビット ECC は 1024 ビット RSA や DSA と同等のセキュリティ強度を持ちます。

      (2) 計算量が少なく処理速度が速い 秘密鍵の処理速度(復号と署名)に関しては、ECC は RSA や DSA に比べてはるかに高速です。

      (3) 小さい記憶スペース ECC のキー サイズとシステム パラメータは RSA や DSA よりもはるかに小さいため、占有される記憶スペースははるかに小さくなります。

      (4) 帯域幅要件が低いため、ECC には幅広い用途が期待できます。

    • アルゴリズムの実装: ECC と RSA は類似した特性を持ち、コード実装も非常に似ていますが、キー ペア ジェネレーターの生成時に違いがあり、その他の部分には違いがないため、ここではコード実装は記述しません。必要な読者は、上記の RSA の実装を参照してください。

まとめ

       この時点で、3 種類のアルゴリズムの紹介は終わりです。アルゴリズムが異なれば特性も異なることがわかり、開発者はアルゴリズムの使用を選択する際に、使用シナリオ、要件、コストなどのさまざまな要素を考慮する必要があります。一方向暗号化と可逆暗号化の場合、開発者は区別して選択するのが簡単ですが、対称暗号化と非対称暗号化の場合、選択を決定するのはそれほど簡単ではない可能性があります。使用 - 対称暗号化は高速ですがセキュリティが比較的低く、非​​対称暗号化はセキュリティは高いですが速度が比較的遅いためです。対称暗号化を使用して大量の平文データを暗号化し、次に非対称暗号化を使用して対称暗号化キーを暗号化します。 、そのため、速度とセキュリティの両方の問題が発生します。


読んでいただきありがとうございます。不備な点がございましたら、アドバイスし、学び、一緒に進歩してください。気に入った場合は、それを推奨してください。新しいアイデアがある場合は、提案してください。

最後に書きます

この投稿はこれで終わりますが、最後に、この投稿を読んだ友人が何かを得ることができれば幸いです。

すべてはここにあります。Sanlian をサポートすることを忘れないでください。


 ドキュメントの完全版をダウンロードする方法:

これらの資料は、[ソフトウェア テスト] に携わる友人にとって、最も包括的かつ完全な準備倉庫となるはずです。この倉庫は、私が最も困難な旅を乗り越えるのにも同行してくれました。そして、あなたにも役立つことを願っています。上記はすべて共有できます。

それを入手するには、コメント欄または個人的に❤私[ソフトウェアのテストと学習]で私と対話してください。取り上げてくれてありがとう。

おすすめ

転載: blog.csdn.net/weixin_67553250/article/details/131088568