3DESは、元のData Encryption Standard(DES)から派生した暗号化暗号です。 90年代後半に顕著になりましたが、その後、より安全なアルゴリズムの登場により好意的に落ちました。.
2023年に廃止されますが、一部の状況ではまだ実装されています。最初に広く公開され、研究されているアルゴリズムの1つであるDESに基づいているため、3DESの概要とその仕組みについて学ぶことは依然として重要です。.
このガイドでは、DESプロセスの各手順を詳しく説明し、3DESでDESを変更して安全性を高める方法を説明します。また、さまざまなセキュリティ問題と、アルゴリズムを使用する必要があるかどうかについても触れます。.
3DESとは?
正式にはトリプルデータ暗号化アルゴリズム(3DEA)として知られていますが、最も一般的には3DESと呼ばれています。これは、3DESアルゴリズムがデータ暗号化標準(DES)暗号を3回使用してデータを暗号化するためです。.
DESは、Feistelネットワークに基づく対称キーアルゴリズムです。対称キー暗号として、暗号化プロセスと復号化プロセスの両方に同じキーを使用します。 Feistelネットワークは、これらのプロセスの両方をほぼ完全に同じにし、その結果、実装がより効率的なアルゴリズムになります.
DESには64ビットブロックとキーサイズの両方がありますが、実際には、キーは56ビットのセキュリティのみを許可します。 3DESは、DESのキー長が短いため、より安全な代替手段として開発されました。 3DESでは、DESアルゴリズムは3つのキーを使用して3回実行されますが、3つの個別のキーが使用されている場合にのみ安全と見なされます.
3DESの使用
通常のDESの弱点が明らかになると、3DESは幅広いアプリケーションで採用されました。これは、AESが登場する前に一般的に使用されていた暗号化スキームの1つでした.
その実装の例には、Microsoft Office、Firefox、EMV決済システムが含まれます。これらのプラットフォームの多くは、より良い代替手段があるため、3DESを使用しなくなりました。.
米国国立標準技術研究所(NIST)は、すべての形式の3DESが2023年まで廃止され、2024年以降は禁止されるという提案案を発表しました。これは単なるドラフトではありますが、この提案は時代の終わりを意味し、他のより安全なアルゴリズムに移行する時期を過ぎています.
3DES暗号化の歴史
3DESはDESから派生しているため、最初に以前の標準を導入することをお勧めします。 70年代、National Bureau of Standards(NBS-NISTに改名されました)は、機密であるが未分類の政府情報を暗号化するための標準として使用できるアルゴリズムを探していました.
NBSは、要件に適合する標準の提案を受け入れましたが、元のラウンドの候補者はどれも適切ではありませんでした。さらに多くの提案を募集し、今回はIBMがチームが開発したアルゴリズムを使用して送信しました。提出物は、ホルストファイステルが設計したルシファー暗号から派生したものです。.
1975年、IBMアルゴリズムは、提案されたデータ暗号化標準としてNBSによって公開されました。設計についてコメントするように一般の人々が招待され、批判を集めました.
Diffie-Hellman鍵交換の設計者であるWhitfield DiffieやMartin Hellmanなどの著名な暗号作成者は、鍵の長さが短すぎるとSボックスが初期設計から変更されたと主張しました.
当時、暗号化コミュニティの多くは、NSAがプロジェクトを妨害し、アルゴリズムを弱体化させたため、DESを破ることができる唯一の機関になると考えていました。.
これが情報に関する米国上院選考委員会によって調査されたとき、「NSAはIBMにキーサイズを小さくするだけで十分であると納得させました。 Sボックス構造の開発を間接的に支援しました。そして、最終的なDESアルゴリズムは、彼らの知る限り、統計的または数学的な弱点がないことを証明しました。」
同じレポートは、「NSAは設計を一切変更しなかった」と述べています。これは、DESアルゴリズムが完全にIBMチームによって設計されたと主張した元IBMスタッフによってバックアップされました。.
NSA自身の機密解除文書は、政府機関が「ブルートフォース攻撃以外のすべてに対してアルゴリズムを強化し、置換テーブルを強化するためにIBMと密接に協力した」と主張しています。
NSAの改ざんの疑いは、差分暗号解析が公に発見された90年代に緩和されました。悪意のあるSボックスが新しい手法でテストされたとき、ランダムに選択された場合よりも攻撃に対する耐性が高いことがわかりました。.
これは、IBMチームが70年代に差分暗号解読について既に知っていたことを示しています。スティーブンレヴィは、NSAが国家安全保障を保護するために技術を秘密にしておくよう要求したと主張しています。.
有名な暗号学者ブルース・シュナイアーはかつて、「NSAの「微調整」が実際にDESのセキュリティを改善したことを理解するのに20年かかりました」
アルゴリズムのセキュリティとNSAの関与に関する最初の疑問にもかかわらず、IBMアルゴリズムは1976年にデータ暗号化標準として承認されました。1977年に公開され、1983年、1988年、1993年に標準として再確認されました。.
線形暗号解読が1994年に初めて公開されたとき、アルゴリズムのセキュリティに関する疑問が提起され始めました。 1997年、NISTはDESに代わるアルゴリズムを探していると発表しました。テクノロジーがさらに発展し、潜在的な攻撃が強化されるにつれて、新しいアルゴリズムの必要性が高まった.
さまざまなクラッキングの試みにより、以前考えられていたよりもアルゴリズムを破るのが難しくないことが示されました。 1998年、distributed.netは39日間でDESをクラックできました。.
1999年の開始までに、Electronic Frontier FoundationのDeep Crackは22時間強にまで短縮されました。この性質の攻撃は現在、十分なリソースを備えた敵の手の届く範囲にあるため、これはDESの終わりを示しています。.
主な問題は小さなキースペースであり、新しいアルゴリズムが切望されていました。これは問題でした。なぜなら、NISTが交換標準であるAdvanced Encryption Standard(AES)になったアルゴリズムに落ち着くまでにさらに数年かかるからです。.
AESの暗号が決定されている間に、3DESが暫定措置として提案されました。 DESアルゴリズムを3回実行し、3つの個別のキーを使用します。 1999年に、DESが再確認されましたが、3DESが理想的なアルゴリズムです。通常のDESはレガシーアプリケーションでのみ許可されていました.
3DESは広範な暗号化アルゴリズムになりましたが、リソースの大量使用とセキュリティ制限により、ほとんどのユースケースでAESに置き換えられました。.
DESアルゴリズムについて
3DESの詳細について説明する前に、3DESの派生元であるDESアルゴリズムを理解することが重要です。それでは始めから始めましょう.
暗号化を使用して、プレーンテキストデータを暗号文に変換します。これは、攻撃者がアクセスできない情報です(適切なアルゴリズムを使用している場合)。.
暗号化アルゴリズムは、本質的に複雑な数式です。 「ビーチに行こう」などの暗号化に関しては、多くの人が混乱します。結局のところ、文字や文字などに数学を適用するにはどうすればいいですか?
テキストのエンコード
現実には、コンピューターは文字や文字を処理しません。代わりに、バイナリとして知られる1と0のシステムで動作します。 1または0はそれぞれビットと呼ばれ、8つのコレクションはバイトと呼ばれます.
手動で調べるか、オンラインコンバーターを使用してバイナリで「ビーチに行こう」が次のようになることを確認できます。
01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111 00100000 01110100 01101111 00100000 01110100 01101000 01100101 00100000 01100010 01100101 01100001 01100011 01101000
ブロック
データが暗号化されると、処理のために個別のブロックに分割されます。 DESのブロックサイズは64ビットです。これは、本質的に、各ブロックが64個の1と0の組み合わせに適合することを意味します。最初のブロック(上記のバイナリの最初の64桁)は次のようになります。
01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111
2番目は次のようになります。
00100000 01110100 01101111 00100000 01110100 01101000 01100101 00100000
そして、最終ブロックは次のようになります。
01100010 01100101 01100001 01100011 01101000
パディング
3番目のブロックの長さが40ビットしかないことに気づいたかもしれません。暗号化する前に、64ビットブロックサイズまで作成する必要があります。これは パディング, ブロックを完了するためにブロックに追加情報を追加する必要があります。これは、さまざまなスキームで実行できます。また、暗号化された情報を解読しにくくするのにも役立ちますが、この記事ではそれを取り上げません。.
DESキースケジュール
暗号化アルゴリズムは、キーを使用してデータを追加し、プロセスの最終結果を変更します。 DESが順列やSボックスなどの手順のみを含む場合(順列については以下で説明しますが、Sボックスについては 置換 セクション)、攻撃者がしなければならないことは、アルゴリズムの詳細を明らかにしてから、最初のメッセージを明らかにするために各ステップを逆に実行することだけです.
私たちのアルゴリズムのほとんどは広く知られているので、これはあまりセキュリティを追加しません。代わりに、秘密鍵を追加して、アルゴリズムを知っているだけでは予測できない方法で出力を変更します(十分に複雑なアルゴリズムが使用されている場合).
DESは単一のキーで始まり、各ラウンドで適用されるサブキーを作成するために使用されます。これは64ビットキーであり、ブロックと同じサイズです。キーは次のとおりだとしましょう:
01001010 10101101 11101000 10100101 01110001 01010100 10101001 11111010
現在、このキーはバイナリで入力されています。これは、コンピューターが処理するときにデータが表現される方法です。人間がキーを扱う場合、通常、次のようなキャラクターの組み合わせとして表示されます。
kj329nf982bc9wn1
DESでは、ラウンドキーを導出する最初のステップは、次の表に従ってキーを置換(移動)することです。
順列では、元のキーの各ビットが、表に示されているように新しい位置にシャッフルされます。 (Cの)左上隅のセルには 57, 置換されたキーの最初の数は、古いブロックの57番目の位置の数になります。
01001010 10101101 11101000 10100101 01110001 01010100 10101001 11111010
2番目のセルは言う 49, つまり、新しいキーの2桁目は、古いブロックの49番目の位置にある数字になります。
01001010 10101101 11101000 10100101 01110001 01010100 10101001 1111010
3番目のセルは言う 41, したがって、41番目の位置で数字を探します。
01001010 10101101 11101000 10100101 01110001 01010100 10101001 1111010
これまでのところ、キーは「110」.
キーの残りの部分は、テーブルの値に従って同じ方法で配置されます。左から右に移動し、行の最後に到達したら、通常のように次の行にジャンプします。一度 テーブルC 終了したら、ジャンプします テーブルD キーの後半を完了する.
最初の順列テーブルに従ってブロック全体を転置する簡単な方法はありません。すべてを手作業で行うことも、スクリプトを作成することもできます(または、幸運にもインターネットの奥深くにあるものを見つけることもできます)。
1100010 1010010 1010101 0101010 1010000 1111001 0001011 1000111
このガイドの数字の一部を作成しているのではないかと心配するかもしれませんが、実際にはそれは重要ではありません。データを手動で暗号化する人はもういません。すべてはプログラムを介して行われます。このチュートリアルの最も重要な側面は、私たちが扱っている概念を明確に把握できることです。数字自体は、何が起こっているかを視覚化するのに役立つだけです.
一部の読者は、テーブル(および現在のキー)が64ビットではなく56ビットしかないことに気付いているかもしれません。これは、8ビットごとにスキップされるためです。これは、キーが正しく受信されたかどうかを検証するパリティチェックビットを持つことが重要であった、昔のテクノロジーの成果物です。これらのパリティチェックビットは、実際には、DESには56ビットキーのセキュリティのみがあることを意味します。.
テーブルCおよびDは、2つの28ビットの半分を持つキーを提供します。半分はCとDと呼ばれることもありますが、この記事では、左と右をLとRと呼びます。左側は次のとおりです。
1100010 1010010 1010101 0101010
私たちの権利は:
1010000 1111001 0001011 1000111
次の手順では、ラウンドに応じて、キーを1つまたは2つのスペースだけ左にシフトします。スペースの正確な数は、次の事前定義された表に従って決定されます。
1 | 1 |
2 | 1 |
3 | 2 |
4 | 2 |
5 | 2 |
6 | 2 |
7 | 2 |
8 | 2 |
9 | 1 |
10 | 2 |
11 | 2 |
12 | 2 |
13 | 2 |
14 | 2 |
15 | 2 |
16 | 1 |
それでは、左半分と右半分を見てみましょう。
L 1010010 1010010 1010101 0101010
R 1010000 1111001 0001011 1000111
そして、最初のラウンドには次のシフトがあるため、両方を1ポジション左にシフトします。 1 表に従って(左端の数字は右端に移動します).
最初のラウンドのサブキー:
L 0100101 0100101 0101010 1010101
R 0100001 1110010 0010111 0001111
第2ラウンドでは、表には 1, したがって、この結果は、各数値を1ポジション左に移動することによって再び変更されます.
二回戦 サブキー:
L 1001010 1001010 1010101 0101010
R 1000011 1100100 0101110 0011110
3回目のラウンドでは、数字が2桁左に移動します。これは、テーブルに次のように表示されるため 2.
3回目のサブキー:
L 0101010 0101010 1010101 0101010
R 0001111 0010001 0111000 1111010
後続のラウンドでは、表で指定された距離に従って数値が左に移動し、各シフトが前のラウンドの結果に適用されます。最終的に、これにより、DESプロセスの各ラウンドに1つずつ、16の異なるサブキーが得られます。.
次のステップは、以下に示すPC2テーブルによる別の順列です。
これまでに順列に精通している必要がありますので、詳細なプロセスには進みません。どのように機能するかをさらに詳しく知りたい場合は、このセクションの冒頭にある説明を参照してください。再配置位置は異なりますが、プロセスは同じです.
シフトプロセスで得られた16個のキーのそれぞれは、テーブルに従ってシャッフルされ、14番目の位置から番号が1番目、17番目から2番目、11番目から3番目などに移動します。..
テーブルをよく見ると、以前の56ビットではなく、48ビットしかないことがわかります。このプロセスは、圧縮順列として知られています.
また、テーブルの上半分には1から28までの数字があり、下半分には29から56までの数字が含まれていることがわかります。これにより、サブキーの左半分と右半分が分離されます。キーの真ん中に.
繰り返しますが、我々は不正行為をして数字を補います。このプロセス全体で次のサブキーが提供されたとしましょう。
1ラウンド: 010101 010101 101010 110100 101001 100101 101010 101010
ラウンド2: 011010 110101 101110 110010 010100 110010 111101 101101
ラウンド3: 010100 100110 110110 101010 100110 011000 101011 011001
ラウンド4: 011001 110101 011001 110101 000011 001011 010101 010101
ラウンド5: 110101 001101 010101 010101 010011 001011 010111 100101
ラウンド6: 010111 110101 011001 111001 101001 100101 101010 101010
ラウンド7: 110101 111010 101110 101010 100110 010110 111011 001110
第8ラウンド: 011001 110101 010101 001001 010011 001011 010100 101010
第9ラウンド: 111011 011010 011110 100010 100010 010110 110011 110010
ラウンド10: 011010 010101 101110 101001 010010 010110 111000 101010
ラウンド11: 110101 001101 101110 101010 100101 100101 101010 001010
ラウンド12: 101001 100100 101001 101010 100110 011000 101011 011001
ラウンド13: 010010 010010 010101 010101 010110 110001 100101 101010
ラウンド14: 101001 100110 010101 011101 010001 001010 110010 111110
ラウンド15: 011001 011010 011001 110101 001001 011001 100101 101101
ラウンド16: 010010 100110 010101 010101 010001 101000 110010 111010
このシフトプロセスにより、16個のサブキーのうち約14個で初期キーの各ビットが使用されますが、一部のビットは他のビットよりわずかに多く使用されます.
初期順列
データがブロックに分割され、必要に応じてパディングされたら、DES暗号化プロセスを開始します。後の段階で作成したサブキーに戻ります。最初のステップは初期置換と呼ばれ、次の表に従ってデータが再配置されます。
この最初の順列プロセスでは、アルゴリズムの安全性は向上しません。これは、キーの入力を必要とせず、簡単に元に戻すことができるためです。アルゴリズムは、特定のコンテキストでの実装を容易にするため、元々この方法で設計されました.
順列を数回カバーしたので、ここでは主要な説明は省略します。に戻る DESキースケジュール それらがどのように機能するかについての詳細が必要な場合はセクション.
「ビーチに行きましょう」というメッセージの最初のブロックを見てみましょう。 ブロック 下のセクション DESアルゴリズムについて:
01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111
最初のセルが言うので 58, 58番目の位置から番号を選択します。
01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111
次に、50番目の位置から番号を取得します。
01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111
そして、42番目の位置からの数:
01001100 01100101 01110100 00100111 01110011 00100000 01100111 01101111
これにより、「110” これまでのところ。残りの番号を構成します。
11010111 01001010 10101000 10011101 01001011 10110101 10000111 10101001
最初の順列が完了すると、データは次のステップに移動します.
ブロックを分割する
データの初期順列が完了すると、データは2つに分割されます。最初の順列を受けたブロックを取得します。
11010111 01001010 10101000 10011101 01001011 10110101 10000111 10101001
そして、2つのブロックに分割します。左のブロック(最初の32桁で構成される)は、 L0:
L0 11010111 01001010 10101000 10011101
そして、右ブロック(2番目の32桁で構成される)、 R0:
R0 01001011 10110101 10000111 10101001
F関数
ブロックが分割されたので、F関数を実行します。最初のラウンドでは、ブロックの右半分にのみ適用され、左半分は後まで保持されます。右側には、F関数の一部として次の4つのステップがあります。
- 拡張順列(図のE)
- キーミキシング(図の⊕)
- 置換(図の各S1、S2など)
- 順列(図のP)
拡張順列
拡張順列は、3つのことを実現します。最も重要なことは、入力データの単一ビットが他の2ビットの出力に影響を与え、雪崩効果を引き起こすことです。また、右半分の48ビットが作成されるため、次のステップのサブキーと同じサイズになります。拡張置換のその他の効果は、入力よりも出力が長くなることです。これにより、置換操作で圧縮できます.
ビットは、次の表に従って再配置されます。いくつかの個々のビットはテーブルに2回あります。これは、ブロックが32ビットから48ビットに拡張した方法です。
最初のセルが32であるため、上記の順列の他の例で行ったように、正しいブロックを取得して32番目の位置から番号を選択します。
R0 01001011 10110101 10000111 10101001
次に、ブロックの右下隅に達するまで、最初の位置、2番目の位置などから数字を取得します。があるので 1 このセルでは、最後の数字はブロックの最初の位置に表示される数字にもなります.
展開順列により、次の新しい48ビットブロックが得られたとします。
101110 100110 100100 000000 001100 001110 101101 011110
キーミキシング
ブロックが48ビットに拡張されたら、最初のラウンドのサブキーを適用します。サブキーは、 DESキースケジュール 上記のセクション。ブロックは、XOR暗号を使用してサブキーによって変更されます.
XOR暗号は、特に既に説明した他の要素と比較した場合、単純なプロセスに従う追加暗号です。.
XOR暗号の場合:
0 + 0 = 0
1 + 0 = 1
1 + 1 = 0
したがって、次の2つの数値を2進数でXORする必要があるとします。
1101
0101
各数字は、その下の数字に追加されます。上記の3つのルールによると、次の結果が得られます。
1000
キーの混合手順を完了するために、48ビットに拡張したばかりのブロックの右側と、最初のラウンドキーを取得します。次に、XOR加算を実行します。
ブロック: 101110 100110 100100 000000 001100 001110 101101 011110
ラウンド1キー: 010101 010101 101010 110100 101001 100101 101010 101010
XOR結果: 111011 110011 001110 110100 100101 101011 000111 110100
XOR操作の結果は、次のラウンドに渡されます.
置換
置換により、データに混乱が生じます。通常は、代替ボックスまたはSボックスとも呼ばれるルックアップテーブルを使用して行われます。 DESは、8ビットの個別のテーブルまたはSボックスを使用します。Sボックスは、データの6ビットごとに異なるテーブルです。次の表は、DESの8つのSボックスを示しています。
8つの個別のSボックスを使用して、各6ビット入力を4ビット出力に変換します。プロセスの最初のステップは、6ビットセグメントの最初と最後の数字を取得し、そのバイナリ値を10進数に変換することです。.
前のステップでXOR処理を終えたばかりのデータを取得しましょう。
111011 110011 001110 110100 100101 101011 000111 110100
最初の6ビットセグメントを見て、置換プロセスの仕組みを説明します。
111011
最初の番号と最後の番号は両方なので 1, これにより、 11. 次に変換します 11 バイナリから10進数へ 3. これらは、異なる方法で記述された単なる同等の値です。コンピューター言語を人間の言語に変換すると考えてください。必要に応じて、オンライン計算機で変換を確認できます.
次に、最初の6ビットセグメントの中央の4桁を取得します。
111011
そしてそれらを2進数から10進数に変換します. 1101 13に変換します.
今、私たちはこれら2つの数字を取り、それらを調べます S1 テーブル:
私たちの最初の数, 3, 3番目の行を見て、2番目の数, 13 13列目を見るように指示します。 13列目の3行目の値は 0.
テーブルで番号を検索したので、4桁のバイナリに変換し直します。通常、ゼロはバイナリで0として書き込まれますが、 0000 同じであり、これは私たちの目的に最も適した形式です.
このプロセスに続いて、Sボックスは最初の6ビットのデータセクションを変換します(111011)別の4ビット値(0000)。複雑に思えますが、この手法は、暗号化テキストとリンク先のプレーンテキストとの関係をさらに曖昧にするのに役立ちます.
データの次の6ビットセクションは同じプロセスを経ますが、代わりに上記のS2ボックスを使用します。 3番目のセクションはS3テーブルなどを使用し、最後のセクションがS8テーブルを介して置換されるまで.
繰り返しますが、残りの値についてはチートを行います。置換ボックスが私たちに結果を与えるとしましょう:
0000 1010 1100 1001 0100 1001 0111 0001
データの各セクションがSボックスを通過すると、次のステップに進みます.
順列
F関数の最後の段階は、次の表を使用した別の順列です。
これで、順列が古いブロックから新しいブロックの別の位置に桁をシフトする方法を十分に理解できたので、再度説明しません。.
この順列が以前の結果をとるとしましょう:
0000 1010 1100 1001 0100 1001 0111 0001
また、次の出力が得られます。
0101 0110 1001 0101 0010 0100 0101 0010
順列が完了したので、このラウンドでF関数の4つのステップを終了しました。数学表記では、この値は f(R0, K1). これは、結果が関数(f)ブロックの最初の右側(R0)と最初のラウンドのサブキー(K1).
左ブロックとのXOR
F関数のステップを開始する直前にブロックを半分に分割したことを覚えていますか?ブロックの左側(L0)を脇に置き、右側はこれらのプロセスのそれぞれを受けました。さて、今はL0が行動に戻る時です.
処理したばかりの右側を取ります f(R0, K1) それを古い左側に追加します(L0)XOR暗号を使用します。これは私たちに与えます R1, 最初のラウンドの結果:
f(R0, K1): 0101 0110 1001 0101 0010 0100 0101 0010
L0: 1101 0111 0100 1010 1010 1000 1001 1101
XOR結果(R1): 1000 0001 1101 1111 1000 1100 1100 1111
を参照してください キーミキシング XOR暗号の仕組みのリマインダーが必要な場合は上記のセクション.
さらに15ラウンド…
これまでのところ、DESはおそらく骨の折れるプロセスのように思えます。しかし、まだ完成に近づいていません。データはF関数の4つのステップを通過し、XORがさらに15回続き、合計16ラウンドになります。.
2回目のラウンドでは、ブロックの右側(R0)の元の未処理バージョンを取得し、新しい左側(L1)にします。一方、最初のラウンドの結果を取得し、F関数を介して送信します。すべては前回と同じですが、今回はラウンド2のサブキーが代わりに使用されます。このプロセスが次の結果をもたらすとしましょう:
f(R1, K2): 1011 0111 1000 1011 1001 1101 1001 1110
次に、結果を実際にはR0であるL1とXORします(これは 分割ブロック セクション)。これにより、2回目のラウンドR2の結果が得られます。
f(R1, K2): 1011 0111 1000 1011 1001 1101 1001 1110
L1: 0100 1011 1011 0101 1000 0111 1010 1001
R2: 1111 1100 0011 1110 0001 1010 0011 0111
このステップは少し混乱するように思えますが、Feistelスキームでは、古い右側が新しい左側になり、操作の結果が新しい右側になります.
次の図は、何が起こっているかを視覚的に表しています。 IPは初期順列を表し、FはF関数全体の代名詞です。⊕はXOR関数を表し、矢印はブロックの各辺が左右に移動することを示します。
各ステップの正確な式は次のとおりです。
Ln = Rn-1
Rn = Ln-1 + f(Rn-1,Kn)
どこ:
L =ブロックの左半分(ブロックが最初に分割されたときにL0から始まる)
R =ブロックの右半分(ブロックが最初に分割されたときにR0から始まる)
n =ラウンド数(ブロックが最初に分割されたときの0で始まる)
f = F関数
Kn =ラウンドnのサブキー
式と図によると、3回目のラウンドでは、R1は新しい左半分(L2)になり、R2はF関数で処理されます。次の結果が得られたとしましょう:
f(R2, K3) 1001 0111 0000 1011 1101 0111 1011 1011
次に、前と同じように、XOR暗号を使用して3回目のラウンド(R3)の結果を計算します。
f(R2, K3): 1011 0111 1000 1011 1001 1101 1001 1110
L2: 0100 1011 1011 0101 1000 0111 1010 1001
R3: 1111 1100 0011 1110 0001 1010 0011 0111
同じプロセスが15ラウンド目まで続き、ブロックが切り替わり、次のサブキーが各ラウンドで使用されます。 16回目および最終ラウンドでは、ブロックは切り替えられません。代わりに、それらは組み合わされて64ビットブロックを形成します。この最後の段階でブロックの交換を控えると、アルゴリズムを暗号化と復号化の両方に使用できます.
最終ラウンドで次の結果が得られたとします。
1010 0101 0100 1011 1001 0001 0100 1000 0101 1010 1101 0001 1101 1001 1001 1101
最終順列
この順列は、初期順列の逆であり、再び、追加のセキュリティ値を追加しません。次の表に従ってデータを再配置します。
この置換テーブルは、前のものと同じように機能します。暗号化プロセスの最後のステップであるため、結果は「の最初のブロックの暗号文になります。行こう ビーチへ”。暗号化されたブロックは次のとおりだとしましょう:
0100 1001 0011 0010 1001 0101 0111 0100 1011 1010 0111 0101 0111 1010 0101 0101
「ビーチに行こう」の本当の暗号文が必要な場合は、学習プロセス全体をスキップして、オンラインDES暗号化ツールに直接進むことができます。キー(kj329nf982bc9wn1など)と一緒に文を入力すると、ツールは次の暗号化されたテキストを提供します。
U2FsdGVkX19Pienyu3w3q4zCd2IPKEPUWBzu3AeyVu2H3FeimZe6hA
必要に応じて、キーと暗号化テキストをバイナリに変換してから、 最初のブロックの暗号文 概説されたプロセス全体と一致します.
DES復号化
DESでは、解読プロセスは非常に簡単です。アルゴリズムのFeistel構造により、簡単に元に戻すことができます。プロセスは、情報を復号化するためにほぼ同じように実行されます。唯一の違いは、サブキーが逆に適用されることです。これは、同じソフトウェアとハードウェアを暗号化プロセスと復号化プロセスの両方で使用できることを意味するため、効率的なセットアップです.
データを復号化するには、最初に最初の順列を実行し、次にブロックが分割され、右半分がF関数を実行します。違いは、復号化の最初のラウンドでは、16番目のサブキーが適用されることです。他のすべては通常通りに進行します。 F関数が完了すると、ブロックの左側とXORされます.
ブロックは切り替えられ、結果は2番目のラウンドで同じプロセスを通過しますが、15番目のサブキーが適用されるという唯一の例外があります。このプロセスは、最初のサブキーが使用される16ラウンドまで続きます。.
暗号化プロセスと同じように、ブロックは最終段階で交換されず、データは最終的な置換を受けます。これにより復号化プロセスが終了し、メッセージの元のプレーンテキストが生成されます.
3DES
DESのセキュリティ上の弱点がより明らかになると、まったく新しいアルゴリズムを構築せずにキーサイズを拡張する方法として3DESが提案されました。 DESのように単一のキーを使用するのではなく、3DESは3つの56ビットキーでDESアルゴリズムを3回実行します。
- キー1を使用して 暗号化する 平文.
- キー2を使用して 解読する キー1で暗号化されたテキスト.
- キー3を使用して 暗号化する キー3で復号化されたテキスト.
各段階で、上記のように完全なDESプロセスが実行されます.
ここで、「2番目のステップで復号化を適用することでセキュリティを強化する方法は?」
答えは、別のキーを使用することです。最初のキーが2番目のステップでデータの復号化にも使用された場合、データは開始された場所にすぐに戻ります.
ただし、別のキーを使用するため、復号化プロセスは実際にはデータの復号化には役立ちません。論理的に間違っているように見えるかもしれませんが、別のキーで復号化することは、データをさらに混乱させるだけです.
2番目のキーがデータを「復号化」すると、3番目のキーが適用されて再度暗号化されます。結果は3DES暗号文です.
3DESは、実装が単一キーDES、2キーDES、および3キーDESと互換性があるため、このように構成されています(これらについては次のセクションで説明します)。 3つのステップすべてで暗号化が使用されている場合、これは機能しません。.
3DESキーイングオプション
技術的には、3DESは3つの異なるキー構成で実装できます。それにもかかわらず、2番目と3番目のオプションは安全ではないため、実装しないでください.
- キーイングオプション1 –このオプションは3つの独立したキーを使用し、最も安全です.
- キーイングオプション2 –この構成では、最初のキーと3番目のキーは同じです.
- キーイングオプション3 –これは、3つの同一のキーを使用します。同一のキーが使用される場合、2番目の段階の復号化プロセスは最初の暗号化をキャンセルし、最終的な暗号化のみを残してデータを変更します。これにより、結果が 通常のDESと同じ.
3DESプロセス:キーイングオプション1
正直に言って、3DESプロセス全体が、特に暗号化に慣れていない場合、頭を回転させることができます。陥りやすいように、3DESアルゴリズムの暗号化スキーム全体の概要を以下に示します。
平文は3DESアルゴリズムに入り、最初にあります キー1で暗号化 次の手順で:
-
-
キースケジュール-16のサブキーはキー1から派生します
-
初期順列
-
ブロックは左右に分かれています
-
-
-
-
右半分はF関数を介して送信されます
-
拡張順列
-
ラウンドのサブキーとのXOR
-
置換
-
順列
-
-
F関数の結果と左側のXOR
-
古い右側を新しい左側にし、結果を新しい右側にします
上記の手順を14回繰り返します
-
-
-
-
-
右半分はF関数を介して送信されます
-
拡張順列
-
16回目のラウンドのサブキーとのXOR
-
置換
-
順列
-
-
F関数の結果と左側のXOR
-
ブロックの左側と右側を一緒に結合します
-
-
-
-
最終順列
-
キー1で暗号化されたテキストを取得し、それを介して送信します 「復号化」プロセス キー 二:
-
-
キースケジュール-16個のサブキーはキー2から派生します
-
初期順列
-
ブロックは左右に分かれています
-
-
-
-
右半分はF関数を介して送信されます
-
拡張順列
-
ラウンドのサブキーとのXOR(復号化の16番目のサブキーから開始)
-
置換
-
順列
-
-
F関数の結果と左側のXOR
-
古い右側を新しい左側にし、結果を新しい右側にします
上記の手順を14回繰り返します
-
-
-
-
-
右半分はF関数を介して送信されます
-
拡張順列
-
最初のラウンドのサブキーとのXOR
-
置換
-
順列
-
-
F関数の結果と左側のXOR
- ブロックの左側と右側を一緒に結合します
-
- 最終順列
-
キー2によって「復号化」されたデータを取得し、それを介して送信します en暗号化プロセス キー 三:
-
-
キースケジュール-16個のサブキーはキー3から派生します
-
初期順列
-
ブロックは左右に分かれています
-
-
-
-
右半分はF関数を介して送信されます
-
拡張順列
-
ラウンドのサブキーとのXOR
-
置換
-
順列
-
-
F関数の結果と左側のXOR
-
古い右側を新しい左側にし、結果を新しい右側にします
上記の手順を14回繰り返します
-
-
-
-
-
右半分はF関数を介して送信されます
-
拡張順列
-
16回目のラウンドのサブキーとのXOR
-
置換
-
順列
-
-
F関数の結果と左側のXOR
-
ブロックの左側と右側を一緒に結合します
-
-
-
-
最終順列
-
結果は3DES暗号文です.
3DESのセキュリティ
3DESのセキュリティは、使用されているキーイングオプションによって異なります。キーイングオプション1には、3つの異なる56ビットキーが含まれ、合計キー長は168ビットになります。ミートインザミドル攻撃により、実際のセキュリティが112ビットに低下するため、実効長が大幅に短縮されます。.
ミートインザミドル攻撃は、同じアルゴリズムを数回繰り返す暗号化スキームに対して有用です。この手法は、各暗号化段階からの即時値を保存し、この情報を使用して、アルゴリズムをブルートフォースするのにかかる時間を大幅に改善します。.
オプション2と3のキーは非常に小さく、既知のプレーンテキスト攻撃、選択されたプレーンテキスト攻撃、およびその他の攻撃に対して脆弱です。.
既知の平文攻撃は、攻撃者がメッセージの平文と暗号文の両方にアクセスできる場合に可能です。アルゴリズムがこれらの攻撃の影響を受けやすい場合、攻撃者はこの情報を使用してキーを推測できます。これにより、同じキーで暗号化された他のすべてのデータを解読できます。.
選択されたプレーンテキスト攻撃は似ていますが、攻撃者が暗号文を任意のプレーンテキストと比較することによりキーを発見することを伴います.
これらの脆弱性と関連する全体的な小さなキーサイズのため、キーイングオプション2および3は安全ではなく、実装すべきではありません.
3DESは安全ですか?
3DESは今後数年で廃止されるため、他のアルゴリズムを使用することをお勧めします。キーイングオプション1は依然として多くのアプリケーションで安全であると考えられていますが、AESのような代替手段の代わりに使用する必要がある理由はそれほど多くありません。.
3DESはDESのフォローアップとして暗号化の重要な位置を占めていますが、その栄光の年は終わり、次の段階に進みます。システムを将来にわたって十分に保護したい場合は、代わりに最新のアルゴリズムを使用する必要があります。.
関連: 一般的な暗号化タイプの説明
プランX 認可された国防総省 CC0
ック DESアルゴリズムは、64ビットのブロックを処理することができます。これは、64ビットのプレーンテキストブロックを64ビットのキーと一緒に入力することができることを意味します。. しかし、DESアルゴリズムは、56ビットのキーを使用するため、キーの長さが短すぎると考えられています。これは、暗号化プロセスを簡単に解読できる可能性があるためです。. パディング DESアルゴリズムは、プレーンテキストブロックが64ビットでない場合、パディングを使用してブロックを64ビットに拡張します。. パディングは、プレーンテキストブロックの末尾に追加されるビットのシーケンスです。これにより、ブロックが64ビットになり、DESアルゴリズムが適用できます。. DESキースケジュール DESアルゴリズムは、56ビットのキーを使用しますが、実際には64ビットのキーを入力します。これは、8ビットごとにパリティビットが追加されるためです。. キースケジュールは、64ビットのキーを56ビットに圧縮し、16ラウンドのために使用される16個のサブキーを生成します。. 初期順列 初期順列は、プレーンテキストブロックを置換するために使用されます。. この置換は、プレーンテキストブロックのビットを新しい位置に移動することによって行われます。. ブロックを分割する ブロ