WebAuthn 資格情報 JSON をデコードし、パスキーを作成せずにクライアントデータ、認証器フラグ、カウンター、AAGUID、COSE キー項目を検査します。
ブラウザ内でローカルに実行本番環境のリライングパーティは、チャレンジ、オリジン、RP ID ハッシュ、ユーザー存在確認または検証ポリシー、署名、アルゴリズム、アテステーションポリシー、署名カウンターの動作を検証する必要があります。
このページは、シリアル化された PublicKeyCredential(リライングパーティが navigator.credentials.create() または navigator.credentials.get() から受け取る JSON)を読み取り、その両方を確認できるフィールドに分解します。登録やアサーションが失敗したとき、実際に何が送られてきたかを確かめる最短の方法です。clientDataJSON は Base64URL からデコードして解析し、認証器データは RP ID ハッシュ、フラグバイト、署名カウンター、および登録の場合は AAGUID、資格情報 ID、COSE 公開鍵に分けて表示します。
処理はすべてブラウザー内で完結します。このページは navigator.credentials を呼び出さず、リライングパーティに接続せず、資格情報をどこにも送信しません。デコードは検証ではありません。署名、アテステーション文、チャレンジの照合はサーバー側の仕事です。
フラグバイトは資格情報ではなくセレモニーを表します。UP はユーザーが存在したこと、UV は PIN や生体認証で検証されたこと、BE は資格情報を別の認証器にコピーできること、BS は現在コピーされていることを示し、同期されるパスキーでは両方が立ちます。AT は登録時だけ存在するアテステーション対象データ(AAGUID、資格情報 ID、公開鍵)、ED は拡張データを示します。
署名カウンターは認証器がアサーションごとに増やす 32 ビットの符号なし整数です。保存した値と比較するのが古典的なクローン検出ですが、まったく動かないカウンターだけでは何も証明できません。多くのプラットフォーム認証器は常に 0 を返します。RP ID ハッシュは資格情報を作成したリライングパーティ ID の SHA-256 で、期待値と照合することで、あるサイトで取得された資格情報が別のサイトで再利用されていないことを確認できます。
clientDataJSON は、ブラウザーがチャレンジ・オリジン・セレモニーの種類(webauthn.create または webauthn.get)から組み立てた Base64URL の JSON です。このページはデコードして解析し、ブラウザーが別ページへの埋め込みとして扱った場合は crossOrigin を報告します。その後に続くのはコンパクトなバイナリ構造で、32 バイトの RP ID ハッシュ、1 バイトのフラグ、4 バイトのカウンター、そして AT フラグが立っている場合だけアテステーション対象データが並びます。
登録のレスポンスには attestationObject が含まれ、その CBOR マップが同じ認証器データを authData として保持します。このページは CBOR マップをたどって取り出します。隣にあるアテステーションの形式と文は表示も検証も行いません。ブラウザーがレスポンスの周囲に付ける transports や clientExtensionResults もレポートには含まれません。
デコードされた資格情報は証拠であって証明ではありません。リライングパーティは、そのセッションで発行したチャレンジと照合し、オリジンが自分自身であることを確認し、RP ID ハッシュを期待する RP ID と比較し、登録時に保存した公開鍵で認証器データと clientDataJSON の SHA-256 に対する署名を検証する必要があります。
さらに、ユーザー検証とアテステーションの方針を適用し、受け入れるアルゴリズムを制限し、署名カウンターとバックアップのフラグが自らの脅威モデルにとって何を意味するかを決める必要があります。このページが名前を付ける COSE の値は ES256、EdDSA、ES384、ES512、PS256、PS384、PS512、RS256、RS384、RS512 と、P-256、P-384、P-521、Ed25519、Ed448 の曲線で、それ以外は生の数値として表示します。これは表示上のラベルであり、方針の判断ではありません。