対称暗号(共通鍵暗号)といえば、AES!
- セキュリティを高めるためには、暗号だけでは足りない!
- セキュリティには鍵がキーになる!
- 対称暗号(共通鍵暗号)といえば、AES!
- セキュリティを高める一つの基準「CRYPTREC」は大切!
- 非対称暗号(公開鍵暗号)といえば、RSA!
- ハイブリッド鍵暗号システムは対称(共通鍵)暗号と非対称(公開鍵)暗号のいいとこどり!
- 一方向ハッシュ関数は「一方通行の指紋」だった!
- メッセージ認証コードの弱点は「否認防止」だった!
- 「誰が作成したの?」を解消するデジタル署名!
- 証明書を証明する最上位認証局(ルートCA)は最重要!
はじめに
2025年10月のプロジェクトマネージャ試験受験を終え、2026年春の情報処理安全確保支援士に向けて勉強中です。
セキュリティに関して無知であるため、資格勉強の傍ら暗号技術入門 第3版 秘密の国のアリスを読んでいます。
本記事は、そんなセキュリティ初心者による読書感想文です。
本記事では、書籍のうち「第1部」と「第2部」の内容のみ扱います。そのため、より詳しい内容や「第3部」については書籍をご参照ください。
目的
対称暗号(共通鍵暗号)を学びつつ、現代の暗号化の特徴についても学びます。
対象
共通鍵暗号って何?という方を対象としています。
符号化
コンピュータが登場する前の暗号は人間の理解できる文字を暗号化していました。
一方で現代では、人間だけではなく、コンピュータの力も必要です。
なぜなら、現代の暗号が扱うデータ量は膨大であり、暗号アルゴリズムも複雑であるためです。
しかし、コンピュータでは、人間が読めるような文字を扱うことができないため、文字を「0」と「1」で表現するビット列に符号化(Encoding)する必要があります。
そして、メッセージをビット列に符号化した平文をもとに、暗号化します。
文字コード
符号化する際のルールとしては、下記文字コードがあります。
※ なお、本記事では本題からそれてしまうため、詳細の言及はしておりません。
- Unicode
- UTF-8
- UTF-16
- UTF-32
- Shift_JIS
- ISO-2022-JP
排他論理和(XOR)
基本/応用情報技術者試験を勉強してきた方ならわかるかもしれませんが、改めて勉強しなおします。
排他論理和とは下記の通り、「同じ数同士のXORは必ず0」になります。
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
また、記号であらわすと下記の通りです。
0 ⊕ 0 = 0
0 ⊕ 1 = 1
1 ⊕ 0 = 1
1 ⊕ 1 = 0
もう少し簡単に説明すると下記の通りです。
偶数(0) ⊕ 偶数(0) = 偶数(0)
偶数(0) ⊕ 奇数(1) = 奇数(1)
奇数(1) ⊕ 偶数(0) = 奇数(1)
奇数(1) ⊕ 奇数(1) = 偶数(0)
XORの特徴
XORは、同じ数字同士は必ず0になるため、「A ⊕ B」に「B」のXORを取るとAに戻ります。
つまり、同じ数同士打ち消しあうということです。
この特徴から平文と乱数のXORを取ることで暗号化でき、暗号文と先ほど登場した乱数のXORを取ることで復号できます。
使い捨てパッド
ブルートフォース攻撃で全数探索をすることでどんな暗号文も解読できますが、使い捨てパッドのみは例外です。
使い捨てパッドは、「平文とランダムなビット列とのXORを取る」というシンプルな暗号です。
しかし、使い捨てパッドは非常に使いにくい暗号という理由から、実際にはあまり使われません。
使い捨てパッドは解読できない?
Shannon が完全秘匿(PerfectSecrecy)を証明しており、前提条件(真性乱数・平文と同長・一度限りの利用)を満たす限り理論的に解読不可能です。
使い捨てパッドが使われない理由
使い捨てパッドが使われない理由は下記の通りです。
なお、鍵の生成と配送に膨大なお金と手間をかけることができ、機密性が最優先される場合には、使われることがあります。
- 鍵自体を安全に配送できないから
→ 鍵自体を安全に配送できれば平文そのものを安全に配送できます。 - 鍵自体を安全に保存できないから
→ 上記と同様に、鍵自体を安全に保存できれば平文そのものを安全に保存できます。 - 鍵の再利用ができないから
→ 「使い捨て」という名前の通り、一度使った鍵を再利用することはできません。 - 鍵のビット列にずれや欠損が生じ、復号化ができない可能性があるから
→ 鍵は平文と同様の長さになり、平文が100MBだと鍵も100MBとなり、配送中の欠損などで復号化ができなくなる可能性があります。 - 鍵の乱数生成には、再現性のない真の乱数が用いられる必要があるから
DES(DataEncryptionStandard)
1977年にアメリカ合衆国の連邦情報処理標準規格(FIPS)に採用された対称暗号です。
基本情報や応用情報などでは頻出単語ですね。
DESの暗号化は64ビットの平文を64ビットの暗号文に暗号化するアルゴリズムです。
鍵のビット長は64ビットであり、7ビットごとにエラー検出用1ビットが入るため、実質的には56ビットになります。
ブロック
DESでは、64ビットの平文をまとめて暗号化します。
このまとまりをブロックと呼び、ブロック単位で暗号化する暗号アルゴリズムをブロック暗号と呼びます。
モード
128ビットの平文をDESで暗号化する場合、DESでの暗号化を2回する必要があります。
なぜなら、1回のDES暗号化では、64ビットの平文までしか暗号化できないからです。
そして、このようにブロック暗号を複数ブロックに適用する方法(利用方式)のことをモードと呼びます。
DESの構造
DESの構造は、ファイルが作ったものなので、ファイルテルネットワークやファイルテル構造、ファイルテル暗号と呼ばれています。
この構造では、ラウンドと呼ばれる暗号化の1ステップを何度も繰り返すような構造になっています。
ラウンド
ラウンドはサブ鍵と呼ばれるラウンドごとの鍵と「右」を使い、ラウンド関数で「左」を暗号化するためのビット列を生成します。
ラウンド関数で生成されたビット列と「左」とのXORがとられ、その結果が「暗号化された左」となります。
そして、続く2ラウンドでは、1ラウンドで生成された「暗号化された左」と「右」が入れ替わり、暗号化されます。
この構造によって、すべてが暗号化されるような仕組みを構成しています。
1ラウンドのイメージは下記をご参照ください。
DESの復号
つまり、ラウンドの復号のことを指します。
XORが使われているため、ラウンドごとに適用するサブ鍵の順序を入れ替え、打ち消し合わせることで実現できます。
ブロック暗号の解読法
ブロック暗号の解読方法としては、下記2通りあります。
- 差分解読法
- 線形解読法
差分解読法
この解読方法は、「平文の一部を変更すると暗号文がどのように変化するか」を調べる暗号解読方法です。
つまり、正しい平文/暗号文と変更後の平文/暗号文の差分を調べる解読方法とも解釈できます。
線形解読法
この解読方法は、「平文と暗号文のビットをいくつかXORして0になる確率」を調べる暗号解読方法です。
ビットは「0」と「1」しか値を取らないため、理論上ランダムになっているなら0になる確率は2分の1です。
そのため、2分の1からずれが大きいビットを調べ、鍵に関する情報を得ようとしています。
この解読方法は平文と暗号文の組を2^47個試せば解読でき、2^56個試すブルートフォース攻撃よりもはるかに現実的な計算量です。
選択平文攻撃(CPA(= Chosen Plaintext Attack))
差分解読法や線形解読法では、暗号解読者が任意の平文を暗号化できるという仮定を置きます。
このような仮定を置いた攻撃を選択平文攻撃と呼びます。
トリプルDES
現代では、DESはブルートフォース攻撃でも現実的な時間に解読されてしまいます。
したがって、DESよりも強力なトリプルDESが考えられました。
トリプルDESはDESを3段に重ねた暗号アルゴリズムであり、3重DESやTDEA(TripleDataEncryptionAlgorithm)と呼ばれ、3DESと略記されることもあります。
トリプルDESの構造
トリプルDESは、「暗号化 → 暗号化 → 暗号化」ではなく、「暗号化 → 復号化 → 暗号化」という構造です。
理由としては、単一DESと互換的に扱えるようにするというEDE形式を採用するためです。
AES
トリプルDESは処理時間が長いこともあり、対称暗号としての新しい国際標準(AES)を選定する必要がありました。
選定にあたってはコンペ方式がとられ、最終的にRijndael(ラインダール)という対称暗号アルゴリズムがNIST(National Institute of Standards and Technology)と呼ばれるアメリカ合衆国の標準化機関によって選定されました。
Rijndael
ブロック長と鍵のビット長はそれぞれ独立に、128ビットから256ビットまでの32ビット単位で選択可能です。
ただし、AESの規格としては、ブロック長は128ビット固定で、鍵のビット長は128, 192, 256ビットの3種類が選択可能です。
DESの構造でもあったファイルテルネットワークではなく、SPN構造という構造が使われています。
どの対称暗号を使えばよいのか
DESはブルートフォース攻撃でも現実的な時間で解読されてしまうため、新規採用は避けたほうが良いです。
トリプルDESもDESよりは安全ですが、新規採用においてはNISTが不許可化しています。
したがって、新規採用するのであれば、安全かつ高速なAESが良いです。それに、AESは様々なプラットフォームで利用が可能です。

