パスキーって最近よく聞くけどなんだっけ

## 導入
こんにちは！
株式会社BTMでエンジニアをしている島谷です。

<br>
突然ですが、パスキー（Passkey）、流行っていますよね。

近年、パスワードに代わる認証方法として多くのサービスで導入されるようになりました。
NTTドコモ[^4]やメルカリ[^5]といったサービスでは既に導入されています。

今回、パスキーについて調査しましたので、その結果を共有していきます。
<br>
まず、従来のパスワード認証やFIDO認証の仕組みや、それぞれの課題を説明したうえで、パスキーについて説明します。

## パスワード認証とは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791212/6b9e9029-68fc-a1a6-f917-5affb8fb0fc7.png)

IDとパスワードでアカウントにログインする一般的な方法ですが、パスワードが盗まれると、誰でもそれを使ってアカウントにログインできてしまいます。

この問題を解決すべく、パスワードレスの認証を提供するFIDO認証が登場しました。

## FIDO認証とは
FIDOとは「Fast Identity Online」の略です。

FIDO（ファイド）アライアンスとWeb標準化団体のW3Cが共同で規格化した、公開鍵暗号化方式を用いた、パスワードなしでログインする方法です。[^1]



:::note
公開鍵暗号化方式とは
一言でいうと、対になる2つの鍵を用意し、片方の鍵でデータを暗号化し、もう一方の鍵で復号化する方法です。
:::

スマートフォンまたはFIDO認証をサポートしている他のデバイスを使用して、アカウントにログインする前、使用者が本人であることを証明します。
そのため、事前にサーバへ端末情報を登録する必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791212/75b43ba2-1c62-a28a-dbbb-8900fdd0db87.png)


上図のフローで、FIDOクレデンシャルとして秘密鍵とサイトのメタデータをデバイスに保存し、生成した公開鍵を端末情報としてサーバに登録します。

登録が完了すると、アカウントのログインIDと生体情報を使ってアカウントへログインできるようになります。

そのため、パスワード認証と異なり、パスワードが漏洩するといったリスクを防ぐことができたり、
他にも、攻撃者が偽サイト（フィッシングサイト）にユーザを誘導してIDやパスワードを入力させて情報や金銭等を盗む「フィッシング詐欺」の対策としても有効になります。

また、アカウントのログインの際、パスワードを記憶しておく必要がなくなるため、高齢者や技術に不慣れなユーザにとって、大きな利便性を提供します。

:::note
サイトに送信されるデータは秘密鍵によって暗号化されたログインIDと生体認証であり、これらデータの盗聴を防ぐことができます。
:::

しかし、課題もあります。
FIDOクレデンシャルはデバイスに保存するため、デバイスの紛失や機種変更などした場合、FIDO認証ができなくなってしまい、再度新しいデバイスでの登録が必要となります。

そこで登場したのがパスキーになります。
## パスキーとは
上記のFIDO認証技術を拡張したものになり、クラウド経由でデバイス間同期できる、FIDOクレデンシャルのことを指します。[^2]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791212/320ed6b8-1a27-3207-8068-4282302c620b.png)
Apple製品であればiCloudキーチェーンを使えば、複数のデバイス間で同期できます。

そのため、仮に機種変更をした場合でも、FIDOクレデンシャルが同期され、新しいデバイスでのFIDO認証が可能になります。


ただし、全てのデバイスで利用できるわけではないです。
パスキーが、比較的新しい技術となり、デバイス間同期ができないものもあります。
現在の対応状況については、以下をご確認ください。
https://passkeys.dev/device-support/

<br>
パスキーは、すでにGoogleやAppleといった大手企業によって導入されています。
これらの企業が率先してパスキーの導入を推進することで、業界全体の標準となる可能性があります。


## AWS IAMの多要素認証（MFA）にパスキー対応
2024年6月、AWSマネジメントコンソール、IAMユーザでログインする際の多要素認証（MFA）にパスキーが利用可能となりました。[^3]

<br>
ということなので、さっそくやってみました。
<br>
<br>

まず、パスキー利用できるようにするため、AWSマネジメントコンソールにログインします。

IAMユーザの設定、「セキュリティ認証情報」タブで「MFAデバイスの割り当て」を選択します。
![mosaic_20240620232701.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791212/5055fee6-eb31-2954-5b3a-700286a2132b.png)
<br>
以下の画面に遷移するので、デバイス名の入力、およびMFAのデバイスオプションとして、「パスキーまたはセキュリティキー」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791212/56209520-317d-6cc5-af29-422fb04e34b2.png)
<br>
以下のポップアップが表示され、パスキーの作成方法を選択することができます。
今回は、MFAデバイスとしてスマートフォンを使用するので、「スマートフォン、タブレット、またはセキュリティ キーを使用する」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791212/12d8d982-e242-16f8-adfe-a3fcf065dd88.png)
<br>
以下のQRコードが表示されるので、手持ちのスマートフォンで読み取ります。
![mosaic_20240620233904.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791212/3141fc15-f982-c2f0-1d42-49901f62dc1f.png)

<br>
スマートフォンでの操作が完了すると、以下のようにMFAデバイスが登録されていることがわかります。

![mosaic_20240620234209.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791212/0289cb64-3a83-5834-88c1-9aae90749af3.png)
<br>
再度、AWSマネジメントコンソールにログインしてみます。
![mosaic_20240620234434.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791212/a514cde9-30fe-f70a-051b-eff14e16c547.png)

::: note warn
パスキーに対応しているとはいえ、現状、パスワードなしでログインできるようになっているわけではないです。
:::

<br>
サインインを押すと、以下のポップアップが表示されます。
登録したMFAデバイスを使って認証するので、「スマートフォン、タブレット、またはセキュリティ キーを使用する」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791212/02121c8c-3408-49ea-52da-fb6fe0e232db.png)
<br>
以下のQRコードが表示されるので、手持ちのスマートフォンで読み取ります。FaceIDや指紋認証、PINコードを使って、ログインすることができます。

![mosaic_20240620234634.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791212/5d2f39ab-c8f3-acfc-bce2-fa7a74026bb9.png)

<br>
ログインできました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791212/b234a4d4-3187-ef55-9e7b-e19417899fd6.png)


## おわりに
パスキーについての理解がだいぶ深まりました。
セキュリティの強化、ユーザビリティの向上など、多くの利点を持つパスキーは、今後ますます普及していくことでしょう。

そうなれば、私たち開発者には、パスキーで認証できるようアプリケーションを実装することが求められます。
そうした要望に応えられるよう、新しい技術を常に先取りしておくことが大切になってきますね！


以上です、最後までご覧いただきありがとうございました。

::: note
株式会社BTMではエンジニアの採用をしております。
ご興味がある方はぜひ[コチラ](https://www.b-tm.co.jp/recruit/mid-career.html)をご覧ください。
:::
<br>


[^1]: FIDOとは - FIDO Alliance
https://fidoalliance.org/what-is-fido/?lang=ja
[^2]: FIDO Alliance　Passkeys (Passkey Authentication)
https://fidoalliance.org/passkeys/
[^3]: AWS Identity and Access Management が 2 番目の認証要素としてパスキーのサポートを開始
https://aws.amazon.com/jp/about-aws/whats-new/2024/06/aws-identity-access-management-passkey-authentication-factor/
[^4]: dアカウント 「パスキー認証」の提供開始について | お知らせ | NTTドコモ
https://www.docomo.ne.jp/info/notice/page/230308_00.html
[^5]: メルカリ、すべてのログインに 生体認証「パスキー」を導入 | 株式会社メルカリ
https://about.mercari.com/press/news/articles/20240129_passkeys/