AESアルゴリズム AES (Advanced Encryption Standard) は、2001 年に米国でリリースされたブロック暗号化アルゴリズムです。AES はブロック暗号化アルゴリズム フレームワークのコンポーネントであるため、AES を理解する鍵はブロック暗号化アルゴリズムを理解することです。 (ブロック暗号は「箱」であり、AES はその「箱」の中にあるものの 1 つにすぎません) ブロック暗号化の仕組み ブロック暗号化アルゴリズムは、ブロック モード操作とも呼ばれます。プレーンテキストを同じ長さのブロックにグループ化し、特定の暗号化アルゴリズムを使用して暗号化します。AES は「特定の暗号化アルゴリズム」の 1 つです。 2 つの関係を示すために図を使用します。 ブロック暗号には3つの重要な部分がある
ブロック暗号の5つの仕組み ブロック暗号化アルゴリズムには、5 つの一般的な動作モードがあります (問題を簡略化するために、暗号化プロセスのみを掲載します)。
Key は鍵、Plaintext は平文、中間の Block Cipher Encryption は暗号化アルゴリズム (AES など) です。キーとプレーン テキストが入力として使用され、暗号化されて暗号文 (Ciphertext) が取得されます。 ECB の動作モードは非常にシンプルで、並列処理が可能です。1 つのスレッドがデータを N 個のブロックに分割し、N 個のスレッドが同時にそれらを暗号化します。欠点は、同じキーが使用されるたびに暗号化されたデータが同じになることです。私のような普通の人にとっては、これはごく普通のことですが、「暗号の専門家」は、これは弱すぎると考えています(囧)。そこで彼らは、「初期化ベクトル (IV)」と呼ばれる変数を使用して、暗号化されるたびに暗号文が異なるようにする特別なアルゴリズムを設計しました (キーが同じであっても)。残りの 4 つのブロック動作モードはすべて、この素晴らしいタイプに属します。
ここでの入力には、初期化ベクトル (IV) と呼ばれる追加の変数があります。プレーンテキストと IV は XOR 演算され、暗号化アルゴリズムの 1 つの変数として入力され、キーは別の変数として入力されます。 CBC 暗号化アルゴリズムはシリアル アルゴリズムであり、2 番目のブロックの暗号化は IV として暗号文の最初のブロックに依存します。したがって、計算するときは、段階的にしか計算できません。
以前のブロック暗号化ではフォールト トレランスの問題が解決されませんでした。データ ブロックの 1 つが破損した場合、残りのデータ ブロックを復号化できますか?これが CFB の動作モードです。上の図に注目してください。復号化中に最初の暗号文ブロックが破損している場合、このコンテンツは無視され、2 番目の暗号文が 3 番目の暗号文ブロックを復号化するための入力として使用されます。
CBC は非常に強力ですが (毎回異なる暗号文を計算できます)、並列実行はできないため、「時は金なり」のコンピューターには耐えられません。そこで最初の改良点である OFB が登場しました。 IV とキーが暗号化された後、それらを並列処理することができ、1 つのスレッドがプレーンテキストとの XOR に使用され、1 つのスレッドが「次の」暗号化をすぐに計算できることに注意してください。
OFB アルゴリズムの並列性は低すぎるため、部分的な並列性しか実現できません。そのため、並列性と暗号文の可変性の両方を保証する 2 番目の改良点である CTR アルゴリズムがあります。 CTR アルゴリズムの IV は 2 つの部分になります。最初の部分はランダムなシーケンスになる Nonce で、2 番目の部分は増加する数値であるカウンターです。そのため、暗号化する際に、Nonce と計算機を組み合わせることで、規則的だが異なる (暗号文ごとに鍵となるのは IV が可変であることです)「IV」を取得できます。 要約する 暗号文が固定されているかどうか、並列化できるかどうか、フォールトトレランスがあるかどうかという3つの側面から5つの動作モードを理解する
データ量が非常に大きくない限り、並列処理を気にする必要はないことに注意してください。データ量が少ない場合はフォールト トレランスは効果がなく、通常は CBC が最適な選択肢となります。 言語を越える方法 ある言語で書かれた AES 暗号化を別の言語で解読できないという問題に遭遇した友人はたくさんいます。その理由は、彼らが AES の動作モードをまったく理解していないからです (おそらく、彼らは AES 暗号化を Google で検索し、コードを貼り付けてそれで終わりにしたのでしょう)。したがって、言語間の最初のステップは、すべての言語で使用できる作業モードを見つけることではなく (ほぼすべての言語がすべての動作モードをサポートしています)、暗号化されたデータがどの作業モードであるか、IV が使用されているかどうか、IV が相手にどのように渡されるかを把握することだと思います。 たとえば、次の Java コード: 私は CBC 暗号化モードを使用しました。このモードには IV が含まれます。固定 IV を使用できます (たとえば、キーを IV として使用)。ただし、これは CBC の利点がなく、暗号文が可変であることを意味します。そこで、ランダムな 16 バイトを IV として使用し、それを最初のデータ ブロックとして返します。復号化するときは、最初のデータ ブロックを IV として取り出し、残りのデータを復号化します。 IV パラメータ (init 関数の 3 番目のパラメータ) を指定しない場合、iv は乱数になります。 Java は暗号文に IV を積極的に追加しないため、誰も暗号化されたデータを復号化することはできません。 [この記事は51CTOコラムニスト「Xing Sen」によるオリジナル記事です。転載をご希望の場合は著者にご連絡の上、許可を得てください。] この著者の他の記事を読むにはここをクリックしてください |
<<: なぜディープラーニングには局所最小値がないのでしょうか?
>>: SAIC Maxus、クローズドループエコシステム構築に向けた「RVスマートモビリティビジョン」を発表
[[230225]]本レポートでは、無人配送業界の変化、その台頭理由、中国と米国の違いについて詳細に...
11月7日、北米の人工知能企業OpenAIの開発者会議が世界のテクノロジーコミュニティの注目を集め...
ハリウッドのSF大作では、人工知能は常に、将来の人類の生存を脅かす自己認識機械として定義されています...
大規模モデルの事前トレーニングには膨大な量のコンピューティング リソースとデータが必要となるため、事...
インテリジェントな顧客サービスの分野は、2018 年に急速な発展を遂げました。企業の人件費を抑制する...
今日、人工知能技術の急速な発展は、さまざまな分野に前例のない変化と進歩をもたらしています。その中には...
Data & Society の新しいレポートでは、機械学習を使用して改変されるディープフェ...
真に AI を活用したサービスを構築するのは簡単ではありません。そこで、一部のスタートアップ企業は、...
[[317656]]機械学習は業界にとって革新的で重要な分野です。機械学習プログラムに選択するアルゴ...
昨年、DALL-E 2、Stable Diffusion、Midjourneyなどの高品質なAIペイ...
モノのインターネットの世界は手の届くところにありますが、それには良い面と悪い面の両方が伴います。機械...