【FPGA×WireGuard】低コストArtix-7で実現するワイヤースピードVPNの魅力と導入メリット


【FPGA×WireGuard】低コストArtix-7で実現するワイヤースピードVPNの魅力と導入メリット

chili-chips-ba/wireguard-fpga

2025-10-16

このプロジェクトは、VPNの中でも今どきでセキュリティに定評のあるWireGuardっていうのを、FPGA(Field-Programmable Gate Array)っていうハードウェアで、しかもワイヤースピードで動かしよる、っていうのが一番のポイントやね。

キーワードは以下の通り。

キーワード意味
WireGuard軽量で高速、かつセキュアなVPNプロトコル。
FPGA (Artix-7)買った後でも回路を書き換えられる集積回路。コストの安いArtix-7を使うとこがミソ。
Open-source toolchain開発環境もオープンソース。プロプライエタリ(独占的)な高価なツールは使わへん。
Full-throttle, wire-speedネットワークの限界速度で処理できる、超高速を意味する。
Open for backdoor scrutiny設計が完全に公開されとるから、裏口(バックドア)がないか誰でも検証できる。高いセキュリティの自信の表れやね。

このプロジェクトの目指すとこは、高価でブラックボックスな既存のハードウェアVPNソリューションに比べて、安価で、オープンソースで、しかも高速なWireGuard実装を提供するところやねん。

普通のソフトウェアVPNと比べて、このFPGA実装がどう役に立つんか、お兄さんの視点から解説するわ。

ワイヤースピードの実現
ネットワークの物理的な限界に近い速度でデータを暗号化・復号できるっちゅうことや。普通のCPUで動かすソフトウェアVPNは、CPUの負荷が高ぅなって、どないしても速度が頭打ちになってしまうんやけど、FPGAは専用の回路で処理するから、レイテンシ(遅延)が極めて小さく、スループット(処理能力)が高いんや。

オフロード
VPN処理をCPUからFPGAに任せられる(ハードウェア・オフロード)から、CPUは他の大事なタスクに集中できる。サーバーとか組み込みシステムでは、これはものすごぉ重要なことやね。

完全な透明性
RTL(ハードウェア記述言語)レベルからすべて公開されとるから、バックドアや意図せぬ脆弱性がないか、徹底的に検証できる。ソフトウェアだけやのうて、ハードウェアも疑わしい時代やから、これは信頼の基盤になるんやで。

TCE (Trusted Computing Base) の最小化
信用せなあかん部分(TCE)を、OSや複雑なソフトウェアスタックから、FPGAの小さな、検証済みの回路に絞り込める。

低コスト・低消費電力
安価なArtix-7 FPGAを使ってるから、組み込みデバイスやIoT機器に高速なVPN機能を組み込むのに適しとる。ソフトウェアより消費電力が少ない回路設計も可能や。

RISC-Vとの連携
プロジェクトの説明によると、RISC-V ISS(Instruction Set Simulator)とか、VProc仮想プロセッサと連携して、制御プレーン(鍵交換とか接続管理)をソフトウェアで、データプレーン(暗号化・復号)をハードウェアで処理する設計みたいやね。つまり、HW/SW協調設計のええ見本になるんや。

FPGA開発は普通のソフトウェア開発と違て、HDL(ハードウェア記述言語、この場合はSystemVerilog)で回路を設計し、それをコンパイルしてFPGAに焼き込む(書き込む)作業が必要になるんやけど、このプロジェクトはオープンソースのツールチェーン(YosysとかNextpnrなど)を使いよるから、環境構築の障壁は低うなってきてるんや。

環境の準備
RISC-Vツールチェーン、SystemVerilogシミュレータ、FPGA合成ツール(オープンソースのもの)を用意する。

コードのクローン
GitHubからリポジトリをダウンロードする。

ビルド
制御ソフトウェア(RISC-V向け)と、RTL(回路記述)をビルドし、FPGAのビットストリーム(設定ファイル)を生成する。

FPGAへの書き込み
Artix-7ボードにビットストリームを書き込む。

活用シーン詳細
高性能なVPNルーター自作の高性能ルーターに組み込んで、通信のボトルネックを解消する。
産業用IoTゲートウェイ厳しいリアルタイム要件を持つ工場内の機器と、外部ネットワークを安全かつ高速に接続する。
データセンター・クラウドサーバー間のセキュア通信(East-West Traffic)をCPU負荷なしで実現し、クラウド基盤の効率を上げる。
セキュリティ研究完全なオープンソースハードウェアとして、ハードウェアセキュリティや検証手法の研究・教育に使う。

FPGAのコア部分のコードはSystemVerilogで書かれとるから、お兄さんが普段書くC++やPythonとは全然ちゃうんやけど、概念として大事な部分をいくつか説明するわ。

ソフトウェアのコードというよりは、回路図をテキストで書くイメージや。

// 概念的なSystemVerilogの例
module Wireguard_Data_Path (
    input logic clk,       // クロック信号
    input logic reset,     // リセット信号
    // ... AXI Streamなどのインターフェース
    input logic [511:0] packet_in,  // 入力パケット
    output logic [511:0] packet_out, // 出力パケット
    // ... 鍵データや状態管理のポート
);

    // AES-GCM (暗号化) のインスタンス化
    aes_gcm_core u_aes_gcm (
        .clk(clk),
        .data_in(packet_in),
        // ...
        .data_out(encrypted_data)
    );

    // ChaCha20-Poly1305 のインスタンス化 (WireGuardで使われる)
    chacha20_poly1305_core u_chacha (
        .clk(clk),
        // ... 実際の暗号処理の並列パイプラインが記述されている
    );

    // 鍵管理、状態遷移ロジック...
    // データがこのモジュールを通る間に、ヘッダー解析、復号、暗号化、チェックサム計算などがパイプラインで実行される。

endmodule

これ、データが流れるパイプラインを設計しとるんや。FPGAでは、処理の各ステップが同時に(並列に)動くように回路を組むから、めっちゃ速いんやね。

WireGuardの鍵交換(Diffie-Hellman)や接続設定は、RISC-Vソフトコアの上で動くC言語などのソフトウェアが担当するみたいやね。

// 概念的なC言語の例 (RISC-Vで実行)

#include "wireguard_hal.h" // ハードウェア抽象化レイヤー (FPGAを操作する関数群)

void initialize_wireguard_connection(uint8_t *local_private_key, uint8_t *peer_public_key) {
    // 1. 鍵交換 (ソフトウェアで実行)
    perform_noise_handshake(local_private_key, peer_public_key);
    
    // 2. セッション鍵をFPGAに書き込む (ハードウェアのレジスタを操作)
    uint8_t *session_key = derive_session_key(); 
    
    // HAL関数を使ってFPGAの内部レジスタに鍵データを送る
    WIREGAURD_FPGA_write_key_register(0x100, session_key);

    // 3. FPGAデータパスを有効にする
    WIREGAURD_FPGA_set_status(STATUS_ENABLE_DATA_PATH);
}

このコードは、ソフトウェアがWireGuardの難しい制御をやり、その結果として得られたセッション鍵を、FPGA(ハードウェア)に渡して、実際の高速な通信処理を任せる、という流れを示しとるんや。


chili-chips-ba/wireguard-fpga