すべての記事

約12分で読めます

CardanoWall はアイデンティティをどう保管するのか

CardanoWall はアイデンティティを暗号化された保管庫の暗号文として保管し、平文のシードを保持することはありません。サーバーが実際に保持するもの、ご自分のパスキーだけが開けるもの、そしてシードこそが本当のバックアップである理由を正確に解説します。

CardanoWall が Identity Seed(アイデンティティの種)を平文で保管することは決してありません。サーバーが保持するのは、ご自分のパスキーだけが開ける暗号化された保管庫と、アカウントを運用するために必要な公開・非秘密のデータです。シードそのもの、つまりそれ自体がアイデンティティであるものは、お客様の側に留まります。

考え方を一行でまとめます。Identity Seed が持ち運び可能なアイデンティティであり、本当のバックアップです。ホストされた保管庫は、パスキーで解錠する利便性のためのレイヤーであって、カストディ(保管預かり)ではありません。

この記事では、CardanoWall が何を保管し、何を意図的に読めないようにしているのか、そしてそれが問題発生時に何を意味するのかを順を追って解説します。

Identity Seed とは何で、なぜ重要なのか

CardanoWall のアイデンティティは、1 つの 32 バイトの Identity Seed から構築されます。このシードから決定的な鍵導出によって、実際に使う鍵が生成されます。レコードに署名する Ed25519 鍵と、封印されたファイルを受け取る X25519 ベースの鍵です。同じ 32 バイトは、どこでも常に同じアイデンティティを再構築します。ウェブサイト、コマンドラインツール、SDK、あるいはオープンな Label 309 の導出ルールに従う他のソフトウェアでも同じです。

これが重要な性質です。シードは持ち運び可能で、すべてを決定します。鍵はそこから派生したものにすぎません。ですから、保管において意味のある唯一の問いは、シードがどこにあるのか、という点です。

答えは、お客様の手元にある、です。CardanoWall は利便性のために暗号化されたコピーを保持できますが、保管するのは暗号文であって、読み取り可能なシードではありません。

CardanoWall が実際に保管しているものは何か

CardanoWall は、アカウントを運用するために必要なサービスデータを保管します。これには次のものが含まれます。

  • アカウントのログイン状態
  • 課金と残高のレコード
  • アイデンティティの公開鍵
  • 公開された証明レコードと Cardano トランザクション参照
  • 暗号化されたアイデンティティ保管庫の暗号文
  • API キー(ハッシュとしてのみ保持)
  • 各アイデンティティのライフサイクル状態などの製品設定
  • アドレス帳のエントリーと受信トレイの設定

このリストに載っていないものに注目してください。Identity Seed、派生した秘密の署名鍵、派生した秘密の受信鍵、そして復号された封印ファイルは、いずれもクライアント側の秘密情報です。これらが読み取り可能なサーバーのカラムに保管されることは決してありません。暗号化された保管庫が、サーバーがシードに関わるものを保持する唯一の場所であり、しかもそれを開けない暗号文として保持しています。

サービスから見えるものと、お客様のデバイスに留まるものの全体像については、CardanoWall に見えるものをご覧ください。

アイデンティティ保管庫とは何か

アイデンティティ保管庫は、アカウントのアイデンティティの秘密情報を保持する、単一の暗号化されたバンドルです。

保管庫の平文の内部では、各エントリーに 1 つのアイデンティティの 32 バイトのシードと、そのアイデンティティに付けた非公開の表示ラベルが含まれます。「Personal」「Press Team」など、入力した任意の名前です。(1 つのアカウントは複数のアイデンティティを保持でき、それぞれが固有のエントリーを持ちます。)ラベルも暗号化の内側に存在するため、サーバー側に露出することは決してありません。

これらが保管される前に、すべては暗号化されます。CardanoWall はその結果を、アカウントごとに 1 つの現行保管庫行として、age v1 形式で保持します。サーバーはその暗号文を保持してお客様に返すことはできますが、それを開くために必要な鍵素材は保持しません。

これこそが要点です。保管庫はカストディではありません。暗号化された利便性のためのキャッシュです。正規の持ち運び可能な成果物は、依然としてシードです。

保管庫を解錠するものは何か

登録済みのパスキーがそれを解錠します。そして、それ以外の何も解錠できません。

