WebAuthn是一种相对较新的身份验证 API,它使用公钥加密而不是密码之类的东西。
我想知道是否可以将加密部分用于不同的目的,特别是在浏览器中创建文档的数字签名。
这个想法是找到一种方法让用户以服务器无法伪造或操纵的方式在浏览器中签署文档。因此,Web 应用程序本身绝不能知道用于签名的私钥,据我所知,WebAuthn 就是这种情况。
因此,如果不是 WebAuthn 期望的随机挑战,我会发送我希望用户签名的文档的内容,如果我正确理解 MDN 上的解释,我应该取回我的文档的加密签名哈希。
最后,我应该有一个数字签名,可用于证明该文档是由来自特定硬件令牌的特定私钥签名的。并且浏览器内的 Web 应用程序和服务器组件都没有看到私钥,也不能伪造这个签名(当然,应用程序可以通过在签名之前切换内容来破坏这一点,但不能稍后)。
我找不到为此目的使用 WebAuthn 的人的任何信息,而且我能找到的任何与浏览器中的数字签名相关的内容都与 Java 小程序之类的东西有关,而如今这些东西根本不再是一种选择。
我的想法总体上合理吗?还是我误解了 WebAuthn 的工作原理,根本不可能以这种方式使用它?这种方法是否有我遗漏的弱点或缺陷?