DES 暗号化・復号化ツール
DES と Triple DES(3DES)に対応、5種類の暗号モードを搭載
暗号設定
DES とは?
DES(Data Encryption Standard)は1977年にIBMが開発し、NSAの修正を経て米国の連邦標準となった暗号アルゴリズムです。Feistelネットワーク構造を採用し、64ビットの平文を左右に分割して16ラウンドの変換を施します。鍵は名目上64ビットですが、8ビットはパリティチェック用に予約されており、実効鍵長は56ビットです。 当時56ビットは十分な安全性がありましたが、計算能力の急速な向上により、1999年には専用ハードウェアで22時間以内に総当たり破解が可能になりました。その後、DESの寿命を延ばすためにTriple DES(3DES)が開発されました。3つの異なる鍵でDES暗号を3回適用し、実効鍵長168ビットの大幅な安全性向上を実現しています。3DESは今でもEMVチップカードや多くの銀行プロトコルなど、金融分野で広く使われています。 AESがDESに代わる新しい暗号標準となったものの、レガシーシステムや金融プロトコル、組み込みデバイスではDESと3DESがまだ現役です。本ツールはDESと3DESの両アルゴリズムに対応し、CBC、ECB、CFB、OFB、CTRの5モードを搭載しています。
使い方
使い方
- アルゴリズムを選択:DES(56ビットキー)または3DES(168ビットキー)
- 暗号化モードを選択 - CBCを推奨
- パディング方式を選択 - PKCS#7はほとんどの場合に適しています
- キーを入力するか「ランダムキーを生成」をクリック
- IVが必要なモードでは、IVを入力または生成してください
- 左側に平文(暗号化する場合)または暗号文(復号化する場合)を入力
- 結果は右側に自動的に表示されます
暗号化モード
- CBC — Cipher Block Chaining。各平文ブロックを暗号化する前に前の暗号文ブロックとXOR演算を行います。IVが必要です。セキュリティが高く、最も一般的に使用されるモードです。
- ECB — Electronic Codebook。各ブロックが独立して暗号化されます。同一の平文ブロックは同一の暗号文を生成します。単一の8バイトブロックには問題ありませんが、より長いデータには推奨されません。
- CFB — Cipher Feedback。ブロック暗号をストリーム暗号として動作させます。バイト単位や小さなチャンクでのデータ処理に適しています。
- OFB — Output Feedback。CFBと似ていますが、エラーが伝播しません。通信チャネルにノイズが多い場合に有用です。
- CTR — Counter mode。インクリメントするカウンターを使用してキーストリームを生成します。並列暗号化と復号化が可能で、高いパフォーマンスを発揮します。
ヒント
- 可能な場合はAESを使用してください - DESは主にレガシー互換性のために存在します
- 3DESはDESよりはるかに安全ですが、約3倍遅くなります
- 暗号化のたびに異なるランダムIVを使用してください
- 8バイトを超えるデータの暗号化にはECBを避けてください
- 覚えやすい文字列を入力する代わりにランダムキーを生成してください
利用シーン
仕組み
DESは1977年にFIPS 46として公開されたFeistel型ブロック暗号であり、64ビットブロックと64ビット鍵で動作する。鍵のうち8ビットはパリティビットであり、実効的な鍵材料は56ビットである。暗号化は初期置換(IP)から始まり、64ビットの状態を2つの32ビットハーフL0とR0に分割し、(L_{i+1}, R_{i+1}) = (R_i, L_i XOR F(R_i, K_i)) の形式で16ラウンドのFeistel関数を実行する。ラウンド関数FはE-boxで32ビットを48ビットに拡張し、PC-1/PC-2鍵スケジュールで導出された48ビットラウンド鍵K_iとXOR演算を行い、8つの6対4ビットS-box(S1..S8)を適用した後、P-box置換を実行する。最終置換(FP = IP^-1)が暗号文を生成する。 NIST SP 800-67で定義されたTriple DESは、DESをEncrypt-Decrypt-Encrypt(EDE)構成で3回適用する:C = E_{K3}(D_{K2}(E_{K1}(P)))。キーイングオプション1は3つの独立した56ビット鍵(168ビット、中間遭遇攻撃に対して約112ビットの実効セキュリティ)を使用し、キーイングオプション2はK1 = K3とする(実効約80ビット)。ブロック暗号モードは64ビットを超えるメッセージを処理するためにDES/3DESをラップする:ECBは各ブロックを独立して暗号化し平文パターンを漏洩する;CBCはC_i = E_K(P_i XOR C_{i-1})でランダムな8バイトIVを用いて連鎖する;CFBとOFBはブロック暗号を自己同期型または同期型ストリーム暗号に変換する;CTRは平文とE_K(nonce || counter)のXORをとる。 DESの56ビット鍵空間(2^56 ≈ 7.2 × 10^16)は探索可能である:EFF DES Crackerは1998年にカスタムASICで22時間でDESチャレンジを突破し、現代のGPU/FPGAクラスターは数時間で完了する。NIST SP 800-131Aは2005年に単体DESを廃止し、2023年以降のTriple DESによる暗号化を禁止した;Sweet32バースデーアタック(CVE-2016-2183)は64ビットブロックサイズにより単一鍵で約2^32ブロック(約32 GB)後に衝突が発生するため、TLSにおける3DESをさらに脆弱にする。現代システムではGCMやChaCha20-Poly1305などの認証付きモードでAES-128またはAES-256を使用すべきである。
- DES鍵はパリティを含む8バイト(実効56ビット);3DES鍵は16バイト(2鍵、実効約80ビット)または24バイト(3鍵、中間遭遇攻撃に対して実効約112ビット)。
- ブロックサイズは64ビット/8バイト;CBC、CFB、OFB、CTRはすべて8バイトのIV/nonceを必要とし、ECBはIVを使用しない(ブロックレベルでパターンを漏洩する)。
- PKCS#7パディングは値NのNバイトを追加する(1 ≤ N ≤ 8);平文長がすでに8の倍数である場合、0x08の8バイトブロックが追加される。
- 弱鍵0x0101010101010101、0xFEFEFEFEFEFEFEFE、および4組の半弱鍵ペアは鍵スケジュールでK1 = K2となるためE_K = D_Kとなる。ランダム鍵生成時にはこれらを避けること。
- Sweet32(CVE-2016-2183)は3DESの64ビットブロックを悪用する:単一鍵で約2^32ブロック(CBCモードで単一鍵あたり約32 GBの平文)後に衝突が発生する。
- NIST SP 800-67 Rev. 2は2023年12月31日以降のTriple DESによる暗号化を禁止した;新規設計ではDESや3DESではなくAES-GCMまたはChaCha20-Poly1305を使用すべきである。
- EFF DES Cracker(Deep Crack)は1998年7月に25万ドル未満の費用で22時間以内にDESを突破した;現代のGPUクラスターでは数時間で完了するため、単体DESは機密性の制御手段とはならない。
使用例
DES-CBC 暗号化
平文: Hello World
鍵 (hex): 0123456789abcdef
IV (hex): fedcba9876543210
モード: CBC / PKCS#7
出力: Base64 エンコードされた暗号文3DES 暗号化
アルゴリズム: Triple DES
鍵 (hex): 24 バイト (48 文字の hex)
モード: CBC / PKCS#7
備考: 168 ビット鍵長は現在も安全とされていますが、新規プロジェクトでは AES の使用を推奨ECB シングルブロック
平文: 8 バイト (DES の 1 ブロックぴったり)
鍵: 0123456789abcdef
モード: ECB / PKCS#7
備考: ECB は 8 バイトの単一ブロックでのみ安全。長いデータには絶対に使用しないことよくある質問
DES は今でも安全に使えますか?
いいえ。素の DES は実効鍵長が 56 ビットしかなく、1998 年に公に破られています。専用ハードウェアなら 1 日以内に総当たり攻撃が可能で、現代のクラウド GPU なら数分で破れます。NIST は 2005 年に DES を正式に廃止しました。新しいシステムには必ず AES を使ってください。
Triple DES(3DES)はどうですか?
3DES は 2 つまたは 3 つの鍵で DES を 3 回適用し、約 112 ビット相当のセキュリティ強度を提供します。NIST は 2017 年に 3DES を非推奨化し、64 ビットブロックサイズに対する誕生日攻撃(Sweet32)を理由に、2023 年以降の新規アプリケーションでの使用を禁止しました。古い銀行システムや POS ネットワークなど、レガシーシステムでのみ生き残っています。可能な限り早期に移行してください。
それでもこのページに DES があるのはなぜですか?
実世界のレガシーシステムが今でも DES を使っているからです。古い銀行フォーマット、組み込みファームウェア、試験問題などとの相互運用が必要な場合に役立ちます。推奨ではありません。新しいコードには AES を使ってください。
DES のモードにはどんなものがあり、それぞれ何を意味しますか?
ECB は各ブロックを独立に暗号化し、パターンが漏れます。CBC はブロックを連結させ、IV が必要です。CFB と OFB は DES をストリーム暗号として使います。CTR はカウンタを nonce として使います。DES では相互運用が目的なら PKCS#7 パディング付きの CBC を選択してください。実データに ECB を使ってはいけません。
DES のブロックサイズと鍵長はどのくらいですか?
DES のブロックサイズは 64 ビット、鍵長は 64 ビットですが、そのうち実際の鍵情報は 56 ビット(残り 8 ビットはパリティ)だけです。3 鍵 3DES でもブロックサイズは 64 ビットのままで、これが大量データ処理時に Sweet32 攻撃の問題を生んだ原因です。
計算はブラウザ内で行われますか?
はい。DES は JavaScript によりローカルで計算されます。鍵と平文はデバイスの外に出ません。暗号化・復号中にネットワークタブを確認すれば検証できます。
3DES の出力が相手側のシステムと一致しないのはなぜですか?
よくある原因は、鍵パリティビットの誤り、鍵バイト順の違い、モードの誤り(ECB と CBC の混同)、IV の不足や余剰、パディングの違い(PKCS#7 と ZeroPadding)、入力エンコードの違い(一方が UTF-8、もう一方が UTF-16)などです。実データのデバッグに入る前に、既知のテストベクトルを相手と一致させて確認してください。