ブロック暗号(ブロックあんごう、英語: Block cipher)とは、共通鍵暗号の一種で、固定長のデータ(ブロックと呼ぶ)を単位として処理する暗号の総称である。これに対して、ビット単位やバイト単位で処理を行う暗号はストリーム暗号と呼ばれる。

## 概要

ブロック暗号は、$b$ ビットのブロックと $n$ ビットの鍵を入力として、$b$ ビットのブロックを出力する。暗号化 (encryption) $E$ と復号 (decryption) $E^{-1}$ の2つのアルゴリズムからなる。任意の鍵 $k$ について、復号アルゴリズムは暗号化アルゴリズムの逆関数になっていて、

$$E_{k}^{-1}(E_{k}(m))=m$$

を満たす($m$ は任意のブロック)ようになっている。暗号化アルゴリズムの入力ブロックおよび復号アルゴリズムの出力ブロックは通信文、暗号化アルゴリズムの出力ブロックおよび復号アルゴリズムの入力ブロックは暗号文という。任意の長さの通信文を扱うために、暗号利用モードが用意されている。ブロック暗号は確定的暗号であり、鍵を一つ固定すると、同じ平文は必ず同じ暗号文に暗号化される。すなわち、同じ暗号文があった場合、そのブロックの平文は同じであるという情報が漏れてしまう。暗号利用モードでは、このような問題を解決する機能ももつ。

換字と転置を組み合わせた共通鍵暗号でも、複数の法に基づく大きなブロックの換字式ストリーム暗号と転置式暗号を組み合わせることで解読の著しく難しい暗号が構成できる。

代表的なブロック暗号として、米NISTが制定したDES (Data Encryption Standard)やトリプルDES、AES (Advanced Encryption Standard) がある。日本製のブロック暗号として、MISTY1やCamelliaなどが知られている。

## 構造

ブロック暗号は、メインのスクランブラと拡大鍵を生成する鍵スケジューラから構成されているものが多い。さらに、鍵スケジューラは鍵を入力として複数個の拡大鍵を出力し、スクランブラは複数のラウンドからなり、個々のラウンドで拡大鍵を使って入力の置換・転置等を行う構成になっているものが多い。この構成の暗号をProduct cipher(積暗号)という。また、ラウンドが同じ関数の繰り返しになっている場合にはIterated cipher(繰返し暗号)という。

ラウンド関数は置換や転置、論理演算、算術演算などのシンプルな部品で構成されていて、ラウンド関数を複数段、重ねることで十分な強度のスクランブルを行うものである。ラウンド段数は、通常、アルゴリズムの仕様によって指定されているが、セキュリティパラメータとして利用者が選択するものもある。

ラウンド関数の主な構成法にはFeistel構造とSPN構造の2つがある。DES, MISTY1, CamelliaはFeistel構造で、AESはSPN構造の暗号である。

## 用途

ブロック暗号は公開鍵暗号に比して高速であるため、公開鍵暗号と組み合わせたハイブリッド暗号では公開鍵暗号で暗号化されたセッション鍵を用いた本文の暗号化・復号に用いられる。

また、パスワードの保存のための一方向性関数として用いられたり (UNIXの/etc/passwd等) 、メッセージ認証コード (MAC) に用いられる。

擬似乱数列の生成にも用いられる (see NIST SP800-90) 。

## 標準

暗号標準として採用(もしくは推奨)されているブロック暗号には次のものがある。

- 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限定受信方式
  - KASUMI - 3GPP W-CDMAおよびGSM用の暗号
- 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$ビットに対して$2^{n}$の計算量的安全性以上の安全性をもたない。すなわち、鍵の全数探索で必ず解読可能である(平均解読計算量は半分の$2^{n-1}$となる)。
これは、ブロック暗号の鍵長を定める際に最も重要な要素の一つであり、現在DES(56ビット)が推奨されないのもその鍵長の短さが原因の一つである。

ただし、ブロック長$b$が$b<n$である場合、ある通信文と暗号文の対(ペア)に対して、平均して$2^{n-b}$の鍵候補が存在する。一つの通信文暗号文対では、鍵候補の中に真の暗号化鍵は存在するが、どの鍵候補が真の暗号化鍵であるかは判定できない。$p$個の通信文暗号文対が存在して、$bp>n$ならば、真の暗号化鍵が得られることが期待できる。

### ショートカット法

ブロック暗号アルゴリズムの弱点を用いて鍵の全数探索以下の計算量で鍵(の一部)を求める手法を総称してショートカット法と呼ぶ。ショートカット法には多くの種類があるが、ここでは代表的なものを列挙する。

- 差分解読法(差分暗号解読) en:Differential cryptanalysis (Biham, 1989)
  - 不能差分解読法 en:Impossible differential cryptanalysis
  - 切詰差分解読法 Truncated Differential Cryptanalysis
  - 高階差分解読法 Higher Order Differential Cryptanalysis
    - Square攻撃 en:Square attack
    - 飽和攻撃 Saturation Attack
  - ブーメラン攻撃 en:Boomerang attack
  - 補間攻撃 en:Interpolation attack (Jakobsen, Knudsen, 1997)
    - 線形和攻撃 Linear Sum Attack (Aoki, 1999)
- 線形解読法(線形暗号解読) en:Linear cryptanalysis (Matsui, 1993)
  - 差分線形攻撃 en:Differential-linear attack
  - 切詰線形攻撃 Truncated Linear Attack
- スライド攻撃 en:Slide attack (David Wagner, Alex Biryukov, 1999)
- カイ2乗攻撃 $\chi ^{2}$ Attack
- mod n攻撃 en:Mod n cryptanalysis
- XSL攻撃 en:XSL attack

ショートカット法が存在するアルゴリズムは学術的には「解読可能」と呼ばれるが、その必要な計算量が現実的であるかどうかは考慮されない。学術的に解読可能であることは、必ずしもその暗号を利用したシステムの破綻につながるわけではない。しかしながら、設計者が想定した強度を有していないという事実は、その暗号アルゴリズムが信頼性の低い暗号アルゴリズムであることを意味する。

### サイドチャネル攻撃

ハードウェアやソフトウェアに実装された暗号を、アルゴリズムではなく消費電力や実行時間等の情報を用いて攻撃する手法をサイドチャネル攻撃と呼ぶ。サイドチャネル攻撃は実装とアルゴリズムの両方に影響される。

- 単純電力解析 Simple Power Analysis
- 電力差分攻撃 en:Differential power analysis
- タイミング攻撃 en:Timing attack