ネットワークエンジニア

PKI(公開鍵暗号基盤)で使われる共通鍵・公開鍵・秘密鍵

この記事では、インターネット上使われる暗号化技術の集積であるPKI(Public Key Infrastructure:公開鍵暗号基盤)で使われる、共通鍵・公開鍵・秘密鍵などについて解説します。

PKIの学習に失敗する人の典型的なパターンは、

全体像を把握していない状態で、次々と新しい用語・モノ・機能を覚えようとする。

だと思います。

一歩一歩足場を固めて進めばそこまで険しい道のりではありません。

各章を順番に着実に理解して行きましょう。

【当シリーズ】

この記事は、初学者が挫折しやすい「全体像の把握」を主目的にした解説です。
まずはこの記事で全体像を把握しましょう。

用語解説

  • 暗号化:データを改変し、読めないデータ(意味のない記号の羅列など)にすること。
  • 復号(復号化):暗号化されたデータを、元のデータに戻すこと。
  • 平文:(暗号化されていない)普通のデータ。
  • 暗号文:暗号化された読めないデータ。

まずはこれだけ覚えましょう。

共通鍵暗号方式

まず、共通鍵暗号方式の特徴を記載します。以下の通りです。

  • 暗号化と複合化で同じ鍵(共通鍵)を使う
  • 処理が高速

です。

1つの鍵で暗号化と複合化ができますので、その鍵を盗まれたら暗号文を復号されてしまいます

また、処理が高速ですので、大量のデータをやり取りする場合に適しています。

共通鍵暗号化方式での暗号化・復号化で何が行われている?

「暗号化」「復号化」と言われてもピンとこないと思うので、何が行われているのかを解説します。

共通鍵暗号化方式で行われているのは、基本的には置換と並べ替えです。

まずは置換です。

続いて並べ替えです。

これにより、

平文:はじめましてえもんだしゃちょうです

暗号文:ЯじだすしちもΘΠめΨゃΕДうΛΓ

になりました。

そして、共通鍵とは置換と並べ替えのやり方(上図の「置換表」と「並べ替え表」)のことです。

置換と並べ替えはやり方さえわかれば、暗号化したものをもとに戻せますので、暗号化・復号化で同じ鍵が使われることになります。

※当然ではありますが、現在実用されている暗号化では、この解説よりももっと複雑な処理を何回も繰り返しています。

暗号化の説明では、よく「鍵と錠前」の画像が使われていますが、個人的にはその画像こそが混乱の元だと思っています。
当然、この記事ではそのような画像は使いません。

共通鍵暗号方式の種類

共通鍵暗号方式には、以下のようなものがあります。

  • AES:現在主流の暗号化方式。いまだかつて破られていない。
  • DES:昔の暗号化方式。脆弱性が発見されており、共通鍵が無くても復号できる場合がある。
  • 3DES:DESを3回繰り返す暗号化方式。こちらも脆弱性が発見されている。その他、処理に時間がかかるという弱点もある。

公開鍵暗号方式

公開鍵暗号方式の特徴は以下の通りです。

  • 公開鍵と秘密鍵を使う
  • 処理に時間がかかる

公開鍵で暗号化して秘密鍵で復号化します。

その名の通り、公開鍵を公開しておき、秘密鍵は公開せずにサーバ内などに保管しておきます。

データの送信者は、公開鍵で送信データを暗号化してから送信すれば、データ到達までに第三者に見られても内容が読み取られません。

データの受信者は、自身で保管してある秘密鍵で受信データを復号化します。

公開鍵暗号化方式での暗号化・復号化で何が行われている?

公開鍵暗号化方式で行われている処理は、関数への値の投入です。
※数学の「関数」です。(プログラミングの関数ではないです)

端的に述べると、

 つまりは、

というように、関数(鍵)に暗号化・復号化対象データを投入するのが、公開鍵暗号化方式です。

暗号化する関数f(x)を公開鍵とし、復号する関数g(y)を秘密鍵とする場合もあれば、逆の場合もあります。

いずれの場合でも、(共通鍵と異なり)片方は暗号化しかできず、もう片方は復号しかできない、ということを覚えてください。(「非対称鍵暗号」と呼ばれます)

決して、鍵と錠前をイメージしないでくださいw
RSAの計算では、法を取る(割って余りを出す[mod])という計算が使われます。
この計算について、厳密な意味で「関数」と呼ぶのかは、調べた限りではわかりませんでした・・・。知ってる方がいれば教えてほしいです。
便宜上ここでは「関数」と記載します。

公開鍵暗号方式の種類

公開鍵暗号化方式では主に

  • RSA暗号
  • DH鍵共有
  • DSA

などの方式があり、インターネット上で使われる暗号化通信(SSL/TLS)ではRSA暗号が使われています。

なお、RSA暗号の強度は、ビット数(鍵長)で決まります。

Wikipediaによると、2020年2月に829ビットが破られたそうです。

なお、2048ビットを破るためには、コンピュータで〇億年や〇兆年の計算時間が必要だそうです。

ビット数が何を表しているかというと、鍵(関数)で使われる素数の大きさを表しています。
素数×素数を素因数分解できれば、関数fから関数gを割り出せますが、大きな素数×大きな素数を素因数分解するのはとても時間がかかります。(これがRSA暗号が安全である根拠です)
鍵長が長い方が安全だ、と言われるのはそのためです。

