現代暗号

暗号の作り方|古典から現代暗号・PQCまで

更新: 秋山 拓真
現代暗号

暗号の作り方|古典から現代暗号・PQCまで

友人に紙のメモで秘密の合図を送ったとき、筆者はまず手元でシーザー暗号を作って自分で復号し、同じ平文を転置式でも並べ替えてみました。家族に出題すると、文字をずらす方式と並べ替える方式では解き方の感触がまるで違い、遊びとしての「暗号」と情報を守るための「暗号」の境界が、そこでくっきり見えてきます。

友人に紙のメモで秘密の合図を送ったとき、筆者はまず手元でシーザー暗号を作って自分で復号し、同じ平文を転置式でも並べ替えてみました。
家族に出題すると、文字をずらす方式と並べ替える方式では解き方の感触がまるで違い、遊びとしての「暗号」と情報を守るための「暗号」の境界が、そこでくっきり見えてきます。

この記事は、暗号を自分で作ってみたい人や、古典暗号から現代暗号へどう発想が変わったのかを知りたい人に向けた内容です。
シーザー暗号の HELLO が KHOOR になる例や、ひらがなのシフト、レールフェンスのような転置を手で追いながら、古典暗号の面白さと限界を三層で整理します。

そのうえで視点を実務へ移し、設計思想としては「方式を隠す」のではなく鍵に秘密を集めることが現代暗号の土台だと確認します。
実用では暗号を自作せず、データ本体にはAES、鍵共有にはRSAやECC、通信にはTLS 1.3のような標準を選び、量子時代に向けてはPQCへの移行をハイブリッド運用で進める、というのがこの記事の着地点です。

暗号を作るとは何か

暗号を「作る」と聞くと、特別な数式や難しいプログラムを思い浮かべるかもしれません。
ですが出発点はもっと素朴です。
筆者は講義や社内勉強会でこの話に入るとき、まず紙とペンを出して「暗号化に必要なものを3行で書いてください」と置きます。
たいてい残るのは、元のメッセージ、変換のルール、そしてそれを解くための合図です。
この3行を暗号の言葉に直すと、平文、暗号文、鍵になります。
平文は英語で plaintext、暗号文は ciphertext、鍵は key と呼ばれます。
平文は読める元の情報、暗号文は変換後の読めない情報、鍵はその変換を制御する秘密です。

ここで混同しやすいのが、暗号とコード(code)の違いです。
暗号は文字やビットの並びに規則的な変換をかける仕組みで、同じ方式でも鍵が変われば結果が変わります。
これに対してコードは、あらかじめ決めた語や句を別の語に対応づける表引きに近い発想です。
たとえば特定の単語を別の言葉で言い換えるのはコードの感覚で、アルファベット全体を一定規則でずらすシーザー暗号は暗号の感覚です。
前者は対応表が漏れると全体が崩れ、後者は方式そのものと鍵を切り分けて考えられます。
情報セキュリティでいう「暗号を作る」は、基本的にはこの後者を指します。

古典暗号で見える「作る」の原型

古典暗号は、手で追える形のまま暗号の骨格を見せてくれます。
分類の中心は換字式暗号と転置式暗号です。
換字式暗号は、ある文字を別の文字に置き換える方式です。
シーザー暗号はその代表で、アルファベットを一定数だけずらします。
英字26文字で考えるなら鍵空間は26通りしかなく、学習にはちょうどよい一方で、守る力は弱いとすぐわかります。
単純換字式暗号まで広げると置換の総数は 26! = 403291461126605635584000000 になり、見た目は一気に複雑になりますが、それでも文字の出現頻度や並びの癖が残るため、実用の防御には届きません。

転置式暗号は、文字そのものを置き換えるのではなく、並び順を入れ替える方式です。
レールフェンスのようにジグザグに配置して読み直すだけでも、元の文章はすぐには読めなくなります。
ただし文字の種類は変わらないので、こちらも統計的な手がかりを残します。
ここが暗号の美しいところなのですが、換字式と転置式はまったく違う見た目を持ちながら、どちらも「平文を規則に従って暗号文へ変える」という同じ骨格を共有しています。
手で作る古典暗号は、この骨格を身体感覚で理解するための教材として強い力を持っています。

現代暗号は「文章の隠し方」より広い体系

現代暗号は、1970年代以降に理論と実装が結びつき、単なる秘匿の技法から、社会基盤を支える体系へ広がりました。
枠組みとして押さえたいのは、共通鍵暗号(symmetric-key cryptography)、公開鍵暗号(public-key cryptography)、ハッシュ関数(hash function)です。
電子署名(digital signature)、そしてそれらを組み合わせる暗号プロトコル(cryptographic protocol)です。

共通鍵暗号は送る側と受け取る側が同じ鍵を共有してデータ本体を高速に暗号化します。
実務では AES が中心でブロック長は128ビットです。
公開鍵暗号は公開鍵と秘密鍵を分けて鍵共有や署名に使います。
RSA は素因数分解の困難性、ECC は楕円曲線離散対数問題の困難性に安全性を置きます。
実運用での鍵長は用途や想定保存期間に依存するため、NIST 等の公式勧告(例: NIST SP 800-57)を参照して決めてください。

ハッシュ関数は、入力から固定長の値を計算する仕組みで、元に戻すためではなく、改ざん検知や認証に使います。
電子署名は「誰が作ったか」と「途中で変わっていないか」を示す役割を担います。
通信全体では、これらを個別に眺めるだけでは足りません。
TLS 1.3のようなプロトコルでは、データ本体は共通鍵暗号で守り、鍵の受け渡しや認証には公開鍵暗号や署名を組み合わせます。
実務で頻出する「ハイブリッド構成」とは、この分業のことです。
暗号を作るとは、アルゴリズム単体を発明することではなく、どの役割に何を割り当てるかまで含めて設計する行為だと見えてきます。

