VPNって知ってますか？

ここ最近リモートワークが増え、TL上でもVPNが～、、、みたいな話をよく見かけるようになりました
でも、その会話を見てみると「お前本当にVPN知ってるのか？」と思うことがちょこちょこありますｗ
ただ、それだけVPNというものが一般的に知られてきているということでもあるのかなと思ってます

そこでVPNとは何なのか、を振り返ってみようと思います


#VPNとは
(ここは本当に初心者向けです)
VPNとは、**Virtual Private Network(バーチャルプライベートネットワーク)**の略です
日本語にすると、**仮想専用線**です

######そもそも専用線って何？
専用線とは、自分専用のケーブルのことです
特に企業など機密情報を扱うときには専用線を使う必要がありましたが、企業ごとに専用線を用意しないといけないためコストが高い、という欠点がありました(今でも専用線を使っているところはあります)

######仮想専用線って何？
仮想専用線(VPN)とは、専用線の欠点を克服した仕組みです
すでにあるインターネット回線を使い、**通信を暗号化**することで仮想的な専用線を作ることができます


ここまではVPNを調べたことがある人なら知っているかなと思います
ですが、VPNはここからです！！！

<font color="red">VPNとは仕組みのことを言っているだけであり、プロトコルのことを言っている訳ではありません</font>
プロトコルって何？ってなる方もいるとは思いますが、ちょーかんたんに言うとVPNという大枠の中にSSL/TLSやIPsecなどの技術が入っているようなイメージです

**つまり、VPNというのはただの総称です**

#種類
VPNを構築するにはいくつかの方法があります
が、まずは暗号化について知っておく必要があります
ただ、アルゴリズムなどの小難しい話をする訳ではないので安心してください

######そもそも暗号化って？
コンピューターは0と1しか知りません
なのでコンピューター同士で通信をするときもすべて0と1に置き換わっています
しかしそのまま通信をしてしまうとよその人が見たときに通信の中身が丸見えになってしまうため、送信側で一度データをごちゃごちゃにしてから送信し、受信側でごちゃごちゃのデータを元の形に戻す、ということをしています
これを暗号化といいます

ここまでは簡単ですね
問題は次です

######実は何回も暗号化している!?
暗号化は通常、何回も行われています
なぜそんな手間なことを毎回やっているのかには理由があります
<font color="red">通信というのは、OSI参照モデルで切り分けて考えられているからです</font>

######OSI参照モデルって何？
細かく説明するときりがないものなので、短めに説明します
7つの層(レイヤー)で出来ており、それぞれの層で持っている役割が違います
通信をするときにデータは送信側の7層目～1層目を通り外へ出て、受信側の1層目～7層目を通り渡されます
送信側の過程を**カプセル化**、受信側の過程を**非カプセル化**と呼びます
層を通るときにデータの量が変わることがあり、4層目ではセグメント、３層目ではパケット、２層目ではフレームと呼ばれます

ただ、層が7個もあっても余分じゃない？ということからそれをシンプルにした**TCP/IP4層モデル**というものが実際には動いています

勘の良い読者なら気づくかもしれませんが、<font color="red">**暗号化というのはこの層ごとに行われています**</font>

######代表的なプロトコル
ということで、層(レイヤー)別の代表的なプロトコルをいつくか並べようと思います

- PPPoE

PPPoEはOSI参照モデルでいう2層目、TCP/IP4層モデルでいう1層目にあたります
元はPPPというプロトコルなのですが、それをEthernet上で使えるようにした、というのがPPPoEです
うちに置いてあるsoftbankのルーターはPPPoEを使っていました
主にプロバイダーが使っているものなので一般人はPPPoEの設定をしたりはほぼ無いかなと思います
ルーター---ルーター間で利用されます

- IPsec

IPsecはOSI参照モデルでいう3層目、TCP/IP4層モデルでいう2層目にあたります
IPsecの画期的なところは、IPsecは利用する技術を個別に選択できる、ということです
後述するSSL/TLSは脆弱性が見つかる度に新バージョンに乗り換える必要がありますが、IPsecは脆弱性のあるプロトコルだけを他のプロトコルに差し替えるだけで済みます
ただしマルチキャストが使えないため、GREというOSI参照モデルでいう2層目のプロトコルと合わせて使うことが多いです(ここはネットワーク屋さんの話ですが…ｗ)
ルーター--ルーター間で利用されますが、PC--PC間でも使うことができるため意外となんでもできます

