
春が来たとコートを脱げば、翌日から寒くなり体調を崩す今日このごろ。 どうも、布団からなかなか出られないエンジニアTです。
私も入社して2年目に突入しましたので、後輩が入ってくるという恐怖が怖いです。
まだまだ経験も知識も足りないので、どーにか後輩に良く見られたい願望から大学時代の参考書などを読み漁っていたところ、なにやら暗号化通信(TLS)がすこし変わっていたことに気付きました。
というわけで、 「ざっくりと従来の暗号技術を把握」 (←本稿)しつつ 「暗号化通信(TLS)がどう変わったのか」 を全2本の記事で紹介しようと思います。
暗号化の仕組み
「いまさら暗号の仕組みって笑」と思われるかもしれませんが、おさらいとして紹介します。 HTTPSなどに使われる暗号(AESなど)はXOR演算の2回適用すると元に戻るという特性を活用しています。

このとき、 適当なバイナリ に当たる部分はバレないように秘密にしておきます。
例として、T という文字(ASCII: 01010100)に 11001100 という適当なバイナリをXOR演算すると、10011000 という通常の文字コードでは表現できないバイナリに変化します。
しかし、10011000 に対して再び同じ 11001100 をXOR演算すると、元の T に復元されます。

この適当なバイナリに当たる部分を 鍵(以降は暗号鍵と呼ぶ) のように扱うことで、秘密にしたいことを読めなくする(暗号鍵でロックする)ことができます。
こうした仕組みを発展させたのが現在の暗号化技術です。
暗号化して伝えるには
では、暗号化したメッセージを相手に伝えてみましょう。 インターネットを考えたとき、暗号化したい部分は 赤色 のスペースです。

先ほど使った暗号鍵を使って、シンプルに渡してみましょう。
方法1: シンプルになげてみる(暗号鍵のみを使う)
- Aさんは、暗号鍵を生成して平文を暗号化し、暗号化したメッセージをBさんに渡します。
- Bさんはそれを受け取ると、暗号文に対してもう一度XOR演算を適用しメッセージを復号します。
- このとき、暗号文の復号にAさんが生成したものと同じ暗号鍵が必要になるので、Aさんにインターネット経由で送ってもらいます。

むむ?? インターネットの怪しい人が騒がしいですね。
あっ!! この方法だと赤色ゾーンで暗号鍵が守られていません。
これではせっかく暗号化して送ったにも関わらず、「暗証番号は11001100だよ!」と大声で叫んでいるのと何ら変わりません。
このまま運用し続ければ、怪しい人に情報を盗まれてしまいます。
暗号鍵を安全に渡すには
では暗号鍵を叫ばずに伝えるにはどうしたらいいでしょうか。
答えは単純です。赤色ゾーンをそのまま通過することが問題なのであれば、 暗号鍵も暗号化しちゃえばいい のです。
しかし、単純に暗号鍵を新しい暗号鍵2で暗号化したとしても、復号する時には暗号鍵2が必要になります。そうなると結局、暗号鍵2が安全に渡せなくなり何も変わりません。
ですので、以下のような性質をもつ鍵を作ってみましょう。
- 閉じる(専用の)鍵🔒 (公開鍵と呼ばれるもの)
- 開ける(専用の)鍵🔑 (秘密鍵や復号鍵と呼ばれるもの)
暗号鍵が担っていた役割を、「開ける🔑」「閉じる🔒」の2つに分けてみました。

このとき、開ける鍵🔑は秘密にしておきます。閉じる鍵🔒はバレてもOKです。 なぜなら、 閉じる鍵🔒だけでは復号化ができないからです。 復号化ができるのは開ける鍵🔑なので、閉じる鍵🔒はネットワークの不審者にバレても問題ありません。
方法2: 開ける(専用の)鍵🔑と閉じる(専用の)鍵🔒を使ってみる
- Aさんがメッセージを送るとき、Bさんから閉じる鍵🔒をもらいます。
- そして、閉じる鍵🔒で暗号鍵を暗号化し、Bさんに送ります。
- Bさんは暗号を受け取ると、開ける鍵🔑で復号し暗号鍵を入手します。
- そのあとは、先ほどの方法1と同じです。(下の図では省略)

こうすれば、少なくとも赤ゾーンには 閉じる鍵🔒しか渡らない ので、インターネット不審者も悪さできないですね!
とはいえ、「開ける鍵🔑・閉じる鍵🔒はどんな理論だよ!」と思いますよね?
実は先ほどのXORの特性よろしく 素因数分解問題の特性 を活用すれば実現できます。
素因数分解問題の特性とは、簡単にいうと大きな数字での素因数分解がめっちゃ難しいということです。
p(奇数の素数)*q(奇数の素数) = N(600桁ぐらいのでっかい整数)
上の式を考えたとき、Nからpとqを求めることは現代のコンピュータでも困難です。
ですので、この特性を使えば・・・と説明したいところですが、
今回は私が数学を書きたくないので省略します・・・(スミマセン)
興味のある方は以下の資料やChatGPTに聞いてください。
とりあえず、 素因数分解問題の特性を活用すれば開ける鍵🔑・閉じる鍵🔒が作れる! ことだけ抑えて貰えば大丈夫です。
ハイブリット暗号方式
さて、鍵を安全に渡す方法がわかったので、改良した方法をまとめてみましょう。 メッセージの暗号化に加え暗号鍵すらも暗号化してみました。

お、いい感じじゃないでしょうか。赤色ゾーンには暗号化されたものだけしか存在してません。 これなら安全と言えるでしょう!!!
とはいえ、まだ中間者攻撃(Bさんの閉じる鍵🔒ではなく第三者Cさんの閉じる鍵🔒で暗号化してしまった場合)などの危険性はありますが、、、今回の話とは関係ないので知りません。
安全な通信ができた・・・?
ということで、通信(TLS)に限ってではありますが、安全で完璧な暗号化ができました! これで、人には話せない恥ずかしいメッセージだってバレることはありません!
ま、てきとーな茶番はさておき、~前提知識編~ということで、ここまでは前座です。
実は、今回話した ハイブリット暗号方式はほとんど使われていません。
・・・ ここまで読んでもらった人には申し訳ないです。ハイブリット暗号方式は忘れて大丈夫です。
この記事を読んでいる方にも、学生時代に
「共通鍵と公開鍵を組み合わせたハイブリット暗号方式で通信してるんだぞ☆」
と教わった人もいらっしゃるのではないでしょうか?
実は、 TLS1.3以降でRSA暗号を使ったハイブリット暗号方式は廃止されました。 (量子耐性アルゴリズムなどは除きます。)
ということで、次回は「なぜハイブリット暗号方式が使われなくなったのか」「代わりに何を使うのか」をお話していこうと思います。
それではまた。
引用文献
- 面和成. 『入門 サイバーセキュリティ 理論と実験 - 暗号技術・ネットワークセキュリティ・ブロックチェーンからPython実験まで』. コロナ社, 2021/03/04, [232]
- 村上仙瑞. "RSA暗号の仕組み". https://www.chart.co.jp/subject/sugaku/suken_tsushin/105/105-06.pdf, 2025/04/14
- 伊豆 哲也. "素因数分解の難しさと解読の難しさが等価な公開鍵暗号の紹介". https://qiita.com/izutetsuya/items/127130ee63448106dbab, 2024/04/14
おわりに
KENTEMでは、様々な拠点でエンジニアを大募集しています! 建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。 recruit.kentem.jp career.kentem.jp