IPsecとは
安全にデータをやり取りするために決められた手順のことです。
この手順に従うことで、インターネットでも安全に通信をすることができます。
安全ってなに?
さっきから「安全」と言ってますが、ここでいう「安全」とは以下の2つの状態のことを指します。
- 自分と相手にだけ意味がわかるようにして、覗き見されても内容がバレないこと
- データが改竄されても、改竄されたことが分かること
安全に通信するための方法
上記の2つを実現するために、それぞれ「暗号化」と「ダイジェスト値の計算」を行います。
暗号化について
暗号化については、何となく分かると思います。
通信相手にだけ分かるようにデータを変換して、覗き見されても内容が分からないようにすることです。
暗号化には、さまざまな方法があります。
また、暗号化の際にはある「数字」が使われます。
イメージしやすいように具体例を挙げます。
例えば、「ありがとう」というデータを暗号化したいとします。
暗号化の方法はいろいろありますが、ここでは「文字をずらす」ことにします。
この暗号化では「数字」は、ずらす文字数になります。
ここでは1文字ずらすことにします。
すると、「ありがとう」は「いるぎたえ」になります。
このデータを相手に送ります。
途中で覗き見されても、変換方法を知らなければ意味が分かりません。
通信相手が「いるぎたえ」を受け取り、「1文字」で「ずらす」という暗号化を知っていれば、「ありがとう」に戻すことができます。
「暗号化の方法」と「数字」をお互いが知っていることが必要です。
ダイジェスト値の計算について
ダイジェスト値とは、「送信したいデータから計算される値」のことです。
ダイジェスト値の計算方法はさまざまですが、ここでも「数字」を使います。
イメージしやすいように、具体例を挙げます。
例えば、「こんにちは赤ちゃん」というデータを送信したいとします。
ダイジェスト値の計算方法は色々ありますが、ここでは「文字を飛ばして読む」という方法にしましょう。
「数字」として、1文字とします。
すると、ダイジェスト値は「1文字飛ばして読む」ことになります。
ダイジェスト値は「こにはちん」となります。
このダイジェスト値も相手に送ります。
通信相手が「こんにちは赤ちゃん」と「こにはちん」を受け取ります。
「1文字おきに読む」方法を試すと、「こにはちん」となり改竄されてないことがわかります。
ここで、通信相手が「こにちは赤ちゃん」を受け取っていたとすると、ダイジェスト値は「こち赤ゃ」となり、受け取ったダイジェスト値と異なるので改竄されていることがわかります。
「ダイジェスト値の計算方法」と「数字」をお互いが知っていることが必要です。
「暗号化の方法」「ダイジェスト値の計算方法」「数字」の交換方法
安全な通信を行うためには「暗号化の方法」「ダイジェスト値の計算方法」「数字」が必要なことがわかりました。
問題はこの方法を、通信したい相手とどうやって交換するかです。
実は、「暗号化の方法」「ダイジェスト値の計算方法」はバレても問題ありません。
「数字」さえバレなければ、解けないように作られてます。
つまり、「数字」を通信相手のみと交換し、「暗号化の方法」「ダイジェスト値の計算方法」はバレてもいいのでそのまま送ります。
残る問題は「数字」を第三者にバレずに通信相手と交換することです。
DH法
「数字」を2人の間で交換する方法は、DH法といいます。
以下のサイトにわかりやすい例がありました。
IPsecの接続手順
IPsecは以下の手順で安全な通信を行います。
- お互いに通信相手が本物か確かめる
- 通信相手と「暗号化の方法」と「ダイジェスト値の計算方法」を決める
- DH法で自分と通信相手しか持ってない「数字」を作成する
- 2~3をもう一度やる
- データのやり取りをする
IPsecではさらに安全にするため二重で暗号化とダイジェスト値の計算を行います。
暗号化とダイジェスト値の計算を施した通信上で、さらに暗号化とダイジェスト値の計算を行います。
お互いに通信相手が本物か確かめる
最初に通信相手が本物か確かめます。
相手を確かめる方法の代表はRSA暗号方式です。
これについては、Googleで検索すると解説がたくさん出てくるので、ここでは割愛します。
通信相手と「暗号化の方法」と「ダイジェスト値の計算方法」を決める
先ほど説明した方法で、「暗号化の方法」と「ダイジェスト値の計算方法」を決めます。
これらは、ある「数字」元に計算されるものであり、この「数字」さえバレてなければOKです。
DH法で自分と通信相手しか持ってない「数字」を作成する
「数字」をバレないように交換するためにDH法を使います。
ここまでやると、暗号化とダイジェスト値を付与した、安全な通信を行うことができます。
安全な通信を確立した上でもう1度安全な通信を確立する
安全な通信を使って、もう1度「暗号化の方法」と「ダイジェスト値の計算方法」を決めます。
この方法は、前に決めた方法と異なっていても問題ありません。
そして「数字」ももう1度決めます。
これにより2重で安全な通信を確立することができます。
データのやり取りをする
2重で安全な通信を確立したら、データを送信します。
このデータは、次のようにして送信されます。
- データを暗号化し、ダイジェスト値を計算してデータに付与する。
- 1を暗号化し、ダイジェスト値を計算してデータに付与する。
- 送信する。
受信側でもこれに対応した方法でデータの復号とチェックを行います。
これにより安全な通信ができるというわけです。
参考にした記事
IPsecを理解するにあたり、以下の記事を参考にさせていただきました。
https://uquest.tktk.co.jp/embedded/learning/lecture14-1.html
https://www.infraexpert.com/study/study10.html
https://milestone-of-se.nesuke.com/nw-basic/ipsec/ike-v1-v2-comparison/
https://nw-exam.com/mondai/NW0038.html
https://ja.wikipedia.org/wiki/HMAC
コメント