背景
認証・認可周りの本を読んでいるときにFIDOについて興味を持ったのがきっかけです。
FIDOだと機種変更時に認証が通らなくなって困るのでは? と思ったので対策を調べていました。
どうやらパスキーを使えば鍵が同期されて、複数デバイス間で共有できるらしい...
つまり秘密鍵を渡すということでしょうか?
整理も兼ねてパスキーの同期の仕組みについて調べました。
FIDO認証
パスキーはFIDO認証に関わりがあるので、まずはFIDO認証の確認からです。
FIDO認証は公開鍵暗号方式を利用して認証をします。
サービスへの鍵の登録、認証の仕方は以下の手順で行なっています。
鍵登録の手順
- サービスへ登録するときにサービスに対する秘密鍵と公開鍵のペアを生成する
- 秘密鍵はデバイス内に保存され、公開鍵のみをサービスのサーバに保存する
認証の仕方
- サーバから送られてくるチャレンジに対して、登録した公開鍵に対応した秘密鍵で署名したチャレンジをサーバに送る
- その後、サーバに登録した公開鍵で、チャレンジの署名を検証する
- 検証が通れば認証成功
パスキー(マルチデバイス対応FIDO認証資格情報)
パスキーはFIDO認証で利用する資格情報(秘密鍵)を同期できるようにした鍵です。
FIDO認証では各デバイスにのみ秘密鍵が保存されているため、機種変更などの際にパスキーの移動に手間がかかりました。
パスキーでは複数デバイス間で秘密鍵を同期させる仕組みがあり、移動の手間がかかりません。
パスキーの同期
パスキーはFIDOの認証に使う秘密鍵をアカウントに紐付け、暗号化してクラウドで管理します。
クラウド上に秘密鍵を置いておくので、異なるデバイスでも同じ鍵を使うことができるということです。
その際のクラウドとのやり取りも暗号化しているため安全に共有できるということのようです。
デバイス1からデバイス2に秘密鍵を同期する例を示します。
appleの場合は、iCloudキーチェインを使ってクラウド内に秘密鍵を暗号化し保存します。
それをユーザのアカウントに紐づいたデバイスと共有することで、他デバイスとの秘密鍵を共有できるという仕組みのようです。
秘密鍵を暗号化しているからクラウドに保存しても安心ってことでしょうか...
秘密鍵が外に出ないFIDO認証とは異なり、外部へ送るリスクについても考える必要がありそうです。
終わりに
パスキーは生成したサービスごとの秘密鍵をクラウド上で暗号化して保存し、共有する仕組みであることがわかりました。
秘密鍵を共有する点に違和感を覚えていたので、理解がなかなか進みませんでした。
今後パスキーは普及していくと考えられるので、アプリケーションで実装する方法についても調べていきたいです。