agnos-builder
AGNOS の wpa_supplicant を WPA3(SAE)対応にするフォーク
AGNOS builder fork that rebuilds wpa_supplicant for WPA3 SAE-H2E
このプロジェクトは commaai の agnos-builder のフォークです。master は上流と同じで、AGNOS に入る wpa_supplicant を Ubuntu のソースパッケージから作り直し、WPA3(SAE)の hash-to-element(H2E)を使えるようにするコミットを wpa-supplicant-sae-fixes ブランチに置いています。この変更は上流へ pull request #629 として提出中です。
agnos-builder は、comma 3X と comma four で動く Ubuntu ベースの OS、AGNOS をビルドするリポジトリ、commaai の agnos-builder のフォークです。master は上流と同じ内容で、このフォークで加えているのは、AGNOS に入る wpa_supplicant を Ubuntu のソースパッケージから作り直し、WPA3(SAE)の hash-to-element(H2E)を使えるようにする 1 コミットです。wpa-supplicant-sae-fixes ブランチにあり、上流へ pull request #629 として提出しています。
AGNOS が同梱する Ubuntu の wpa_supplicant は sae_pwe が 0 のままなので H2E を使わず、H2E しか受け付けないアクセスポイントは接続先から外れます。NetworkManager は D-Bus の KeyMgmt に sae が出てこないと SaePwe を設定しないため、このドライバでは設定もされません。そこで既定値を変えて H2E を有効にし、あわせて有効化で表に出る SAE の不具合を hostap の上流修正で直します。カーネル側で SAE を有効にする agnos-kernel-sdm845 のフォーク(#142、#143)と組みで動き、openpilot のフォークはこの変更で作った wpa_supplicant を同梱して配布しています。上流でこの問題を追っているのは issue #171 です。
特徴
- 変更は Docker のビルドに
wpasupplicantのステージを足す 1 コミットだけで、それ以外は上流と同じです。libqmi や ModemManager と同じやり方で、Ubuntu のパッケージを作り直して AGNOS に入れます - Ubuntu の wpa のソースパッケージを取り直し、
.dscを SHA-256 で固定してから展開します。Ubuntu がこれより新しい版を出したときはビルドを止めるので、気づかないまま古い版へ戻ることがありません - 当てるパッチは、hostap の上流修正が 6 本(Rejected Groups の長さ検査、H2E のトークン解析での NULL 参照、PMKSA キャッシュにネットワークの文脈と AKMP の一致を要求、SAE を含むプロファイルだけ SAE の PT を導出)と、
sae_pweの既定値を 2(hunting-and-pecking と H2E の両方)にするローカルの変更が 1 本です - 既定値を変えても NetworkManager の動きは変わりません。設定ファイル、
wpa_cli set sae_pwe、D-Bus のいずれでも上書きでき、明示した値はSAVE_CONFIGでも残ります - D-Bus の SAE KeyMgmt の報告を直す hostap の修正は、意図的に入れていません。入れると NetworkManager が SAE 非対応のホットスポットにも SAE を足し、WPA2/WPA3 混在のネットワークも SAE に切り替わって、このドライバではファームウェアのローミングが止まるためです
- 上流の機能はそのままです。Docker の上でカーネルと system のイメージをビルドし(
./build_kernel.sh、./build_system.sh。先頭にNS=1を付けると namespace.so のリモート ARM64 ビルダーを使います)、./flash_kernel.sh、./flash_system.sh、./flash_all.shで comma 3/3X に書き込みます。ビルドからの書き込みがうまくいかないときは、scripts/download-from-manifest.pyで最新の AGNOS を取得して書き込めます
対応環境と入手方法
ビルドには新しめの Docker が動く環境が必要で、docker buildx は 0.15.0 より新しいものを使います。このフォークの変更込みでビルドするには、次のようにします。
git clone https://github.com/shunnag/agnos-builder.git
cd agnos-builder
git switch wpa-supplicant-sae-fixes
git submodule update --init agnos-kernel-sdm845
./tools/extract_tools.sh
./build_system.sh
wpa_supplicant の差し替えは system のイメージに入ります。WPA3 に必要なカーネル側の SAE 対応は agnos-kernel-sdm845 のフォークにあります。
端末に書き込む前に QDL モードにしてください(詳しくは flash.comma.ai の QDL MODE の節を参照)。端末を工場出荷時のきれいな状態に書き直したいだけなら、flash.comma.ai をそのまま使ってください。
macOS でカーネルをビルドするには、agnos-builder を大文字と小文字を区別するファイルシステムに置く必要があります。diskutil apfs addVolume <disk> "Case-sensitive APFS" agnos でボリュームを作ると、/Volumes/agnos に自動でマウントされます。<disk> には、diskutil list でメインのボリューム(Macintosh HD など)を含む synthesized のディスクを指定します(M シリーズの Mac では多くの場合 disk3、Intel Mac では disk1)。M シリーズの Mac で書き込み時に「No backend available」と出る場合は、brew install libusb のあと sudo mkdir -p /usr/local/lib && sudo ln -s /opt/homebrew/lib/libusb-1.0.0.dylib /usr/local/lib/libusb.dylib を実行してください。
自分でビルドせずに端末で WPA3 を使いたい場合は、openpilot のフォークが、この修正版の wpa_supplicant と WPA3 対応のカーネルをまとめて配布しています。変更の確認方法や開発への参加については、上流の README を参照してください。