すべての記事

約9分で読めます

CardanoWall でパスキーを削除すると何が起きるのか

パスキーを削除すると、現在の CardanoWall のアイデンティティ保管庫が残りの要素に対して再暗号化され、古い暗号文はハードデリートされます。これは今後に向けた本物の失効ですが、すでに行われたアクセスを取り消すことはできません。

パスキーを削除すると、CardanoWall は現在のアイデンティティ保管庫を手元に残っている要素に対して再暗号化し、その後で古い暗号文をハードデリートします。削除したパスキーでは、その後に存在する保管庫を二度と開けません。これは今後のアンロックに対する本物の失効です。

ただし、これは遡及的ではありません。そのパスキーが有効だった間にすでに保管庫を開くために使われていた場合、削除がさかのぼってそれを取り消すことはできません。そうしたケースでは、そのアイデンティティを「要素が 1 つ足りないだけ」ではなく、侵害されたものとして扱います。

本記事では、何が変わり、何がそのまま残るのか、そして削除だけで十分なのはどんなときで、新しいアイデンティティが必要になるのはどんなときかを、正確に説明します。

パスキーは実際に何を守っているのか

パスキーが守っているのは、ホストされたアイデンティティ保管庫へのアクセスです。それ以上でも、それ以下でもありません。

保管庫は、アカウントが所有する Identity Seed と、それぞれに付けた非公開のラベルを収めた暗号化バンドルです。登録した各パスキーは、そのバンドルを開くためのアンロック要素の 1 つです。サーバーが保持するのは、読み取ることのできない暗号文だけです。それを開けるのは、ご自分のパスキーだけです。(保管庫がどのように構築されているかの全体像は、CardanoWall はアイデンティティをどう保管するかパスキーはアイデンティティ保管庫をどう守るか をご覧ください。)

ここで重要になる区別があります。アイデンティティはシードであって、パスキーではありません。 パスキーは、シードの暗号化されたコピーを開くための便利な手段にすぎません。パスキーを削除すると、そのコピーを開ける主体が変わるだけです。アイデンティティそのものが変わるわけではありません。

削除のあいだに何が起きるのか

保管庫は、残っている要素に対して再暗号化されます。その手順は次のとおりです。

  1. 有効な要素で保管庫をアンロックします。
  2. CardanoWall が、選択したパスキーを受信者セットから外します。
  3. ブラウザが、残りの要素に向けて保管庫の暗号文を再構築します。
  4. 現在の保管庫の行が、新しい暗号文と、より大きいバージョン番号で置き換えられます。
  5. 古い暗号文がハードデリートされます。
  6. 削除された資格情報のレコードが削除されます。

この順序はサーバー側で強制されます。保管庫の受信者セットにまだ現れている資格情報は、削除できません。失効は見せかけではなく、本物でなければなりません。削除したパスキーが開ける暗号文を、いっさい残すことは許されないのです。呼び出しが返った時点で、削除したパスキーは、まだ存在しているものを何ひとつ開けなくなります。

古い暗号文を削除することが、なぜそれほど重要なのか

古い暗号文は、古い要素でいまだに開けてしまうからです。

仮に保管庫のすべての過去のコピーが永久に保持されていたら、パスキーの削除はただの芝居になってしまうでしょう。削除した要素でも、依然として古いバージョンの保管庫を復号できてしまい、その古いバージョンにはまったく同じシードが入っているからです。すぐそばのストレージにあるコピーに対して、いまだ有効な鍵を「削除した」つもりになってしまうわけです。

だからこそ、ホストされた保管庫は、追記専用の履歴ではなく、置き換えられる単一の現在行になっています。要素の削除に実効性を与えるのは、ハードデリートです。実際のインフラでは通常のバックアップローテーションの猶予期間が存在し得ますが、製品としては、保管庫の過去の暗号文を機能として保持することは決してないように設計されています。

それが最後のパスキーだったら、どうなるのか

その場合、保管庫そのものが削除されます。

要素が 1 つも残らなければ、CardanoWall は、登録されたどれもが開けない暗号文を保持しません。アカウントはシード入力の経路にフォールバックします。つまり、Identity Seed を貼り付けてアクセスを取り戻します。

シードを保存してあれば、それで問題ありません。保存していなければ危険です。シードを保存しないまま最後の要素を削除すると、そのアイデンティティの今後の利用から締め出されてしまう恐れがあります。何かが壊れたからではなく、戻る手段をすべて削除してしまったからです。本当のバックアップはシードです。保管庫は、その上に乗っている利便性のためのレイヤーにすぎません。(シードがいまなお重要な理由 で、この点を詳しく扱っています。)

パスキーを削除すると、公開済みの証明に影響するのか

いいえ。公開済みの Label 309 レコードはチェーン上に残り、検証可能なままです。

