Google Titan Security Keyを試す¶
やんごとないない事情があり、適当なセキュリティキーを購入する必要があり適当なSecurityKeyを物色していた。 ちょうどそんなときに Titan Security Key が Googleストアで購入可能になっているという 記事 を見かけたのでせっかくなので購入してみた。
New Gear... pic.twitter.com/yvpwynlQl8
— ゼロトラストかえる㌠(厩橋女子高校 山岳部2年) (@gho4d76g) November 12, 2022
Titan Security Keyには、Type-Aのバージョン (USB-A/NFCセキュリティキー) と、Type-Cのバージョン (USB-C/NFCセキュリティキー) があるが、機能的な差異はないため今回はType-Cの方を購入した。
今回の検証環境の前提情報は以下の通り。
- OS:
Ubuntu 22.04 (Jammy Jellyfish)
- Web Browser:
Brave (Snap, version 1.45.127, rev 187)
以下の記述では、特に断りの無い限り、上記の環境下にあるものとします。
Titan Security Keyのデバイス情報を調べる¶
まず、素の状態の検証機に、Titan Security Keyを挿入し、OSからどのように見えるのか確認してみた。 Titan Security Keyをマシンに指す前に、 udevadm monitor を起動しておく。
sudo udevadm monitor
検証端末のUSBポートにTitan Security Kyeを挿入したところ以下のようなログが出力(add, bind event)された。
1UDEV [155554.751693] add /devices/pci0000:00/0000:00:1b.4/0000:03:00.0/usb3/3-2 (usb)
2UDEV [155554.757403] add /devices/pci0000:00/0000:00:1b.4/0000:03:00.0/usb3/3-2/3-2:1.0 (usb)
3UDEV [155554.759986] add /devices/pci0000:00/0000:00:1b.4/0000:03:00.0/usb3/3-2/3-2:1.0/0003:096E:085B.0015 (hid)
4UDEV [155554.764404] add /devices/pci0000:00/0000:00:1b.4/0000:03:00.0/usb3/3-2/3-2:1.0/usbmisc/hiddev6 (usbmisc)
5UDEV [155554.768594] add /devices/pci0000:00/0000:00:1b.4/0000:03:00.0/usb3/3-2/3-2:1.0/0003:096E:085B.0015/hidraw/hidraw12 (hidraw)
6UDEV [155554.769784] bind /devices/pci0000:00/0000:00:1b.4/0000:03:00.0/usb3/3-2/3-2:1.0/0003:096E:085B.0015 (hid)
7UDEV [155554.773620] bind /devices/pci0000:00/0000:00:1b.4/0000:03:00.0/usb3/3-2/3-2:1.0 (usb)
8UDEV [155554.779525] bind /devices/pci0000:00/0000:00:1b.4/0000:03:00.0/usb3/3-2 (usb)
事前情報として、Titan Security Keyは 中国飛天誠信科技有限公司のOEM製品と聞いたので、ログに出力された情報と矛盾しない。
注釈
同社のVendorIdは 096E である。
次に lsusb コマンドで VerndorId を指定して検索してみる。
lsusb -d 096e:
実行結果は以下のようになった。
Bus 003 Device 004: ID 096e:085b Feitian Technologies, Inc. ePass FIDO
Device IDが 085b であることがわかったので、 こちらのサイト を覗いてみたがこのDeviceIdの登録は確認できなかった。 なお、この時点では、特に udev の設定は行っていないが、テストに用いたブラウザ(Brave) の設定 ( /etc/udev/rules.d/70-snap.brave.rules ) がすでに組み込まれており、 少なくとも検証環境においては、Titan Security Keyは自動的に認識された。
1...省略...
2# u2f-devices
3# Feitian ePass FIDO, BioPass FIDO2
4SUBSYSTEM=="hidraw", KERNEL=="hidraw*", ATTRS{idVendor}=="096e", ATTRS{idProduct}=="0850|0852|0853|0854|0856|0858|085a|085b|085d", TAG+="snap_brave_brave"
5...省略...
Googleの ヘルプサイト に Linux向けの udev 設定例の記述があったので併せて設定しておく。
$ cat << 'EOF' | sudo tee /etc/udev/rules.d/70-titan-key.rules >/dev/null
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="18d1|096e", ATTRS{idProduct}=="5026|0858|085b", TAG+="uaccess"
EOF
$ sudo udevadm control --reload-rules
Titan Security Keyの機能を整理する¶
Titan Security Keyでできること、できないことをある程度正確に把握しておくため、Yubikey5C NFC と Security Key NFC by Yubico を基準に、機能的な比較表を作ってみた。
Application |
Yubikey5C NFC |
Security Key NFC by Yubico |
Titan Security Key (USB-C/NFC) |
---|---|---|---|
FIDO2 (CTAP2) |
Supported |
Supported |
n/a |
FIDO U2F (CTAP1) |
Supported |
Supported |
Supported |
OTP |
Supported:
* Yubico OTP
* HMAC-SHA1 Challenge-Response
* Static Password
* OATH-HOTP
|
n/a |
n/a |
OATH |
SUpported:
* OATH-TOTP (time based)
* OATH-HOTP (counter based)
|
n/a
|
n/a
|
PIV (Smart Card) |
Supported |
n/a |
n/a |
OpenPGP |
Supported |
n/a |
n/a |
また、参考までに価格比較表も作ってみた。
Price |
Yubikey5 C NFC |
Security Key C NFC by Yubico |
Titan Security Key USB-C/NFC |
---|---|---|---|
USD |
45 |
29 |
25 |
JPY |
7,600 |
6,230 |
4,500 |
注釈
Yubico社製品の日本売価は 株式会社ソフト技研の 直販サイト の情報を参考とした。
特記しておくべき点は、以下のようになるかと思う。
Titan Security KeyはFIDO/U2F対応のデバイスであり、FIDO2(CATP2)をサポートしない。
パスワードレス認証の導入を目的とする場合は選定候補から除外されるべきである。
同一価格帯でパスワードレス認証をしたいなら Security Key C NFC by Yubico を選ぶとよい。
Titan Security Keyをテストしてみる¶
OSがTitan Security Keyを認識し、テストすべき機能(FIDO/U2Fのみ)も明確になったので実機でテストをしてみる。 https://demo.yubico.com/ に、U2Fデバイスの動作テストを行う機能が用意されていたので、ざっくりと確認ができる。
Test WebAuthn を押下する。
注釈
Register and authenticate a U2F/FIDO2 key using WebAuthn. Technical details about the data flow provided for developers.
FIDO/U2Fの基本的なフローは、次の2ステップになる。
Registration Step
Authentication Step
具体的なFIDO/U2Fのオペレーションは、Yubico社の How FIDO U2F works でわかりやすく解説されているので参考になる。 ここでは、上記のページを引用しつつ動作をみていく。
Registration Step¶
このステップで行うことは、以下のように説明されている。
- How FIDO U2F works > Registration より引用:
The goal of registration is for the authenticator to provide a public key and a handle to the partner private key to the relying party.
RP (demo.yubico.com)からのチャレンジ要求に対して、Titan Security Key U2Fの仕様に則り,
公開鍵、秘密鍵ハンドル(秘密鍵ではない), 証明書証書をブラウザが取得 ( navigator.credentials.create()
)したものを、RP側が受け取って検証をパスしていれば、少なくとも Yubikey で利用できるFIDO/U2F対応サービスでは利用可能と考えることができる。
Test your Yubikey with WebAuthn 画面で、Registrationステップの動作を検証できる。
Next を押下すると、ブラウザがセキュリティキー読み取り待機状態になり、Titan Security Keyを検証マシンに挿し、デバイスのタップ面をタップするよう促される。
ブラウザ側のセキュリティ機構で、当該サイト上でセキュリティキーアクセスを許可するか確認されるので Allow を押して許可しておく。
Titan Security Keyの物理ボタンをタップすると、無事 Registrationステップが完了した。 ただし、Unknown device と識別されているw。
画面下の、 Show technical details リンクをクリックすると、ブラウザとTitan Security Key(Authenticator)の間でやり取りされたメッセージ内容を確認することができる。
例えば、ブラウザからのチャレンジ要求に対するAuthenticatorからの応答(に含まれる response.clientDataJSON をデコードしたもの)は以下のようになった。
1{
2 "type": "webauthn.create",
3 "challenge": "WA**********t_Z***********t_v*************Y",
4 "origin": "https://demo.yubico.com",
5 "crossOrigin": false,
6 "other_keys_can_be_added_here": "do not compare clientDataJSON against a template. See https://goo.gl/yabPex"
7}
Webブラウザから Relying party ( demo.yubico.com ) に対して認証器からのメッセージを転送が実行され、ブラウザにRelying party ( demo.yubico.com ) 側で検証が成功した結果が返却されている。
このメッセージの attestationObject.fmt
プロペティの値を見ると fido-u2f
と表記されているので、Titan Security Keyの署名方式がU2F対応デバイスとして扱われていることを示していると判断できる。
1 {
2 "success": true,
3 "attestationObject": {
4 "attStmt": {...},
5 "authData": {...},
6 "fmt": "fido-u2f"
7 },
8 "clientData": {
9 "challenge": "WA**********t_Z***********t_v*************Y",
10 "crossOrigin": false,
11 "origin": "https://demo.yubico.com",
12 "other_keys_can_be_added_here": "do not compare clientDataJSON against a template. See https://goo.gl/yabPex",
13 "type": "webauthn.create"
14 },
15 "device": {
16 "name": "Unknown device",
17 "type": "unknown"
18 }
19}
注釈
ちなみに、FIDO2(CTAP2)に対応しているYubikey5C NFCの場合、attestationObject.fmt
の値は packed
になる。
Authentication Step¶
このステップで行うことは、以下のように説明されている。
- How FIDO U2F works > Authentication より引用:
The goal of authentication is for the authenticator to send, to the relying party, a value that proves the authenticator is the one registered to the specified user. In addition, the authenticator, working with the client, can verify the current origin (who the client is actually connected to) is the correct one.
Regsitrationステップで、Titan Security Keyから発行された署名検証をパスしていることから、基本的には問題ないはずなのでざっと流し見した(よくわかってないので勉強が必要)。
AUTENTICATE を押下すると、Authenticationステップが開始される。
Next 押下すると、ブラウザがセキュリティキー読み取り待機状態になる。
Titan Security Keyを検証マシンに挿し、デバイスのタップ面をタップする。
認証に成功し、Authentication successful! のメッセージが表示された。
以上より、少なくともYubikeyのFIDO/U2Fが利用できるサービスではTitan Security Keyを利用できそうなことがわかった。
各サービスの対応状況¶
そもそも、今回 Titan Security Keyを購入したのは自分の利用する各WEBサービスにおいて多要素認証用U2Fデバイスとして運用することを目的としていた。 最後に自分が利用している(そしてMFAにより強固なセキュリティを確保したい)サービスでのTitan Security Keyの対応可否をまとめておく。
サービス |
対応状況 |
備考 |
Google Account |
Supprted |
|
Amazon Web Services |
Supported |
FIDO security keyをMFAデバイスとして利用する場合 |
Cloudflare |
Supported |
|
Microsoft Account (MOSP Azureサブスクリプション) |
Not Supported |
Microsoft Accountの場合、FIDO2/CTAP2が必須と思われる |
BitWarden |
Supported |
多要素認証の利用には個人向け/プレミアム契約が必要 |
Supported |
特記として、Microsoft Accountでは Titan Security Keyを利用することはできなかった。 この点についてもう少しだけ深堀してみる。
MicrosoftアカウントのセキュリティオプションでTitan Security Keyが使えない理由¶
Microsoftサポートの Windows Hello またはセキュリティ キーで Microsoft アカウントにサインインする によれば:
デバイスに接続する USB キーや、NFC リーダーでタップする NFC キーなど、使用できるさまざまな種類のセキュリティ キーがあります。 製造元の取り扱い説明書を読んで、使用するセキュリティ キーについてよく理解してください。
とのことであり, 具体的なセキュリティキー製品を特定していない。具体的な記述は確認できなかったが、パスワードレス認証を前提としていると推測される(つまり、FIDO2対応デバイスでなければならない)。
検証のために、手持ちのYubikey5 NFC, Yubikey4, Titan Security Keyの3種類でMicrosoftアカウントの追加のサインインオプションを設定してみた。
手順は以下の様になる。
Microsoftアカウントにログイン
セキュリティ > 高度なセキュリティオプション > サインインまたは確認の新しい方法を追加を実行
セキュリティキーを使う を選択。
セキュリティキーの設定を実行(USBデバイス)を実行。
通常、FIDO2デバイスはFIDO U2Fとの互換性があるため、RP側では、FIDO2が駄目ならFIDO/U2Fにフォールバックするように実装するものだと思っていたが、 パスワードレス認証(つまり、FIDO2 CTAP2)のみに限定するRPの実装も可能なんだなぁという学びがあった。
かえる㌠からは以上です。