OpenVPN:TLSベースのVPNアーキテクチャ
OpenVPNが制御チャネルにTLSを使用し、データチャネルに設定可能な暗号方式を使う仕組みを学習します。
「OpenVPN:TLSベースのVPNアーキテクチャ」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
OpenVPNの2チャネルアーキテクチャ
OpenVPNは、制御チャネルとデータチャネルという2つの独立したチャネルを使用します。制御チャネルはTLSを使って認証、セッション確立、設定交換を処理します。データチャネルは、制御チャネルを通じてネゴシエートされた対称暗号で暗号化し、実際のVPNトラフィックを運びます。この分離により、OpenVPNは鍵管理にTLSエコシステム全体を活用できます。
制御チャネル:鍵ネゴシエーションのためのTLS
OpenVPNの制御チャネルは、完全なTLSセッションを実行します。双方は、共有CAによって署名されたX.509証明書を使って認証します。TLSは、鍵交換、証明書の検証、データチャネルの暗号パラメーターのネゴシエーションを提供します。TLSはECDHEをサポートしているため、制御チャネルは完全前方秘匿性を提供します。CA鍵を入手した場合でも、取得済みのセッションからデータチャネルの鍵を復元することはできません。
データチャネルの暗号化
データチャネルの暗号化方式は、TLS制御チャネルを通じてネゴシエートされます。OpenVPN 2.4以降では、機密性と完全性の両方を1回の処理で提供するAEAD暗号、AES-256-GCMがデフォルトです。以前のバージョンでは、AES-256-CBCとHMAC-SHA256を別々に使用していました。AEADモードは、独立したMAC検証を不要にし、パディングオラクル攻撃にも耐性があるため推奨されます。
tls-crypt:事前共有鍵によるラッピング
tls-cryptオプションは、client helloを含むTLSセッション全体を、事前共有鍵を使った対称HMAC認証済みエンベロープでラップします。これにより、認証されていないクライアントはTLSハンドシェイクを開始することすらできず、初期パケットは静かに破棄されます。OpenVPNサーバーをTLSベースのDDoS増幅攻撃から保護し、VPNサーバーが稼働している事実も隠します。
tls-authとtls-cryptの比較
従来のtls-authオプションはTLS制御チャネルのパケットにHMACタグを追加しますが、パケット自体は暗号化しません。これによりパケットインジェクションは防げますが、観測者にはTLSハンドシェイクが見えてしまいます。tls-cryptは制御チャネルのラッパーを暗号化して認証するため、DoS耐性とトラフィック解析への耐性の両方を提供します。現在推奨されるのはtls-cryptであり、tls-authはtls-crypt-v2を優先して非推奨となっています。
証明書ベースのクライアント認証
OpenVPNは、VPNの認証局によって署名されたX.509証明書を使ってクライアントを認証します。各クライアントには、一意の証明書と秘密鍵が発行されます。サーバーは証明書チェーンを検証し、必要に応じて証明書失効リスト(CRL)も確認して、失効した証明書を拒否します。証明書を失効させるとクライアントのアクセスを直ちに取り消せますが、PSKベースのシステムでは鍵の変更がすべてのクライアントに影響します。
UDPとTCPのトランスポート比較
OpenVPNはUDP(デフォルトかつ推奨)またはTCP上で動作します。UDPは、パケット損失時にTCP層とVPNアプリケーション層の両方で再送が発生するTCP-over-TCP問題を回避し、性能の大幅な低下を防ぎます。ただし、UDPをブロックするネットワークもあります。OpenVPNをTCPポート443で実行すれば、HTTPSトラフィックだけを許可するファイアウォールを回避できますが、パケット損失が発生する状況では性能が低下します。
tunとtapのインターフェースモード
OpenVPNは、tun(ルーティング)モードまたはtap(ブリッジング)モードで動作します。tunモードはポイントツーポイントのIPネットワークインターフェースを作成し、クライアントとVPNネットワークの間でIPパケットをルーティングします。tapモードはイーサネットブリッジインターフェースを作成し、ブロードキャストや非IPプロトコルを含むイーサネットフレームを転送します。tunモードはより効率的で、ほとんどのVPN用途に適しています。ネットワークセグメントのブリッジ接続や非IPプロトコルにはtapモードが必要です。
クライアント設定用のpushディレクティブ
OpenVPNサーバーは、接続するクライアントに設定ディレクティブを自動的にpushできます。一般的なpushディレクティブには、push "route 10.0.0.0 255.0.0.0"(クライアントにルートを追加)、push "dhcp-option DNS 10.0.0.1"(DNSサーバーを設定)、push "redirect-gateway def1"(クライアントのすべてのトラフィックをVPN経由でルーティング)があります。これにより、個々のクライアント設定ファイルを変更せずに、クライアント設定を一元管理できます。
OpenVPNにおける完全前方秘匿性
OpenVPNは、制御チャネルのTLSでECDHE(楕円曲線ディフィー・ヘルマン・エフェメラル)を使用することで、完全前方秘匿性を実現します。TLSセッションごとに新しいエフェメラル鍵ペアが使われるため、セッション鍵をサーバーの長期的な証明書秘密鍵から導出することはできません。現在暗号化トラフィックを取得し、後からサーバー証明書を入手したとしても、過去のセッションを復号することはできません。
OpenVPN 2.5以降における弱い暗号の非推奨化
OpenVPN 2.5では、従来デフォルトだったBlowfish暗号(BF-CBC)が非推奨になりました。BF-CBCはブロックサイズが64ビットであるため、長時間のセッションではSWEET32バースデー攻撃に対して脆弱です。最新のOpenVPNではAES-256-GCMがデフォルトです。OpenVPN 2.5では、データチャネルの非AEAD暗号も非推奨となり、TLSの最低バージョン要件が厳格化され、TLS 1.0と1.1のサポートが削除されました。
OpenVPNの制御チャネルとデータチャネル
OpenVPNの制御チャネルの主な役割は何ですか?
OpenVPNアーキテクチャのまとめ
OpenVPNのまとめ:制御チャネルは認証と暗号方式のネゴシエーションにTLSを使用し、データチャネルはネゴシエートされたAEAD暗号(デフォルトはAES-256-GCM)を使用します。tls-cryptはTLSをラップして認証されていないハンドシェイクを防ぎ、ECDHEは前方秘匿性を提供します。クライアント認証にはCRLによる失効に対応した証明書を使用し、性能のためにTCPよりUDPを推奨し、IPルーティング用途にはtunモードを推奨します。
よくある質問
「OpenVPN:TLSベースのVPNアーキテクチャ」レッスンは無料ですか?
はい。「OpenVPN:TLSベースのVPNアーキテクチャ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「OpenVPN:TLSベースのVPNアーキテクチャ」で何を学びますか?
OpenVPNが制御チャネルにTLSを使用し、データチャネルに設定可能な暗号方式を使う仕組みを学習します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「OpenVPN:TLSベースのVPNアーキテクチャ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- IPsec:IKEv2、ESP、AHプロトコル
- WireGuard:ChaCha20とCurve25519によるVPN
- OpenVPN:TLSベースのVPNアーキテクチャ
- VPNプロトコルの比較:セキュリティとパフォーマンス