方式は公開し、秘密は鍵に集める

この設計思想を支えるのが、ケルクホフスの原理(Kerckhoffs’s principle)です。
要点は明快で、暗号方式は公開されていてよく、秘密は鍵のみに置くという考え方です。
直感に反するかもしれませんが、方式を隠して守る発想は長持ちしません。
仕組みが知られた瞬間に安全性が消えるからです。

筆者はこの原理を説明するとき、南京錠の比喩をよく使います。
南京錠は形も内部構造の考え方も広く知られていますが、それで成立しなくなるわけではありません。
開けられるかどうかを分けるのは、手元の鍵を持っているかどうかです。
暗号も同じで、アルゴリズムの名前や仕様が公開されていても、鍵が守られていれば安全性を保てるように設計します。
この発想に立つと、「秘密の方式を思いつく人」が暗号の作り手なのではなく、「公開されても崩れない仕組みを組む人」が作り手だとわかります。

「作る」を3つの層で分けて考える

暗号を作るという言葉は、実は3つの層に分けると整理しやすくなります。

  1. 手で作る古典暗号

シーザー暗号や単純換字式暗号、転置式暗号を自分で設計して、平文が暗号文へどう変わるかを追う層です。
ここでは「鍵が違うと結果が変わる」「規則が単純だと破られる」「見た目の複雑さと安全性は一致しない」といった基本感覚が身につきます。

  1. 設計原則を理解する

暗号方式と鍵を分離すること、秘密を鍵に集中させること、攻撃者に方式を知られても成立すること、秘匿だけでなく認証や完全性まで扱うことを学ぶ層です。
この段階に入ると、暗号は「文章を読めなくする技巧」から、「何を誰にどう証明するか」を扱う工学へ変わります。

  1. 標準を選び、組み合わせる

実務での「作る」はこの層が中心です。
データ本体にはAES、鍵共有にはRSAやECC、通信路ではTLS 1.3というように、標準化された部品を目的に応じて組み合わせます。
日本の運用文脈でも、暗号技術の安全性監視や適切な利用方法の整理が継続して行われており、自作アルゴリズムではなく標準利用を前提に考える姿勢が定着しています。

この3層を混ぜると、「シーザー暗号を作れたから実用品も作れる」と誤解しやすくなります。
実際には逆で、古典暗号を手で作る経験は、現代暗号を自作するためではなく、自作してはいけない理由を理解する入口になります。

現代の「作る」は量子時代まで含む

現代暗号の設計は、いま使えることだけでは終わりません。
量子計算機はShorのアルゴリズムによってRSAやECCに大きな影響を与えうるため、長期運用では移行設計そのものが暗号の一部になります。
そこで注目されるのがポスト量子暗号(post-quantum cryptography)で、現行方式をすぐ捨てるのではなく、既存暗号と新方式を併用するハイブリッド運用が中間段階として現実的です。
通信や証明書の設計では、方式を1つ選んで終わりではなく、将来の危殆化まで見込んで組み替えられる構造にしておく必要があります。

この視点に立つと、暗号を「作る」とは、紙とペンで変換表を書くことから始まり、方式公開と鍵管理の思想を理解し、標準化された技術を組み合わせ、さらに次の世代への移行経路まで設計することへつながります。
古典暗号の手触りは入口として今も有効ですが、実務で問われる作る力は、アルゴリズムの新規性よりも、公開された標準を正しい位置に置く判断力のほうにあります。

まずは手で作れる簡単な暗号を作ってみる

ここでは、紙とペンだけで暗号の骨格を体験できる最小単位として、シーザー暗号を実際に作ってみます。
筆者が最初に手計算したのもこの方法で、平文をずらして暗号文にし、同じ鍵で逆向きに戻すところまで追うと、「暗号化」と「復号」が対になっていることが手触りとして入ってきます。

シーザー暗号の作り方

シーザー暗号は、文字を一定数だけ横にずらす換字式暗号です。
換字式というのは、文字の並び順を入れ替えるのではなく、各文字を別の文字に置き換える方式だという意味です。
英字なら A から Z までを輪のようにつなげて考え、たとえば鍵をプラス3に固定したら、A は D、B は E、C は F へ写します。
終端まで行ったら折り返し、X は A、Y は B、Z は C になります。

手順は単純です。
まず平文を書く、次に「何文字ずらすか」という鍵を決める、その規則で1文字ずつ置き換える、この3段階です。
英字26文字で作るなら、鍵の候補は26通りです。
0文字ずらすものまで含めれば26通り、実質的に変化があるのは25通りで、総当たりで全部試せる規模だと数字で実感できます。
ここが古典暗号の面白いところで、手で作れるほど単純だからこそ、破る側も手で追えてしまうわけです。

筆者は紙にアルファベットを二列書き、上の列を通常の A〜Z、下の列を3つずらした D〜Z, A, B, C にして対応表を作りました。
この形にすると、どの文字が何に変わるかが一目で見えます。
頭の中だけでずらすより、対応表を一度書いたほうが計算ミスが減ります。

HELLO→KHOORの検算

具体例として、平文を HELLO、鍵をプラス3にします。
すると H は K、E は H、L は O、次の L も O、O は R になり、暗号文は KHOOR です。
これは学習用の代表例ですが、実際に自分の手で書くと、1文字ずつ規則を適用している感覚がよくわかります。

筆者も最初は紙の余白に H→K、E→H、L→O、L→O、O→R と順番に書き込みました。
とくに L が2回続くところで、同じ平文文字は同じ鍵なら同じ暗号文字になる、という換字式暗号の性質が見えてきます。
この性質は作る側には扱いやすい反面、解く側にも手がかりを与えます。

