パスキーって最近よく聞くけどなんだっけ
導入
こんにちは!
株式会社BTMでエンジニアをしている島谷です。
突然ですが、パスキー(Passkey)、流行っていますよね。
近年、パスワードに代わる認証方法として多くのサービスで導入されるようになりました。
NTTドコモ[1]やメルカリ[2]といったサービスでは既に導入されています。
今回、パスキーについて調査しましたので、その結果を共有していきます。
まず、従来のパスワード認証やFIDO認証の仕組みや、それぞれの課題を説明したうえで、パスキーについて説明します。
パスワード認証とは
IDとパスワードでアカウントにログインする一般的な方法ですが、パスワードが盗まれると、誰でもそれを使ってアカウントにログインできてしまいます。
この問題を解決すべく、パスワードレスの認証を提供するFIDO認証が登場しました。
FIDO認証とは
FIDOとは「Fast Identity Online」の略です。
FIDO(ファイド)アライアンスとWeb標準化団体のW3Cが共同で規格化した、公開鍵暗号化方式を用いた、パスワードなしでログインする方法です。[3]
スマートフォンまたはFIDO認証をサポートしている他のデバイスを使用して、アカウントにログインする前、使用者が本人であることを証明します。
そのため、事前にサーバへ端末情報を登録する必要があります。
上図のフローで、FIDOクレデンシャルとして秘密鍵とサイトのメタデータをデバイスに保存し、生成した公開鍵を端末情報としてサーバに登録します。
登録が完了すると、アカウントのログインIDと生体情報を使ってアカウントへログインできるようになります。
そのため、パスワード認証と異なり、パスワードが漏洩するといったリスクを防ぐことができたり、
他にも、攻撃者が偽サイト(フィッシングサイト)にユーザを誘導してIDやパスワードを入力させて情報や金銭等を盗む「フィッシング詐欺」の対策としても有効になります。
また、アカウントのログインの際、パスワードを記憶しておく必要がなくなるため、高齢者や技術に不慣れなユーザにとって、大きな利便性を提供します。
しかし、課題もあります。
FIDOクレデンシャルはデバイスに保存するため、デバイスの紛失や機種変更などした場合、FIDO認証ができなくなってしまい、再度新しいデバイスでの登録が必要となります。
そこで登場したのがパスキーになります。
パスキーとは
上記のFIDO認証技術を拡張したものになり、クラウド経由でデバイス間同期できる、FIDOクレデンシャルのことを指します。[4]
Apple製品であればiCloudキーチェーンを使えば、複数のデバイス間で同期できます。
そのため、仮に機種変更をした場合でも、FIDOクレデンシャルが同期され、新しいデバイスでのFIDO認証が可能になります。
ただし、全てのデバイスで利用できるわけではないです。
パスキーが、比較的新しい技術となり、デバイス間同期ができないものもあります。
現在の対応状況については、以下をご確認ください。
パスキーは、すでにGoogleやAppleといった大手企業によって導入されています。
これらの企業が率先してパスキーの導入を推進することで、業界全体の標準となる可能性があります。
AWS IAMの多要素認証(MFA)にパスキー対応
2024年6月、AWSマネジメントコンソール、IAMユーザでログインする際の多要素認証(MFA)にパスキーが利用可能となりました。[5]
ということなので、さっそくやってみました。
まず、パスキー利用できるようにするため、AWSマネジメントコンソールにログインします。
IAMユーザの設定、「セキュリティ認証情報」タブで「MFAデバイスの割り当て」を選択します。
以下の画面に遷移するので、デバイス名の入力、およびMFAのデバイスオプションとして、「パスキーまたはセキュリティキー」を選択します。
以下のポップアップが表示され、パスキーの作成方法を選択することができます。
今回は、MFAデバイスとしてスマートフォンを使用するので、「スマートフォン、タブレット、またはセキュリティ キーを使用する」を選択します。
以下のQRコードが表示されるので、手持ちのスマートフォンで読み取ります。
スマートフォンでの操作が完了すると、以下のようにMFAデバイスが登録されていることがわかります。
再度、AWSマネジメントコンソールにログインしてみます。
サインインを押すと、以下のポップアップが表示されます。
登録したMFAデバイスを使って認証するので、「スマートフォン、タブレット、またはセキュリティ キーを使用する」を選択します。
以下のQRコードが表示されるので、手持ちのスマートフォンで読み取ります。FaceIDや指紋認証、PINコードを使って、ログインすることができます。
ログインできました。
おわりに
パスキーについての理解がだいぶ深まりました。
セキュリティの強化、ユーザビリティの向上など、多くの利点を持つパスキーは、今後ますます普及していくことでしょう。
そうなれば、私たち開発者には、パスキーで認証できるようアプリケーションを実装することが求められます。
そうした要望に応えられるよう、新しい技術を常に先取りしておくことが大切になってきますね!
以上です、最後までご覧いただきありがとうございました。
-
dアカウント 「パスキー認証」の提供開始について | お知らせ | NTTドコモ
https://www.docomo.ne.jp/info/notice/page/230308_00.html ↩︎ -
メルカリ、すべてのログインに 生体認証「パスキー」を導入 | 株式会社メルカリ
https://about.mercari.com/press/news/articles/20240129_passkeys/ ↩︎ -
FIDOとは - FIDO Alliance
https://fidoalliance.org/what-is-fido/?lang=ja ↩︎ -
FIDO Alliance Passkeys (Passkey Authentication)
https://fidoalliance.org/passkeys/ ↩︎ -
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
パスワードを知っている人なら誰でもログインできる、というのは仕様そのものなので
現状で何が問題となっているかをもう少し深掘りすると理解が深まるかもしれません。
公開鍵暗号方式の説明としては
といったところを抑えると良いでしょう。
暗号化/復号文脈で言うと、どちらか一方で暗号化して...というのはあまり正確な説明とはいえないので、パスキーに限らず一般的な知識として基礎的な部分を調べてみることをお勧めします。
ちなみにFIDO認証で利用されるのは署名生成/検証の仕組みです。
これは明確な間違いです。
生体情報は暗号化もされないですしサイトには送信されません。
サイトが指定したチャレンジの値などを含む情報とそれに対して秘密鍵で生成した署名をサイトに送り、サイトは公開鍵を用いて署名検証をします。
これは少し古いパスキーの表現であり、最近では同期するものしないもの含めてパスキーと呼んでいます。
参考になさってください。