tunsock BLOG
Illusts of Life with Old cats
Goods of Life with Old cats
instagram of Life with Old cats
簡単に安全・プライベートなデータ通信環境を構築するP2Pテクノロジーとは [セキュリティ]

簡単に安全・プライベートなデータ通信環境を構築するP2Pテクノロジーとは [セキュリティ]

December 24, 2024

スマートフォンやパソコンを使って、外出先など何処からでも自宅にアクセスできる環境がほしいと思うことはないでしょうか? 「トンネルアプリ」は、そのような環境を安全で簡単に構築することが可能なツールとして、無料でサービス提供しています。 この記事では、そんな「トンネルアプリ」がどのような仕組や技術によって実現しているかをご紹介したいと思います。

icon_logo

トンネルアプリ」のP2Pテクノロジーについて、この記事を含めて以下の説明をしています。

サーバー接続における認証セキュリティ

image01

プロキシーサーバーが中継サーバーへ接続する際は、必ずECDHE(256ビット)による公開鍵暗号方式を使用します。 そして、暗号化で使用する暗号キーは、ECDHEで共有するシークレットキーを使用してHKDF(256ビット)で生成します。

接続時のハンドシェイクにおけるメッセージの暗号方式はAES(256ビット)を使用し、署名方式はECDSA(256ビット)を使用します。 また、プロキシーサーバーは、中継サーバーが配信する中継サーバ証明書と署名の検証によってサーバー認証を行います。

なお、初回接続時には、中継サーバーで端末を識別するためのデバイスIDを発行すると共に、その際の接続で使用した公開鍵を保持し、以降の接続のデバイス認証に使用します。 同時に、プロキシサーバーはデバイス認証に使用する秘密鍵を保持します。

image02

2回目以降の接続からは、中継サーバーでは初回接続で保持した公開鍵を使用して、プロキシーサーバーの秘密鍵で生成した署名の検証によるデバイス認証を行います。 また、接続ハンドシェイクのデータも相違がないか検証します。

これらによって、サーバー側と端末側の相互で認証が行われ、互いの接続に関わる安全を担保しています。

アプリ間の通信データにおける暗号セキュリティ

image03

アプリ間の通信を繋ぐための事前設定として、クライアントアプリからの接続を受け付けるフォワードプロキシーは、その代理ポート番号の他以下の設定が必要になります。

繋ぎ先のリバースプロキシーのデバイスIDと、そこからサーバーアプリへ接続するためのIPアドレス及びポート番号の設定です。 なお、繋ぎ先のリバースプロキシーでの事前設定は不要です。

クライアントアプリは、フォワードプロキシーで待ち受けている代理ポート番号に接続します。 接続を受け付けたフォワードプロキシーは、中継サーバーへ接続してハンドシェイクを行った後、繋ぎ先となるリバースプロキシーのデバイスIDと、そこからサーバーアプリへ接続するためのIPアドレス及びポート番号を送信します。

中継サーバーは、繋ぎ先のデバイスIDから接続中のリバースプロキシーを探し、存在する場合はフォワードプロキシーの接続と繋ぎます。 そして、リバースプロキシー側が接続で使用した公開鍵をフォワードプロキシーに送信します。 さらに、フォワードプロキシー側の接続で使用した公開鍵と共にサーバーアプリへ接続するためのIPアドレス及びポート番号をリバースプロキシーに送信します。 リバースプロキシーは、受信した接続情報を基にサーバーアプリへの接続を行います。 これにより、クライアントアプリ側のプロキシーサーバーと、サーバーアプリ側のプロキシーサーバーとのトンネル環境が確立されます。

トンネル環境が確立されたら、フォワードプロキシーは、クライアントアプリから受信する通信データを暗号化してから中継サーバーへ送信します。 その時の暗号キー生成で使用される公開鍵は、トンネル環境の確立で受取ったリバースプロキシーのものを使用します。 さらに、暗号化アルゴリズムは、ストリーム暗号のChaCha20とメッセージ認証符号のPoly1305を組み合わせた、認証付き暗号方式を使用します。

暗号化された通信データを受取った中継サーバーは、トンネル環境を通じてそのままのデータをリバースプロキシーへ送信します。 中継サーバーは、フォワードプロキシーとリバースプロキシーの公開鍵は知り得ますが、秘密鍵は知り得ないため、暗号化されたデータを複合化できません。

暗号化された通信データを受取ったリバースプロキシーは、複合化して元のデータをサーバーアプリに送信します。 その時の暗号キー生成で使用される公開鍵は、トンネル環境の確立で受取ったフォワードプロキシーのものを使用します。

これにより、プロキシーサーバー間でやり取りする通信データはEnd-to-Endで暗号化されるため、中継サーバーを含む第三者が元のデータを閲覧することは不可能となり、通信データのセキュリティを確保しています。

次の記事で、「トンネルアプリ」のP2Pテクノロジーにおけるパフォーマンスを説明します。

最後までお読みいただきありがとうございました!ご意見などございましたらメッセージをお寄せいただけると幸いです。

P2P · IoT/M2M · Security · Android

Illusts of Life with Old cats
Goods of Life with Old cats