如何使用WebCrypto API实现不可否认性?
我在WebCrypto中看到了很多关于如何加密/签名文本的例子,但问题总是在页面运行期间生成密钥,这打破了不可否认性。我相信应该有一个向用户询问他的私钥的方法。
我认为Mozilla firefox中有一个方法要求用户输入密钥但现在已删除: https://developer.mozilla.org/en-US/docs/Security/Crypto_Sign_Text_Removal
谢谢,
答案 0 :(得分:3)
Non-Repudiation通常会利用数字签名。这是一个名为PKIjs的库,可以帮助您导入密钥并生成签名:
PKIjs是一个实现格式的纯JavaScript库 用于PKI应用程序(签名,加密,证书 请求,OCSP和TSP请求/响应)。它建立在WebCrypto上 (Web Cryptography API)并且不需要插件。
然而,GlobalSign/PKI.js Github回购说明:
此时此库应该被认为适合研究 和实验,之前需要进一步的代码和安全审查 在生产应用程序中使用。
答案 1 :(得分:2)
PKIjs的作者在这里。有许多基于PKIjs的生产应用程序,我们包含了这个安全审查声明,以鼓励人们自己决定是否适合。
对于原始问题,使用运行时生成的密钥不会导致不可否认性。不可否认性是一种法律概念而非技术概念,主要是不可否认性的问题是:1)认证实体的身份,2)捕获意图。
要做到这两点,需要一个旨在提供这些属性的解决方案,没有任何一个API可以提供这个。
对于技术问题,没有纯粹的Javascript解决方案允许您在操作系统/浏览器中使用密钥,这样就会逃脱浏览器沙箱。
有多个浏览器插件具有不同程度的可用性和质量,一旦安装,您就可以与智能卡进行交互。从很大程度上讲,由于插件的互操作性和一般可用性,它们的使用不足以被广泛使用。