約10分で読めます
パスキーが CardanoWall のアイデンティティ保管庫を守る仕組み
パスキーが CardanoWall のアイデンティティそのものになるわけではありません。パスキーは、ご自分の認証器だけが開ける暗号化された保管庫を開くための鍵です。WebAuthn PRF によって、CardanoWall をシードの管理者にすることなく、日々のアクセスを手軽にする仕組みを解説します。

CardanoWall のパスキーは、アイデンティティそのものではありません。アイデンティティの暗号化されたコピーを開くための鍵です。本当のアイデンティティは 32 バイトの Identity Seed(アイデンティティの種)であり、パスキーは、その Identity Seed を収めた暗号化された保管庫をご自分のデバイスで開けるようにするだけのものです。これにより、署名や復号のたびにシードを貼り付ける必要がなくなります。
Face ID、Touch ID、Windows Hello、同期されたプラットフォームパスキー、あるいは対応したハードウェアキーが、いずれもその日々の扉として機能します。扉の向こうにあるのは、CardanoWall のサーバーには読めない暗号文です。Identity Seed がアイデンティティであり、パスキーは開錠の要素にすぎません。この分離こそが、設計全体の核心です。
パスキーは実際にどんな問題を解決するのか
強固なアイデンティティ保管を、日々使えるものにします。
利便性の層がなければ、一度使い始めたユーザーは、何かに署名したり復号したりするたびに Identity Seed を貼り付けなければなりません。狭い意味では安全ですが、扱いづらいものです。そして、扱いづらいセキュリティは、安全でないセキュリティへと劣化していきがちです。人は秘密を誤った場所にコピーしたり、平文のメモに残したり、あるいは単にそのツールを使わなくなったりします。
パスキーは、その摩擦を取り除きます。CardanoWall はアカウントごとに暗号化された保管庫を保持し、ご自分のデバイスがユーザー検証のステップ(指紋、顔のスキャン、PIN、ハードウェアキーへのタップ)を経てそれを開きます。シードの平文のコピーを CardanoWall に渡すことなく、ワンタップのアクセスが得られます。
ここでいうパスキーとは何か
パスキーとは WebAuthn のクレデンシャルです。現代のウェブ全体で「Face ID でログイン」を支えているのと同じ、公開鍵によるサインインの技術です。
FIDO と WebAuthn のモデルでは、クレデンシャルは特定のリライングパーティ(ここでは CardanoWall のドメイン)向けに作成され、その秘密側は認証器が保持します。認証器は、お使いのスマートフォンやノートパソコンに内蔵されている場合もあれば、パスキープロバイダーを通じて同期されている場合も、別個のハードウェアセキュリティキーに保持されている場合もあります。
アイデンティティ保管庫の場合、単なるサインインでは不十分です。CardanoWall は、保管庫を復号できるように、認証器が高エントロピーの秘密素材をブラウザへ渡してくれることを必要とします。それをまさに提供するのが、WebAuthn PRF 拡張です。
WebAuthn PRF とは、平たく言うと何か
PRF は擬似乱数関数(pseudorandom function)の略です。PRF に対応した認証器は、特定のクレデンシャル、リライングパーティ、そしてアプリケーションが渡すソルトに固有な秘密出力を生成できます。しかも、同じ入力に対しては毎回同じ出力を生成します。
CardanoWall は、そのソルトをアカウント識別子から決定的に導出します。そのため PRF 出力はアカウントにスコープされます。同じ物理キーを別のアカウントに差し込んでも、異なる素材が生成され、誤った保管庫を開くことはできません。ブラウザはその PRF 出力を、保管庫をアンラップする鍵として使います。
ユーザー目線での要約は短く済みます。
- 認証器は自身の秘密を保持し、決して外部に出しません
- ブラウザが開錠素材を目にするのは、セレモニーの最中だけです
- サーバーが保存するのは、常に暗号化された保管庫の暗号文だけです
- サーバーは、単独では PRF 出力を再現できません
これが、パスキーを「中の秘密のコピー」ではなく、保管庫の開錠要素へと変えるものです。
具体的に何が暗号化されるのか
アカウントのアイデンティティバンドルです。
1 つのアカウントは、複数のアイデンティティを保持できます。バンドルは各アイデンティティの Identity Seed とその非公開ラベルを記録し、バンドル全体が保存される前に暗号化されます。保管庫はアカウントごとに 1 つの暗号文行であり、不透明なサービスの状態であって、管理(カストディ)ではありません。
CardanoWall はこれを、WebAuthn-PRF(fido2prf)の受信者スタンザ「のみ」に宛てた age-v1 の暗号文として暗号化します。スタンザは登録済みパスキー 1 つにつき 1 つです。登録済みのパスキーのいずれか 1 つが、セレモニーの成功後に保管庫を開けます。実装は他の種類の受信者を含む保管庫の構築を拒否するため、暗号化は構造上、対称鍵のみに保たれます。
登録済みのパスキーが 1 つもなければ、サーバー側に開く経路はまったく存在しません。それで問題ありません。Identity Seed そのものが本当の持ち運び可能なアイデンティティだからです。Identity Seed からはいつでも復元できます。
なぜパスキーでラップされた保管庫は、パスワードで保護された保管庫より安全なのか
オフラインで総当たりできるパスワード由来のスタンザが存在しないからです。
攻撃者が、ユーザーの選んだパスワードで保護されたファイルを盗んだ場合、手元のハードウェアが許す速さで、ローカルで推測を繰り返せます。これは古典的なオフラインの総当たり問題であり、弱いパスワードや使い回しのパスワードはこれに敗れます。
CardanoWall のホスト型保管庫は、パスワードを中心に設計されていません。認証器が保持する PRF 素材、すなわちデバイス内部に存在するランダムな 256 ビット鍵に対してラップされています。したがってデータベースが漏洩しても、攻撃者の手に渡るのは暗号文だけです。攻撃すべきパスワードハッシュもなければ、読み取れるシードもありません。これは、パスキーが一般に日々のアクセスにとって魅力的である理由でもあります。フィッシングやパスワードの使い回しを回避しつつ、アイデンティティの秘密からサーバーを完全に遠ざけるのです。
保管庫に対する量子攻撃はどうなのか
ここは大げさにではなく、正確に語るのが得策です。
ホスト型保管庫は、意図的に非対称な公開鍵の受信者スタンザを一切含んでいません。これが重要なのは、人々が懸念する大規模な量子攻撃、すなわちショアのアルゴリズムが、公開鍵システムを標的とするからです。保管庫の機密性は対称鍵のみに依拠します。パスキーの 256 ビット PRF 出力がそれをラップしており、ショア型の攻撃が狙えるような公開鍵は設計上存在しません。
対称鍵に対しては、関連する汎用的な量子の高速化はグローバー型の探索であり、通常は実効的なセキュリティ余裕をおよそ半減させると説明されます。256 ビット鍵の場合、残るのは約 128 ビットの実効余裕であり、依然として途方もない大きさです。
したがって、正直な主張は「量子攻撃は不可能だ」ではありません。より限定的で、より堅牢なものです。ホスト型保管庫には、パスワード由来の総当たり対象面もなく、ショアが狙える公開鍵の標的もなく、汎用的な量子探索を前提としても非常に高いままの対称鍵の余裕があります。派手さはありませんが、セキュリティに通じた読者が実際に信頼できる主張です。
なぜ単に Cardano ウォレットで開錠しないのか
チャレンジへの署名は、安定した保管庫の鍵にはならないからです。
ウォレットの署名は一部の公開クレームには確かに有用ですが、デバイス、ブラウザ、ウォレットのバージョン、そして変化するハードウェア対応をまたいで「同じ」保管庫を復号しなければならない秘密を、再導出するためのプリミティブとしては不向きです。保管庫をウォレットに結びつけると、ウォレットの挙動が知らぬ間にアカウント復旧そのものに変わってしまいます。
CardanoWall は、これらの役割を分離して保ちます。
- Identity Seed は、ご自分の Label 309 の署名鍵と受信鍵を導出します
- パスキーは、ホスト型保管庫を開錠します
- Cardano ウォレットの署名は、意図的にその経路を選んだときの、明示的でウォレットに結びついたレコードのために確保されます
同期パスキーとハードウェアキー、どちらを使うべきか
どちらも機能します。適切な選択は、そのアイデンティティの価値によって決まります。
同期パスキーは、便利な既定の選択肢です。プロバイダー、すなわち設定に応じてオペレーティングシステムのキーチェーンやパスワードマネージャーを通じて、新しいデバイスでも再び現れます。これにより通常の復旧がはるかに容易になります。同期パスキーは、それを保持するプロバイダーが持つセキュリティと復旧のモデルを引き継ぎます。
ハードウェアキーは、より制御されています。アクセスに物理デバイスを要するため、鍵のかかる引き出しにしまっておけるものに要素を結びつけたい、価値の高いアイデンティティや、チームで共有するアイデンティティに適しています。
妥当な指針は、パスキーの形態を、そのアイデンティティの価値に合わせることです。ほとんどの人にとって、同期されたプラットフォームパスキーは、日々の手段として申し分ありません。機微なチームのアイデンティティには、ハードウェアキーと慎重に保管されたシードの組み合わせが、しばしばより良い折り合いになります。両者の違いについては、同期パスキーとハードウェアキーの比較の記事で詳しく説明しています。
ブラウザやキーが PRF に対応していない場合はどうなるのか
その場合、CardanoWall は設計どおり、シードの経路にフォールバックします。
WebAuthn PRF への対応は、ブラウザ、オペレーティングシステム、認証器の組み合わせ次第です。CardanoWall は、保管庫の要素を登録する前に、その組み合わせが PRF を実行できるかを機能検出します。そのため、後で開錠できない保管庫へと誘導されることは決してありません。
シードのみのアクセスは、劣化したモードではありません。それは主権を持つ経路です。Identity Seed がアイデンティティであり、それ以外はすべて、プラットフォームが安全に支えられる場合に上へ重ねられる利便性です。
それでも何がうまくいかなくなり得るのか
パスキーは大きな種類のリスクを封じますが、いくつかの現実は残ります。それらを率直に名指しするほうが良いでしょう。
- 盗まれたシードは、アイデンティティの完全な侵害です。 ご自分の Identity Seed を保持する者が、そのアイデンティティ「そのもの」になります。とるべき対応は、新しいアイデンティティを作成して古いものを無効化することです。パスワードリセットではありません。パスワードが存在しないからです。
- 開錠されたセッションは、生きた標的です。 保管庫が開錠されている間、署名と復号ができるように、シードと派生した秘密鍵はブラウザのメモリ上に存在します。CardanoWall はその素材を React の状態の外に保持し、ロック時とサインアウト時にベストエフォートでゼロ消去します。それでも、開錠されたセッション内の悪意あるスクリプトや拡張機能は、メモリ上の秘密を読み取れてしまいます。厳格なコンテンツセキュリティポリシーと最小限のスクリプトはそのリスクを減らしますが、なくすことはできません。完全には制御できないマシンでは、開いたセッションを残して立ち去るのではなく、席を外すときに保管庫をロックしてください。
- パスキーの削除は、遡及しません。 要素を削除すると、クライアントは残りの要素に対して保管庫を暗号化し直し、古い暗号文行はハード削除されます。そのため、削除された鍵は「現在の」保管庫を開けなくなります。しかし、削除する前に攻撃者がすでにそのパスキーを使っていた場合、削除によってその行為を取り消すことはできません。パスキーを削除すると何が起こるかをご覧ください。
- すべてを失えば、扉は消えます。 シードのすべてのコピーと、すべての開錠要素を失えば、そのアイデンティティの今後の利用は失われます。すでに公開した証明は永久に検証され続けます。それらは保管庫ではなく Cardano 上に存在するからです。しかし、もはやそのアイデンティティとして行動することはできません。
パスキーはリスクを減らします。シードとデバイスを守るご自分の責任までは取り除きません。
要点だけ
パスキーは、CardanoWall を管理者にすることなく、CardanoWall を使いやすくします。
サーバーが保存するのは、暗号化された保管庫の暗号文であり、サーバー自身が復号できるものは何もありません。パスキーは、それを開錠する素材をブラウザに導出させます。ご自分の Identity Seed は、アイデンティティ全体の持ち運び可能なルートであり続けます。Identity Seed を保存し、そのうえで日々のアクセスはパスキーに頼ってください。上には利便性、下には主権です。パスキーを登録してもなお Identity Seed が重要である理由を理解したい場合は、なぜ Identity Seed は今も重要なのかをお読みください。
さらに読む
- W3C Web Authentication (WebAuthn) Level 3: w3.org/TR/webauthn-3
- FIDO Alliance(パスキー概説): fidoalliance.org/passkeys
- MDN(WebAuthn 拡張、PRF を含む): developer.mozilla.org
- Yubico(WebAuthn PRF 拡張の開発者ガイド): developers.yubico.com
- Label 309 標準: label309.org。オープンソースのコードは github.com/cardanowall