共通鍵・公開鍵・秘密鍵の使用例

一般的に暗号化通信をする場合には、公開鍵暗号方式と共通鍵暗号方式が組み合わされて使われています。

※SSL/TLSで使われる認証局(CA)、デジタル証明書、デジタル署名などはこの記事では省略してあります。次回の記事で詳細を解説していますので、必要な方はそちらをご参照ください。

  1. 端末がWebサーバにHTTPSリクエストを送信
  2. WebサーバがHTTPSリクエストをしてきた端末に公開鍵を送付。
  3. 受領した公開鍵で(自身で作成した)共通鍵を暗号化(関数f(x)に投入)。
  4. 暗号化された共通鍵をWebサーバに送付。
  5. 受信した暗号文を秘密鍵で復号(関数g(y)に投入)し、共通鍵を取得。
  6. 共通鍵を交換できたので、以降は共通鍵で暗号化した文章を送受信。

このようにして、共通鍵を安全にやり取りし、その後は共通鍵で暗号化されたデータをやり取りします。

暗号化の目的

暗号化の目的は、必要な人だけがデータを利用できる状態、つまりは第三者がデータを取得しても内容を理解できない状態にするためです。

ブラウザでホームページなどを参照する場合に使われるSSL/TLSは、インターネットを通過する情報を盗み見られても悪用されないために使われています。

特に、楽天やアマゾンなどのECサイトで買い物をするときには、クレジットカード番号を入力したりします。カード番号を盗み見られると、当然ながらそのクレジットカードを不正利用して買い物ができてしまいます。

その他にも、住所や職場やマイナンバーや納税情報など、入手されたら困る情報は沢山あります。

最近はECサイトなどでなくても、ほとんどのホームページでSSL/TLSが使われています。

見分け方は簡単で、アドレスバーの表示が「https」となっていればSSL/TLSが使われています。

「SSL/TLS」という表記について
これは単純にSSL or TLSの意味です。SSLはv3.0が最後のバージョンになり、より安全性の高いTLSが開発され v1.0 として公開されました。
現在利用されているのはほとんどがTLSですが、習慣的にSSLと呼ばれることも多いので、このような表記が使われています。

第三者にデータを見られるケースとは?

そもそも「第三者にデータを見られる」とはどういう状況でしょうか?

答えは簡単で、実はネットワーク機器には障害発生時の調査などのためにポートを通過するデータをコピーして別のポートに転送する機能がついているのです。

また、送受信したデータを機器内のフラッシュメモリに(少量ですが)保存する機能などもあります。

マンションでインターネットを使うと、ネット契約の種類によりますが、

(PC)-(自分の部屋の回線業者のルータ)-(マンション内のネットワーク機器)-(マンション内のONU)-(回線業者局舎内のONU)-(回線業者局舎内の回線業者ネットワーク機器)-(回線業者局舎内のプロバイダのネットワーク機器)・・・(ECサイトサーバ)

と沢山の機器を通過します。

回線業者やプロバイダの機器は、セキュリティの高いデータセンター内にあるので、そう簡単には細工できません。

しかし、マンション内のネットワーク機器なんかは比較的簡単に細工できそうではあります・・・。

ケーブルに悪さして情報を盗めるのか?

今回初めて考えてみたのですが、ケーブルに悪さをするのも可能ではあります。

LANケーブルは内部の8本の線を正しくRJ45コネクタに接続すればできます。

RJ45のコネクタについては、こちらのショッピングサイトの動画が一番わかりやすかったです。

内部の8本の線の被膜を剥がして、それぞれを正しくコネクタに接続すれば、問題なく通信できます。

光ケーブルもSCコネクタを取り付ければ通信できますし、断線した光ケーブルを加熱して繋げる機械を某所で見たことがあります。

しかし、この場合には必ず通信断が発生し、(まともに運用しているNWであれば)リンクダウンが管理者に通知されます。

やはり盗聴されるとしたら前述のネットワーク機器へ細工されるケースが現実的かと思います。

まとめと感想

ネットワークエンジニアをやっていると、暗号について話を聞くことがままあります。

その際に当然ネットで調べたのですが、正直どの記事を見てもよくわかりませんでした

なんというか、用語などを丸暗記しても、とにかくかゆいところに手が届かないような、そんな感覚にしかならなかったのです。

今回記事を書いてみてわかりましたが、データの暗号化に使う「鍵」と玄関のドアとかについている「鍵(錠前)」とでは、構造も機能も全く異なります

例えば、ログイン認証は鍵・錠前と機能が似ていると思いますが、暗号化と鍵・錠前は似ていません。

なんで暗号化・復号化に「鍵」という単語を使うことにしたのでしょうか?

その昔シスコ社のSecurityの教科書に日本語版が無かったので、英語版を読んだのですが、英語でも暗号化で「鍵」という単語が(鍵の絵と共に)書かれていた記憶があります。

そんなことを考えながら、できるだけ初心者が概要を掴みやすいように書いたつもりです。

この記事をお読みの方が、挫折せず暗号化について理解できるようになることを祈っています。

それでは (*゚▽゚)ノ

=-=-=-=-=-=-=-=-=-=

お読みのあなたが現役エンジニアなら、是非とも下のサムネをクリックしてアンケートにご協力をお願いします m(_ _)m

=-=-=-=-=-=-=-=-=-=

-ネットワークエンジニア
-,