ブロック暗号(- あんごう、Block cipher)とは、共通鍵暗号の一種で、ブロックと呼ばれる固定長のデータを単位として暗号化復号を行う暗号である。これに対して、ビット単位やバイト単位で暗号化を行う暗号はストリーム暗号と呼ばれる。
目次
1 概要
2 構造
3 用途
4 標準
5 安全性
5.1 計算量的安全性
5.2 ショートカット法
6 歴史
7 関連項目
//
ブロック暗号は、NbビットのブロックとNkビットの鍵を入力として、Nbビットのブロックを出力する、暗号化(encryption) E と復号(decryption) E-1 の2つのアルゴリズムからなる。任意の鍵kについて、復号アルゴリズムは暗号化アルゴリズムの逆関数になっていて、
を満たす(mは任意のブロック)ようになっている。暗号化アルゴリズムの入力ブロック、復号アルゴリズムの出力ブロックは平文、暗号化アルゴリズムの出力ブロック、復号アルゴリズムの入力ブロックは暗号文という。任意サイズの平文を扱うために、暗号利用モードが用意されている。ブロック暗号は確定的暗号であり、鍵を一つ固定すると、同じ平文は必ず同じ暗号文に暗号化される。すなわち、同じ暗号文があった場合、そのブロックの平文は同じであるという情報が漏れてしまう。暗号利用モードでは、このような問題を解決する機能も持つ。
ブロック長Nbは64bitや128bitが代表的である。暗号アルゴリズムによっては、ブロック長をパラメータで指定でき、ブロック長を変えられるものもある。
鍵長Nkは 40/56/64/80/128/192/256bit などがある。
代表的なブロック暗号として、米NISTが制定したDES (Data Encryption Standard, FIPS PUB 46)やAES (Advanced Encryption Standard, FIPS PUB 197)がある。日本産のブロック暗号として、MISTY1やCamelliaなどが知られている。
ブロック暗号は、メインのスクランブラと拡大鍵を生成する鍵スケジューラから構成されているものが多い。さらに、鍵スケジューラは鍵を入力として複数個の拡大鍵を出力し、スクランブラは複数のラウンドからなり、個々のラウンドで拡大鍵を使って入力の置換・転置等を行う構成になっているものが多い。この構成の暗号をProduct cipher(積暗号)という。また、ラウンドが同じ関数の繰り返しになっている場合にはIterated cipher(繰返し暗号)という。
ラウンド関数は置換や転置、論理演算、算術演算などのシンプルな部品で構成されていて、ラウンド関数を複数段、重ねることで十分な強度のスクランブルを行うものである。ラウンド段数は、通常、アルゴリズムの仕様によって指定されているが、セキュリティパラメータとして利用者が選択するものもある。
ラウンド関数の主な構成法に、Feistel構造とSPN構造の2つがある。DES, MISTY1, CamelliaはFeistelで、AESはSPNの暗号である。
ブロック暗号は公開鍵暗号に比して高速であるため、公開鍵暗号と組み合わせたハイブリッド暗号では公開鍵暗号で暗号化されたセッション鍵を用いた本文の暗号化・復号に用いられる。
また、パスワードの保存のための一方向性関数として用いられたり (UNIXの/etc/passwd等) 、メッセージ認証コード (MAC) に用いられる。
擬似乱数列の生成にも用いられる(see ⇒SP800-90) 。
暗号標準として採用(or推奨)されているブロック暗号には次のものがある。
64bit
TDEA - ISO/IEC_18033, CRYPTREC
MISTY1 -ISO/IEC_18033, CRYPTREC, NESSIE
CAST-128 -ISO/IEC_18033
CIPHERUNICORN-E - CRYPTREC
Hierocrypt-L1 -CRYPTREC
MULTI2 - ARIB限定受信方式
128bit
AES -ISO/IEC_18033, CRYPTREC, NESSIE
Camellia -ISO/IEC_18033, CRYPTREC, NESSIE
SEED -ISO/IEC_18033
CIPHERUNICORN-A - CRYPTREC
Hierocrypt-3 -CRYPTREC
SC2000 -CRYPTREC
256bit
SHACAL-2 -NESSIE
ブロック暗号はもとより鍵長nビットに対して2nの計算量的安全性以上の安全性を有しない。すなわち、鍵の全数探索で必ず解読可能である。 これは、ブロック暗号の鍵長を定める際に最も重要な要素の一つであり、現在DES (56ビット) が推奨されないのもその鍵長の短さが原因のひとつである。
ブロック暗号アルゴリズムの弱点を用いて鍵の全数探索以下の計算量で鍵(の一部)を求める手法を総称してショートカット法と呼ぶ。ショートカット法には多くの種類があるが、ここでは代表的なものを列挙する。
差分解読法(差分暗号解読) ⇒en:Differential cryptanalysis (Biham,1989)
不能差分暗号解読
切詰差分解読法 Truncated Differential Attack
高階差分解読法
Square攻撃
ブーメラン攻撃 ⇒en:Boomerang attack
補間攻撃 (Jakobsen, Knudsen, 1997)
線形和攻撃
線形解読法(線形暗号解読) ⇒en:Linear cryptanalysis (Matsui,1993)
差分線形攻撃 ⇒en:Differential-linear attack
切詰線形攻撃
スライド攻撃 ⇒en:Slide attack (David Wagner,Alex Biryukov,1999)
カイ2乗攻撃
mod n攻撃 ⇒en:Mod n cryptanalysis
XSL攻撃 ⇒en:XSL attack
ショートカット法が存在するアルゴリズムは学術的には「解読可能」と呼ばれるが、その必要な計算量が現実的であるかどうかは考慮されない。すなわち、学術的に解読可能であることが、即、その暗号を利用したシステムの破綻につながるわけではない。しかしながら、設計者が想定した強度を有していないという事実はその暗号アルゴリズムが信頼性の低い暗号アルゴリズムであることを意味する。