Microsoft Entra ID の認証を FIDO2 で出来るようにする

# はじめに
昨今、パスワードでの認証は 非常に脆弱なので 認証のセキュリティを向上させる必要があります。
本記事で紹介した手順を行う事で、FIDO2 セキュリティ キー を使って Microsoft Entra ID への認証（Azure や Microsoft 365 へのサインイン）が出来るようになります。

**なぜ FIDO2 セキュリティキー が パスワードよりも 高セキュリティなのか？**
パスワードは、英数字や記号をランダムにして、８桁以上使う事が一般的です。
それに対して、FIDO2 を使う場合、PIN には ６桁程度の数字を使います。

上記を比較するだけだと、パスワードの方が複雑で高セキュリティに見えますが、違います。
FIDO2 を利用した方が 高セキュリティです。

<details><summary>その理由は ココ を開いて参照してください</summary>

パスワードの場合は、テキストの平文（暗号化はされてます）が、そのまま テナントに送られて、認証が行われます。毎回 同じテキストを再利用するため、世界中の任意のデバイスから、ハッキングを行う事が可能です。

FIDO2 セキュリティ キーは、物理デバイス であり、この中に秘密鍵が保存されています。
他人が あなたのアカウントで Microsoft Entra ID にサインインするためには、この秘密鍵を知る必要があります。

しかも　FIDO2 の場合は、Microsoft Entra ID へ認証を行う際には、鍵を そのまま 送付するのではなく、下図のように 発行された nonce に対して、秘密鍵で署名が行われ、"署名済み nonce" が テナントに送られた際に認証が行われます。

そのため、FIDO2 の物理キーを所持して PIN を知っている人 のみが nonce に対して署名する事ができ、たとえ 通信パケットを傍受されたとしても、その情報は、再利用ができません。そのため、ハッキングする事が困難になります。

PIN は、FIDO2 キーが 盗難・紛失 または PC に挿しっぱで離席 をした時に、不正利用されないようにするものであり、認証時に本人確認をするための目的で使われますので、PIN の内容はネットワークに流れません。ローカル（本人 x 物理PC x FIDO2）内で、秘密鍵を利用する都度、PIN の入力は必要です。

たとえ、PIN がキーロガーなどで傍受されたとしても、認証の際に "指タッチ" が必要なので、本人が意図していないタイミングで 認証されることは無くなります。

このようなプロセスが行われるため、パスワードよりも FIDO2 セキュリティ キー がセキュアであると言うことができると思います。

**公開情報：パスキー (FIDO2)**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/concept-authentication-passwordless?wt.mc_id=mvp_407731#passkeys-fido2
（上記の公開情報より抜粋）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/36dbf4bb-1f61-8b28-fdbc-f91d54b17233.png)
① FIDO2 キーを接続
② PC 側で FIDO2 キーを 認識
③ 認証要求
④ nonce を送信
⑤ PIN を入力して、FIDO2 キーに 指タッチ（秘密鍵が利用できる）
⑥ 秘密鍵を使用して、nonce に署名
⑦ 署名済み nonce を送信
⑧ 認証（署名済み nonce の検証）
⑨ PRT 返却され 認証成功

</details>

:::note info
**宣伝**
私が執筆した FIDO2 に関する記事は、他にも 以下の ストックリスト で公開していますので、こちらも 参考にしてみてください。 

**＠carol0226 による FIDO2 の公開ストックリスト**
https://qiita.com/carol0226/stocks/3670cb8678daed11b191
:::

---

# Windows Hello for Business と FIDO2 の違い
Windows Hello for Business (WHfB) を使うと、簡単に 生体認証 や PIN を使った認証が可能です。この時の PIN を使った認証は FIDO2 で PIN を使った認証と似ています。

| # |WHfB|FIDO2|コメント|
|:-:|:-:|:-:|:-:|
|可搬性|✖|○|この違いが一番重要です。<br>WHfBでは 秘密鍵が PC 内蔵 の TPM に<br>保管されるため、可搬性がありません。<br>FIDO2 を使う事で、秘密鍵を 任意の PC で<br>利用する事が可能になります。|
|顔認証|○|✖|WHfB は、顔認証が可能なことが最大の特長です。|
|指紋認証|○|○|WHfB は、PC に指紋認証用のデバイスが<br>搭載されていれば利用可能です。<br>FIDO2 は 指紋認証が可能なタイプも選択できます。|
|PIN入力|○|○|生体認証（顔 , 指紋）が行えない場合には、<br>本人確認のために、PIN 入力 が必要です。|
|指タッチ|不要|必要|WHfB では、指タッチなどの操作は不要です。<br>FIDO2 では、本人が認証したことを<br>示すために 指タッチ が必要です。<br>指紋認証タイプの FIDO2 ならば、<br>指紋と指タッチを兼ねる事が可能です。|
|共用 PC|✖|○|※１|

