パスキー
Passkey
概要(サマリー)
パスキー(Passkey)とは、従来のIDとパスワードの代わりに、スマートフォンやPCなどのデバイスに搭載されている生体認証(指紋や顔認証)やデバイスのPINコード(暗証番号)を使って、素早くかつ安全にWebサイトやアプリへサインインできる次世代の認証技術である。
従来の認証は「ユーザーが合言葉を覚えておく」必要があったが、パスキーは「デバイス自体を本人の身分証明書(鍵)にする」というアプローチをとる。これにより、パスワードを覚える手間や、パスワードが流出してアカウントが乗っ取られるセキュリティリスクを根底から解消する。
詳細解説
パスワードを必要としない新しい鍵
パスキーは、国際標準化団体のFIDOアライアンスとW3Cによって策定されたオープンな規格(WebAuthn)に基づいている。Apple、Google、Microsoftなどの主要なプラットフォームホルダーが全面的にサポートしており、現代のほとんどのデバイスで利用できるようになっている。
パスキーの仕組み(公開鍵暗号の応用)
パスキーは、裏側で「公開鍵認証(非対称暗号)」という非常に強力なセキュリティ技術を利用している。
- 登録(鍵のペアを作成する):
ユーザーがWebサイトでパスキーを設定すると、デバイス(スマートフォンなど)の内部で、対になる2つの鍵である「秘密鍵(自分だけが持つ鍵)」と「公開鍵(誰に渡してもよい鍵)」が自動的に生成される。公開鍵はWebサイトのサーバーへ送信されて登録され、秘密鍵はデバイス内の安全な領域(ハードウェアチップなど)に厳重に保管され、外部には絶対に送信されない。 - ログイン(鍵を照合する):
ユーザーがログインを試みると、サーバーからデバイスに対して「このデータを君の秘密鍵で署名(暗号化)して送り返して」という問題(チャレンジ)が出される。デバイス側は、ユーザーが生体認証(Face IDや指紋など)に成功した段階で、保管している秘密鍵を使ってそのデータに署名を行い、サーバーへ返信する。サーバーは、事前に登録してあった公開鍵を使ってその署名を検証し、正しければログインを許可する。
ユーザーにとってのログイン体験
ユーザーの操作は非常にシンプルである。
- Webサイトのログインボタンを押す。
- 画面に「パスキーでサインインしますか?」という案内が出る。
- スマートフォンの画面ロック解除(顔認証や指紋、PINなど)を行う。
- これだけでログインが完了する。パスワードの入力は一切不要である。
パスキーがもたらす高い安全性の理由
パスキーが従来のパスワード認証に比べて圧倒的に安全である理由は以下の3点にある。
- サーバーに秘密データがない:
サーバーが保存しているのは「公開鍵」だけである。公開鍵は他人に知られても全く問題がないため、仮にWebサイトのデータベースがハッキングされて情報が漏洩しても、アカウントが乗っ取られることはない。 - フィッシング攻撃が無効化される:
パスキーは、鍵が「どのWebサイト(ドメイン)で生成されたか」を厳密に記憶している。そのため、見た目が本物そっくりに作られた偽のフィッシングサイト(例:amaz0n.com)にアクセスしてログインしようとしても、デバイスが「その偽サイトのドメインに対応する鍵はない」と判断して動作しない。ユーザーがだまされても、システムが自動的に攻撃を遮断する。 - 総当たり攻撃が通用しない:
デバイスの秘密鍵は非常に複雑な暗号データであり、推測することは不可能である。また、認証には生体情報か物理デバイスそのものが必要なため、インターネット経由での総当たり(ブルートフォース)攻撃は一切成立しない。
パスキーの注意点とバックアップ
パスキーの「秘密鍵」はデバイス内に保存されるため、「スマートフォンを失くしたらログインできなくなるのでは?」という懸念がある。
これに対応するため、現代のパスキーはクラウドのアカウント(AppleのiCloudキーチェーン、Googleパスワードマネージャー、Microsoftアカウントなど)と同期してバックアップされる仕組みになっている。新しいスマートフォンに買い換えた場合でも、同じクラウドサービスのアカウントでログインすれば、自動的にパスキーが新しいデバイスに同期され、問題なくログインを引き継ぐことができる。
AIコーディングとの関係
Webアプリケーションにパスキーを実装する場合、ブラウザが提供する WebAuthn API を直接叩く必要がある。しかし、このAPIは生のデータをバイナリ(ArrayBuffer)でやり取りするため、仕様が非常に複雑で、ゼロから自力で書くのは開発のハードルが高い。
AIにパスキー認証の実装コードを書いてもらう際は、言語やフレームワークに応じた安全なオープンソースライブラリ(例: JavaScriptなら @simplewebauthn、PHPなら webauthn-lib など)を利用するように指定すると、AIは現実的でクリーンなラッパーコードを生成してくれる。
AIコーディング時のポイント
- AIに対して「JavaScriptとNode.jsを使用し、SimpleWebAuthnライブラリを使ってパスキー認証を導入する手順とコード例を提示してください」のように、推奨ライブラリをセットで指定する。
- パスキーの登録処理(Registration)とログイン検証処理(Assertion)という2つのフェーズがあるため、それぞれのステップにおける「フロントエンドとバックエンドのやり取りの流れ」を分かりやすく図解してもらうと、全体のアーキテクチャへの理解が深まる。
よくある勘違い
生体データ(顔や指紋)がWebサイト側へ送信されてしまう?
生体認証の情報は、スマートフォンやPCなどのデバイス内部だけで完結して処理される。
Webサイトや外部のサーバーへ送信されるのは、生体データではなく、認証成功後に秘密鍵で作られた「署名データ」だけである。サービス運営会社やハッカーに自分の顔写真や指紋データが知られることは決してない。
スマートフォンを紛失したら、二度とログインできなくなる?
前述の通り、iCloudやGoogleアカウントなどのクラウドキーチェーンを通じてパスキーは自動バックアップされるため、デバイスを失くしてもアカウントを失うことはない。
また、クラウド同期を使わないセキュリティキー(YubiKeyなど)を使用している場合でも、Webサイト側で予備のパスキーを登録しておいたり、一時的に従来のワンタイムパスワード等を使ったバックアップログイン手段を用意しておくことで、アカウントへのアクセスを復旧できる。
パスキーを使っていれば、フィッシングサイトにも絶対に引っかからない?
システム的には、パスキーを使う限り、偽サイトの入力欄で認証情報が盗まれることはないため、フィッシングに対してはほぼ「完璧な防御」となる。
ただし、攻撃者が「パスキーではなく、従来のパスワード+SMS認証に切り替える」ような選択肢を偽画面で用意し、ユーザーをそちらに誘導して騙すような手口は考えられる。パスキー自体の安全性は揺るぎないが、ユーザー側の警戒心を完全にゼロにしてよいわけではない。
まとめ
- パスキーは、パスワードを使わずにデバイスのロック解除(生体認証やPIN)だけでサインインする次世代の技術。
- 公開鍵暗号の仕組みを使用し、デバイス側の秘密鍵とサーバー側の公開鍵で署名を検証する。
- パスワードをサーバーに保管しないため、ハッキングによる情報漏洩や不正ログインを根本的に防止する。
- ドメインと紐づいて動作するため、偽サイトに認証情報を渡してしまうフィッシング詐欺に極めて強い。
- AIを使って実装する際は、複雑なWebAuthn APIを直接扱うのではなく、信頼できるラッパーライブラリをAIに選定させて構築するのが賢明。
情報ソース
より詳しくAIに聞いてみよう
- パスキーと従来の「二要素認証(MFA)」の違いと、パスキーの方がより安全で簡単とされる理由を教えてください。
- ブラウザの
WebAuthn APIとは何か、そしてパスキー認証を実現するためにフロントエンドとバックエンドがどのようなデータをやり取りするのかを解説してください。 @simplewebauthn/serverを使って、Node.js(Express)のバックエンドでパスキーを登録・検証する最小限の実装コードを示してください。- AIに「既存のパスワードログイン機能を持つWebアプリに、パスキー認証を追加したい」と相談する場合の、段階的な移行計画を作成するプロンプトの例を教えてください。
- パスキーの「デバイス間の同期(シンクドパスキー)」と「同期しないパスキー(シングルデバイスパスキー)」の違いと使い分けを教えてください。