初級では「同じ鍵で施錠・開錠」と捉えました。上級では、中身の仕組みと、正しい使い方(モード) へ。
概要 — まず全体をつかむ
詳細 — 1段階ずつ追う
ブロック暗号の中身
代表の AES はブロック暗号。固定長(128ビット)のブロック単位で、鍵に応じて置換と転置を何ラウンドも繰り返す(SPN構造)ことで、平文と鍵の関係をかき混ぜます。
- ブロック暗号 — 固定長ずつ処理(AES)
- ストリーム暗号 — ビット列に鍵ストリームをXOR(ChaCha20など)
- 鍵長 — AES-128/256。長いほど総当たりに強い
やさしく言うと(中級)
共通鍵暗号には、処理の単位で2つの型があります。
- ブロック暗号 — 固定長(AESは128ビット)ずつ処理する。鍵に応じて中身をかき混ぜる
- ストリーム暗号 — ビット列に鍵ストリームをXORしていく(ChaCha20など)
- 鍵長 — AES-128/256。長いほど総当たりに強い
どちらも「同じ鍵で暗号化・復号できる」点は共通で、速いのが強みです。
利用モードが決定的に重要
ブロック暗号は「どう連結するか(モード)」で安全性が大きく変わります。
- ECB(使ってはいけない) — ブロックごと独立。同じ平文が同じ暗号文になり模様が残る
- CBC — 前のブロックと連鎖。IVで撹拌(IVの予測不可・パディングに注意)
- CTR — カウンタから鍵ストリームを生成(並列可)。nonce一意が必須
- GCM(推奨) — CTR+認証タグ。暗号化と改ざん検知を一体で(AEAD)
- 鍵導出(KDF) — パスワードから鍵を作るには専用のKDF(PBKDF2/argon2)
やさしく言うと(中級)
ブロック暗号は、ブロックをどう連結するか(利用モード)で安全性が大きく変わります。
- モードの存在 — 同じ鍵でも、モードが悪いと規則性が漏れる(ECBは非推奨)
- IV/nonce — 毎回変わる初期値で暗号文を撹拌し、同じ平文が同じ暗号文にならないようにする
- 認証付き暗号(AEAD) — GCMなどは暗号化と改ざん検知を一体で行う(推奨)
- 鍵導出(KDF) — パスワードから鍵を作るときは専用の関数を使う
(各モードの詳しい仕組みは上級で扱います)
アニメーション『ブロック暗号のモード(ECB vs CBC/CTR)』を開く
⚠️ 実装の落とし穴
- ECBの使用 — パターンが透ける(有名な「ペンギン画像」)
- nonce/IV再利用 — CTR/GCMでは致命的(鍵ストリーム再利用で平文露出)
- パディングオラクル — CBCのパディング検証の情報が漏れると復号される
- 認証なし暗号 — 改ざん検知が無いと、暗号文を細工される(AEADで防ぐ)
- 鍵管理 — 結局は鍵の保管・配送・ローテーションが最重要
やさしく言うと(中級)
- 鍵配送問題 — 同じ鍵をどう安全に渡すか。実際は公開鍵と組み合わせて解く
- IV/nonceの使い回し — 同じ鍵で再利用すると規則が漏れ、平文が復元されうる
- 認証なし暗号 — 改ざん検知が無いと暗号文を細工される(AEADで防ぐ)
- 鍵管理 — 保管・配送・ローテーションが結局は最重要
理解度チェック
そのまま解けます(成績は保存されません)。無料アカウントを作ると、学習の記録と進捗の山登りが始まります。
問1. CBCで「パディング検証の成否」が攻撃者に漏れると成立しうる攻撃はどれ?
問2. パスワードから暗号鍵を作るための専用関数(PBKDF2やargon2など)の総称を、英字3文字の略語で答えてください。
問3. 暗号化と改ざん検知(認証)を一体で行う暗号方式の総称を、英字4文字の略語で答えてください。
問4. CTRやGCMで、同じ鍵のもとnonce(初期値)を使い回すと?
問5. 同じ平文ブロックが同じ暗号文になり、模様が透けてしまう危険な利用モードは?
問6. AESのブロック暗号が一度に処理する固定長(ブロック長)はどれ?
問7. CBCモードのIV(初期化ベクトル)に求められる性質として正しいのは?
問8. GCMがCTRに対して追加で提供するものはどれ?