保管庫は、PRF(疑似乱数関数)拡張をサポートする WebAuthn パスキー要素に対してのみ暗号化され、パスキー 1 つにつき 1 つの受信者スタンザが対応します。ホストされた保管庫には、パスワード由来のスタンザも公開鍵スタンザも意図的にありません。解錠の際には、お使いの認証器がユーザー検証を実行し、PRF 由来の鍵素材をブラウザーへ解放します。その素材がローカルで保管庫を開きます。

CardanoWall のサーバーが、平文のシード、復号された保管庫、あるいはシードから派生したいかなる秘密鍵も受け取ることはありません。サーバー側から分かるのは、あるアカウントが認証済みであることと、暗号文のブロブを返せることだけです。それを開くのは、お客様のパスキーセレモニーによって駆動されるブラウザーです。

パスキーがこの錠をどう提供するのか、また各種パスキーの復旧上のトレードオフについては、パスキーがアイデンティティ保管庫をどう守るのかをご覧ください。

なぜシードをサーバーに保管しないのか

それでは CardanoWall がお客様のアイデンティティのカストディアン(保管預かり者)になってしまうからです。そして、カストディこそ、この設計が回避しようとしている障害モードそのものです。

あるサービスが平文のシードや、自身で復号できるシードを保管していたとしたら、サーバーの侵害がそのままユーザーの鍵の侵害になりかねません。データベースやサーバーの鍵を盗んだ攻撃者は、ユーザーになりすまして署名したり、封印されたレコードを復号したりできてしまう可能性があります。これは、壊滅的な被害につながりかねない単一障害点です。

CardanoWall は別の約束を中心に設計されています。データベースの漏洩が Identity Seed を明らかにすべきではない、という約束です。なぜなら、サーバーはそれらを開く素材を一切保持しないからです。この設計は、仮に侵害が起きても、それを深刻ではあっても、お客様の鍵にとって壊滅的ではないものにすることを意図しています。

「パスキーにのみ暗号化する」という選択には、特筆すべき具体的な帰結が 2 つあります。パスワード由来のスタンザがないため、盗まれた保管庫には総当たりで破るべきものが何もありません。人間が選んだパスフレーズを延々と試す対象が存在しないのです。そして公開鍵スタンザがないため、将来の量子(Shor 型)攻撃が狙える非対称な標的も存在しません。保管庫を守る鍵は、認証器の内部に保持される 256 ビットの対称値であり、そこで関係する量子の脅威は Grover 型の探索です。これによって、実効的なセキュリティ余裕はおよそ 128 ビット残ります。

これですべてのリスクが消えるわけではありません。最も重要な秘密が、コピーされるのを待ちながら読み取り可能なサーバーのカラムに置かれていない、ということを意味します。

保管庫はバックアップなのか

最後の砦となるバックアップではありません。本当の持ち運び可能なバックアップは Identity Seed です。

シードさえあれば、CardanoWall、コマンドラインツール、SDK、デスクトップアプリ、あるいは同じ導出ルールに従う将来の Label 309 ソフトウェアで、同じアイデンティティを再構築できます。シードは、どこへでも持ち運べる唯一のものです。

ホストされた保管庫は、毎日シードを打ち直さずに済むようにする助けになります。また、パスキープロバイダーがデバイス間でパスキーを同期している場合には、別のサインイン済みデバイスへの移行も助けてくれます。しかし保管庫はサービスレイヤーに属します。削除されることも、利用できなくなることも、最後のパスキーを外した時点で取り除かれることもあります。保存すべきものはシードです。この点については、Identity Seed が依然として重要な理由でさらに掘り下げています。

解錠時にブラウザーで何が起きるのか

アイデンティティを解錠すると、ブラウザーは秘密鍵素材への一時的なアクセスを必要とします。これは避けられません。レコードに署名するにはクライアントが署名鍵を保持していなければならず、封印されたファイルを復号するには受信鍵を保持していなければなりません。これらの鍵は、解錠後にブラウザー内でシードから導出されます。

この設計は、秘密情報を通常の永続的なブラウザーストレージの外に保ちます。ブラウザーのローカルキャッシュ(IndexedDB)は、暗号化された保管庫の暗号文、つまりサーバーが持っているのと同じバイト列を保持することがあります。これにより、ページの再読み込みにはネットワークの往復ではなく、パスキーのタップが 1 回だけで済みます。平文のシードがキャッシュされることは決してありません。アクティブな秘密鍵はセッションメモリ内に、アプリケーションの UI 状態の外側で保持され、ロックやサインアウトの際にはベストエフォートでゼロ化されます。

