PromleeBlog

posting thumbnail
DES:データ暗号化標準

📅

Feistel暗号の構造 (Feistel Cipher Structure) 🔗

入力は、長さ2w2wビットの平文ブロックと、鍵KKです。
入力平文を二つのwwビットのブロックL0,R0L_0, R_0に分割します。
nラウンドを通過したあとに結合し、暗号文ブロックを生成します。
すべてのラウンドは同じ構造を持ちます。

Feistel暗号の1ラウンドの構造 (Feistel Cipher Round Structure) 🔗

Feistel暗号のラウンド構造

DES (Data Encryption Standard) 🔗

平文:64ビット、つまり2w2w = 64bits。
鍵:56ビット、つまりKK = 56bits。
ラウンド数は16です。
各ラウンドで48ビットの副鍵を生成します。

DES:初期転置 (Initial Permutation) 🔗

64ビットの平文を入力し、64ビットのブロックを生成します。
表に従って64ビットを並べ替え、最後には逆の表で並べ替えます。
例えば、表の最初の値が58なら、先頭のビットには58番目のビットを配置します。
これはDESの最初と最後の処理に対応します。
データの難読化をさらに進める役割があります。

DES:転置表EとP (Permutation Tables: E, P) 🔗

表E(拡大転置)は、32ビットの入力を48ビットの出力へ変換します。
拡大転置は、32ビットの入力を48ビットへ変換し、副鍵とXORを取るために使います。
転置表はSボックスの結果を並べ替え、複雑なデータ構造を作ります。

DES:Sボックス (S-Boxes) 🔗

拡大された48ビットのデータは、XOR演算のあと、八つのSボックスへ入力されます。
各Sボックスは、6ビットの入力を4ビットの出力へ変換します:{0,1}6→{0,1}4{\{0, 1\}}^6 \rightarrow {\{0, 1\}}^4
a1a2a3a4a5a6→a1a6:row,a2a3a4a5:cola_1a_2a_3a_4a_5a_6 \rightarrow a_1a_6 : row, a_2a_3a_4a_5 : col
Sボックスの行と列は0から始まります。
表から得られた値を二進数へ戻すと、4ビットの出力になります。

DES:鍵スケジュール1 (Key Schedule 1) 🔗

Permutation Choice 1(PC-1)では、56ビットの鍵KをC0,D0C_0, D_0へ変換します。それぞれ28ビットです。
これが、後続の処理で副鍵を生成するための基礎になります。
DESの鍵Kは64ビットですが、そのうち8ビットはパリティビットなので、実際に使うのは56ビットです。
パリティビットは、誤りの検出を担います。

DES:鍵スケジュール2 (Key Schedule 2) 🔗

Ci−1,Di−1C_{i-1}, D_{i-1}からCi,DiC_i, D_iを生成します。
各ラウンドで定められたシフト量に従って、Ci,DiC_i, D_iを左へシフトします。
Permutation Choice 2(PC-2)で、シフト後のCi,DiC_i, D_iを並べ替え、48ビットの副鍵へ変換します。
例えば、副鍵の最初のビットは、表で指定されたCとDのk番目のビットになります。

DES:安全性の分析 (Security Analysis) 🔗

Sボックスを除く、すべての部分が線形です。
鍵長が56ビットと短いため、総当たり攻撃に弱い性質があります。
現在は使われず、AESへ置き換えられています。

Triple DES 🔗

DESの安全性を高めるために、暗号化処理を三段階で行います。
Enc(K=(K1,K2,K3),M)=Enc(K=K3,Dec(K=K2,Enc(K=K1,M)))Enc(K=(K_1, K_2, K_3), M)=Enc(K = K_3, Dec(K = K_2, Enc(K = K_1, M)))
Dec(K=(K1,K2,K3),C)=Dec(K=K1,Enc(K=K2,Dec(K=K3,C)))Dec(K=(K_1, K_2, K_3), C)=Dec(K = K_1, Enc(K = K_2, Dec(K = K_3, C)))

Triple DESの特徴 (Properties of Triple DES) 🔗

平文と暗号文のサイズは、どちらも64ビットです。
鍵長はDESの鍵の3倍、168ビットです。
長所
    DES:データ暗号化標準 | PromleeBlog