私はデジタル署名を読んでいます:
有効なデジタル署名は、メッセージが既知の送信者によって作成された(認証)、送信者がメッセージの送信を拒否できない(否認防止)、そしてメッセージが転送中に変更されなかったこと(整合性)。
2FAにハードウェアキー(Yubikey、Key-idなど)を使用して、 Webauthn でユーザーを認証し、後で特定の機密アクションを実行するためにユーザーの確認を要求しています。
質問:チャレンジとハードウェアキーによって返されたAuthenticatorAttestationObjectをサーバーに保存した場合、それは否認防止に役立ちますか?
言い換え:ユーザーは、Yubikeyボタンを押す必要のあるアクションが自分によって開始されたのではなく、作成されたと主張できます。サーバー側から?
否認防止は、一部の人が信じているよりも達成するのが はるかに難しい です。一般に、署名は非常に高い信頼度でキーに関連付けられますが、キーを特定の人とその意図に結び付けることははるかに困難です。ただし、WebAuthnでは、これを実現することはできません。
署名は特定のデータの上にあります。あなたの目標のために、あなたはそのデータが「私[ユーザー]はサーバーが[時間[時間]に[機密アクション]を実行することに同意する」という線に沿ったものであることを望みます。あなたが実際に得ているのは、「私は間違いなく[ウェブサイト]で[ユーザー]として知られているユーザーです」のようなものです。ご指摘のとおり、ユーザーは、サーバーが許可しようとしたものとは異なる時間に異なるアクションを実行したと主張する可能性があるため、それほど役に立ちません。
ただし、その問題を解決でき、特定の時間に特定のアクションを承認するステートメントの署名を取得できたとしても、署名は実際にはユーザーからのものではなく、キーを使用するソフトウェアからのものです。問題は、ソフトウェアがyourソフトウェアであるということです。彼らは、彼らに送られたJavaScriptが彼らの同意なしに署名を作成するために変更されたと主張することができました。
そしてもちろん、「私の鍵が盗まれた」または「それは私の鍵ではなく、サーバーによって作成された鍵である」と主張する可能性は常にあります。結局のところ、陪審員(またはあなたがこれを証明しようとしている人)が信頼できると信じるのは本当に誰なのか次第です。