この記事は約7分で読めます。
対称暗号(共通鍵暗号)といえば、AES!
筆者プロフィール: ソフトウェアエンジニア。「知った気にならない。いつまでも学び続ける」を信条に、業務と個人開発の両輪で技術を磨いています。AI 駆動開発で複数の個人開発アプリを構築・運用中。
👉 ポートフォリオ: 筆者ホームページ
- セキュリティを高めるためには、暗号だけでは足りない!
- セキュリティには鍵がキーになる!
- 対称暗号(共通鍵暗号)といえば、AES!
- セキュリティを高める一つの基準「CRYPTREC」は大切!
- 非対称暗号(公開鍵暗号)といえば、RSA!
- ハイブリッド鍵暗号システムは対称(共通鍵)暗号と非対称(公開鍵)暗号のいいとこどり!
- 一方向ハッシュ関数は「一方通行の指紋」だった!
- メッセージ認証コードの弱点は「否認防止」だった!
- 「誰が作成したの?」を解消するデジタル署名!
- 証明書を証明する最上位認証局(ルートCA)は最重要!
はじめに
2025年10月のプロジェクトマネージャ試験を終え、2026年春の情報処理安全確保支援士に向けて勉強中です。
セキュリティに関しての知識が乏しいため、資格勉強の傍らで暗号技術入門 第3版 秘密の国のアリスを読んでいます。
本記事は、セキュリティに関する初心者が書籍を読んだ感想をまとめたものです。
本記事では、書籍の「第1部」と「第2部」の内容に焦点を当てています。より詳細な情報や「第3部」に関しては、ぜひ書籍をご参照ください。
目的
対称暗号(共通鍵暗号)の基本を理解し、現代の暗号化の特性についても学びます。
対象
「共通鍵暗号とは何か?」を知りたい方を対象としています。
符号化
コンピュータが登場する以前の暗号は、可読な文字列を暗号化していました。
しかし、現代の暗号では人間だけでなく、コンピュータの力も必要です。
なぜなら、現代の暗号が扱うデータ量は膨大で、暗号アルゴリズムも非常に複雑だからです。
そのため、コンピュータは人間が読み取れる文字を「0」と「1」に基づくビット列に変換(符号化)する必要があります。
メッセージをビット列に符号化した後、暗号化を行います。
文字コード
符号化の際に使用される文字コードには、以下のものがあります。
※ なお、本記事では本題から外れるため、詳細には言及しません。
- 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によって完全秘匿(Perfect Secrecy)が証明されており、前提条件(真性乱数・平文と同長・一度限りの利用)が満たされている限り、理論的に解読不可能です。
使い捨てパッドが使われない理由
使い捨てパッドが広く使われない理由は以下の通りです。
ただし、鍵の生成と配送に多大なコストと手間をかけられる場合、機密性が最優先とされる場面では使用されることもあります。
- 鍵自体を安全に配送できない
→ 鍵を安全に配送できれば、平文そのものも安全に配送可能です。 - 鍵自体を安全に保存できない
→ 鍵を安全に保存できれば、平文も安全に保存可能です。 - 鍵の再利用ができない
→ 「使い捨て」という名の通り、一度使った鍵は再利用できません。 - 鍵のビット列にずれや欠損が生じ、復号化ができないリスクがある
→ 鍵は平文と同じ長さであり、平文が100MBなら鍵も100MB必要となり、配送中の欠損で復号化できない可能性があります。 - 鍵の乱数生成には、再現性のない真の乱数が必要です。
DES(Data Encryption Standard)
1977年にアメリカ合衆国の連邦情報処理標準規格(FIPS)に採用された対称暗号です。
基本情報や応用情報などでは頻出の用語です。
DESの暗号化は64ビットの平文を64ビットの暗号文に変換するアルゴリズムです。
鍵のビット長は64ビットですが、7ビットごとにエラー検出用の1ビットが入るため、実質的には56ビットとなります。
ブロック
DESでは、64ビットの平文を一括で暗号化します。
この一括の単位をブロックと呼び、ブロック単位で暗号化を行うアルゴリズムをブロック暗号と呼びます。
モード
128ビットの平文をDESで暗号化する場合、2回のDES暗号化が必要です。
これは、1回のDES暗号化では64ビットの平文までしか処理できないからです。
このようにブロック暗号を複数のブロックに適用する手法(利用方式)をモードと呼びます。
DESの構造
DESの構造は、ファイルが作成したものであり、ファイルテルネットワークやファイルテル構造、ファイルテル暗号と呼ばれています。
この構造は、ラウンドと呼ばれる暗号化の1ステップを何度も繰り返す形になります。
ラウンド
ラウンドでは、サブ鍵と呼ばれるラウンドごとの鍵を用いて、「右」を使いラウンド関数で「左」を暗号化するためのビット列を生成します。
生成されたビット列と「左」とのXORが取られ、その結果が「暗号化された左」となります。
続く2ラウンドでは、1ラウンドで生成された「暗号化された左」と「右」が入れ替えられ、暗号化が行われます。
この仕組みにより、全体が暗号化される構造が成り立っています。
1ラウンドのイメージは下記をご参照ください。
DESの復号
これはラウンドの復号を指します。
XORが利用されているため、ラウンドごとに適用するサブ鍵の順序を入れ替えることで、打ち消し合い復号が実現できます。
ブロック暗号の解読法
ブロック暗号の解読方法には、以下の2通りがあります。
- 差分解読法
- 線形解読法
差分解読法
この解読方法は、「平文の一部を変更すると、暗号文がどのように変化するか」を調査する手法です。
つまり、正しい平文/暗号文と変更後の平文/暗号文の差分を調査する方法とも解釈できます。
線形解読法
この解読方法は、「平文と暗号文のビットをいくつかXORして0になる確率」を調査する手法です。
ビットは「0」と「1」しか取らないため、理論的にランダムであれば0になる確率は50%です。
そのため、50%からのずれが大きいビットを調査し、鍵に関する情報を得ようとします。
この解読法は、平文と暗号文の組を2^47個試すことで解読可能であり、2^56個を試すブルートフォース攻撃よりもずっと実現可能な計算量です。
選択平文攻撃(CPA=Chosen Plaintext Attack)
差分解読法や線形解読法は、暗号解読者が任意の平文を暗号化できるという前提のもとで行われます。
このような前提の下での攻撃を選択平文攻撃と呼びます。
トリプルDES
現代では、DESはブルートフォース攻撃に対して脆弱であるため、より強力なトリプルDESが開発されました。
トリプルDESは、DESを3回重ねた暗号アルゴリズムで、3重DESやTDEA(Triple Data Encryption Algorithm)とも呼ばれ、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はさまざまなプラットフォームで利用可能です。