これはウェブ暗号のモデルであって、ハードウェア分離ではありません。そしてその限界について正直です。悪意あるブラウザー拡張機能、侵害されたデバイス、あるいは解錠されたセッション中に動作する悪意ある能動的なスクリプトは、解錠中にメモリ内にあるものを読み取ることができます。厳格なコンテンツセキュリティポリシー、最小限のスクリプト、そして明示的な操作時のみの解錠は、その攻撃面を減らしますが、なくすことはできません。CardanoWall はサーバー側のカストディリスクを取り除きますが、信頼できないデバイスを安全にすることはできません。その仕組みはブラウザーストレージとセッション鍵で、より広い原則はなぜ鍵がデバイスから出ないのかで扱っています。

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

保管庫は、その要素を除いて再構築されます。

パスキーを削除すると、現行の保管庫は残りの要素に対して再暗号化され、新しい単一の行として書き込まれ、古い暗号文をその場で置き換えます。削除されたパスキーは、もはや現存する保管庫を開けません。サービスはこれをストレージの境界でも強制します。アカウントがすでに削除した資格情報に対してラップされた状態で保管庫が書き込まれることは、決してありません。

これは現行のホストされた保管庫に対する、本物の失効です。これはサービスレイヤーの制御であって、タイムトラベルではありません。あるパスキーがまだ有効だった間に悪用された場合、たとえばアクティブなセッション中に保管庫を開いて中のシードを読まれた場合には、攻撃者はすでにシードを保持している可能性があり、後から保管庫を再暗号化してもそれを取り戻すことはできません。その場合の正しい対応はリセットではなく、新たに始めることです。新しいアイデンティティを作成し、古いものを無効化し、人々が確認しに来るであろう場所に新しい公開鍵を公開します。

パスキーを削除するとどうなるのかで、正確な手順を順に解説しています。

CardanoWall がなくなったらどうなるのか

公開済みの証明は、そのまま検証できます。

Label 309 の証明は、単独で検証可能になるよう設計されています。証明を検証するには、公開された Cardano のデータ、レコードがそれを指している場合は公開されたコンテンツアドレス指定ストレージ、そして検証者自身が持つ元のコンテンツまたは復号素材のコピーが必要です。有効な証明は、CardanoWall がオンラインであり続けることを必要としません。トランザクション参照と公開された Cardano エクスプローラーがあれば、誰でもそれを検証できます。

シードを保存していれば、アイデンティティも残ります。同じ 32 バイトが、準拠したあらゆるツールで同じアイデンティティを再構築します。

シードがない場合に失うのは、そのアイデンティティの将来の利用です。すなわち、新しい署名を生成することと、それ宛てに封印されたレコードを復号することです。すでに公開した証明は永久に検証可能なままですが、もはやそのアイデンティティとして振る舞うことはできません。この非対称性、つまり公開済みの証明は恒久的であり、将来の利用はシードの保持にかかっている、という点こそ、カストディアンを持たないことの意図的な代償です。

実際に何をすべきか

まず Identity Seed を保存してください。

高価値の秘密情報に対して信頼している場所に保管してください。パスワードマネージャー、オフラインの安全な場所、あるいは失っては困るものに対してお使いの方式なら何でも構いません。その上で、日々の利便性のためにパスキーを追加してください。

通常の利用では、この組み合わせが強力なバランスになります。シードは持ち運び可能なまま保たれ、パスキーは日々のアクセスをスムーズに保ちます。リスクの高いアイデンティティには、運用面の制御を追加してください。ハードウェアセキュリティキー、専用デバイス、そして機微な作業のために確保した別個のアイデンティティです。

もう 1 点、混同しないでください。紛失したシード(解錠要素が 1 つも残っていない状態)は、そのアイデンティティの将来の利用が失われることを意味しますが、その証明は依然として検証できます。盗まれたシードは完全なアイデンティティの侵害であり、その対応は新しいアイデンティティに加えて古いものの無効化です。決してパスワードリセットではありません。リセットすべきパスワードがそもそも存在しないからです。

要約

CardanoWall が保管するのは、暗号化された保管庫の暗号文であって、平文の Identity Seed ではありません。

シードがアイデンティティです。パスキーが暗号化された保管庫を解錠します。ブラウザーは解錠後にのみ秘密鍵を使い、ロック時にそれらを消去します。サーバーは、公開や同期を助け、アクセスの復旧を便利にすることはできますが、設計上、お客様のアイデンティティを読むことも、作り直すこともできません。

シードを保存してください。パスキーを使ってください。その違いを知ってください。

さらに読む

securityidentitypasskeys