VPNの基本は、トンネリングと暗号化とされています。この記事では、トンネリングと暗号化の仕組みについて、概念がわかるように、なるべく分かりやすく図解していきます。
VPNのトンネリングの仕組み
トンネリングとカプセル化、そしてネットワークの階層構造について解説していきます。
トンネリングとは
トンネリングとは、異なる拠点間のネットワークを、同一ネットワークであるかのように擬似的に接続する技術のことです。
この画像の「社内ネットワーク」は、「インターネット」とは切り離されているため、社内ネットワーク内での通信は安全に行うことができます。
しかし、リモートワークなどで「自宅」から接続しようとする場合、途中にインターネット網を経由するので、そのまま接続するには危険が伴います。
そこで、トンネリングによって、社内と自宅のネットワークを仮想的に結ぶことで、自宅にいながら社内にいるかのように通信をすることができます。
トンネリングを実現する方法はいくつかありますが、
- カプセル化
- 暗号化
- 認証
が組み合わさっていることが多いです。
トンネリングとカプセル化の違い
「トンネリング」と「カプセル化(カプセリング)」は、似たような概念なので明確に区別することは難しいのですが、カプセル化によってトンネリングが実現されていると言えます。
カプセル化は、データを入れ子構造にすることを指すので、トンネリング以外にも使われる言葉です。
例えば、Aにデータ送信をしたい時には、宛先である「A」と「データ」を、一つのまとまり「パケット」として送ります。
ここで、A経由でBにデータ送信をしたい時に、それを入れ子構造にすることをカプセル化と言います。
この時に、通信プロトコル(通信規格)やデータ構造が異なっていても構いません。
中のデータがどうなっているのか、一切気にせずに送ることができるのが、カプセル化のメリットです。
さらにVPNでは、暗号化や認証が組み合わさっているので、カプセル化された中身を解読することは困難になっています。
トンネリングとネットワークの階層構造
コンピューターネットワークは、物理的な信号レベルから、アプリの使い方まで、様々な階層構造を持っています。
例えば電子メールを送信する時に、メールアドレスが必要となりますが、相手のWi-Fiがどうなっているのか意識する必要はないでしょう。
逆にWi-Fiの階層では、メールアドレスかどうかを意識する必要はありません。
ネットワークのどの階層でトンネリングするかによって、様々なVPNの規格があります。
OSI参照モデル | VPNプロトコル |
---|---|
第7層 | SSH VPN |
第6層 | |
第5層 | SSL-VPN |
第4層 | |
第3層 | IPSec WireGuard |
第2~3層 | OpenVPN SoftEther |
第2層 | PPTP L2TP |
第1層 |
下記の記事も参考にしてください。
VPNとSSLの違いとは? なるべく分かりやすく解説します
2024/7/25
VPN、SSL、HTTPSなど、インターネットのセキュリティに関する用語は多くあり、混乱しがちです。この記事では、VPNとSSLの違いについて、なるべく分かりやすく解説しています。そのためには、ある程 ...
VPNの暗号化の仕組み
共通鍵暗号の概要と問題点、公開鍵暗号の概要について解説していきます。
暗号化とは何か
コンピューターの世界で、よく「暗号化」という言葉が使われますが、これは「計算するのに時間がかかる処理」を意味します。
その概要を解説します。
シーザー暗号の例
歴史上、もっとも古くて簡単な暗号として、シーザー暗号が知られています。
これは、アルファベットの文字を、決まった数だけずらすというものです。
この場合、何文字ずらすかが「鍵」となります。
- 暗号文:KHOOR
- 鍵:3
- 復号文:HELLO
暗号を解読するとは、鍵である「3」を見つける作業となります。
正しく復号できたか確認する方法
しかし鍵が「3」で、「HELLO」が元の文であるとは、どのように判断すればよいのでしょうか。
もしかしたら鍵が「4」で、「GDKKN」が正解なのかもしれません。
正しく復元できたか確認する方法には、以下のようなものがあります。
- ファイルの形式に合った特定のパターンが確認できる
- 照合用のメッセージが暗号文に組み込まれている
- 照合用の値が事前に共有されている
実際には、これらの方法を組み合わせて確認されています。
現代暗号の例
シーザー暗号は何文字ずらすかだけなので、英語のアルファベットであれば25回試せば鍵が見つかることになります。
これでは暗号としてほとんど意味がありません。
現在実際に使用されている暗号の例として、AES-128は、128ビットの長さの鍵を持ちます。
128ビットとは、0または1が128個並んでいるということで、2128個の組み合わせが考えられます。具体的には、次のようになります。
- 340,282,366,920,938,463,463,374,607,431,768,211,456
これは、1秒間に1兆個の鍵を試すことができるコンピューターでも、全パターンを試すのに10億年かかる計算となります。
このように計算時間が膨大となるので、鍵を見つけるのがほぼ不可能というのが、暗号の基本です。
共通鍵暗号の問題点
上記の「シーザー暗号」も「AES-128」も、暗号化と復号化に同じ「鍵」を使用するということから「共通鍵暗号方式」と呼ばれています。
- 平文:HELLO
- 共通鍵:3
- 暗号文:KHOOR
- 共通鍵:3
- 復号文:HELLO
データを送信する人と受信する人は、同じ鍵を持っていることが必要となります。
これには、次の2つの問題があります。
鍵の受け渡し問題
データのやり取りをするにあたり、鍵を共有する必要があります。
でもそれはどうすればいいのでしょうか。
盗聴されるかもしれないので暗号化すると言っているのに、その鍵が盗聴されてしまったら意味がありません。
なんとかして、安全に鍵をわたす必要があります。
ちなみに現在でも、
「ZIPで暗号化しました。パスワードは別メールでお送りします」
のようなことが、平然と行なわれています。最低でもパスワードは別ルートで送る必要があるでしょう。
鍵の管理問題
Aさんが、BさんとCさんにデータ送信をしたいとします。
BさんとCさんに鍵を共有しないといけないというのは上記の通りですが、もう一つの問題として、別々の鍵を用意する必要があるということがあります。
そしてBさんも、AさんとCさん用に別の鍵を持たないといけないことになります。
このように、通信をする相手が増えるごとに、膨大な数の鍵を管理する必要が出てきます。そしてそれを全て、盗聴されることなく共有しないといけないのです。
それはとても大変なことです。
公開鍵暗号とは
この共通鍵暗号の問題を解消したのが、公開鍵暗号方式です。
これは、暗号化する鍵と、復号化する鍵を別々のものにするというアイデアから来ています。
暗号化する鍵は、暗号化をするだけで、復号化することができません。
復号化する鍵は、自分だけが知っていればいいので、相手に渡す必要がありません。
これにより、盗聴されるリスクを小さくすることができます。
公開鍵暗号方式が開発されたのは1960~70年代ですが、これは「火」や「文字」に相当する、人類史上最高の発明の一つだと言う人もいるほど、画期的なことでした。
RSAの基本
代表的な公開鍵暗号であるRSAは、素因数分解を利用しています。
例えば数字の「33」は、素数の「3」と「11」の積であるということはすぐに分かります。
しかし「3233」はどうでしょう。これは「61」と「53」の積となりますが、なかなか難しいですよね。
素数を2つかけ合わせるのは簡単にできるのに、そこから元の素数が何かを求めることは難しい、というのがRSAの基本となっています。
そして、詳細は省きますが、数学的なステップを踏むことで、2つの非対称な鍵を生成できるのです。
この鍵のことを「公開鍵」と「秘密鍵」と呼びます。
「公開鍵」は、「自分が暗号文を送信する時」ではなく、「自分に暗号文を送信してもらう時」に使用します。
「33」の例を用いると、以下のようになります。(話を簡単にするために、正確でないところがあります)
- Aさんは全世界に向けて、自分の公開鍵は「33」であることを告知する
- Aさんにデータ送信したい人は、公開鍵「33」を用いて暗号化し、Aさんに送る
- Aさんは秘密鍵「3,11」を用いて復号化する
- 平文:HELLO
- 公開鍵:33
- 暗号文:%!&FH#l2(33を使っても元に戻せない)
- 秘密鍵:3,11
- 復号文:HELLO
「3,11」は誰にも知らせていないので、安全にデータのやり取りをすることができます。
実際のRSAでは、数百桁の素数が使われており、その解を見つけることは極めて困難になっています。
VPNでの暗号化の実際
上記のような話は古典的な理論で、VPNを始めとした実際のシステムでは、もっと複雑な仕組みが取られています。
以下のような機能を実現するために、様々な数学理論が組み合わされています。
- 鍵の生成・共有
- 暗号化
- 改ざんの検出
- 署名と認証