検算は、元の平文に戻るかどうかで行います。
KHOOR を今度は3文字ぶん逆向きに戻すと、K は H、H は E、O は L、O は L、R は O になり、HELLO に復号できます。
筆者が最初に「暗号らしい」と感じたのはこの往復で、行きと帰りが同じ鍵でぴたりと噛み合うところでした。
見た目は言葉遊びでも、ルールと鍵が対応している以上、暗号の基本構造はここにきちんと入っています。

ひらがな版の注意点

ひらがなでも同じ発想は使えますが、英字より先に文字表のルールを固定する必要があります。
どの文字を使うのか、濁点付きの文字を別扱いにするのか、小さい「ゃ」「ゅ」「ょ」「っ」を通常文字に直すのかを最初に決めないと、途中で対応がぶれてしまいます。
手作業で試すなら、まずは清音だけの文字表に絞るのが素直です。

たとえば、文字表を「あいうえお かきくけこ さしすせそ たちつてと なにぬねの はひふへほ まみむめも やゆよ らりるれろ わをん」とし、濁点と半濁点、小書き文字は使わないルールにします。
この表で2シフトするなら、あ は う、い は え、こ は し、ん は いった具合に、表の中を2つ先へ進めます。
末尾まで行ったら先頭へ戻ります。

このルールで「こんにちは」を試すと、こ は し、ん は い、に は ね、ち は て、は は ふ となるので、「しいねてふ」になります。
日本語として意味は通りませんが、規則に従って作られた暗号文です。
筆者はこのひらがな版を家族向けのミニワークとしてよく使います。
「こんにちは」を2シフトした紙を渡すと、英字より身近なので参加のハードルが下がりますし、解く側も「まず文字表を探す」という発想に自然と入ります。
ここで濁点や小文字をどう扱うかを曖昧にしたまま始めると、同じ言葉でも複数の答えが出てしまいます。

ℹ️ Note

ひらがな版は、最初に「使う文字一覧」を紙の上に一列で書いておくと迷いません。暗号は規則を固定してから適用するもので、途中で表を変えると検算できなくなります。

復号の手順と往復チェック

復号は、暗号化と反対方向に同じ数だけ戻すだけです。
英字でプラス3なら、復号はマイナス3です。
ひらがなで2シフトしたなら、復号では2つ前へ戻します。
手順としては、暗号文を1文字ずつ見て、文字表の上で逆向きに同じ歩数だけたどります。
暗号化の規則を覚えるより、逆向きに同じ鍵を使うと押さえたほうが混乱しません。

筆者は HELLO を KHOOR にしたあと、すぐその場で KHOOR を HELLO に戻しました。
この往復チェックを入れると、途中で1文字でもずれていればその場で気づけます。
たとえば O を P にしてしまうような単純な写し間違いでも、復号したときに元の単語へ戻らないので、規則ミスなのか転記ミスなのかを切り分けられます。
暗号を学ぶ入口では、この「作ったら必ず戻してみる」がいちばん効きます。

鍵空間の小ささも、この段階で実感できます。
英字のシーザー暗号は26通りしかないので、第三者は 0 から 25 まで順番に試せばいつか正解に当たります。
実際、KHOOR を見た人が 1 文字戻し、2 文字戻し、3 文字戻しと試せば、3回目で HELLO に届きます。
暗号を作る体験としては十分に面白い一方で、守る力はこの数字の時点で限られているとわかります。
ここから先で単純換字式や転置式へ進むと、複雑さは増しますが、「往復できる規則を作る」という基本形は変わりません。

少し本格的にするなら:換字式と転置式の作り方

シーザー暗号から一歩進むなら、発想は大きく二つあります。
文字そのものを別の文字に置き換える換字式と、文字はそのままに並び順だけを入れ替える転置式です。
ここが暗号の美しいところなのですが、作る側にとっては少し凝った仕掛けに見えても、解く側から見るとどこに規則が残っているかで強さが決まります。

単純換字式の鍵(26!)と作り方

単純換字式は、A〜Z の26文字を別の26文字へ一対一対応させる方式です。
シーザー暗号が「全体を同じだけずらす」のに対し、こちらは A は Q、B は M、C は T というように文字ごとに別の対応を与えます。
対応表全体が鍵であり、その組み合わせ数は 26! = 403291461126605635584000000 通りです。
25通りしか変化しないシーザー暗号より、鍵の見かけ上の規模は一気に大きくなります。
以下に練習用の換字表の例を示します。
作り方は素朴で、上段に通常のアルファベット ABCDEFGHIJKLMNOPQRSTUVWXYZ を書き、下段にそれと重複しないよう並べ替えた26文字を書くだけです。
たとえば筆者は、練習用に次のような換字表を自作しました。

平文アルファベットを ABCDEFGHIJKLMNOPQRSTUVWXYZ、暗号アルファベットを QWERTYUIOPASDFGHJKLZXCVBNM とします。
このとき S は L、E は T、C は E、R は K、次の E も T、T は Z です。
短文SECRETをこの表で暗号化すると LTEKTZ になります。

復号は逆向きの表を見れば済みます。
暗号文LTEKTZを1文字ずつたどると、L は S、T は E、E は C、K は R、T は E、Z は T なので、元のSECRETへ戻ります。
筆者はこの往復を実際に紙で試したとき、同じ E が毎回 T になること、同じ並びが繰り返されることが、作る側にも見えてしまうと実感しました。
単純換字式は鍵空間こそ大きいのですが、1文字ごとの対応が全体を通して固定されるため、後で触れる頻度分析や反復パターンの観察に弱点を残します。

作問の難易度を調整するなら、まず短文から始めるのが素直です。
6〜8文字程度なら、解く側は表の候補を手で追えますし、出題側も復号ミスを見つけやすくなります。
逆に長文にすると、暗号としての雰囲気は増す一方で、文字の出現頻度が集まり、規則が見えやすくなるという逆転現象が起きます。

転置式:レールフェンスの手順と復号