**※１**（共用 PC のコメント）
WHfB の弱点は、生体認証 や PIN を PC 間で同期する事ができないため、PC 毎のローカル管理となってしまいます。

FIDO2 は、指紋 や PIN が セキュリティーキー内に保存されているため 可搬性があり、共用 PC などで利用することが可能です。そのため 一人で 複数の PC を併用する場合や、１台の PC を複数人で共用する場合に FIDO2 が威力を発揮します。

WHfB については、以下の記事を参照してください。

https://qiita.com/carol0226/items/441659a20bc256bbe639

---

# この記事の構成で実現できること
下図の通りです。
|内容|可否|
|:-:|:-:|
|Microsoft Entra ID の認証|○|
|Windows OS のサインイン|✖|

本記事の構成を行う事で、Microsoft Entra ID の認証（Azure や Microsoft 365 へのサインイン）で FIDO2 が利用できるようになりますが、OS のサインインを行えるようにするには、更なる設定が必要となるので、注意してください。

環境に応じて、以下の ① または ② の記事の構成を追加で行う事で OS への サインイン が可能になります。

**① Microsoft Entra Join されたデバイスへ FIDO2 でサインインする場合**

https://qiita.com/carol0226/private/3933199bfd512e31f060

**② オンプレミスの Active Directory ドメインに参加したデバイスへ FIDO2 でサインインする場合**

https://qiita.com/carol0226/items/87dbd1f57f80f6da3968

---

# 前提事項
動作させるためには、以下の環境が必要です。
- Microsoft Entra テナント
テナントの入手方法は、以下の記事を参考にしてください。
https://qiita.com/carol0226/items/e560688f2b6a93e97126
　<br>
- FIDO2 セキュリティキー
以下で紹介されている キー がサポートされています。
https://learn.microsoft.com/ja-jp/entra/identity/authentication/concept-fido2-hardware-vendor?wt.mc_id=mvp_407731
　
当記事では 上記のうち、YubiKey 5 シリーズ を使用しました。
https://www.yubico.com/yubikey/?lang=ja
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b46f3c3c-b63e-6d14-7167-27baf32ba679.png)
　<br>
- デバイス
Microsoft Entra ID 参加デバイスの場合は、Windows 10 バージョン 1903 以降
ハイブリッド参加済みデバイスでは、Windows 10 バージョン 2004 以降
iOS , Android , Mac の場合は、以下で紹介されている記事を参照してください。
https://learn.microsoft.com/ja-jp/entra/identity/authentication/concept-fido2-compatibility?wt.mc_id=mvp_407731

---

# 1. 本作業による影響範囲
Microsoft Entra アカウントは、マイアカウント のページを使って、ユーザーが サインイン方法を管理できます。

**アカウント管理（マイアカウント）の URL**
https://aka.ms/mysecurityinfo

テナントが既定の状態では、以下のように 選択肢に FIDO2 セキュリティキーが表示されていません。
アカウントに FIDO2 セキュリティキー を割り当てられるようにするために、本作業が必要です。
逆に、この状態に戻すためには、逆の手順を行う事で 元通りに戻ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/782cb909-d651-b495-2bb8-eaacf354f64d.png)

---

# 2. テナントで パスキー (FIDO2) 認証方法を有効にする
0. Microsoft Entra 管理センター にサインインします。
※認証ポリシー管理者のロールが必要ですが、グローバル管理者であれば OK です。
https://entra.microsoft.com/
　<br>
0. 左ペインの **保護** を開き **認証方法** を選択し **認証方法｜ポリシー** のページを開きます。
**パスキー (FIDO2)** の欄をクリックして開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/b21ce6ac-e3d7-bb73-2131-17c518307f56.png)
　<br>
0. **有効化およびターゲット** タブで **有効化する** を ON にします。
なお、下記の設定では テナント内の 全ユーザー に対して FIDO2 が有効化されます。
限られたユーザーに対してのみ FIDO2 を許可するためには、グループの選択をしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/fe4f26ec-f7b1-b968-c72f-38039f01d21c.png)
　<br>
0. 続いて、**構成** タブは、この時点では変更はしませんが、既定値を憶えておきましょう。
**保存** をクリックすると、設定が有効化されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/0b871183-088b-f3c0-6ce5-1f6815891620.png)
　<br>
0. 以下の通り、有効 になったことが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/8d3f93fc-10c8-4aba-ea90-7c5d615a21dd.png)
　<br>
0. 上記の設定が完了すると、各ユーザーの マイアカウント の画面で セキュリティ キー が選択できるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/8cd3fba8-0808-d602-63dd-f408ef69ed0b.png)

