GitHubが二要素認証必須に！？ Windows Hello (WebAuthn) を設定しよう

# はじめに

GitHubの二要素認証の必須化がニュースになっています。

[GitHub、すべての開発者に二要素認証の要求開始、来週月曜日から1年かけて展開](https://www.publickey1.jp/blog/23/github1.html)
[GitHubが二要素認証を義務付け。2023年中にすべての開発者アカウントへ通知](https://pc.watch.impress.co.jp/docs/news/1485252.html)

反発の声もちらほら見かけます。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">マジでふざけんな、SMS必須は困るで<br><br>GitHub、すべての開発者に二要素認証の要求開始、来週月曜日から1年かけて展開 － Publickey <a href="https://t.co/DT726suKsR">https://t.co/DT726suKsR</a></p>&mdash; Torishima (@izutorishima) <a href="https://twitter.com/izutorishima/status/1634108795617177600?ref_src=twsrc%5Etfw">March 10, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">PC watch &quot;GitHub が二要素認証を義務付け。2023 年中にすべての開発者アカウントへ通知&quot; <a href="https://t.co/ag12HUsTWe">https://t.co/ag12HUsTWe</a><br><br>こういうの押し付けるのほんとやめてほしい。機能を追加するのは結構だが、使うかどうかは各レポジトリに任せるべき。「このレポジトリは 2FA 不使用です」って警告だしてもいいからさ</p>&mdash; とりさん (@biochem_fan) <a href="https://twitter.com/biochem_fan/status/1635225889909903361?ref_src=twsrc%5Etfw">March 13, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

SMSやワンタイムパスワード(Google Authenticatorなど)の場合、いちいちスマホに表示された番号を入力する必要があり、面倒です。二要素認証が嫌いになる気持ちは分かります。しかし二要素認証の方法はこれだけではありません。
GitHubはWebAuthnに対応しており、WindowsならWindows Hello、AndroidやiPhoneなら端末の画面ロックで認証できます。これなら大きな手間をかけずセキュリティーを強化できるので、GitHubの二要素認証にはWebAuthnを使う事をおすすめします。

# Windows Helloを使用したログイン方法

Windowsユーザーが、GitHubの二要素認証にWindows Helloを登録すると、こんな感じでログインできるようになります。


まずCookieを消すか、ブラウザのプライベートブラウジングやシークレットモードなど、まっさらな状態でGitHubにアクセスし、「Sign in」クリックしてください。

最初にユーザー名とパスワードを要求されるので入力してログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/090c3506-6306-7b72-a17e-7e2a70f9b8b6.png)

次に、二要素認証を要求されます。ここで「Use security key」をクリックすると…
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/fcc2d8a7-dc22-ace7-a29b-ec8b1f7cb381.png)


Windows Helloのダイアログが出ました。この例ではPINを入力すると…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/3726b59f-c302-9899-11fa-ff95f8a6a6ac.png)

無事にログインできました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/0dcd9f8d-b98b-49aa-0fd9-d16e3c9677a0.png" width="100%">

もうスマホ見て番号を手入力する手間は要りません。指紋認証、顔認証や桁数の少ないPIN番号で二要素認証できます。


# 二要素認証にWindows Helloを登録する方法

## 前提条件

すでにパソコンにWindows Helloを設定済みであること。

本記事では設定済みであるものとし、その設定方法には踏み込みません。設定方法は他に優れた解説がたくさんありますので、そちらをご覧ください。

簡単に言うと、設定アプリでここから実施できるはずです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/aef9e2b7-dd98-8b75-0d52-727cbbe45e22.png" width="500">

## 手順

GitHubに通常通りログインしたら、右上の自分のアイコンをクリックして、「Settings」を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/c03c85d7-8c90-f6a8-afd8-880fb7c4fdd8.png" width="280">

個人アカウントの設定に行くので、左メニューの「Password and authentication」を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/43c6f9db-a1c4-f2e4-a22f-e9fd7b25a94a.png" width="250">

まだ二要素認証を何も設定していない人は、このような表示になっています。詳細は省きますが、いったんSMS認証または認証アプリ(TOTP)の設定をする必要があるので、実施してください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/dc7d62bc-7f91-31f8-2603-5f65201cb47c.png" width="600">

一方、SMS認証または認証アプリ(TOTP)の設定が済んでいる場合は、以下のような表示になっているはずです。「Security keys」の「Add」ボタンを押します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/fa8a556b-a48d-1db5-59c1-2c3552a79b91.png" width="600">

「Register new security keys」ボタンが出現するので押します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/11f74d7f-f071-67db-ac75-51167554c05a.png" width="600">

セキュリティーキーはGitHubに複数登録できるので、区別のための好きな名前を入力してAddを押します。ここでは「demo pc windows hello」とします。
ちなみに、同じPC上では異なるブラウザでも同一のセキュリティーキー扱いになるので、名前にブラウザの違いを分かるようにする必要はありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/60b71b46-e24a-f42f-76e1-7fb377363e0e.png)

すると、Windows Helloのダイアログが出ます。この例ではPIN認証なので入力します。Windows Helloの登録状況によっては指紋認証や顔認証になると思います。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/4544da55-7e7b-2e91-b34a-be23c65b3080.png" width="600">

完了すると、このような表示になります。さきほど登録した「demo pc windows hello」が表示されていて、無事登録できたことが分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/5b58a557-6e1a-ffca-70ab-cbb0936b4a13.png)

このままだと、ログイン時は相変わらず認証アプリ(TOTP)またはSMS認証がまず要求されてしまいます(切り替えることは可能です)ので、Windows Helloを優先に設定します。右のメニューで「Set as preferred method」を選択して、優先(Preferred)にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/c60a859a-a059-8b2c-7227-b34c3aeb7c5d.png)

成功すれば以下のように青字で「Preferred」が表示されるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221308/d9ab0cd5-d53a-374b-972d-99d619b72ed8.png)

# 参考リンク

公式ドキュンメント：セキュリティキーを使って 2 要素認証を設定する

https://docs.github.com/ja/authentication/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication#configuring-two-factor-authentication-using-a-security-key

# まとめ

Windows Helloを使えばもはや二要素認証は面倒でなく、簡単にセキュリティーを強化できることが分かってもらえたかと思います。
上記の通り設定手順も簡単です。さくっとやってしまいましょう。

# おまけ(WebAuthnについて)

ここまで「GitHubの二要素認証をWebAuthnで簡単にする」という観点で記事を書きました。　
さて、もしあなたがWebアプリの開発者だとして、その認証はID/パスワードのみでしょうか。WebAuthnはGitHubに限らず、認証を便利に安全にする技術です。是非あなたのアプリもWebAuthnに対応しましょう！

NRIは、WebAuthnに対応したKeycloakというソフトウェアに注目し、情報発信を行っております。是非ご覧ください。

Keycloakとは (Keycloak by OpenStandia Advent Calendar 2017 1日目)：

https://qiita.com/daian183/items/30f01e162e03567ff21b

Keycloak - Open Source Identity and Access Management：

https://www.keycloak.org/

Keycloak 日本語ドキュンメント：

https://keycloak-documentation.openstandia.jp/