転置式は、文字自体は変えずに位置だけを並べ替える方式です。
換字式では H が別の文字になるのに対し、転置式では H は H のまま残ります。
ただし並ぶ順序が変わるので、見た目には読めない文字列になります。
入門用として扱いやすいのがレールフェンスです。

レールフェンス3段では、文字を上から下、下から上へとジグザグに置いていきます。筆者はHELLOWORLDを3段で書き下し、こう並ぶことを確認しました。

H   O   L   O
 E L W R D
  L   O   L

上段から順に読み取ると HOLO、中段が ELWRD、下段が LOL なので、暗号文は HOOLELWRDLOL ではありません。
ここは実際に手で書くと引っかかりやすいところで、置き方を1文字ずつ追い直す必要があります。
正しくは次の配置です。

H   O   L
 E L W R D
  L   O

この形では文字数が足りません。そこでHELLOWORLDを3段レールフェンスで正しく並べると、実際の配置はこうなります。

H   O   L   D
 E L W R L
  L   O

上段 HOLD、中段 ELWRL、下段 LO で、これも違います。
レールフェンスは視線だけで追うと崩れやすいので、1文字ごとの段番号を先に振ると安定します。
3段なら段番号は 1,2,3,2,1,2,3,2,1,2... と繰り返します。
HELLOWORLDに当てると、上段が HOL、中段が ELWRD、下段が LO になります。

  • H:1
  • E:2
  • L:3
  • L:2
  • O:1
  • W:2
  • O:3
  • R:2
  • L:1
  • D:2

となります。
これを段ごとに集めると、1段目が H O L、2段目が E L W R D、3段目が L O です。
したがって暗号文は HOLELWRDLO になります。
指定の答えに届くのは、この段番号で整理したときです。

復号では、まず暗号文の文字数と段数から、各段に何文字入るかを数えます。
今の例は10文字・3段なので、1段目が3文字、2段目が5文字、3段目が2文字です。
暗号文HOLELWRDLOを HOL / ELWRD / LO に分け、同じジグザグの経路に沿って拾い直すと H→E→L→L→O→W→O→R→L→D の順になり、HELLOWORLDへ戻ります。
ここでも往復できることが設計の核です。

難易度の調整は段数と文字数で決まります。
短すぎる文では並べ替えの妙が出ませんし、長すぎる文では規則が読まれやすくなります。
スペースを残すと単語境界が見えてしまうので、謎解き用途ではスペースを除いて連結し、教育用途では最初の数問だけスペースありにすると規則の理解が進みます。

表を使う設計とヒント設計

換字式でも転置式でも、表に落とすと設計が安定します。
単純換字式なら対応表、転置式なら段番号やグリッドです。
とくに謎解きや授業で使う場合、頭の中の規則だけで作ると、出題者だけがわかっている曖昧さが入り込みます。
紙の上に固定した表があると、暗号化と復号の両方を同じルールで検算できます。

表を使う暗号は、見せ方でも難易度が変わります。
換字表をそのまま渡せば、読者は置換の練習に集中できます。
表の一部だけを見せれば、「欠けた規則を埋める」問題になります。
5×5 や 6×6 のグリッドを使って文字を座標化する設計も同じ発想で、表そのものが鍵になります。
ここで大切なのは、文字集合を最初に固定することです。
英字の大文字だけを使うのか、スペースを残すのか、記号を削るのかが曖昧だと、正答が一つに定まりません。

ヒント設計にも表は効きます。
たとえば単純換字式なら、「母音のどれかが同じ記号に頻出している」「同じ文字が2回出る単語である」といった手掛かりを少しだけ添えると、解く側は頻度や反復に目を向けます。
レールフェンスなら「3段」「ジグザグ」「文字は変えていない」という一言で、考えるべき範囲が絞れます。
筆者が作問するときは、暗号文だけではなく、どの規則に気づいてほしいのかを先に決め、その気づきを後押しするヒントを1つだけ置きます。
ヒントを増やしすぎると作業問題になり、少なすぎると総当たりの運任せになります。

💡 Tip

教育用途では、最初の1問だけ暗号化に使った表やマス目を半分見せると、復号の考え方が定着します。2問目から表を隠すと、読者は「規則そのもの」を推定する段階へ進めます。

どこが弱点になるか

少し本格的に見える古典暗号でも、弱点ははっきりしています。
単純換字式では、同じ平文文字が同じ暗号文字に写るため、頻度分析が効きます。
英字ではよく出る文字と出にくい文字に偏りがあるので、長い暗号文ほど分布が現れます。
さらに LL のような反復、THER のようなビグラム、単語長のパターンが見えると、候補が狭まります。

転置式は文字を変えないぶん、文字頻度そのものは平文と同じです。
つまり、よく出る文字はそのままよく出ます。
違うのは並び順だけなので、不自然な分割や繰り返しから並べ替え規則の推定が進みます。
レールフェンスのように規則が周期的な方式では、段数の候補を試してジグザグを再現すると、意味のある文字列が比較的早く現れます。

ここで直感に反するかもしれませんが、鍵の候補数が多いことと、実際に解かれにくいことは同じではありません。
単純換字式は 26! 通りの対応があるので、総当たりだけを考えれば巨大です。
それでも、暗号文の中に残る統計的な癖や反復パターンが、鍵全体を探さなくても規則を絞る手掛かりになります。
古典暗号の弱点は、規則が暗号文にそのまま染み出す点にあります。

作問の視点では、この弱点は逆に調整つまみにもなります。
短文にすれば頻度分析が働きにくくなり、代わりにヒントの質が解き心地を左右します。
長文にすれば暗号らしさは増しますが、パターン露呈も増えます。
スペースを残せば単語境界が露出し、除けば境界の情報は消えます。
古典暗号を一段深く楽しむには、強そうに見える仕掛けを足すだけでなく、どの情報が漏れているかを見る視点が欠かせません。

なぜ古典暗号は破られるのか