**公開情報：パスキー (FIDO2) 認証方法を有効にする**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/how-to-enable-passkey-fido2?wt.mc_id=mvp_407731#enable-passkey-fido2-authentication-method

---

# 3. FIDO2 を セルフサービスで登録する
前章の設定で、**セルフサービス設定を許可** が有効になっていれば、本章の手順にて 各ユーザーが 自分自身で FIDO2 セキュリティキー の初期設定が行えます。

0. マイアカウント の URL にアクセスします。
**アカウント管理（マイアカウント）の URL**
https://aka.ms/mysecurityinfo
　<br>
0. FIDO2 セキュリティキー を設定したいユーザーアカウントで サインインします。
左ペインの **セキュリティ情報** を選択し **サインイン方法の追加** を押します。
一覧表示された中から **セキュリティ キー** を選択ます。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/8cd3fba8-0808-d602-63dd-f408ef69ed0b.png)
　<br>
0. 以下のメッセージが表示されるため **次へ** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a2678d1a-5941-143a-a79b-cd62b7a7131e.png)
　<br>
0. ここで、本人確認のための認証が必要です。Authenticator アプリや SMS で 2FA 認証を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/8ceb303a-427c-25df-6910-db25ca81ad1e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/5e437bca-334d-d55c-3f6d-bd21fea90d2e.png)
　<br>
0. 2FA 認証に成功すると、以下の画面が表示されます。
今回は、**YubiKey** で検証するため **USB デバイス** を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/f276031d-2ce2-0465-fac8-09c9cd68ca60.png)
　<br>
0. 以下の画面が表示されるため、そのまま **次へ** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/2d6f99c2-e508-8859-8fb1-f9539a40c28b.png)
　<br>
0. 左側の画面が表示されたあと、手前側に 右側の画面が表示されます。
このタイミングで **FIDO2 セキュリティ キー** を挿入しましょう。
そして、**セキュリティ キー** を選択して、**次へ** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/363618fb-8a28-f9a9-5811-0ccc26453fef.png)
　<br>
0. 以下の画面が表示されますが、そのまま **OK** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/556c4d66-03e0-b15d-6793-c862627dd536.png)
　<br>
0. 以下の画面が表示されますが、そのまま **OK** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/994c829d-dbca-076d-6987-99a32b7539e1.png)
　<br>
0. 初めて FIDO2 セキュリティ キー を使用する場合（新品など）の場合は、PIN を設定するように促されます。
既に PIN が設定されている場合は、設定済みの PIN 入力が促されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/ed3e781f-0b6e-f1a6-7dda-6160fa8e3b0f.png)
　<br>
0. 以下のように 新しい PIN を設定して **OK** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a15de6a2-390e-ce71-f98f-c35b7f7fcc45.png)
　<br>
0. 以下の表示がされたあと、セキュリティキー にタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/22ed9f68-35cb-11ea-4cdd-f2a21adc8709.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/bec5aaac-087b-5dc4-7a9c-b2cbc4726c8d.png)
　<br>
0. 以下のように表示されれば OK です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/1f313689-6fd8-61f6-e379-3aadd7a2a960.png)
なお、私が検証した際には、InPrivate モード で作業していると、このタイミングでエラーになりました。
プライベートモードでは、登録できない旨のメッセージが表示されます。通常のセッションでやり直してください。
　<br>
0. セキュリティー キー の名前を付けます。
もし、複数個の セキュリティ キー を併用する場合は、仕分けるための名前を付けると良いと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/1a4bfffd-077d-c625-fedb-50921e3faf83.png)
　<br>
0. これで、登録作業は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/c67f8a67-fa8e-197c-0441-577abe0b9ca1.png)
　<br>
0. マイアカウント で セキュリティ情報の一覧表示を確認すると、追加されたことが判ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/5964011f-ce19-345f-76a9-badd0450ebe6.png)

**公開情報：パスキーの登録 (FIDO2)**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/how-to-register-passkey-with-security-key?wt.mc_id=mvp_407731

**公開情報：Microsoft Entra の概要のための統合されたセキュリティ情報登録**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/concept-registration-mfa-sspr-combined?wt.mc_id=mvp_407731

:::note info
なお、セルフサービスではなく 組織の管理者が 一括でパスキーを初期設定する方法は、プレビュー段階のようで、まだ情報が整っていない様子です（2024/11/23 時点の情報）
**公開情報：既知の問題 セキュリティ キーのプロビジョニング**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/how-to-enable-passkey-fido2?wt.mc_id=mvp_407731#known-issues
（上記の URL より抜粋）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/bc3ca727-3b17-e75e-6e77-60cec22342df.png)
:::

