仮想u2f/FIDO2デバイスってどうなのか
鍵ペアを持ち運ぶ方法として仮想u2f/FIDO2デバイスが考えられる。つまり、USBデバイスとしてのYubikeyなり何なりをハードウェア的にエミュレートするといった手法で全てがソフトウェア実装になる1Password等よりもある程度セキュアに鍵のローミングができると期待される。
ソフトウェア実装
https://github.com/bulwarkid/virtual-fido とか https://github.com/ellerh/softfido がある。いずれもUSB/IPによる実装。(TCPを使ってUSBを喋る)
マイコン実装としてはPicokeysがある。
... 実用性の割には気合い入りすぎじゃない。。?Pico側にアクセラレーションが無いのでRSA4096に1000秒以上とか書かれている。
HYPR Enterprise Passkeys
真剣なソリューションとしてはHYPRがある。HYPERはユーザーのAndroid/iOSデバイスの暗号鍵機能を使う。いわゆる携帯電話上のPasskeyと同じだが、鍵がローミングしないのが特徴。
ドキュメンテーション https://docs.hypr.com/docs/cc/ccInstallCfg/ccInstallCfgIntegrations/cc-install-cfg-integrations-hypr-enterprise-passkey によると、Bluetooth またはUSB デバイスとしてFIDO2を実装しているらしい。 ...USBデバイスになるとかどうやってんの。。?
古いドキュメント https://classicdocs.hypr.com/assets/files/installinghypr-7.10.0-401095ee8e29b9de78dfb2d8623e9036.pdf には "HYPR Token Driver" の言及がある。
(Workforce Access Client - macOS) Improve the installation process for the HYPR Token Driver
なので、普通にデバイスドライバとしてインストールさせてるんではないかという気はする。ただ、WHQLには該当しそうなデバイスは無かった。
HYPRはYubikey同様の認証エージェントを配付すると共に、この5月にopen betaになったEntra IDの外部認証(外部のOpenID Connectを2要素認証の2要素目にする)を初期adopterとしてサポートしている。
最初のベンダにOktaが入ってないのが示唆的だな。。
IDmelon
仮想HIDまたは物理Bluetoothリーダー。配付されているPairing toolに仮想HIDドライバが含まれている。
FIDO Credential Providerとして、on-premiseなWindows向けのプロバイダも配付している。たぶんHYPRも同様の方式なんだろう。
ちなみにアカウントも普通のPasskeyなので、1Passwordのような別のPasskeyプロバイダを登録するとそれでアカウントにログインできる。
結局のところベストなソリューションは何なのか問題
仮想USBはUSB/IPとかに頼る必要がありちょっと不安なものがある。Bluetoothは libfido2
がサポートしていないので pam_u2f
https://developers.yubico.com/pam-u2f/ で使えない。
というか仕様 https://fidoalliance.org/specs/fido-v2.2-rd-20230321/fido-client-to-authenticator-protocol-v2.2-rd-20230321.html#transport-specific-bindings 読んで気付いたけどBluetoothはHID over GATTは使わずに独自なんだな。。hidraw(や、WindowsのHID API)はBluetoothでも使えるので、実はBluetooth HID用のブリッジを書くのが一番安定性があるのかもしれない。。
ただHIDにブリッジすると結局VID/PIDが要るんだよな。。いやまぁ https://pid.codes/ から拾えば良いんだけど。。
あと前書いたけどHID over UARTみたいのは無い https://zenn.dev/okuoku/scraps/4282b76ff98a6f のでqemuとかに入れるのが結局面倒という問題もある。