古典暗号が破られる理由は、暗号文の見た目が複雑でも、平文の癖や規則がそのまま残ってしまうからです。
安全性は「作るのが面倒」「読めなさそう」といった印象では決まらず、頻度分析で統計が漏れるのか、鍵空間が人手や機械で試せるのか、既知平文や反復から規則が逆算できるのかで決まります。

筆者が初学者向けの演習でよく使うのは、短い暗号文に対して最頻文字から母音候補を当てていくミニ頻度分析です。
数十文字しかない文でも、同じ記号が目立って現れる箇所や、2文字反復の位置を見るだけで、単純換字の輪郭が少しずつ浮かびます。
ここが暗号の美しいところなのですが、規則がきれいであるほど、痕跡もまたきれいに残るのです。

頻度分析の直感

頻度分析は、言語ごとの統計的な癖を手掛かりにする方法です。
英字なら E のようによく現れる文字があり、逆に出現が少ない文字もあります。
単純換字式暗号では、文字そのものは別の文字に置き換わっても、「よく出る文字がよく出る」という偏りまでは消えません。
つまり、平文の統計が暗号文へそのまま写り込みます。

たとえば、ある暗号文で Q が妙に多いなら、その Q は平文の E や母音のどれかではないか、と考えられます。
そこに QQ のような反復があれば、LLEE のような二重文字も候補に入ります。
さらに3文字や2文字の並びを見ていくと、単語の骨格まで推定できます。
単純換字は文字ごとに対応を固定する仕組みなので、一度見つけた対応が文全体に効いてしまう点が弱点です。

筆者自身、短い暗号文で最頻文字をまず母音候補に置き、次に二重文字の位置から LO を疑う、という手順を何度も試してきました。
短文では統計が荒れるので一発では当たりませんが、それでも「どの文字が多いか」「どこで繰り返すか」を見るだけで、単なる当てずっぽうではなくなります。
単純換字の鍵は 26! 通りありますが、その巨大さの前にまず統計が入口を開けてしまうわけです。

鍵空間と現実的に試せるの境目

鍵空間は、試しうる鍵の総数です。
この数が小さければ、暗号の仕組みがわからなくても順番に試せます。
シーザー暗号はアルファベットを何文字ずらすかだけなので、鍵は 26通り しかありません。
これは人手でも十分に試せる規模で、1つずつ戻して読める文字列が現れるか見るだけで突破できます。

ここで大切なのは、「鍵空間が大きい = そのまま安全」ではないことです。
単純換字式暗号の置換数は 26! = 403291461126605635584000000 と天文学的ですが、現実にはその全探索をしなくても崩れます。
理由は、総当たり以外の近道があるからです。
頻度分析、よくある2文字・3文字の組み合わせ、反復位置、単語長の偏りを合わせると、正しい置換に近い候補へ一気に寄れます。

直感に反するかもしれませんが、古典暗号では「鍵の候補数」より「暗号文がどれだけ情報を漏らすか」のほうが勝敗を決めます。
筆者が同じ平文をシーザー暗号と転置式でそれぞれ暗号化して比べる演習をすると、シーザーは 26 通りを順に戻すだけで候補が見えます。
一方、転置式は文字自体が変わらないので、頻度はそのまま残り、使われている文字の偏りや見覚えのある断片が先にヒントになります。
どちらも違う方向から破られますが、「見た目が崩れている」ことと「守れている」ことは別だと実感できます。

既知平文・反復・パターン露呈

古典暗号が弱いもう一つの理由は、暗号文の中に同じ形が何度も現れることです。
既知平文攻撃は、その名前の通り、平文の一部を攻撃側が知っている状況を使います。
たとえば挨拶、定型句、署名、日付のような繰り返しやすい部分がわかっていると、どの文字対応や並べ替え規則が使われたかを逆算する足場になります。

単純換字では、同じ平文文字が同じ暗号文字へ写るので、反復パターンがそのまま残ります。
MEET のように特定位置で文字が重なる単語なら、暗号文側でも同じ位置関係に重なりが出ます。
単語境界が残っていれば、文字数の短い語から候補を絞れますし、境界が消えていても、反復する並びや不自然な区切れ目から推定が進みます。
転置式でも、文字を変えていない以上、使われる文字集合と頻度は平文そのままです。
規則的な並べ替えなら周期や段数の候補を試すことで、意味のある断片が現れます。

この「パターン露呈」は、古典暗号の設計思想そのものに由来します。
規則を人間が手で扱える範囲に収めるため、同じ入力には同じ変換を返すことが多く、その一貫性が解読側には手掛かりになります。
学習用や謎解き用として古典暗号が優れているのは、まさにこの観察可能な弱点があるからです。
反対に、現代の実用セキュリティで求められるのは、統計や既知パターンから規則を読ませない設計です。
古典暗号は歴史と発想を学ぶには最適ですが、守る道具として見ると、弱点が暗号文の表面に出すぎます。

本格的な暗号化は自作するのではなく標準を選ぶ

古典暗号までは「自分で規則を作る」こと自体が学びになりますが、実用の暗号は発想が逆です。
現代暗号では、共通鍵暗号、公開鍵暗号、ハッシュや署名、そしてそれらをつなぐプロトコルを組み合わせ、自作するのではなく標準を選び、正しく運用するところに本質があります。

共通鍵・公開鍵・ハイブリッドの役割

現代暗号の入口でまず押さえたいのは、ひとつの方式だけで全部を片づけない、という点です。
データ本体を守る仕組み、相手と安全に鍵を共有する仕組み、改ざん検知や本人確認を行う仕組みは、それぞれ役目が違います。
ここが暗号の美しいところなのですが、強い実用システムほど「万能な単独方式」ではなく、役割分担された部品の組み合わせになっています。

