🖊️

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

2024/06/28に公開1

導入

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

突然ですが、パスキー(Passkey)、流行っていますよね。

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

今回、パスキーについて調査しましたので、その結果を共有していきます。

まず、従来のパスワード認証やFIDO認証の仕組みや、それぞれの課題を説明したうえで、パスキーについて説明します。

パスワード認証とは

image.png

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

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

FIDO認証とは

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

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

スマートフォンまたはFIDO認証をサポートしている他のデバイスを使用して、アカウントにログインする前、使用者が本人であることを証明します。
そのため、事前にサーバへ端末情報を登録する必要があります。
image.png

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

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

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

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

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

そこで登場したのがパスキーになります。

パスキーとは

上記のFIDO認証技術を拡張したものになり、クラウド経由でデバイス間同期できる、FIDOクレデンシャルのことを指します。[4]
image.png
Apple製品であればiCloudキーチェーンを使えば、複数のデバイス間で同期できます。

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

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

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

AWS IAMの多要素認証(MFA)にパスキー対応

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

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

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

IAMユーザの設定、「セキュリティ認証情報」タブで「MFAデバイスの割り当て」を選択します。
mosaic_20240620232701.png

以下の画面に遷移するので、デバイス名の入力、およびMFAのデバイスオプションとして、「パスキーまたはセキュリティキー」を選択します。
image.png

以下のポップアップが表示され、パスキーの作成方法を選択することができます。
今回は、MFAデバイスとしてスマートフォンを使用するので、「スマートフォン、タブレット、またはセキュリティ キーを使用する」を選択します。
image.png

以下のQRコードが表示されるので、手持ちのスマートフォンで読み取ります。
mosaic_20240620233904.png

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

mosaic_20240620234209.png

再度、AWSマネジメントコンソールにログインしてみます。
mosaic_20240620234434.png

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

image.png

以下のQRコードが表示されるので、手持ちのスマートフォンで読み取ります。FaceIDや指紋認証、PINコードを使って、ログインすることができます。

mosaic_20240620234634.png

ログインできました。

image.png

おわりに

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

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

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

脚注
  1. dアカウント 「パスキー認証」の提供開始について | お知らせ | NTTドコモ
    https://www.docomo.ne.jp/info/notice/page/230308_00.html ↩︎

  2. メルカリ、すべてのログインに 生体認証「パスキー」を導入 | 株式会社メルカリ
    https://about.mercari.com/press/news/articles/20240129_passkeys/ ↩︎

  3. FIDOとは - FIDO Alliance
    https://fidoalliance.org/what-is-fido/?lang=ja ↩︎

  4. FIDO Alliance Passkeys (Passkey Authentication)
    https://fidoalliance.org/passkeys/ ↩︎

  5. AWS Identity and Access Management が 2 番目の認証要素としてパスキーのサポートを開始
    https://aws.amazon.com/jp/about-aws/whats-new/2024/06/aws-identity-access-management-passkey-authentication-factor/ ↩︎

Discussion

ritouritou

パスワードが盗まれると、誰でもそれを使ってアカウントにログインできてしまいます。
この問題を解決すべく、

パスワードを知っている人なら誰でもログインできる、というのは仕様そのものなので
現状で何が問題となっているかをもう少し深掘りすると理解が深まるかもしれません。

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

公開鍵暗号方式の説明としては

  • 秘密鍵、公開鍵のペアを利用する
  • その鍵ペアを用いた暗号化/復号、署名生成/検証が可能

といったところを抑えると良いでしょう。
暗号化/復号文脈で言うと、どちらか一方で暗号化して...というのはあまり正確な説明とはいえないので、パスキーに限らず一般的な知識として基礎的な部分を調べてみることをお勧めします。

ちなみにFIDO認証で利用されるのは署名生成/検証の仕組みです。

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

これは明確な間違いです。
生体情報は暗号化もされないですしサイトには送信されません。
サイトが指定したチャレンジの値などを含む情報とそれに対して秘密鍵で生成した署名をサイトに送り、サイトは公開鍵を用いて署名検証をします。

パスキーとは
上記のFIDO認証技術を拡張したものになり、クラウド経由でデバイス間同期できる、FIDOクレデンシャルのことを指します

これは少し古いパスキーの表現であり、最近では同期するものしないもの含めてパスキーと呼んでいます。

https://fidoalliance.org/passkeys/?lang=ja

パスワードを使わないあらゆるFIDO認証資格情報がパスキーです。

区別する場合には、クラウドサービスを介してユーザーのデバイス間で同期するパスキーは、一般的に「同期パスキー」と呼ばれ、1つのデバイスから外に出ることのない(UAFアプリ上のものを含む)パスキーは、「デバイス固定パスキー」と呼ばれます。

参考になさってください。