ToolActToolAct

DES 暗号化・復号化ツール

DES と Triple DES(3DES)に対応、5種類の暗号モードを搭載

暗号設定

入力内容
文字数: 0
バイト数: 0
変換結果
文字数: 0
バイト数: 0

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モードを搭載しています。

使い方

使い方

  1. アルゴリズムを選択:DES(56ビットキー)または3DES(168ビットキー)
  2. 暗号化モードを選択 - CBCを推奨
  3. パディング方式を選択 - PKCS#7はほとんどの場合に適しています
  4. キーを入力するか「ランダムキーを生成」をクリック
  5. IVが必要なモードでは、IVを入力または生成してください
  6. 左側に平文(暗号化する場合)または暗号文(復号化する場合)を入力
  7. 結果は右側に自動的に表示されます

暗号化モード

  • CBCCipher Block Chaining。各平文ブロックを暗号化する前に前の暗号文ブロックとXOR演算を行います。IVが必要です。セキュリティが高く、最も一般的に使用されるモードです。
  • ECBElectronic Codebook。各ブロックが独立して暗号化されます。同一の平文ブロックは同一の暗号文を生成します。単一の8バイトブロックには問題ありませんが、より長いデータには推奨されません。
  • CFBCipher Feedback。ブロック暗号をストリーム暗号として動作させます。バイト単位や小さなチャンクでのデータ処理に適しています。
  • OFBOutput Feedback。CFBと似ていますが、エラーが伝播しません。通信チャネルにノイズが多い場合に有用です。
  • CTRCounter mode。インクリメントするカウンターを使用してキーストリームを生成します。並列暗号化と復号化が可能で、高いパフォーマンスを発揮します。

ヒント

  • 可能な場合はAESを使用してください - DESは主にレガシー互換性のために存在します
  • 3DESはDESよりはるかに安全ですが、約3倍遅くなります
  • 暗号化のたびに異なるランダムIVを使用してください
  • 8バイトを超えるデータの暗号化にはECBを避けてください
  • 覚えやすい文字列を入力する代わりにランダムキーを生成してください

利用シーン

レガシーなDES・3DES連携の再現DES(8バイトキー)または3DES(24バイトキー)を選び、ECB・CBC・CFB・OFB・CTRモードから適合するものを指定して、古い決済・通信・デバイス・企業向けプロトコルの保守作業に活用できます。Feistelネットワークの実装はcrypto-jsを介してブラウザ内で完結するため、56ビット(DES)や168ビット(3DES)のキーおよび平文がリモートツールに送信されることはありません。ベンダーのサンプルを再現したいが実カードデータを外部に送りたくない場合に特に便利です。
キー・IV・暗号文のフォーマットを正確に合わせるキーとIVを16進数・Base64・テキストで入力し、必要に応じてランダム値を生成できます。ECB以外のモードで必須の8バイトIVを検証したうえで、他システムの出力と比較できます。鍵長の不一致(DESは8バイト、3DESは24バイト)、IVの未設定や陳腐化、PKCS#7パディングの末尾ブロックにおけるエッジケースなど、原因を切り分けやすいです。
レガシー暗号を分離すべき理由を記録する互換性テストや移行資料作成に活用し、新しいセキュリティ設計には使わないことが重要です。DESはすでに時代遅れ(1999年に専用マシンが22時間で破解、現在のGPUクラスターではさらに高速)、3DESもレガシーです。現代システムではAES-GCMのような認証付き暗号を優先すべきであり、DESのサンプルは明示的にラベル付けして新しいセキュリティ業務に流用されないようにしてください。
ベンダーサンプルとの一致を往復テストで確認するパートナー公開のキーとIVで既知の平文を暗号化し、復号結果をバイト単位で比較することで、決済端末・SIMツール・レガシーAPIとの連携を検証できます。出力がベンダー想定の8バイトブロック境界に合っているか、バイト長カウンターで確認してください。パディングの切り詰めやBase64フィールド周辺の余計なスペースは、サイレントな失敗の原因としてよく見られます。
16進数・Base64・テキストの切替で転送形式に合わせる暗号文を受け取るフィールドのエンコーディングに合わせてオプションを切り替えます。Base64のみ対応の下流サービスでは、DES出力が同一でも生の16進数は拒否されます。同じキーを16進数('0123456789abcdef')とBase64('ASNFZ4mrze8=')の両方で表現すると同じ平文に復号できます。パートナーからの「フォーマットが違う」という報告の原因特定に便利です。

仕組み

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)などです。実データのデバッグに入る前に、既知のテストベクトルを相手と一致させて確認してください。