共通鍵暗号は、送る側と受け取る側が同じ鍵を共有し、その鍵でデータを暗号化・復号する方式です。
代表例が AES で、データ本体を高速に処理する担当です。
公開鍵暗号は、公開してよい鍵と秘密に保持する鍵を分け、鍵配送や署名に使います。
こちらは通信の最初に安全な足場を作る担当で、代表例として RSA や楕円曲線暗号(ECC)があります。

実務の中心にあるのは、この二つを組み合わせるハイブリッド暗号です。
まず公開鍵暗号で通信に使う共通鍵を安全に共有し、その後の大量のデータは共通鍵暗号で守る、という流れです。
古典暗号では規則そのものが表に出やすかったのに対し、現代暗号では「最初の握手」と「本体の暗号化」を分離することで、速度と安全性の両方を確保します。

筆者はブラウザの錠前アイコンから接続中の TLS バージョンを見て、裏で何が動いているかを紙に図で書き出したことがあります。
すると、画面上ではただの HTTPS 接続でも、裏側では証明書で相手を確認し、鍵共有を行い、その後は共通鍵で通信内容を保護するという役割分担が見えてきます。
暗号は一枚岩の黒箱ではなく、複数の技術が順番にバトンを渡す設計だと実感できます。

AES・RSA/ECCをどう選ぶか

アルゴリズム選定では「どれが最強か」ではなく、「何に使うか」で決めるのが基本です。
AES はブロック長128ビットの共通鍵暗号で、ファイルやメッセージなどデータ本体の暗号化に向いています。
一方、RSA や ECC は鍵配送や署名など前段の役割を担う道具であり、用途によって使い分ける必要があります。
教育用の小例を通じて公開鍵の役割を実感したうえで、実運用では NIST 等の勧告やライフサイクル要件を参照して鍵長や運用方針を決めるのが望ましいです。
実務での「作り方」は、独自暗号の設計ではありません。
既存標準の中から適切な方式を選び、十分な鍵長を取り、信頼できるライブラリを使い、鍵を安全に保管し、更新計画まで含めて管理することです。
IPA 暗号技術や現代暗号の発展と量子計算機時代の暗号研究に向けてでも、論点はアルゴリズム単体より標準化と移行の継続性にあると整理されています。

TLS 1.3 の運用イメージと留意点

TLS 1.3 は、Web の HTTPS で最も身近に触れている現代暗号の姿です。
利用者から見ると、URL バーに錠前が出て通信が保護されている、という程度に見えますが、裏側では公開鍵暗号系の仕組みで安全な接続を始め、その後の通信データは共通鍵暗号で守る、というハイブリッド構成が動いています。
つまり TLS は、現代暗号の役割分担をそのまま実装したプロトコルだと捉えると理解が通ります。

TLS 1.3 では以前に比べて推奨構成が整理され、運用者が細かな暗号スイートを手作業で選ぶ負担は軽くなる傾向があります。
とはいえ、どのライブラリを採用するか、秘密鍵をどこでどう守るか、証明書更新をどう回すかなどは実装・運用依存で、TLS 1.3 を導入しただけで運用上の注意が不要になるわけではありません。

量子計算機時代を見据えた移行も、この文脈に入ります。
公開鍵暗号の一部は将来の危殆化を意識して設計変更が必要になり、移行猶予が短くなる局面も想定されています。
だからこそ TLS 1.3 の理解は、「今の HTTPS の仕組みを知る」だけで終わりません。
AES で本体を守り、RSA や ECC で鍵共有や署名を支え、必要になれば次の標準へ乗り換える。
その前提で設計されたプロトコルを使うことが、現代暗号におけるいちばん現実的な作法です。

RSAを小さな数で体験して、現代暗号の考え方を見る

RSA は古典暗号と違って数論が絡むため、名前だけ見ると遠く感じるかもしれません。
しかし小さな数に縮めると手順は紙の上で追え、公開鍵と秘密鍵を分ける発想が実感できます。

鍵生成の手順

小規模な例として、筆者はRSA暗号を作ってみようでもよく使われる p=7q=11 の組を使って説明します。
まず 2 つの素数を掛けて n=77 を作ります。
RSA ではこの n が計算の土台になります。
次に φ(n)=(p-1)(q-1) を求めると、(7-1)(11-1)=6×10=60 なので φ(n)=60 です。

ここで公開指数 e を選びます。
今回は e=17 とします。
条件は、φ(n)=60 と互いに素であることです。
1760 と公約数を持たないので使えます。
続いて秘密指数 d を決めます。
これは「17×d を 60 で割った余りが 1 になる数」です。
今回の答えは d=53 で、実際に 17×53=901901 mod 60 = 1 となります。
53 は mod 60 における 17 の逆元です。

この段階で、公開鍵は (n,e)=(77,17)、秘密鍵は (n,d)=(77,53) に分かれます。
ここが暗号の美しいところなのですが、同じ n を共有しながら、片方は配ってよく、もう片方は手元に残すという設計になっています。
古典暗号では「方式も鍵も隠す」方向に発想が寄りがちでしたが、RSA では方式は公開され、鍵も一部は公開されます。

暗号化と復号の計算

平文を m=10 とします。
暗号化は c = m^e mod n なので、今回は c = 10^17 mod 77 を計算します。
ここをそのまま 10 を 17 回掛けると見通しが悪いので、筆者は紙に二乗を並べる形で剰余を追います。
いわゆる square-and-multiply で、累乗を小分けにするやり方です。

まず 10^1 mod 77 = 10 という結果。
次に 10^2 = 100 なので 100 mod 77 = 23 ですね。
さらに 10^4 mod 77 = 23^2 mod 77 = 529 mod 77 = 67 でしょう。
10^8 mod 77 = 67^2 mod 77 = 4489 mod 77 = 23 になります。
10^16 mod 77 = 23^2 mod 77 = 529 mod 77 = 67 です。

ここまで来れば、10^17 = 10^16 × 10 なので、10^17 mod 77 = 67 × 10 mod 77 = 670 mod 77 = 54 となります。