- SSL/TLS

SSL/TLSはOSI参照モデルでいう4層目と5層目の間、TCP/IP4層モデルでいう3層目と4層目の間にあたります
なぜ「間」なのかというと、**TCP上でしか使えないから**です
SSL/TLSは一般人でも触れることが多いと思います
ブラウザーの上のほうにあるURLのとこに出ている鍵マーク、あれがHTTPSを使っている証ですが、HTTPSというのはHTTPとSSL/TLSを組み合わせたものです
サーバー--クライアント間で主に利用されています
サーバー証明書とかもSSL/TLSのためにあります
ただし弱点があり、脆弱性が見つかると最新バージョンに乗り換えるか、他のプロトコルを使うかしないといけません
現在の最新版はTLS 1.3ですが、今後更にバージョンが上がっていく可能性もあります

上記のように、いくつかのプロトコルを使って暗号化をしています
ここで注意点があるのですが、<font color="red">暗号化というのは、そのプロトコルが対応している層以上が全て暗号化されます</font>
PPPoEであればOSI参照モデルでいう2層目以上、IPsecであればOSI参照モデルでいう3層目以上、SSL/TLSであればOSI参照モデルでいう4層目以上が暗号化されます


このように、複数の層にわたって何回も暗号化されているため、どれかひとつ破られても大丈夫なんです、<font color="red">**ということにはなりません**</font>

VPNの仕組みを知るためには、**どこからどこまでが暗号化されているか**、ということが非常に重要なんです

一番危ないところは、自分のPC、スマートフォン--ルーター間です
暗号化というのはルーター--ルーター間は勝手にやってくれることが多いですが、自分のPC、スマートフォン--ルーター間は意外と適当です
飲食店に置いてあるWifiフリースポットなどはよく確認しないと、たまに暗号化していなかったり、脆弱性が公開されているプロトコルを使ったりしてます

HTTPSを使っていれば自分のPC、スマートフォン--ルーター間も一応暗号化されますが、HTTPSを使っていないWebサイトにアクセスすると無防備になってしまいます

このように、<font color="red">**暗号化していると言ってもいろんな種類があり、それぞれで暗号化している範囲が違うんです**</font>

#VPNに必要な機能
上記では結構細かく説明していましたが、ここでは大雑把にVPNを張るために必要な機能を紹介しようかと思います
VPNを構築するために使うプロトコルは変わるかもしれませんが、必要となる機能は変わりません

- 暗号化
当然、暗号化の機能がないとVPNは構築できません

- 完全性の保証

送信者が送ったデータが受信者に届くまでの間で、データが改ざんされていないことを保証する機能です
この機能はハッシュ関数を用いて実装されています
SHA-256が広く使われていますが、データをごちゃごちゃにすることが目的ではないためMD5でもほとんど問題ありません(MD5を使ったところで突破はできないとされています)

- 認証

相手が本物かどうかを確かめる機能です
ユーザー名、パスワードを使ったり、SSL/TLSでは認証局(CA)を使うことにより担保しています

この部分を抑えていれば、どれかひとつが抜けていたときに「？？？」と思える人になれるかなと思います

#まとめ
VPNについて簡単にですが説明してみました
ひとくちにVPNといってもいくつかの種類があり、それぞれで使われ方が違う、ということが分かって頂けたと思います

ここらへんを意識してみると、何か問題があった時にトラブルシューティングもサクサクできるのかなと思います

良い在宅ライフを！！！

###ちょっとおまけ
VPNというのは性質上、100%のセキュリティを保証することはできません
何故かというと、暗号化した後のデータは誰に見られても良い、というスタンスで作られているものだからです
暗号化したデータをずっとパケットキャプチャー(監視、保存)されていて、そのプロトコルの脆弱性が発見された後に保存しておいたデータを攻撃して復号化する、というやり方が通用してしまいます
そのため、マジでやばいデータをやりとりするときは**「攻撃者を同じネットワークに侵入させないこと」**が重要になります

データというのは物理的なケーブルの上を通ってやりとりするものなので、世界最強のプロトコルを使って多少暗号化したからといって安心するべきではありません
真に重要なデータはネットワークの上に出さない、ということが重要になります