C# | ホスト コンピューター開発の初心者向けガイド (8) 暗号化アルゴリズム - AES
記事ディレクトリ
序文
AES - これは暗号化アルゴリズムにおいて非常に重要な暗号化方式です!
非対称暗号化アルゴリズム (RSA、ECC など) は既にこの世界に存在しますが、AES は依然として対称暗号化アルゴリズムで重要な役割を果たしています。非対称暗号化アルゴリズムとは異なり、対称暗号化アルゴリズムはデータの暗号化と復号化に同じキーを使用するため、暗号化と復号化がより高速で効率的になります。対称暗号化アルゴリズムの中で、AES は現在最も安全で信頼性の高い暗号化アルゴリズムの 1 つであり、その暗号化強度と操作効率は非常に高いものです。そのため、パーソナル コンピューター、モバイル デバイス、またはサーバーやクラウド コンピューティングの分野で、AES はデータの暗号化と復号化のプロセスで広く使用されています。
AESの特徴
ブロック暗号化
AES は、平文をそれぞれ 128 ビット長の固定長データ ブロックに分割するブロック暗号化アルゴリズムです。データの各ブロックは個別に暗号化されるため、より安全です。ブロック暗号化アルゴリズムの利点は、データ暗号化の結果がより安定して安全であり、平文のわずかな変更によって暗号化結果が完全に変更されることがないため、データの整合性がより適切に保護されることです。
ブロック暗号
AES は、データの暗号化と復号化に同じキーを使用するブロック暗号です。暗号化と復号化のプロセスは固定長のデータ ブロックで完了するため、暗号化と復号化の速度はより高速で効率的です。ブロック暗号の利点は、暗号化と復号化の速度が非常に速く、使用する鍵の長さが短く、より便利に使用できることです。
対称暗号化
AES は対称暗号化アルゴリズムです。つまり、送信者と受信者の両方が同じキーを使用してデータの暗号化と復号化を行います。これにより、送信過程で鍵が盗聴されることを防止でき、データのセキュリティを確保することができる。対称暗号化の利点は、暗号化速度が速いことと、暗号化されたデータが暗号化された後は、鍵を知らなければ誰も復号化できないことです。
高強度
AES で使用される鍵の長さは 128 ビット、192 ビット、または 256 ビットで、鍵が長いほど暗号化の強度が高くなります。その結果、AES は現在利用可能な最も安全で信頼性の高い暗号化アルゴリズムの 1 つとして広く認識されています。AES で使用されるキーの長さが長いほど、解読が難しくなり、データのセキュリティが確保されます。
効率
AES 暗号化および復号化プロセスの効率は非常に高く、これはブロック暗号とそれが使用するブロック暗号化アルゴリズムの特性によるものです。そのため、AES はパーソナル コンピューター、モバイル デバイス、サーバー、およびクラウド コンピューティングで広く使用されています。AES の暗号化と復号化の速度は速く、大量のデータを高速に暗号化および復号化できるため、データの暗号化の効率が向上します。
AES アルゴリズムのパラメーター
AES 暗号化で設定できるパラメータには、次のものがあります。
キーの長さ
AES アルゴリズムは、128 ビット、192 ビット、および256 ビットの3 つの異なるキー長をサポートしています。鍵の長さを選択するときは、暗号化の安全性とパフォーマンスを考慮する必要があります. 一般に、鍵の長さが長いほど暗号化の安全性は高くなりますが、パフォーマンスも影響を受けます.
暗号化モード
AES アルゴリズムは、ECB、CBC、CFB、OFB、および CTR を含む複数の暗号化モードをサポートしています。暗号化モードが異なれば、特性とセキュリティも異なります。適切な暗号化モードを選択すると、暗号化の強度とセキュリティが向上します。
ECB モード
ECB モードは最も単純な暗号化モードで、平文を複数のブロックに分割し、各ブロックを個別に暗号化します。このモードの利点は、暗号化と復号化の速度が速いことですが、欠点は、同じ平文ブロックに対して、暗号化された暗号文ブロックも同じであり、攻撃に対して脆弱であることです。
CBC モード
CBC モードは一般的に使用される暗号化モードで、平文をいくつかのブロックに分割し、各ブロックを前のブロックの暗号文と XOR してから暗号化します。このように、同じ平文ブロックを暗号化した後に得られる暗号文ブロックは異なるため、セキュリティが向上します。ただし、CBC モードの暗号化と復号化は低速であり、並列暗号化はサポートされていません。
CFBモード
CFB モードは、より柔軟な暗号化モードで、平文をいくつかのブロックに分割し、各ブロックが暗号化装置を介して暗号文ブロックを取得し、暗号文ブロックの一部と平文ブロックを XOR して暗号文を取得します。このモードの利点は、任意の長さのデータ ストリーム暗号化をサポートすることですが、欠点は、暗号化と復号化の速度が遅いことです。
OFBモード
OFB モードは、CFB モードと同様の暗号化モードで、平文をいくつかのブロックに分割し、各ブロックが暗号化器を介して暗号文ブロックを取得し、暗号文ブロックを暗号化器の入力として使用して、次の暗号文ブロックを取得します。 . このモードの利点は、任意の長さのデータ ストリーム暗号化をサポートし、暗号化および復号化の速度が速いことです. 欠点は、暗号化および復号化プロセス中にエラーの伝播をサポートしないことです.
クリック率モード
CTR モードは比較的新しい暗号化モードで、平文をいくつかのブロックに分割し、各ブロックを暗号化器に通して暗号文ブロックを取得し、暗号文ブロックと平文ブロックを XOR して暗号文を取得します。CTR モードの利点は、並列暗号化をサポートし、暗号化と復号化の速度が速いことですが、欠点は、キーを 1 回しか使用できないことです。
Fillingモード(パディングモード)
暗号化アルゴリズムでは、パディングはデータを固定長ブロックに詰め込む方法です。AES アルゴリズムは、PKCS#5、PKCS#7、ISO/IEC 7816-4、ANSI X.923 など、複数のパディング方法をサポートしています。パディング方法が異なれば、特性とセキュリティも異なります。適切なパディング方法を選択すると、暗号化のセキュリティと効率が向上します。
PKCS#5 と PKCS#7
どちらの塗りつぶしも往数据末尾补0
true です。PKCS#5 は一般的にブロック長 8 バイトの暗号化に使用されますが、PKCS#7 はブロック長 1 ~ 255 バイトの暗号化をサポートできます。
これら 2 つの充填方法は単純で使いやすい反面、充填方法が固定されており、ランダム性がないため、攻撃者に攻撃されやすく、セキュリティはあまり高くありません。また、データが 0 で終わる場合、パディング後の元のデータと混同される可能性があり、復号化時に問題が発生します。
ISO/IEC 7816-4
この種類の充填は、より一般的に使用される充填方法であり、基于ASN.1编码
最良の充填方法です。この充填方法はより柔軟で、充填されたデータの長さも可変であり、必要に応じて充填することができ、充填されたデータと元のデータを区別することができ、復号化時に問題はありません.
ただし、ASN.1 エンコーディングに基づいて入力されるため、実装がより複雑になる場合があります。
ANSI X.923
ただし、この埋め方もデータの最後に0を追加する方法です只在最后一个块里添加填充数据
。この充填方法はシンプルで使いやすく、データの混乱の問題を回避できますが、充填データは最後のブロックにのみ追加されるため、セキュリティが少し問題になる場合があります。
初期化ベクトル
IV と略され、初期ベクトルのビット数は、使用される暗号化アルゴリズムと暗号化モードによって異なります。
ECBモードは初期ベクトルを使用する必要はありません; CBCモードとCFBモードの初期ベクトルは通常 128 ビットです; OFBモードとCTRモードの初期ベクトルは通常 64 ビットまたは 128 ビットです。
ラウンド数
AES アルゴリズムは、ラウンド関数を使用してデータを暗号化および復号化します。ラウンド数とは、ラウンド関数を実行する必要がある回数を指し、キーの長さと暗号化モードに関連しています。
一般に、ラウンド数が多いほど暗号化の安全性は高くなりますが、パフォーマンスも低下します。
キー(鍵)
AES アルゴリズムは、データの暗号化と復号化に同じキーを使用します。キーは、選択したキーの長さと同じ長さのランダムに生成された文字列です。暗号化を安全に保つには、十分な強度のキーを選択することが重要です。
対称暗号化アプリケーション シナリオの例
以下は、対称暗号化を使用してメッセージが配信されるシナリオの例です。
- User1 はプレーンテキストとキーを入力し、ProgramA に送信します。
- ProgramA はキーを使用して平文を暗号化し、暗号化された暗号文を ProgramB に送信します。
- ProgramB は、User2 に新しいメッセージ プロンプトを送信し、新しい暗号化されたメッセージを持つように促します。
- User2 は、対応する鍵を入力して暗号文を復号化します。
- ProgramB はキーを使用して暗号文を復号化し、平文を User2 に送信し、User2 は平文を取得します。
AES 暗号化と復号化の例
この記事を参照してください: https://blog.csdn.net/lgj123xj/article/details/126300322