セキュリティを高める一つの基準「CRYPTREC」は大切!
- セキュリティを高めるためには、暗号だけでは足りない!
- セキュリティには鍵がキーになる!
- 対称暗号(共通鍵暗号)といえば、AES!
- セキュリティを高める一つの基準「CRYPTREC」は大切!
- 非対称暗号(公開鍵暗号)といえば、RSA!
- ハイブリッド鍵暗号システムは対称(共通鍵)暗号と非対称(公開鍵)暗号のいいとこどり!
- 一方向ハッシュ関数は「一方通行の指紋」だった!
- メッセージ認証コードの弱点は「否認防止」だった!
- 「誰が作成したの?」を解消するデジタル署名!
- 証明書を証明する最上位認証局(ルートCA)は最重要!
はじめに
2025年10月のプロジェクトマネージャ試験受験を終え、2026年春の情報処理安全確保支援士に向けて勉強中です。
セキュリティに関して無知であるため、資格勉強の傍ら暗号技術入門 第3版 秘密の国のアリスを読んでいます。
本記事は、そんなセキュリティ初心者による読書感想文です。
本記事では、書籍のうち「第1部」と「第2部」の内容のみ扱います。そのため、より詳しい内容や「第3部」については書籍をご参照ください。
目的
固定長で暗号化するブロック暗号のモードについて学びます。
対象
固定長で暗号化するブロック暗号のモードについてザックリと把握されたい方を対象としています。
ブロック暗号とストリーム暗号
暗号アルゴリズムは、ブロック暗号とストリーム暗号の2つにわけることができます。
ブロック暗号:ある特定のビット数のまとまりを一度に処理する暗号アルゴリズムの総称です。
ストリーム暗号:1, 8, 32ビットなどの単位で順次処理する暗号アルゴリズムの総称です。
モード
ブロックを暗号化するときの方法のことを指します。
主なモードは下記の通り、5種類があります。
- ECBモード:ElectronicCodeBookMode(電子符号表モード)
- CBCモード:CipherBlockChainingMode(暗号ブロック連鎖モード)
- CFBモード:CipherFeedBackMode(暗号フィードバックモード)
- OFBモード:OutputFeedBackMode(出力フィードバックモード)
- CTRモード:CounTeRMode(カウンタモード)
平文ブロックと暗号ブロック
平文ブロックとは、ブロック暗号アルゴリズムで暗号化の対象となる平文のことです。
暗号ブロックとは、ブロック暗号アルゴリズムを使って平文ブロックを暗号化した暗号文のことです。
最後の平文ブロックがブロック長に満たない場合はパディングと呼ばれるデータを埋めます。
ECBモード
平文ブロックをそのまま暗号化するモードですので、シンプルですが、最も機密性の低いです。
平文ブロックをそのまま暗号化するということは、ある平文に対応する暗号文の対応表を用意する必要があります。
ECBモードでは、暗号文ブロックを入れ替えることで任意の平文に入れ替えることができます。
CBCモード
1つ前の暗号文ブロックと平文ブロックのXORをとってから暗号化します。
最初の平文ブロックを暗号化するときは、1つ前の暗号文ブロックは存在しないため、1ブロック分のビット列を用意する必要があります。
この「1ブロック分のビット列」のことを初期化ベクトル(InitializationVector)といいます。
しかし、ある暗号文ブロックがネットワークなどでビットの欠落や破損があった場合、それ以降の暗号文ブロックの区切りがずれてしまうため、すべて復号化できなくなります。
パディングオラクル攻撃
ブロック暗号のパディングを利用した攻撃のことです。
攻撃者はパディングの内容を少しずつ変化させ、受信者に暗号文を送信します。
受信した暗号文を復号するとパディング部分が異なり、返却されるエラーを使い平文の情報を取得しようとします。
初期化ベクトルへの攻撃
当初は初期化ベクトルを前回暗号化した際の最後のブロックを用いていました。
しかし、これだと予測可能となり、初期化ベクトルが攻撃の標的となってしまいます。
これを防ぐために、現在では予測不可能な乱数を与えています。
CFBモード
1つ前の暗号文ブロックを暗号アルゴリズムの入力に戻します。
CBCモードと構造が似ていますが、CBCモードは平文ブロックが暗号アルゴリズムによって暗号化されているのに対して、CFBモードは平文ブロックを暗号アルゴリズムによって暗号化しません。
OFBモード
1つ前の暗号アルゴリズムの出力を暗号アルゴリズムの入力へフィードバックにします。
CFBモードと構造が似ていますが、CFBモードは1つ前の暗号ブロックが暗号アルゴリズムへの入力でしたが、OFBモードは1つ前の暗号アルゴリズムの出力が暗号アルゴリズムへの入力です。
つまり、暗号アルゴリズムへの入力だけが異なっています。
CTRモード
1つずつ増加していくカウンタを暗号化して、鍵ストリームを作り出すストリーム暗号です。
暗号化と復号化の構造が同じであるため、プログラムでの実装が容易です。これは、OFBモードと同じストリーム暗号の特徴です。
カウンタはノンスとブロック暗号からすぐに求めることができるため、ブロックを任意の順番で暗号化と復号化することができます。
これは、OFBモードにはなかった性質です。
カウンタの作り方
カウンタの初期値は暗号化のたびに異なる値(ノンス)をもとにして作ります。
ブロック長が128ビットだった場合、カウンタの初期値は下記のように構成されます。
前半(64ビット):ノンス
後半(64ビット):ブロック番号
上記のうち、ノンスは暗号化のたびに異なる値になり、ブロック暗号でカウントアップしていきます。
どのモードを使うか
| モード | メリット | デメリット | 備考 |
|---|---|---|---|
| ECBモード | シンプルで高速、かつ暗号化と復号化で並列処理可能 | 暗号文の操作で平文を書き換えられ、再生攻撃が可能 | 使うべきではない |
| CBCモード | 復号化のみ並列処理ができる | ある暗号文がエラーになると後続もすべてエラーとなる | CRYPTRECの秘匿モードガイドおよび NIST SP 800-38A などで標準的に定義されるモード |
| CFBモード | パディングがいらない、かつ復号化のみ並列処理ができる | ある暗号文がエラーになると後続もすべてエラーとなり、再生攻撃が可能 | CRYPTREC 推奨 |
| OFBモード | パディングがいらない、かつビット単位のエラーは対応する平文のビットのみエラーとなる | 暗号文ブロックのビット反転で対応する平文ブロックがビット反転する | CRYPTREC 推奨 |
| CTRモード | OFBモードと同様にストリーム暗号として扱え、さらに暗号化・復号とも並列化可能 | 暗号文ブロックのビット反転で対応する平文ブロックがビット反転する | CRYPTRECの秘匿モードガイドおよび NIST SP 800-38A などで標準的に定義されるモード |
CRYPTREC(Cryptography Research and Evaluation Committees)
日本の「電子政府推奨暗号リスト」に掲載される暗号技術の安全性を評価・監視するプロジェクトです。
この活動を通じて、信頼できる暗号技術を選定し、リスト化することで、日本の電子政府や社会全体のITセキュリティ基盤を支えています。
CRYPTREC暗号リストには、AES や Camellia といった共通鍵暗号とともに、CBC/CFB/CTR/OFB/ECB などの秘匿モードがガイドとして整理されています。
また、電子政府だけでなく企業でも、採用アルゴリズム・モードを選ぶ際の指針として利用されています。
Cryptography
メッセージを安全に符号化して送信する方法を研究する科学です。
暗号学とも呼ばれ、データの機密性だけではなく、識別・認証・否認防止・データの完全性にも取り組んでいます。



