このシリーズ記事は、「現代暗号理論-ANGOUのすゝめ-」と題して、暗号の基礎から公開鍵暗号を主の題材として、まずはその概要を掴み、その後数学的に解析していき理解しようというシリーズです。
そもそも暗号ってなに?
各々の暗号の紹介に入る前に、暗号にはどういったものがあって、どんな分類がなされているのかを知って置けば、今後の理解をしやすいので、ひとまず、”暗号“と一般に呼ばれているものを分類してみたいと思います。
ところで、Q.暗号って何でしょうか?
- 秘密の合言葉?
- 普通に読もうとしても読めないが、表などをみて置き換えたら読める文章?
- サマーウォーズで解いてたやつ?
- 天空の城ラピュタでムスカが盗聴してたやつ?
解答としては、これらは、暗号に分類しても構わないと考えられます。
暗号とは、”第三者に知られないように情報を送る手段の一つであり、平文を暗号化により暗号文にし、受け取った側が復号することで平文を取り出せるもの“であり、その手法とそれ自体を表します。
一般化した表現なので少しわかりずらいと思います。そこで、これを図にしてみました。

暗号とは、図の暗号と復号を行う方法(アルゴリズム)と暗号化した後の暗号文のことを言います。
==表現を整理==
-
- 平文 (Plaintext): 元の読める文章。
-
- 暗号化 (Encryption): 平文を読めない状態(暗号文)に変換すること。
-
- 復号 (Decryption): 暗号文を元の平文に戻すこと。
-
- アルゴリズム: この変換を行うための手順や計算方法。
これら全体を含めて「暗号」と呼びます。
脚注1: 「復号化」という言葉もよく使われますが、専門的な文脈では「復号」とするのが一般的になってきました。「化」がつくと「~の状態にする」という意味になりますが、復号は「元の状態に戻す」行為そのものを指すためです。
(暗号化は 平文→暗号 で暗号に変化させる行為で、復号は 暗号→平文 で復号に変化させる行為ではありません。)
(古めの文献だと “「復号化」が主で、「復号」とも呼ばれる” というような表現が見られます。現在の表現において間違いではありませんが、標準化の過程で「化」を省いた方が簡潔で専門的であるという慣習的な理由で「復号」が専門的な表現として定着したようです。)
暗号の分類
様々な観点で暗号は分類できますが、主に以下のような観点で分類されます。
一つ目の観点:ブロック暗号とストリーム暗号
平文をある程度の長さのブロックとしてとらえて、そのブロックに対して暗号化を行うものをブロック暗号、平文を1文字ずつ読み取って逐次変換していくものをストリーム暗号と言います。
- ブロック暗号 :平文をある程度の長さの「塊(ブロック)」ごとにまとめて暗号化する。
- ストリーム暗号:平文を1文字(1ビット)ずつ逐次変換していく。
脚注2 畳み込み暗号:暗号の正確な分類(集合での類別)を考えると、逐次暗号でも一定期間ごとにカギを変えるようなものがあり、それはブロック暗号ともとらえられ、符号化に基づいてブロック暗号と畳み込み暗号などの分類がより正確な分類となりますが、わかりやすいので、ブロック暗号とストリーム暗号で分類することが多く、このシリーズでもそれに倣うことにします。
二つ目の観点:サイファ暗号とコード暗号
漫画ワンピースの”3D2Y“や”新高山登レ“のような、その文字列の意味に立ち入らないと意味が分からないような、文章や意味としてとらえて変換するような暗号をコード暗号と言います。これと比べて、”SNI”に対して、アルファベットで2つ進めたものに置き換えて”KPU”とするような意味に立ち入らず機械的に変換するものをサイファ暗号と言います。
- コード (Code): 「意味」単位で変換する。(例:「開戦せよ」→「ニイタカヤマノボレ」)
- サイファ (Cipher): 「文字・データ」単位で変換する。(例:「ABC」→「BCD」)
このシリーズでは、コード暗号にはあまり触れません。
三つ目の観点:秘密鍵暗号と公開鍵暗号
秘密鍵暗号方式とは、同一の秘密のカギを共有する方法式のことである。例えば、文字を特定のパターンで置き換えるルールを共有するなどの方法は秘密鍵暗号になります。公開鍵暗号方式とは、暗号化を行う暗号化鍵を公開し、復号を行うカギは秘密にします。暗号を送りたい人は、公開されている暗号化鍵を使って暗号化し、送信します。受け取った側(秘密の復号カギを持っている)で対応する復号カギで復号することで秘密に通信する方法です。
通信の双方で同じ方式を使うことから、秘密鍵暗号方式は対称暗号方式とも呼ばれ、それに対し、暗号を送る側と復号する側で違うカギを使いその手順も双方で異なることから、公開鍵暗号方式は非対称暗号方式ともいわれます。
- 秘密鍵暗号方式:共通のカギを双方で使う
- 公開鍵暗号方式:公開鍵と秘密鍵を使う
このシリーズでは、現代暗号のうち特に公開鍵暗号について紹介していきます
四つ目の観点:安全性(古典 vs 耐量子)
量子コンピュータで解けるかどうかという観点で分けてみます。原理的に、どれだけの暗号文を集めてもどれだけの計算資源をもってしても解読できない暗号は 無条件に安全(unconditionally secure)と呼ばれます。これは、毎回カギを変えるなど特殊な設計が必要で、実用的に使われている暗号は、十分な計算量と暗号文があれば解読できてしまうものがほとんどです。これは、計算量的に安全(computationaly secure)または、強い(strong)と呼ばれています。
-
現代暗号 (Classical): 現在のコンピュータでは解くのに何億年もかかる数学的難問(素因数分解など)を利用。
-
耐量子計算機暗号 (Post-Quantum): 実用化が迫る「量子コンピュータ」でも解けない新しい数学的問題を利用。
暗号の理論的な分類とは少し観点がずれますが、量子コンピュータで解けるかどうかの観点で暗号を分類してみるのも面白いと思います。
脚注3 : PQC 現在広く使われている暗号の多くは、もし高性能な量子コンピュータが完成すると簡単に解読されてしまう可能性があります。そのため、現在世界中で「量子コンピュータでも解けない暗号(PQC)」の研究が進められています。
分類まとめ
今までの分類項目4つで、現代暗号はほとんど分類可能です。
| 分類観点 | 分類1 | 分類2 | 備考・代表例 |
| ① 処理単位 | ブロック暗号 (塊でまとめて処理) | ストリーム暗号 (1文字ずつ逐次処理) | AES vs RC4 現在はブロックが主流 |
| ② 変換対象 | コード (Code) (意味・単語単位) | サイファ (Cipher) (文字・データ単位) | 合言葉 vs 現代暗号 ITはサイファを扱う |
| ③ 鍵の管理 | 共通鍵暗号 (同じ鍵で開閉) | 公開鍵暗号 (公開鍵と秘密鍵) | 配送問題あり vs なし 速度は共通鍵が速い |
| ④ 安全性基盤 | 現代暗号 (古典) (今のPCでは解けない) | 耐量子暗号 (PQC) (量子PCでも解けない) | RSA vs 格子暗号 |
独り言:四観点で分類できない暗号
さて、ここまで綺麗に分類してきましたが、実はこの枠組みに収まらない「はぐれ者」たちもいます。
- ハッシュ関数: 「暗号化」したきり、二度と元の文章に戻せない一方通行の技術。パスワードの保管や、改ざん検知に使われます。(復号できないので、厳密には「暗号化」とは呼びません)
- ハイブリッド暗号: 共通鍵の「速さ」と公開鍵の「便利さ」を合体させた、現在インターネットで最も使われている方式。
- 物理的な暗号: 数学の計算式ではなく、光の粒(量子)の物理的な性質を使って守る「量子暗号通信」なども研究されています。
世の中の技術は、必ずしも教科書の分類通りにはいかない、ということですね。このシリーズでは、王道である「数学的な暗号」を中心に解説していきます。
まとめ
- 暗号とは: アルゴリズムによって平文と暗号文を変換するシステム。
- 分類: 「ブロック/ストリーム」「コード/サイファ」「共通鍵/公開鍵」「古典/耐量子」の視点があるる。
次回は、暗号化のうち特にシンプルで分かりやすい転置式暗号の仕組みと暗号解読をしてみようと思います。転置式暗号の次は、有名な「サイファ暗号で公開鍵暗号方式のシーザー暗号」について、観てみようと思っているので、お楽しみに。
転置式暗号 -アナグラム-“ヴォルデモート卿”の本名を見破る 【ANGOUのすゝめ】#2
転置式暗号の仕組みを、ハリー・ポッターの「ヴォルデモート卿」のアナグラムを例に解説。文字を並べ替えるアルゴリズムの基礎から、頻度分析による脆弱性、Pythonを用いた解読プログラムの実装まで、初心者向けに分かりやすく講義します。
5 記事
ANGOUのすゝめ 一 ─暗号の始まりと転置─
暗号の分類と転置暗号を理解する