DES (Data Encryption Standard)
今回は、共通鍵を用いたブロック暗号として、1970年代から現在まで世の中の安全な通信をになってきた、20世紀最強の暗号「DES暗号」について解説します。
この記事の流れ
-
DESとは
- 共通鍵暗号
-
DESが生まれた経緯
- 戦後からの歴史背景
-
DESの基本設計
- 鍵の準備
- 入れ替え(転置)
- ファイステル(F)関数
- Sボックス
-
DESの利点
- 組み込みやすさ
- 解読の難解さ
-
DESの弱点
- 鍵長
-
DESの改良型
- トリブルDES
-
DESの次の暗号
- AES
- 公開鍵方式
- 次世代型暗号
- まとめ
1. DESとは
アメリカ合衆国の旧国家暗号規格、もしくはその規格で規格化されている共通鍵暗号である。
つまり、DES暗号はアメリカが戦後に国家として開発を推進し、IBMが英知を結集して作成した。また、NSAがその作成をサポートしたと言われている。
DESはブロック暗号の一種である。ブロック暗号とは入力データをある決まった長さのビット数ごとに切り分け、それらを順に暗号化し送信するものである。DESの場合は入力は64ビットであり、出力される暗号文も64ビットとなっている。1976年国立標準局 (NBS) がアメリカ合衆国の公式連邦情報処理標準 (FIPS) として採用し、その後国際的に広く使われた。56ビットの鍵を使った共通鍵暗号を基盤としている。
1.1. 共通鍵暗号
DESの暗号化のやり方は「共通鍵暗号方式」と呼ばれるやり方である。
共通鍵暗号方式とは、暗号化と復号に「同じ鍵」を使用する暗号化方式のことであり、仕組みとしては古代のシーザー暗号もDES暗号も、暗号化する時と復号する時に「同じ鍵」を使う点では同じである。
対照的に、「公開鍵暗号方式」と呼ばれるものも存在する。この方式の場合、暗号化の時に使う公開鍵と、復号の時に用いる秘密鍵の2つを生成、運用することになるが、共通鍵方式の場合は、共通鍵1つに基づいている。
2. DESが生まれた経緯
2.1 戦後からの歴史背景
暗号といえば、それまでは軍事用として軍事活動を行うときの司令部と兵士達の間の通信を秘匿に行う目的で使われていた。
そのため、誰がどのような暗号を使用しているか、アルゴリズム自体もトップシークレットだった。(例えば、エニグマを使用していたドイツナチス軍など)
しかし戦後、コンピュータを多くの人が使うようになり、企業間での商取引等、インターネット上でやり取りするデータを安全に守ることが急務となった。そのために暗号アルゴリズムによりデータを秘匿しやりとりすることが考えられていた。
しかし、異なる企業間でやり取りをする際、お互いが別々の暗号方式を使い、アルゴリズムを公開しない場合は情報のやりとりなど不可能である。
そこで、IBMのHorst Feistelによって、「鍵を秘密」にし、「暗号アルゴリズムは公開する」DESが、暗号モジュールに関するセキュリティ要件の仕様を規定する米国連邦標準規格(FIPS 140)に採用され、米国国内基準となった。それから多くの国がこの基準に則り、DESを使うようになった。
3. DESの基本設計
DESは前述のようにブロック暗号であり、暗号化したい平文を64ビットのブロックに分け、それぞれ暗号化のアルゴリズムに流していく。工程は、図に書かれているように、
- 平文をブロックの長さ(64ビット長)に切り分ける
- 64桁の数字を入れ替える(初期転置)
- 2からの入力を左右の32ビット毎に分ける
- 右のグループには何も行わないが、左のグループにある計算(後述のファイステル関数)をし、それを足す(XOR演算とよばれる)
- 左と右のグループを入れ替える
- 3、4、5の工程(ラウンドと呼ばれる)を16回繰り返す
- 出力の64桁を入れ替える(最終転置)
となっている。
図1: DESの基本構成
切り分けられた入力は上図に従い、64bit単位のデータに対してビット位置の変更(転置)やテーブル参照による置き換え(置換)、XOR演算、シフト、繰り返し処理などを組み合わせて、入力されたデータを可能な限り「かき混ぜる」という処理を繰り返すことによって暗号化される。
この方法では、上図の③に書かれているように、入力されたデータを2つ(もしくはそれ以上)に分け、一方に「暗号化関数(後述のファイステル関数)」による処理を適用してビットデータに変換措置を施す。この一回の操作(2つに切り分けて片方に関数を適用するステップ)をラウンドと呼ぶ。ラウンドが終了すると、切り分けられたデータの左右を入れ替えて同じ処理を繰り返す。この工程をDESは16回繰り返す。これにより、入力データは完全に「かき混ぜ」られた状態になり、暗号文として出力される。
前述の通りDESは64bit(8bytes)単位でデータを暗号化するブロック暗号アルゴリズムである。したがって、入力や鍵データが64bitに満たない場合は、ゼロデータなどを追加して64bitにそろえてから処理を行うことに注意する。
3.1. 鍵の準備
初期鍵の生成
先ほどDESは56ビット長の鍵を使うと説明したが、初期鍵は64ビットからなっており、DESの初期設定として56ビットの鍵を64ビットの初期鍵から生成する準備が必要である。
この手順は、非常にシンプルであり、持ってきた初期鍵の8, 16, 24, 32, 40, 48, 56, 64桁目の数を単純に省く。
入ってきた64桁の初期鍵を、緑で書かれた桁の部分を省くことでDESに必要な56桁の鍵にしている。
ラウンド鍵の生成
先述のとおり、DESではラウンドを16回繰り返す。各ラウンドでは④の操作(ファイステル関数を左のグループに適用)があるが、その操作に鍵を使用する。DESでは、その時に使用する鍵を各ラウンドごとに変えている。その16個の鍵を初期鍵から生成する方法は、「Key Mixing」と呼ばれる。また、ラウンド鍵は初期鍵が56ビットなのに対して、48ビットである。
Key Mixing は以下の流れで行われる。
- シフト演算: 56ビットの鍵を、左右2つのグループ(それぞれ28ビット)に分ける。各グループが、した図にしたがって左にシフト演算される。このとき、ラウンド1、2、9、16で使用される鍵は左に「1」シフトされる。他のラウンド用の鍵は、左に「2」シフトされる。いくつ左右に分割された鍵がシフトされるかは、下図にまとめられている。
(シフト演算は、[1,2,3]を左に1つシフトすると、[2,3,1]となるような演算のこと。)
2. 縮小転置: シフト演算の後は、56ビットある鍵から48ビットを抽出する作業がある。これは下図に従う。下図のテーブルは$12 \times 4 = 48$個の数で構成されているが、これは、シフトされた後の14番目にある数が1番目に動かされ、17番目にある数は2番目に動かされ、・・・・という作業を表している。ここで、もともと56個あった鍵長だったが、この作業より46個に縮小していることがわかる。すなわち、8個の数はこの表には入っていない。例えば、7という数字はこの表には入っていないため、シフト演算後に7番目にあった数はラウンド鍵には使われず、除去されている。
この縮小転置の作業により、初期鍵の異なる部分のビット情報が、各ラウンド毎に使い分けられている。この作業がDESの解読を困難にしている。
3.2. 初期転置
鍵が準備できたので、ここからは入力に対しての工程である。図1の②に相当する作業が、この初期転置である。
この初期転置は、ラウンドに入る前に行われる、入力ビットの入れ替え作業である。これは下図のテーブルに従う。先ほどの縮小転置とは異なり、この初期転置では64ビットの入力に対して64ビットのものが出力され、次に続くラウンドへの入力となる。表は$16\times16 = 64$であり、例えば、入力の58番目にあった数が出力の1番目の数になり、50番目にあった数が2番目になり、・・・・ というように入れ替えられる。
この作業が完了すると、ラウンドに入る前に入力は左右2つのグループに分けられる。入力は64ビットなので、左右に分けられたグループはそれぞれ32ビットの入力として次のファイステル関数へと入っていく。
3.3. ファイステル(F)関数
ファイステル(F)関数
ファイステル関数はブロックの右半分(32ビット)を入力として受け取り、出力を左半分(32ビット)にXOR加算する関数である。図式すると以下のようになる。
- 拡大
- 各行毎にラウンド鍵をXOR加算
- Sボックスによる非線型変換
- Sボックスからの出力を転置
- 結果を左グループにXOR加算
拡大
32ビットを48ビットに拡張する。図では ①で示されている部分である。入力のうち半分のビットの複製をビット列に加える。出力は6ビットの(行)が8個あり、そのうち真ん中の4ビットは入力の対応する4ビットの部分と同じで、両端のビットは入力上で隣接する部分のビットの複製である。
各行毎にラウンド鍵をXOR加算
ラウンド鍵と、①で拡大された入力を各行でXOR演算する。
Sボックスによる非線型変換
②からの出力は8行6列のテーブルになっているが、各行毎に8個あるSボックスに入れる。つまり、1行目はSボックス1に入り、2行目はSボックス2に入り、・・・・・ となる。
後述のSボックスは各行の6ビットを4ビットに変換して出力するため、③の出力は8行4列のテーブルになる。
Sボックスからの出力を転置
この転置作業は、Sボックスからの8行4列のテーブルに対し、行を転置する。この作業により、各Sボックスの出力が次のラウンドでSボックスに展開されるとき、6個の異なるSボックスに分散するよう並べ替える。
結果を左グループにXOR加算
④の結果出てきた8行4列のテーブルを、左グループにXOR加算する。
3.4 Sボックス
先述のように、②でラウンド鍵を混ぜた後、6ビットずつに分けてSボックス (substitution box) に入力する。8個のSボックスは入力の6ビットから4ビットの出力を生成し、このときルックアップテーブルの形で提供される非線形な変換を行う。Sボックスは8個あり、ナンバリングされている。Sボックスを全て書いたものは以下の表である。
各Sボックスへの割り当て
②からの出力は8行あるため、各行が各Sボックスに入力される。Sボックス1に入力されるものは1行目であり、Sボックス2に入力されるものは2行目、・・・・・ と続いていく。
ボックス内の参照先決定
例えば入力が$010001$だった場合、参照後の出力は$10$となる。
各行は6つのビットからなっている。このうち1番目と6番目のビットにより、Sボックスのどの行を参照するかを決定する。次に、2、3、4、5番目のビットにより、どの列を参照するかを決定する。
例えば、入力が$010001$の時、1番目と6番目は$01$なので、Sボックスの1と書かれた行を参照することが決定。次に、2、3、4、5番目が$1000$であるため、Sボックスの1000と書かれた列を参照することを決定する。したがって、参照された後の出力は$10$となる。
SボックスがDESの安全性の根幹であり、これがないと暗号は線形なものとなって容易に破ることができることになる。
ただ、このSボックスがなぜこうデザインされているのか疑問に持った人も多いのではないだろうか。これではあまりにもブラックボックスすぎて、なぜこれで安全性が担保されるのか全くわからない。
ただし、このSボックスのデザインはとても秀逸に行われている。例えば、もしSボックス3とSボックス7が入れ替わったデザインの場合、極端に弱い暗号になってしまうことが知られている。
同じように、DESが発表された時にこのSボックスに対していろいろな議論が交わされた。どうやってこれが決められたのかが謎だったため、NSAがIBMに介入し、NSAだけが解読できる工夫をSボックスに施したのではないか、という陰謀論が囁かれたのである。以下はウィキペディアから取ってきたものだが、とても面白いので読んでみてほしい。
NSAの設計への関与
1975年3月17日、規格案としてのDESが Federal Register に発表された。そしてコメントが募集され、翌年には2回ワークショップを開催してこの規格案について議論した。各所から様々な批判が寄せられた。中には公開鍵暗号の先駆者であるマーティン・ヘルマンとホイットフィールド・ディフィーの批判があり、鍵長が短いという点と謎めいた「Sボックス」がNSAによる不適切な干渉を意味しているのではないかと指摘した。
それは、このアルゴリズムを諜報機関が密かに弱め、その諜報機関だけが暗号化されたメッセージを容易に解読できるようにしたのではないかという疑いが持たれたのである。アラン・コンハイム(DES設計者の1人)はそれについて「我々はSボックスをワシントンに送った。戻ってきたものは送ったものとは全く異なっていた」と述べた。アメリカ合衆国上院諜報特別委員会がNSAの行為に不適切な干渉があったかどうかを調査した。調査結果の公開された要約には次のように書かれている。
「DESの開発において、NSAはIBMに対して鍵長が短くても大丈夫だと納得させ、Sボックスの開発を間接的に支援し、最終的なDESアルゴリズムが統計学的にも数学的にも考えられる最高のものだと保証した」
しかし、同時に次のようなことも判明している。「NSAはいかなる形でもアルゴリズムの設計を改変していない。IBMはこのアルゴリズムを発明・設計し、関連する設計上の意思決定は全てIBMが行い、鍵長もDESのあらゆる商用の用途にとって十分な長さとして決定した」
DES設計チームのウォルト・タックマンは「我々はIBM内でIBMの人員だけでDESアルゴリズム全体を開発した。NSAに命じられて変更した部分は1つもない」と述べた。
4. DESの利点
4.1. 組み込みやすさ
DESのアルゴリズムを図にすると、かなり複雑な処理を行っているように見える。だが実際には、ハードウエアとして実装するなら簡単なビット演算(XOR演算)とシフト、テーブル参照などだけで処理できるため、非常に高速に処理できる。
4.2. 解読の難解さ
DESが開発された後、DESの解読を目的とした研究が盛んに行われるなか、DESはその堅牢性を崩すことがなかった。様々な解読法が研究される中で、DESを設計したIBMとNSAの設計の崇高さが露見していった。
それを知るために、ここでは全数探索法と、ショートカット法について少しだけ言及した後、ウィキペディアからのエピソードを紹介する。
全数探索法とショートカット法
鍵の総当たりで解読する方法を全数探索法や、総当たり法と呼ぶ。全数探索法は、暗号のアルゴリズムにかかわらず任意の暗号に対して適用できるが、鍵のビット長が$n$ のとき、$2^n$の試行回数が必要である。つまり、ハードウェアの計算能力による。総当たり法では、平文と暗号文のペアが少数与えられた時に、鍵の候補を総当たりで試す。したがって、鍵のビット数は、これからの計算機能力の進化を考えても十分に探索し尽くすことができないと思われる長さに設定される。これに対し、暗号アルゴリズムの内部構造の知識を生かし、全数探索法より少ない試行回数で暗号の解読を目指す方法を、ショートカット法という。
IBMとNSAの驚くべき策略
1990年、エリ・ビハムとアディ・シャミア(RSAのS)が差分解読法を独自に発見して公表した。差分解読法はブロック暗号を破る汎用技法である。DESのSボックスは無作為に選ばれた場合よりもこの攻撃法にずっと抵抗力があり、IBMが1970年代にこの攻撃法を知っていた(!!!)ことを強く示唆していた。1994年、ドン・コッパースミスがSボックスの元々の設計基準について一部を公表したことで、それが裏付けられた。
スティーブン・レビーによれば、IBMでは1974年に差分解読法を発見していたが、NSAがそれを秘密にするよう要請していたという。コッパースミスはIBMの方針について「(差分解読法)は非常に強力なツールであり、様々な方式に応用でき、これを公にすると国家の安全に悪い影響を及ぼすことが懸念された」と述べている。
このように、DESは当時のアメリカの頭脳全てをつぎ込み生み出された、20世紀最強の暗号だったのである。
5. DESの弱点
5.1. 鍵長
20世紀の最後から21世紀にかけて、コンピューターの計算能力の進化には目覚ましい発展があった。それに伴い、DESは今では多くの用途において安全ではないと見なされている。これは主に56ビットという鍵長が短すぎることに起因する。
1999年1月、distributed.netと電子フロンティア財団は共同で、22時間15分でDESの鍵を破ったことを公表した。これは前述の総当たり法を使った例であり、彼らはDES解読用のハードウェアを、ネットワークでつないだ複数の計算機で並列で走らせた。それによりこの22時間という驚異的なタイムでDESを破ったのだった。DES暗号を破るコンテストも開催され、条件次第では数秒で暗号を破ることが可能であることが明らかとなるに至り、新しい標準暗号の必要性が決定的となった。
6. DESの改良型
もう1つの理論的攻撃法である線形解読法は1994年に公表された。上記の通り1998年には総当り攻撃で実用的な時間でDESを破れることが実証され、アルゴリズムの更新の必要性が高まった。1990年代後半になると、総当たり攻撃による解読の成功例が報告されるようになった。そこで1998年に登場したのが、DESを強化した3DESだ。
6.1. トリブルDES
トリプルDES(トリプルデス、英語: Triple DES、3DES)とは、共通鍵ブロック暗号であるDESを3回施す暗号アルゴリズム。正式名称はTriple Data Encryption Algorithm(TDEA、Triple DEA)。時代の流れに伴い、鍵長56ビットのDESでは総当たり攻撃への耐性が低くなったことから、これを補う目的で考案された。
3DESは、DESを「暗号」「復号」「暗号」の順で3回実行することで暗号強度を高める。実装が比較的容易なことから、3DESはクレジットカードの暗号化など、金融関連で幅広く利用されてきた。
ここで、3つの鍵{k1,k2,k3}を使うトリプルDES (-EEE) が、1つの鍵k4でDESを行う場合よりも安全性が向上するかが問題となるのだが、DESを多段にすることで鍵空間は拡大できることが示され、トリプルDESの優位性が証明されている。
トリプルDESの種類
トリプルDESは前述の通りDESの操作を3回繰り返すことで暗号強度を高める手法であるが、その3回に使う鍵をどう選ぶかで3種類に分類される。各種類により、鍵空間の大きさが異なる。分類方法とその鍵空間の大きさは以下である。
- k1, k2, k3 すべてが異なる場合
- k1 と k2 が異なり、k3 = k1 の場合
- k1 = k2 = k3の場合
k1, k2, k3 すべてが異なる場合
3 × 56 = 168ビットの鍵長となるが、既知の攻撃法が存在するため実質的な暗号強度は112ビットとなる。3TDEA、3-key 3DES などと呼ばれる。
k1 と k2 が異なり、k3 = k1 の場合
2 × 56 = 112ビットの鍵長となるが、既知の攻撃法が存在するため実質的な暗号強度は80ビットとなる。中間一致攻撃への耐性があるため、単純にDESで2回暗号化するよりは安全である。2TDEA、2-key 3DES などと呼ばれる。
k1 = k2 = k3の場合
DESと同じであり、56ビットの鍵長を持つ。このオプションにより、トリプルDESはDESに対して上位互換性を持つ(DESによって暗号化された文章をトリプルDESで復号できる。)
7. DESの次の暗号
さらばDES暗号、2023年終了へカウントダウン
https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00001/00986/
米国立標準技術研究所(NIST)が2018年7月19日、DESを強化した暗号アルゴリズムである「3DES」について、これから開発するアプリケーションで採用することをやめ、2023年以降は使用を禁止することを提案したからだ。
前述の通り、コンピューターの計算スペックの向上により、56ビットの鍵長であるDESが全数探索法で簡単に破られてしまう未来が近いことがわかっている。そこで、アルゴリズムの更新の必要性が高まり、DESにとって変わる次の標準暗号アルゴリズムを、米国政府は募集し次の暗号アルゴリズムを選定した。
7.1. AES
2001年にAESが米国政府の標準暗号アルゴリズムとなり、DESはより安全なAESに取って代わられた。
その大きな強みは鍵長を選択できることにある。暗号アルゴリズムを破るのにかかる時間は、通信の保護に使われる鍵の長さに依存する。AESでは128bit、192bit、256bitの長さの鍵を選べる。それぞれDESが使用する56bitの鍵と比べて長く、暗号強度を高めやすい。AESの方がDESより高速に暗号化できる点でも優れている。そのため低遅延や高スループットが要求されるアプリケーション、ファームウェア、ハードウェアでの利用に適している。
7.2. 公開鍵方式
「共通鍵暗号」の最大の問題は、他人に知られてはいけない鍵の配送をどのように行うかであった。
2000年以上人類を悩ませていたこの問題を解決に導いた発明が、1976年ホイットフィールド・デフィーとマーティン・ヘルマン、ラルフ・マークルによって考案・発表された「公開鍵暗号」である。そしてDESが採用された1977年には、この理論を実装した「RSA」暗号が登場した。
7.3. 次世代型暗号
次世代型暗号として、格子暗号をはじめとした高機能暗号の研究も盛んに行われている。
次世代暗号については以前に少しだけまとめているので、興味のある方はぜひ量子耐性をもつ暗号まとめ①をご覧いただきたい。
8. まとめ
今回は20世紀最後から現在にかけて通信の安全性に大きく貢献した、「DES暗号」について解説した。
DESの開発により、解読法の研究など多くの研究が進み、社会的技術としての貢献とともに、暗号の学術的にも比類なき貢献がなされた。
多くの歴史的背景や、陰謀論などを含めながら学習することでとても面白かった。
次は今回は深掘りできなかったショートカット法である、線形解読法や差分解読法について学習してみたい。
もしこの記事で暗号について興味を持っていただけた方は、「いいね」や「コメント」をよろしくお願いいたします!!
おわり。
参考文献
- https://ja.wikipedia.org/wiki/Data_Encryption_Standard
- https://www.atmarkit.co.jp/ait/articles/1505/21/news030.html
- https://tech.nikkeibp.co.jp/atcl/nxt/column/18/00001/00986/
- http://www.arch.cs.kumamoto-u.ac.jp/~kuga/cad/crypt/des/
- https://techtarget.itmedia.co.jp/tt/news/1912/06/news06.html
- https://www.hummingheads.co.jp/reports/series/ser01/110915.html
- https://www.secomtrust.net/secword/des.html
- https://ja.wikipedia.org/wiki/%E3%83%88%E3%83%AA%E3%83%97%E3%83%ABDES
- https://www.geeksforgeeks.org/data-encryption-standard-des-set-1/
- http://kazukichi.hatenablog.jp/entry/2017/12/02/165356
- https://www.ipa.go.jp/security/enc/smartcard/node42.html