Encryption

暗号化(あんごうか) (Encryption)は、平文(ひらぶん)暗号文(あんごうぶん)変換(へんかん) するプロセスで、(かぎ) がなければ復元(ふくげん) できません。

Block Cipher ブロック暗号

ブロック暗号(あんごう) は、データを固定(こてい) サイズのブロック(AESは16 bytes)に分割(ぶんかつ) し、ブロックごとに暗号化(あんごうか) します。

暗号化モード比較

Mode of Operations: ECB / CBC / CFB / OFB / CTR / GCM

AES ModePadding必要暗号化後の長さ特性復号時Unpad必要IV必要AAD対応暗号化後の出力構成備考
ECB✅ 必要Block Sizeの倍数(16n)✅ 必要❌ 不要❌ 非対応Ciphertext各ブロック独立 → 同じ平文は同じ暗号文、パターン分析攻撃に脆弱、非推奨
CBC✅ 必要Block Sizeの倍数(16n)✅ 必要✅ 必要❌ 非対応IV + Ciphertext初期IVはランダム生成、復号時に必要、ECBより安全
CFB❌ 不要平文と同じ長さ(n)❌ 不要✅ 必要❌ 非対応IV + Ciphertextバイト単位のストリーム暗号化に適合、前の暗号文ブロックを入力として使用
OFB❌ 不要平文と同じ長さ(n)❌ 不要✅ 必要❌ 非対応IV + CiphertextCFBに類似、暗号化後のIVを次の入力として使用、安定性が高い
CTR❌ 不要平文と同じ長さ(n)❌ 不要✅ 必要(Counter)❌ 非対応Nonce + Counter + Ciphertextブロック暗号をストリーム暗号としてシミュレート、非同期暗号化/復号化に対応
GCM❌ 不要平文 + 16 bytes Tag❌ 不要✅ 必要対応IV + Ciphertext + Tag暗号化と認証(AEAD)、AAD対応、API / JWT / HTTPSなど安全な転送に最適

用語説明

用語説明
IV(Initialization Vector)初期化ベクトル、同じ平文でも毎回異なる暗号化結果を保証、通常ランダム生成
Padding16 bytesに揃えるため、PKCS#7 / ZeroPaddingなどの方式で埋める
Tag(認証タグ)GCMモードで暗号文とAADの改ざんを検証、復号時に検証失敗するとエラー
AAD(Additional Authenticated Data)追加認証データ、暗号化されないが署名で検証される(APIヘッダー、ユーザーIDなど)
Nonce / CounterCTR / GCMモードのカウンター(またはランダム値)、IVと同様の役割、予測可能で増加可能

モード選択の推奨

使用シーン推奨モード
静的データ暗号化(頻繁に変更しない)CBC + PKCS7 padding(IV管理が必要)
動的転送(API / Websocket)GCM(認証Tag付き、高セキュリティ)
非同期暗号化/復号化(マルチスレッド / キャッシュ)✅ CTR / GCM
ハードウェアアクセラレーション対応✅ GCM(ほぼすべての現代ハードウェア/SDKが対応)
機密性が必要だが暗号文の重複を気にしないCFB / OFBを使用可能

暗号化モード図解

ECB(Electronic CodeBook Mode)

Plain Block 1      Plain Block 2      Plain Block 3
     |                  |                  |
     v                  v                  v
+----------+       +----------+       +----------+
| Encrypt  |       | Encrypt  |       | Encrypt  |
+----------+       +----------+       +----------+
     |                  |                  |
     v                  v                  v
Cipher Block 1     Cipher Block 2     Cipher Block 3

(かく) ブロックは独立(どくりつ) して暗号化(あんごうか) され、(おな)平文(ひらぶん)(おな)暗号文(あんごうぶん)生成(せいせい) するため、分析(ぶんせき) されやすい。

CBC(Cipher Block Chaining Mode)

IV -----> XOR <---- Plain Block 1
           |
           v
      +----------+
      | Encrypt  |
      +----------+
           |
           v
     Cipher Block 1 -----> XOR <---- Plain Block 2
                            |
                            v
                       +----------+
                       | Encrypt  |
                       +----------+
                            |
                            v
                      Cipher Block 2 -----> XOR <---- Plain Block 3
                                             |
                                             v
                                        +----------+
                                        | Encrypt  |
                                        +----------+
                                             |
                                             v
                                       Cipher Block 3

(かく) ブロックの暗号化(あんごうか)(まえ)暗号文(あんごうぶん) ブロックに依存(いぞん) し、初期化(しょきか) にIVが必要(ひつよう)

Stream Cipher ストリーム暗号

ストリーム暗号(あんごう) は、ビット単位(たんい) またはバイト単位(たんい) でデータを処理(しょり) し、リアルタイム暗号化(あんごうか) シーンに(てき) しています。CTRモードはブロック暗号(あんごう) をストリーム暗号(あんごう) としてシミュレートできます。

MAC(Message Authentication Code)

メッセージ認証(にんしょう) コードは、メッセージの完全性(かんぜんせい)送信元(そうしんもと)真正性(しんせいせい)確認(かくにん) するために使用(しよう) されます。

  • HMAC:ハッシュ関数(かんすう)使用(しよう) (HMAC-SHA256など)
  • CMAC:ブロック暗号(あんごう)使用(しよう) (AES-CMACなど)

GCMモードには内蔵(ないぞう) のMAC機能(きのう) があり、AEAD(Authenticated Encryption with Associated Data)を提供(ていきょう) します。

E2EE(End-to-End Encryption)

エンドツーエンド暗号化(あんごうか) は、通信(つうしん) する両者(りょうしゃ) のみがメッセージ内容(ないよう)() めることを保証(ほしょう) し、中間(ちゅうかん) のサーバーは復号(ふくごう) できません。

一般的(いっぱんてき)用途(ようと)

  • インスタントメッセージング(Signal、WhatsApp)
  • セキュアメール(ProtonMail)
  • ビデオ会議(かいぎ) (Zoom E2EE)