証明の有効性は、現在のパスキーにも、現在のアカウントにも、現在の保管庫の状態にも依存しません。トランザクション参照を持つ人なら誰でも、オンチェーンのメタデータと、必要であればコンテンツのバイト列、そして公開された Cardano エクスプローラーだけを使って検証できます。CardanoWall へのログインは不要です。パスキーを削除する前に検証できた証明は、削除した後もまったく同じように検証できます。

パスキーの削除が左右するのは、アイデンティティ保管庫への今後のアクセスです。すでにチェーン上にあるものを書き換えることはありません。

パスキーを失くしたばかりです。どうすればよいか

すみやかに削除してください。

スマートフォン、ノートパソコン、ハードウェアセキュリティキーを失くした場合、まずパスキーを削除するのが正しい最初の一手です。その要素を外して保管庫が再暗号化されれば、失くしたデバイスでは現在の保管庫をもう開けません。

失くした要素が他の誰にも使われていないと確信できるなら(机の裏に落ちた鍵、転売前に初期化されたスマートフォンなど)、削除だけで十分かもしれません。アイデンティティのローテーションは不要です。

誰かがそれを使った可能性を排除できないなら、このまま読み進めてください。

パスキーが盗まれて使われたかもしれない場合は

リスクを真剣に受け止めつつ、盗まれたパスキー単体に何ができて何ができないのかを、正確に見極めてください。

盗まれたパスキー単体は、盗まれたシードと同じではありません。攻撃者が保管庫を開くには、保管庫の暗号文(これは認証済みのセッション内でしか流れません)と、認証器が要求するユーザー検証(生体認証またはデバイス PIN)も必要になります。パスキー単体が握っているのは鍵であって、それが開く暗号文ではありません。

しかし、削除するに攻撃者がそのパスキーを使った可能性があるなら(乗っ取られたセッション内で、稼働中の保管庫に対して)、攻撃者は保管庫を開いて Identity Seed を読み取ったかもしれません。シードがいったん露出すると、そのアイデンティティは完全に侵害されます。シードを握る者は、あらゆる秘密鍵を導出でき、そのアイデンティティ宛ての封印付きレコードを復号でき、そのアイデンティティで新しいレコードに署名できます。

そのシナリオでは、パスキーの削除だけでは不十分です。失効は今後に向けて保管庫を守るものであって、すでに外へ出てしまったシードの露出を取り消すことはできません。

シードが露出したかもしれないとき、どうすればよいか

新しいアイデンティティへ移行してください。侵害への対応は、古いアイデンティティをその場でリセットすることではなく、新しいアイデンティティを用意することです。シードとアイデンティティは恒久的に結びついており、「シードを変更する」という操作は存在しないからです。

シードの露出を排除できない場合は、次のようにします。

  • 新しいアイデンティティを作成し、その新しい Identity Seed を保存します
  • そのアイデンティティに新しいパスキー要素を登録します
  • CardanoWall で、侵害されたアイデンティティを無効化します(これにより新たな署名と公開はブロックされますが、それ宛てに封印されたものは引き続き復号できます)
  • 古い受信アドレスの共有をやめます
  • 古い公開鍵を掲載していたあらゆる場所(公開プロフィール、ご自分のサイト、DNS レコード、.well-known、連絡先)に、新しい公開鍵を再掲載します
  • 下流の読み手の助けになる場合は、上書き(supersedes)するレコードを公開します

1 つのシードは、1 つのアイデンティティです。(有効・無効化・削除 で、それぞれのライフサイクル状態を解説しています。)正直に言えば、こういう限界があります。侵害された鍵に向けてすでに封印されたものは、その鍵を握る者にとって復号可能なままです。Cardano も Arweave も、すでに公開されたコンテンツに対する失効の仕組みを持ちません。無効化と上書きのポインターは、依拠する側への合図であって、過去のデータを回収するものではありません。

バージョンピンとは何で、なぜ存在するのか

サーバーが古い保管庫を再生(リプレイ)してくるのを防ぐ仕組みです。

保管庫の行には、増加する一方のバージョン番号が付いています。ブラウザは、自分が見た中でいちばん大きいバージョンを覚えています。仮に侵害されたサーバーが、より古い保管庫の暗号文(すでに削除されたパスキーでも開けてしまうもの)を返そうとしても、クライアントは返ってきたバージョンが想定より低いことに気づき、それを拒否できます。

これは多層防御であって、シードの管理に取って代わるものではありません。ふさぐのは、削除済みの要素に対する古い保管庫の再生という特定のすき間 1 つだけです。シードとすべてのアンロック要素を同時に失った場合に、これが助けになることは何もありません。

ひとことでいえば

パスキーを削除すると、現在のアイデンティティ保管庫が残りの要素に対して再暗号化され、古い暗号文はハードデリートされます。削除したパスキーでは、削除後に存在する保管庫を二度と開けません。

唯一の注意点はこうです。その要素が有効なあいだにすでに使われていた可能性があるなら、シードが露出したかもしれないと考え、新しいアイデンティティへ移行してください。失効は未来を守ります。過去を変えることはできません。

さらに読む

securitypasskeysidentity