WireGuard:ChaCha20とCurve25519によるVPN
ChaCha20-Poly1305、Curve25519、BLAKE2を用いたWireGuardの簡潔な暗号設計について学びます。
「WireGuard:ChaCha20とCurve25519によるVPN」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。
WireGuardの設計思想
WireGuardは、第一の目標として徹底したシンプルさを掲げて設計されました。コードベースは約4,000行で、OpenVPNの70,000行、strongSwan IPsecの400,000行超と比べて大幅に少なくなっています。コード行数が少なければ潜在的な脆弱性も少なくなり、単一のエンジニアが徹底的にレビューできるほど監査対象の範囲を小さくできます。このシンプルさは機能上の制限ではなく、意図的なセキュリティ上の選択です。
固定暗号プリミティブ
OpenVPNやIPsecとは異なり、WireGuardは暗号アルゴリズムをネゴシエートしません。WireGuardのすべての接続では、Curve25519(ECDH用)、ChaCha20-Poly1305(認証付き暗号化用)、BLAKE2s(ハッシュ用)、SipHash-2-4(ハッシュテーブルのセキュリティ用)という、同じ固定されたプリミティブのセットを使用します。これにより暗号方式のネゴシエーションが不要になり、ダウングレード攻撃の一種を完全に排除できます。
Noise Protocol Frameworkのハンドシェイク
WireGuardは、Noise Protocol FrameworkのNoise_IKpsk2ハンドシェイクパターンを実装しています。このフレームワークは、証明可能なセキュリティ特性を備えた鍵交換プロトコルを、原則に基づいて構築する方法を提供します。IKpsk2パターンでは、静的鍵ペアとエフェメラル鍵ペアに加えて、量子耐性を高めるためのオプションの事前共有鍵を使用し、1回のラウンドトリップでハンドシェイクを完了します。
鍵交換におけるCurve25519
Curve25519は、高い性能とセキュリティを実現するためにDaniel Bernsteinが設計した楕円曲線です。WireGuardは、楕円曲線ディフィー・ヘルマン(ECDH)鍵合意にCurve25519を使用します。各ピアは長期的な識別情報として静的なCurve25519鍵ペアを持ち、ハンドシェイクでは前方秘匿性を実現するためにエフェメラル鍵ペアも使用します。Curve25519の演算は一定時間で実行されるため、タイミング攻撃に耐性があります。
ChaCha20-Poly1305によるデータ暗号化
WireGuardは、認証付き暗号化アルゴリズムであるChaCha20-Poly1305を使って、すべてのデータパケットを暗号化します。ChaCha20は、AESのハードウェアアクセラレーションを備えていないデバイス(スマートフォンや組み込みデバイス)でも非常に高速に動作するストリーム暗号です。Poly1305は認証タグを提供します。このAEAD構成により、復号前に暗号文への改ざんを検出できます。
ハッシュにおけるBLAKE2s
BLAKE2sは、32ビットプラットフォームと短いメッセージ向けに最適化された暗号学的ハッシュ関数です。WireGuardは、ハンドシェイクでの鍵導出処理とセッション識別子の計算にBLAKE2sを使用します。BLAKE2sは、同等のセキュリティを提供しながら、ほとんどのプラットフォームでSHA-256より高速です。SHA-3の最終候補だったBLAKEの後継として設計されました。
静的鍵ペアとエフェメラル鍵ペア
WireGuardのピアは、長期的な識別情報として機能する静的鍵ペアを持ちます。公開鍵は設定時に帯域外で交換され、ピアの識別子として使用されます。各ハンドシェイクでは、両方のピアがエフェメラル鍵ペアも生成します。静的鍵とエフェメラル鍵のECDHに、エフェメラル鍵ペア同士のECDHを組み合わせることで、認証と前方秘匿性の両方を実現します。
暗号鍵ルーティング
WireGuardは暗号鍵ルーティングを実装しています。設定では、各ピアを経由して到達できるIPアドレス(allowed IPs)を指定します。送信パケットがピアのallowed IPsに一致すると、そのピア向けに暗号化されます。受信パケットは復号されますが、その送信元IPが使用された鍵のallowed IPsと一致しなければ破棄されます。鍵がルーティングテーブルを定義します。
タイマーによる接続管理
WireGuardには永続的な接続という概念がありません。トラフィックが流れていなければパケットは送信されず、VPNはネットワーク上から実質的に消えます。送信するトラフィックが発生すると、必要に応じてハンドシェイクが開始されます。設定可能なPersistentKeepaliveにより、空のパケットを定期的に送信して、NATルーターの背後にあるデバイスのNATマッピングを維持できます。
Linuxカーネル内のWireGuard
WireGuardは、2020年3月にリリースされたLinux 5.6で、Linuxカーネルのメインラインに統合されました。カーネル空間で動作することで、カーネルのネットワークスタックと暗号ハードウェアに直接アクセスでき、ユーザー空間で動作するVPN実装より高いスループットを実現します。その他のプラットフォーム(Windows、macOS、iOS、Android)では、WireGuardはクロスプラットフォーム実装を介してユーザー空間で動作します。
WireGuardの性能比較
ベンチマークでは一貫して、WireGuardはスループットでOpenVPNを3~4倍上回っています。AES-NIハードウェアアクセラレーションを備えたシステムでは、AESを使うIPsecもWireGuardに匹敵します。AES-NIを備えていないARMデバイスでは、WireGuardのChaCha20がAESベースの代替方式を大幅に上回ります。CPU使用率が低いことは、モバイルデバイスのバッテリー持続時間の向上にもつながります。
WireGuardの暗号プリミティブ
WireGuardはデータパケットの暗号化にどのアルゴリズムを使用しますか?
WireGuardのまとめ
WireGuardのまとめ:攻撃対象領域を最小化する約4,000行のコード、ネゴシエーションを行わない固定プリミティブ、Curve25519を使うNoise IKpsk2ハンドシェイク、データ用のChaCha20-Poly1305、ハッシュ用のBLAKE2s、IP範囲と公開鍵を結び付ける暗号鍵ルーティング、前方秘匿性を提供するエフェメラル鍵、最大限の性能を実現するカーネル統合、そして必要に応じてハンドシェイクを行うステートレスな接続モデルを採用しています。
よくある質問
「WireGuard:ChaCha20とCurve25519によるVPN」レッスンは無料ですか?
はい。「WireGuard:ChaCha20とCurve25519によるVPN」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。
「WireGuard:ChaCha20とCurve25519によるVPN」で何を学びますか?
ChaCha20-Poly1305、Curve25519、BLAKE2を用いたWireGuardの簡潔な暗号設計について学びます。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cryptology Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。
「WireGuard:ChaCha20とCurve25519によるVPN」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCryptology Academyレッスンでコードを書いて実行できますか?
はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- IPsec:IKEv2、ESP、AHプロトコル
- WireGuard:ChaCha20とCurve25519によるVPN
- OpenVPN:TLSベースのVPNアーキテクチャ
- VPNプロトコルの比較:セキュリティとパフォーマンス