---

# 4. FIDO2 を使ったサインイン
本章の画像は、Azure を使っていますが、 Azure でも Microsoft 365 でも 同じ動作であることを確認しました。Microsoft Entra ID を使った認証であれば、皆 同じ操作により、サインインが可能になっています。

0. Azure Portal または Microsoft 365 の URL にアクセスします。
https://portal.azure.com
https://office.com
　<br>
0. 初回のみ 以下の画面がでます。
**代わりに顔、指紋、PIN、またはセキュリティキーを使用する** を選択します。
２回目のサインインからは、この画面は出ずに SKIP されます。
基本の認証が パスワードではなく パスキー であると認識されている様子です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/a5ef9275-991a-c6c3-b7e3-829190a06aef.png)
　<br>
0. セキュリティ キー を選択して **次へ** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/04965d47-de47-edf0-c982-9fb08b37b754.png)
　<br>
0. キーに設定した PIN を入力して **OK** を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/7cf5abbd-d83c-a98a-c9ea-225d4e6e4acc.png)
　<br>
0. このタイミングで キー にタッチします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/c555d6aa-be40-0ad9-47d1-08c285d61a7c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/bec5aaac-087b-5dc4-7a9c-b2cbc4726c8d.png)
　<br>
0. サインインに成功しました。
ここで、**はい** を押したら ブラウザが記憶して 認証そのものを抑制できますが、せっかく キー を用意したので ここは **今後このメッセージを表示しない** にチェックを入れ **いいえ** を押して運用すると良いと思います。
この方がセキュリティが高まります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/26f06f3f-1fde-07b7-2358-b1d9980c6b8a.png)
　<br>
0. 以下の通り、FIDO2 セキュリティ キー でサインインに成功しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/6792a038-7931-9069-aeef-23e6e1adde5f.png)

**公開情報：パスキー (FIDO2) を使用してサインインする**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/how-to-sign-in-passkey?wt.mc_id=mvp_407731

**公開情報：新しいパスキー (FIDO2) でサインイン**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/how-to-register-passkey-with-security-key?wt.mc_id=mvp_407731#sign-in-with-your-new-passkey-fido2

以上で、Microsoft Entra ID で、FIDO2 セキュリティーキーを使って パスワードレスでのサインインに成功しました。

---

# Next Step
FIDO2 での認証が可能になったら、次は テナント にサインイン可能な認証方法の絞り込みによって、セキュリティを高められます。

以下の公開情報を参考にすることで、条件付きアクセスによって、特定のサービスを利用する際の認証強度を パスキー (FIDO2) に限定するなどの対応が可能です。さらに、AAGUID で制限することによって 組織が選択したパスキー製品のみを使用するような制限も行う事が出来そうです。

なお、現時点で 私は YubiKey を１個しか持っていないので、AAGUID で制限できているかどうかの検証が行えないため、以下の通り 設定画面の紹介までに留めておきます。

**公開情報：パスキー (FIDO2) サインインを適用する**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/how-to-enable-passkey-fido2?wt.mc_id=mvp_407731#enforce-passkey-fido2-sign-in

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/2e6944c8-8d28-8ed9-9472-5075e51a4130.png)

上記の 緑下線部の **詳細設定オプション** を押したあとの画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/e075f3e5-effc-8328-2c85-fa318cd21dec.png)

**AAGUID の確認方法**
AAGUID については、以下を参考に ユーザーが登録した AAGUID を参照できます。

**公開情報：パスキー (FIDO2) の Authenticator 構成証明 GUID (AAGUID)**
https://learn.microsoft.com/ja-jp/entra/identity/authentication/how-to-enable-passkey-fido2?wt.mc_id=mvp_407731#passkey-fido2-authenticator-attestation-guid-aaguid

ただし、上記の公開情報のキャプチャとは違って、**アクセスパネルプロファイル** を開くことで AAGUID を参照することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/0b0978a1-9a85-0d7f-3bc9-f3e223efb3d0.png)
以下の画面に AAGUID が表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1619637/dc61a436-0bae-ac0e-8801-67063d87b7f8.png)


# 関連情報

**Yubico : Microsoft Office 365 and Microsoft Entra ID User’s account setup**
Microsoft Entra ID 環境で Yubikey を扱う為のドキュメントです。
https://support.yubico.com/hc/en-us/articles/9237232091164-Microsoft-Office-365-and-Microsoft-Entra-ID-User-s-account-setup