
2026/03/25 0:51
**WolfGuard:FIPS 140‑3 対応 WireGuard 暗号化**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
WolfGuard は Linux カーネルベースの WireGuard VPN を、WireGuard のインターフェイスとビルドワークフローを維持しつつ、wolfSSL の FIPS 140‑3 認定済みアルゴリズムを使用して書き換えます。ソースツリーには主に二つのコンポーネントが含まれています:
wolfguard.ko カーネルモジュール(libwolfssl.ko に依存)とユーザー空間ツール wg-fips(そのクイックスクリプト wg-fips-quick)。既存の WireGuard 実行ファイルはシンボリックリンクで置き換えられます(wg → wg‑fips, wg‑quick → wg‑fips‑quick)、元のバイナリは wg‑wireguard* に名前変更されます。
アルゴリズムマッピングは明示的です:
- ECDH: Curve25519 → SECP256R1
- AEAD: XChaCha20‑Poly1305 → AES‑256‑GCM
- Digest: Blake2s → SHA2‑256
- Authenticated digest: Blake2s‑HMAC → SHA2‑256‑HMAC
- Internal hash: SipHash → SHA2‑256
- DRBG: ChaCha20 DRBG → SHA2‑256 Hash‑DRBG
性能テストでは、
--enable-intelasm を有効にした場合、WolfGuard の AES‑256‑GCM と SHA2‑256 は CPU で加速された WireGuard に匹敵または上回ります。Intel ASM を無効にすると若干遅くなりますが、最新の CPU ではギガビットイーサネットを十分に満たします。
ビルドは non‑FIPS(nightly Git ソース)と FIPS‑certified に分かれます。
- non‑FIPS:
のナイトリースナップショットをクローンし、wolfssl
を実行して./autogen.sh
で設定し、ユーザーライブラリをインストールした後、--enable-wolfguard --enable-all-asm
とカーネルモジュール(wg-fips
,libwolfssl.ko
)をビルドします。Intel ASM または公開鍵圧縮をオプションで使用できます。wolfguard.ko - FIPS: wolfSSL アーカイブ(例:
)を使用し、wolfssl-X-fips-linuxvX-kernel.7z
で設定し、--enable-fips=vX --enable-wolfguard
を実行してユーザーライブラリをビルドします。その後、カーネルモジュールは二段階のハッシュ更新を経てコンパイルされ、カーネルの整合性チェックを満たします。./fips-hash.sh
インストール後に鍵生成(
../user-src/wg-fips genkey | ../user-src/wg-fips pubkey)をテストし、既存の WireGuard プレイブックを /etc/wolfguard を指すように設定して wg‑fips でキーを生成することで WolfGuard トンネルを作成します。全ての WolfGuard バイナリは自身のビルド内では相互運用できますが、標準 WireGuard とは相互運用できません。本文
WolfGuard VPN(FIPS 140‑3対応暗号化)
概要
- WolfGuard は、Jason Donenfeld が設計した WireGuard の Linux‑kernel ベース版を wolfSSL に合わせてリファクタリングし、FIPS‑compliant な実装です。
- 使用方法は WireGuard とほぼ同一です。
- 主な構成要素は以下の2つです。
– カーネルモジュール(wolfguard.ko
に依存)libwolfssl.ko
– ユーザー空間で動作する設定ツール(wg-fips
に依存)libwolfssl.so
wg-fips-quick スクリプトは wg-quick と同様に機能しますが、SECP256R1 キーを /etc/wolfguard 内に格納します。シンボリックリンクが作成され、
wg → wg-fips および wg-quick → wg-fips-quick が有効になります。WireGuard の実行ファイルが存在する場合は、それらを wg-wireguard / wg-wireguard-quick に名前変更し、保護コピーとして wg-wireguard-quick.unpatched を残します。
暗号アルゴリズムのマッピング
| カテゴリ | WireGuard | WolfGuard |
|---|---|---|
| ECDH | Curve25519 | SECP256R1 |
| AEAD | XChaCha20‑Poly1305 | AES‑256‑GCM |
| ダイジェスト | Blake2s | SHA2‑256 |
| 認証ダイジェスト | Blake2s‑HMAC | SHA2‑256‑HMAC |
| 内部ハッシュ | SipHash | SHA2‑256 |
| DRBG | ChaCha20‑DRBG | SHA2‑256 Hash‑DRBG |
- WolfGuard と WireGuard は同時に存在でき、別々のトンネルを確立します。
(x86 専用)を有効化すると、AES‑256‑GCM および SHA2‑256 の CPU アクセラレーションで WireGuard と同等またはそれ以上の性能が得られます。無効にした場合でも、最新CPUではギガビットイーサネット帯域を十分に利用できます。--enable-intelasm
ビルドとインストール
以下の2種類の手順が用意されています。
- 非FIPS ソース – ナイトリーミラーや Git リポジトリからビルド。
- FIPS 認証済みソース – 公式 FIPS アーカイブからビルド(
にてダウンロード可)。fips@wolfssl.com
どちらの場合も、ユーザー用ツールとスクリプトは
wg-fips / wg-fips-quick と名付けられ、FIPS 認証の有無に関わらず FIPS 承認済みアルゴリズムを使用します。FIPS 認証済みビルドと非認証ビルドは相互運用できますが、WireGuard とは互換性がありません。
注意 –
は x86 ターゲット専用で、FIPS 版でも対応ソースに対してのみ使用してください。--enable-intelasm
を使えば最小機能セットを有効化できます。完全な暗号機能が必要なら--enable-wolfguardを指定します。--enable-all-crypto
コマンドは
$(非特権ユーザー)と #(root 必須)のプレフィックスで区別され、同一作業ディレクトリ内で実行してください。wolfSSL リリースアーカイブを使用する場合は、バージョン 5.8.4 以上が必要です。
1. 非FIPS Git ソースからのビルド
(a) ソース取得
$ mkdir wolf-sources $ cd wolf-sources $ git clone https://github.com/wolfssl/wolfssl --branch nightly-snapshot $ git clone https://github.com/wolfssl/wolfguard $ (cd wolfssl && ./autogen.sh)
(b) ユーザーライブラリ (libwolfssl
) のビルド&インストール
libwolfsslLinux ではデフォルトで
がカーネルモジュールにキー生成をオフロードします。wg-fips
$ cd wolfssl $ ./configure --quiet --enable-wolfguard --enable-all-asm $ make -j $ ./wolfcrypt/test/testwolfcrypt # make install $ cd ..
キー操作を内部で実行したい場合は
を使用。make -j NO_IPC_LLCRYPTO=1
圧縮公開鍵()が必要なら、WG_USE_PUBLIC_KEY_COMPRESSIONでビルド。EXTRA_CFLAGS=-DWG_USE_PUBLIC_KEY_COMPRESSION
(c) ユーザーツール (wg-fips
) のビルド&インストール
wg-fips$ cd wolfguard/user-src $ make -j # make install $ cd ../..
WireGuard バイナリは
/wg-wireguardに名前変更され、wg-wireguard-quick/wgのシンボリックリンクが WolfGuard へ向けられます。wg‑quick
(d) カーネルモジュール (libwolfssl.ko
) のビルド&インストール
libwolfssl.ko$ cd wolfssl $ ./configure --quiet --enable-wolfguard --enable-cryptonly --enable-intelasm \ --enable-linuxkm --with-linux-source=/usr/src/linux \ --prefix=$(pwd)/linuxkm/build $ make -j module # make install # modprobe libwolfssl
本番環境では拡張自己テストを有効化:
$ ./configure --quiet --enable-wolfguard --enable-cryptonly --enable-intelasm \ --enable-linuxkm --with-linux-source=/usr/src/linux \ --prefix=$(pwd)/linuxkm/build --enable-crypttests \ CFLAGS=-DWOLFSSL_LINUXKM_VERBOSE_DEBUG
(e) WolfGuard カーネルモジュール (wolfguard.ko
) のビルド&インストール
wolfguard.ko$ cd ../wolfguard/kernel-src $ make -j KERNELDIR=/usr/src/linux KERNELRELEASE=$(uname -r) # make install # modprobe wolfguard $ ../user-src/wg-fips genkey | ../user-src/wg-fips pubkey
/genkeyテストでランダム公開鍵が出力されれば成功です。pubkey
圧縮キーを使用する場合は、全ビルドに同一設定 () を適用してください。WG_USE_PUBLIC_KEY_COMPRESSION
すべての手順が完了したら、既存の WireGuard Playbook をそのまま利用して WolfGuard トンネルを起動できます。
/etc/wireguard の代わりに /etc/wolfguard を使用し、キーは wg-fips で生成してください。
2. FIPS 認証済みソースからのビルド
(a) ソースツリー準備
$ mkdir wolf-sources $ cd wolf-sources $ 7z x ~/Downloads/wolfssl-X-fips-linuxvX-kernel.7z # または tar -xf for .tar.gz $ ln -s wolfssl-X-fips-linuxvX-kernel wolfssl $ git clone https://github.com/wolfssl/wolfguard
FIPS カーネルモジュールアーカイブは非カーネル版とは別ですが、ユーザーライブラリのビルドに利用できます。
(b) ユーザーライブラリのビルド&インストール
$ cd wolfssl $ ./configure --quiet --enable-fips=vX --enable-wolfguard $ make -j $ ./fips-hash.sh $ make -j $ ./wolfcrypt/test/testwolfcrypt # make install $ cd ..
は取得した FIPS アーカイブのバージョン(例:vX、v5.2.4など)に置き換えてください。v6
(c) ユーザーツール (wg-fips
) のビルド&インストール
wg-fips$ cd wolfguard/user-src $ make -j # make install $ cd ../..
非FIPS ビルドと同様に内部キー操作や圧縮キーの設定については注意してください。
(d) カーネルモジュール (libwolfssl.ko
) のビルド&インストール
libwolfssl.ko二段階プロセスで正しい整合性ハッシュを確保します:
$ cd wolfssl $ ./configure --quiet --enable-fips=vX --enable-wolfguard --enable-cryptonly \ --enable-linuxkm --with-linux-source=/usr/src/linux \ --prefix=$(pwd)/linuxkm/build $ make -j module # make install # modprobe libwolfssl # 「Operation canceled」が表示されるはずです。
$ NEWHASH=$(dmesg | awk '{if (match($0, " new hash \"([^\"]+)\" ", hash_a)) { hash = hash_a[1]; }} END {print hash}') $ sed --in-place=.bak "s/^\".*\";/\"${NEWHASH}\";/" wolfcrypt/src/fips_test.c $ make -j module # make install # modprobe libwolfssl
2回目の
が失敗した場合は次を実行:modprobe
$ make module-update-fips-hash FIPS_HASH="$NEWHASH" # make install # modprobe libwolfssl
本番環境では非FIPS の手順と同様に拡張自己テストを有効化してください。
(e) WolfGuard カーネルモジュールのビルド&インストール
$ cd ../wolfguard/kernel-src $ make -j KERNELDIR=/usr/src/linux KERNELRELEASE=$(uname -r) # make install # modprobe wolfguard $ ../user-src/wg-fips genkey | ../user-src/wg-fips pubkey
ランダム公開鍵が正常に出力されればインストールは成功です。
最終的な注意事項
- ビルドが完了したら、WireGuard と同じ Playbook / スクリプトを使って WolfGuard トンネルを起動できます。
を/etc/wireguard
に置き換え、キーは/etc/wolfguard
で生成してください。wg-fips- 一部の WireGuard クライアントは正確に 44文字の Base64 公開鍵を想定していますが、WolfGuard の公開鍵は(圧縮未使用時)約倍長です。FIPS v5 では
は未サポートですが、v6 以降で利用可能です。WG_USE_PUBLIC_KEY_COMPRESSION
さらにご不明点がある場合は fips@wolfssl.com までお問い合わせください。