Universal 2nd Factor (U2F)でアカウントのセキュリティを強化する

# はじめに
Universal 2nd Factor (以下、U2F)は、専用のUSBまたはNFCデバイスなどを使用した二要素認証(2FA)です。

U2Fはオープンスタンダードであり、現在はFIDO2プロジェクトとして、FIDO AllianceとWorld Wide Web Consortium (W3C)によって共同作業が行わています。

https://fidoalliance.org/

FIDO Alliancは、従来のパスワード認証を置き換えることを理念に掲げている非営利の業界団体です。セキュリティキーやパスキーなどと呼ばれているハードウェアデバイスや公開鍵暗号方式を採用することで、パスワードレスを実現しています。

本記事では、Google アカウントの2段階認証プロセスにセキュリティキーを設定する方法について記載しています。


## Universal 2nd Factor (U2F)
**U2F**は、FIDO認証を用いることで従来のパスワード認証よりもセキュリティを向上させることができます。

https://fidoalliance.org/how-fido-works/

U2Fを使用する主なメリットは、公開鍵暗号方式を利用した認証方式によって、認証情報が盗まれにくいことや第2要素としてのパスワード入力を簡略化することができます。Time-based One-Time Password(TOTP)と比較して、U2Fは手間のかからない認証方法を提供します。

デメリットについては、セキュリティキーを第2要素の認証手段としてのみ使用する場合、セキュリティキーが使用不可能になった際、復旧が困難なことです。ハードウェアの複製や代替手段を用意することができないため、セキュリティキーを第2要素として使用する際は注意が必要です。

::: note
U2FはFIDO認証の一種になるため、FIDO2やFIDO UAFとは区別されます。

参考：[User Authentication Specifications Overview](https://fidoalliance.org/specifications/)
:::

## Google アカウント
本記事では、セキュリティキーとしてFlipper Zeroを使用しています。Flipper Zeroについては、以前書いた[Geekのためのマルチツール　Flipper Zero](https://qiita.com/Brutus/items/96009690b112eb7f407c)をご参照ください。

また、Flipper Zeroの設定方法は、以下の公式ドキュメントから確認できます。

https://docs.flipper.net/u2f

::: note
セキュリティキーは[YubiKey](https://ja.wikipedia.org/wiki/YubiKey)が有名です。Googleは自社製品として[Titan セキュリティ キー](https://cloud.google.com/security/products/titan-security-key?hl=ja)を販売しています。
:::

### セキュリティキーの追加
Google アカウントの画面からセキュリティを選択して「2段階認証プロセス」を押します。

![スクリーンショット 2024-01-30 0.41.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/440737b7-27b5-9b63-0529-8d81ffe5814c.png)

「セキュリティ　キー」を押します。

![スクリーンショット 2024-01-30 0.41.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/6f7a2eab-c1b8-43fa-17fd-07028e1d0ebe.png)

「パスキーを作成する」を押します。

![スクリーンショット 2024-01-30 0.43.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/0ada8d10-ef4e-9b00-c423-caeae862cea2.png)

「パスキーを作成」を押します。

![スクリーンショット 2024-01-30 0.44.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/acc44f3e-ea2b-bcd2-9e26-e7d6dbd0db7f.png)

画面上部に以下の様なポップアップが表示されるので「許可する」を押します。
![スクリーンショット 2024-01-30 0.45.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/3d13b26f-da45-6293-08a0-78b680584333.png)

Flipper Zeroを接続した状態でボタンを押します。

![Screenshot 2024-01-30 at 00.29.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/939e71cd-bab7-c9ec-9a7b-3b9881a03ff6.png)

新しいセキュリティキーがアカウントに追加されたので「完了」を押します。

![スクリーンショット 2024-01-30 0.45.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/81448364-33fb-9dbb-4862-07738e333a0a.png)

新しいセキュリティキーが追加されました。

![スクリーンショット 2024-01-30 0.45.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/74e96eda-cee2-d439-8255-ddb3fe495da9.png)

### セキュリティキーでログイン
新しいウインドウを開きメールアドレスとパスワードを入力後、画面上部に以下の様なポップアップが表示されます。

![スクリーンショット 2024-01-30 0.47.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/ffe15304-bb66-dc01-c084-08a9495f4d5a.png)

Flipper Zeroでボタンを押して認証を行います。

![Screenshot 2024-01-30 at 00.47.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/eeecc511-68e2-9810-57d6-ff990eac8d50.png)

2段階認証プロセスが完了したので「次へ」を押して、認証完了です。

![スクリーンショット 2024-01-30 0.47.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/35c54b72-7012-a606-2675-a6644c0389bb.png)

Flipper Zero側は以下の様に表示されます。

![Screenshot 2024-01-30 at 00.30.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/8473e6de-5681-9062-c829-1a81bc4e78ca.png)

# おわりに
FIDO認証は、フィッシングに強いセキュリティとして、よりシンプルなユーザーエクスペリエンスを提供します。

ちなみにOpenSSHは8.2からFIDO/U2Fハードウェア認証システムをサポートしているため、サーバでFIDO認証を行うこともできます。なお、OpenSSHでFIDO認証を行うためには、クライアントとサーバ側でecdsa-skまたは、ed25519-sk形式の鍵をサポートしている必要があります。

## 参考
- [パスワードの代わりにパスキーでログインする](https://support.google.com/accounts/answer/13548313?hl=ja)
- [release-8.2](https://www.openssh.com/txt/release-8.2)