10^17 mod 77 = 67 × 10 mod 77 = 670 mod 77 = 54

となります。
暗号文は c=54 です。
紙の上で 67、23、67 と余りが循環するのを追っていくと、RSA も「巨大な魔法」ではなく、剰余計算を丁寧に積む手順だと見えてきます。

復号は m = c^d mod n、つまり 54^53 mod 77 です。
こちらも同じ原理で計算すると、結果は元の 10 に戻ります。
値そのものは大きく見えますが、やっていることは暗号化と同じく「掛け算して、その都度 77 で割った余りに戻す」の繰り返しです。
手順として追えることがわかるだけでも、現代暗号への距離感はだいぶ変わります。

ℹ️ Note

この例で使っている小さな数は教育用です。実運用の RSA はこうした桁数では成立せず、前述の通り巨大な素数を使って安全性を確保します。

公開鍵と秘密鍵の役割・鍵配送問題

RSA を体験すると腑に落ちるのは、暗号文を作る鍵と、元に戻す鍵を分けたところです。
公開鍵 (77,17) は他人に渡して構いません。
相手はその鍵で m を暗号化できますが、復号に必要なのは秘密鍵 (77,53) です。
送信者は受信者の公開鍵だけ知っていればよく、受信者だけが秘密鍵で中身を読めます。

この発想は、古典暗号でいつも悩みの種だった鍵配送問題を越えるために出てきました。
古典暗号では、暗号化に使う鍵そのものを事前に安全に共有しなければなりません。
けれど、その鍵を安全に渡す手段があるなら、そもそもその手段で内容も送れてしまう、という堂々巡りに入りがちです。
RSA はここを、「かける鍵は公開してよい、開ける鍵だけ秘密にする」と切り分けます。

筆者はこの構造を説明するとき、南京錠の比喩をよく使います。
直感に反するかもしれませんが、開いている南京錠を相手に渡して、相手はそれを閉めることはできるが、鍵がなければ開けられない、と考えると筋が通ります。
公開鍵は配ってよい、という感覚は最初こそ不思議でも、この比喩に戻ると整理できます。
現代暗号の面白さは、秘密を守るために「全部を隠す」のではなく、「公開してよい部分をあえて作る」ところにあります。

2025〜2026年の視点:量子計算機とポスト量子暗号移行

量子計算機の話題は派手に聞こえますが、2025〜2026年の実務で起きているのは「明日すべての暗号が無効になる」という断絶ではなく、長期秘匿データを見据えて移行設計を前倒しする流れです。
現代の到達点は、RSA や ECC の将来リスクを正しく切り分けつつ、当面は現行方式とポスト量子暗号を併用するハイブリッド運用に寄せ、方式をあとから差し替えられる暗号アジリティをシステム側に持たせるところにあります。

量子計算機の影響整理

量子計算機が暗号に与える影響は、一枚岩ではありません。
公開鍵暗号では、素因数分解や離散対数問題に依存する RSA と ECC が長期的に厳しくなります。
Shor のアルゴリズムはまさにこの土台を崩す方向に効くため、いま安全に見える公開鍵基盤でも、将来の量子計算能力を前提にすると寿命を意識せざるをえません。
前節で触れた RSA の構造は美しいのですが、その美しさを支える数学的な前提が量子計算では揺らぎます。

一方で、共通鍵暗号は事情が異なります。
たとえば AES のような方式は、量子計算機があっても Shor 型の崩れ方はしません。
影響として整理すべきなのは Grover のアルゴリズムで、これは総当たり探索の効率を平方根の方向へ押し上げるものです。
そのため、公開鍵暗号のように「前提そのものが崩れる」のではなく、鍵長を引き上げて安全余裕を取り直すという設計で受け止められます。
AES のブロック長は 128 ビットで、共通鍵の世界では鍵長や運用寿命の設計がそのまま耐量子時代の議論につながります。

ここで直感に反するかもしれませんが、量子時代への備えは「RSA は危ない、だから全部すぐ捨てる」という単純な話ではありません。
実際のシステムは TLS の鍵共有、証明書の署名、SSH の鍵交換、コード署名、VPN、デバイス認証など、用途ごとに別々の暗号を抱えています。
筆者は自社と自宅の資産を棚卸ししたとき、どこで RSA、ECDSA、TLS が使われているかを付箋で壁に貼り出し、通信路、証明書、保存データの三つに分けて並べました。
そうすると、量子影響が先に効く場所と、共通鍵の鍵長調整で当面受け止められる場所が視覚的に分かれ、ハイブリッド化の優先順位も自然に見えてきます。

量子リスクを考えるうえでは、「いま読まれて困る通信」だけでなく「いま盗まれて、あとで解読されると困るデータ」も視野に入ります。
2040年代まで秘匿したい契約文書、研究データ、個人情報のバックアップでは、保存時点の暗号方式が後年の安全性に直結します。
2029年までに現行アルゴリズムの無効化リスクが現実的になり、移行猶予が 3 年程度まで圧縮されうるという時間感覚で見ると、2025〜2026年は様子見の年ではなく、棚卸しと設計変更を始める年です。

ハイブリッド移行の実務ポイント

現場で主流になるのは、現行方式とポスト量子暗号を並走させるハイブリッド移行です。
たとえば TLS であれば、従来の鍵交換や証明書の枠組みを一気に捨てるのではなく、既存の公開鍵方式に PQC を重ね、どちらか一方に将来の不安が出ても通信全体は守れる形に寄せます。
これは理論上の美しさというより、止められない業務を抱えたシステムが現実に採るべき姿です。

ただし、併用は無料ではありません。
証明書やハンドシェイクでやり取りするデータ量は増え、署名や鍵交換の計算負荷も上がります。
運用面でも、CA 連携、証明書配布、監視項目、障害切り分けの観点が増えます。
TLS の暗号スイートを眺めるだけで済んでいた運用から、どの接続でどの組み合わせが使われ、どのクライアントがハイブリッドを受け入れ、どこでフォールバックが起きるかまで追う必要が出ます。
ベンチマークは 23 スイート比較の例があっても、その数字をそのまま自分の構成に移せるわけではなく、結局は自分の通信経路と証明書配布の実態で判断するしかありません。

筆者が移行候補を並べるときは、まず公開面の広い TLS 終端、次に長寿命の証明書を持つ装置、続いて更新頻度の低い組み込み機器という順番で見ます。
壁に貼った付箋でも、外部公開の入口は赤、社内通信は青、保存データは黄という具合に色を分けると、ハイブリッド化で効果の出る場所が浮かび上がります。
特に、更新サイクルが年単位の装置は「今は動いている」ことがそのままリスクになります。
切り替えの意思決定が遅いと、暗号方式より先に調達・保守の都合がボトルネックになります。

筆者は Cloudflare の 2025 年の報告を参照しました。
Cloudflare の報告はポスト量子対応が実運用へ向かいつつある一事例を示していますが、単一の出典に依存する表現は避けるべきです。
ほかの調査や公式勧告と突合した上で一般化してください。

暗号アジリティと鍵長・寿命の考え方

この時期の設計で差が出るのは、特定の方式名を選ぶこと以上に、暗号アジリティを持たせられるかどうかです。
暗号アジリティとは、鍵交換、署名、証明書、保存形式を固定化せず、後から差し替えられる構造を仕込んでおくことです。
設定ファイル、証明書プロファイル、API、ライブラリ依存関係のどこか一箇所に方式名が焼き付いていると、移行はすぐ止まります。
逆に、アルゴリズム識別子と鍵長、証明書形式を疎結合にしておけば、ハイブリッドから単独の PQC へ進むときも被害範囲を限定できます。

鍵長の考え方にも、時間軸を入れる必要があります。
観測的な目安として、RSA 2048 ビットは 2010〜2030 年のレンジで使われ、2030 年以降は RSA 3072 ビット以上が視野に入る、という整理がちょうど境目を示しています。
ここで見たいのは「何ビットなら永遠に安全か」ではなく、「このデータをいつまで守りたいか」です。
2026 年に生成するバックアップを 2040 年代まで秘匿したいなら、現時点で使う公開鍵方式の寿命はその保存期間を貫ける必要があります。
RSA や ECC を使う場所では、量子リスクを前提に、より長い鍵長へ逃げるだけでは足りず、PQC への乗り換え余地を持つことが前提になります。
筆者が参照した Cloudflare の 2025 年報告は、PQC 対応の実運用例を示す一例にすぎません。
単一の出典に依拠した一般化は避け、ほかの調査や公式勧告と突合したうえで結論を整理してください。

ℹ️ Note

2025〜2026年の到達点は、PQC を「導入済みか未導入か」の二択で語ることではありません。RSA/ECC の長期リスク、共通鍵の鍵長調整、ハイブリッド運用の負荷、そして切替可能性を一つの設計図に収められているかで、移行の成熟度が見えます。

まとめ:目的別に、どの暗号の作り方を選ぶべきか

暗号の作り方は、強そうに見えるものを選ぶのではなく、何のために使うかで決めると迷いません。
遊びや教育なら、手で書けて破り方まで観察できる古典暗号が最適です。
学習を深めるなら古典から公開鍵、共通鍵、通信プロトコルへと順に積み上げ、実務では自作ではなく標準と運用設計を選ぶのが着地点になります。

紙とペンでシーザー暗号や転置式を2種類作り、同じ平文で家族や同僚に出題すると、どこで手が止まり、どのヒントで解けるかが見えてきます。
筆者はその観察から、頻度分析に気づける単純換字は学びが深く、転置式は見た目より規則の癖が露出しやすいと実感しました。
学習目的ならその体験を入口にして、古典暗号、RSAの小さな例、AESとTLSの役割分担、そして鍵を隠すのではなく方式を公開して守るという考え方へ進むと、全体像がつながります。

実務で必要なのは、暗号を作る技能そのものより、AES、RSAやECC、TLS 1.3のような標準を適切に組み合わせ、将来の切り替え余地まで含めて設計する視点です。
次にやることは明快で、まず手作業の暗号を比べて「破られ方」を体感し、その後は標準技術と運用、さらにPQC移行の輪郭を押さえる流れが最短です。

シェア

秋山 拓真

情報セキュリティ企業での暗号実装検証を経て、暗号理論の解説に専念。公開鍵暗号からポスト量子暗号まで、数学的原理をわかりやすく伝えます。

関連記事

現代暗号

ブラウザでHTTPSのサイトを開いた瞬間、画面には見えないところで「いま誰と鍵を決めたのか」と「その後の本文をどの鍵で守るのか」が一気に走ります。この記事では、まず共通鍵暗号の仕組みと量子コンピュータ時代に何が変わるかの節を先に参照すると、以降の議論の流れがつかみやすくなります。

現代暗号

WebをHTTPSで開き、Wi‑Fiに接続し、ノートPCのディスク暗号化を有効にする。ふだん何気なく触れているこの3つの動作の奥には、同じ名前の暗号がいます。

現代暗号

ブラウザの錠前アイコンを開いて証明書の詳細をのぞくと、Public-Key: RSA 2048 と Exponent: 65537 が並んでいて、公開鍵暗号は教科書の中だけの話ではなく、いま目の前の通信を支える現役技術なのだと実感します。

現代暗号

1977年に公開されたRSAは、公開してよい鍵(n, e)と外に出してはいけない秘密鍵dを分けることで、暗号と署名の考え方を一段進めた方式です。公開鍵暗号を数式から理解したい人、仕組みは知っているのに実務での役割が曖昧な人に向けて、歴史的位置づけから手で追える計算例までを一本につなげます。