问题标签 [webcrypto-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 使用 Web Cryptography API 验证 JavaScript 中的 Browserid 断言
Web Cryptography API中提议的对 Web 浏览器中 JavaScript 运行时环境的添加是否允许我们使用 JavaScript 安全地验证浏览器中的browserid 断言?
javascript - 使用 JavaScript 在浏览器的密钥库中访问签名/加密 - 示例代码?(WebCryptoAPI)
我有一个 Web 服务器,它只允许使用 X509 身份验证进行访问。奇迹般有效。现在我想将 X509 证书(存储在用户的浏览器密钥库中)的使用扩展到
- 在将数据发送到服务器之前对数据进行签名(使用 JavaScript 和 HTTPPost)
- 解密从服务器读取的数据(使用存储在那里的用户公钥对其进行加密)
我发现这个例子做的RSA 签名非常接近......只有它确实从 HTML 文本区域获取密钥。我想从密钥库中读取它。现在加密货币非常不稳定:
我正在寻找一些签名和加密的工作示例(我有一些在 Java 中,但不是基于浏览器的 JavaScript)。
非常感谢帮助
javascript - WebCryptoAPI - 它是否支持使用加密令牌进行签名?
我希望能够使用 100% JavaScript 和基于加密令牌的密钥在浏览器上签署数据。
从我目前所看到的情况来看,此功能的所有旧实现都已停止使用(例如new ActiveXObject("CAPICOM.Store");
,由于它引发错误,甚至似乎不再在 IE11 中工作!-我不知道我是否遗漏了什么......也许是因为我在控制台窗口中运行它......)。
我查看了 WebCryptoAPI 的规范(这应该是新的支持方式):
http://www.w3.org/TR/WebCryptoAPI/#SubtleCrypto-method-sign
......然后在这个(更清晰,更有条理和有帮助):
http://msdn.microsoft.com/en-us/library/ie/dn302332(v=vs.85).aspx
...我看到它允许您创建新密钥(generateKey
),但我不确定它是否支持使用令牌中的密钥。有一个importKey
,但从描述看来,我不需要使用操作系统可以看到的现有密钥进行签名。
这个网络标准是否旨在允许这种功能?我可以像现在一样使用它并实现我的目标吗?
我至少可以在具有设备管理器(选项->证书->安全设备)的 Firefox 中做得更好吗?
相关问题:
使用 JavaScript 在浏览器的密钥库中访问签名/加密 - 示例代码?(WebCryptoAPI)
更新:
我还找到了这个 PDF: http ://webpki.org/papers/PKI/x509-webcrypto-extension-scheme.pdf
据我所见,window.crypto.subtle.KeyStore
任何浏览器中都没有,所以我想这是人们对遥远未来的疯狂梦想......
UPDATE2: 这就是我无法在 IE11 中加载 ActiveX 的原因:https ://stackoverflow.com/a/5157766/2173353
所以,至少,还有一种旧方法仍在工作......
javascript - Web Cryptography API: Howto discover supported algorithms?
The Web Cryptography API supports the usage of the browsers native cryptograhic functionality through JavaScript, for example a reliable random number generator or the possibility to use different algorithms for encryption or signing.
The spec lists an overview of algorithms as a starting point for implementers, but has the following editorial note added:
Note: All algorithms listed should be considered as "features at risk", barring implementors adopting them. Their inclusion in the Editor's Draft reflects requests for their inclusion by members of the community, and are included as an exercise to ensure the robustness of the API defined in this specification.
As such, the list of algorithms, and the recommendations, may be significantly altered in future revisions.
As far as I understood the idea behind the specification is to provide an interface for cryptography, not write down specific algorithms (which makes totaly sense!).
How do I determine if a client supports a specific algorithm? It is good practice to hide implementation details, but since an algorithm has to have an so called recognized algorithm name I don't understand why you wouldn't want to expose the registered algorithms. Still there is no interface specified and the object where you register the algorithm is described as follows:
This specification makes use of an internal object, [[supportedAlgorithms]].
This internal object is not exposed to applications.
The only possibility to discover available algorithms at the current state would be to catch the NotSupportedError of the subtle interface.
From my point of view the discovery is simple program flow and errors should be handled as an exception, not to implement logic.
Any hints or suggestions? Links to proper w3c-mailinglist discussions are also appreciated.
javascript - 如何在浏览器上保护服务器的密钥?
在这个用例中,服务器向浏览器发送一个加密的 blob,浏览器上的 javascript 随后从服务器请求解密密钥并将 blob 解密为可用内容。
有没有办法保护浏览器上的这个密钥免受书签或浏览器插件的攻击,或者用户单步执行浏览器上的 javascript 调试器?或者至少让它对攻击者来说是一个稍微困难的问题。
编辑:问题的上下文是 EME 规范中指定的 HTML 视频 DRM。有一个 ClearKey api 是该标准的一部分,并且不需要 WideVine 或 FairPlay 等的闭源插件。但正如多个回复所指出的那样,ClearKey 无法受到保护。(不幸的是,这意味着使用专有的 DRM 插件)。
javascript - RSA-OAEP SHA-512 加密/解密从 Javascriptwebcrypt api 到 PHP openssl?
我一直在忙于尝试在浏览器客户端之间建立安全交换,使用 webcrypto api 和使用 openssl 的 PHP 服务器。我已经尽可能多地分解了。我写了一些 javascript 来生成一个密钥对,打印出私有和公共的值,加密一个简单的字符串并将其打印出来。
我已将这些值直接复制到一个简单的 php 脚本中。尝试使用 javascipt 中的值对其进行解码。
编码和解码在 javascript 中正常工作(如下所示),在 php 中解码不能(也在 javascript 下发布)。我似乎也找不到在 PHP 中设置 SHA-512 声明的位置。有没有人有过这种交流的经验,也许能给我指明正确的方向。选择 RSA-OAEP 是因为它受到 chrome、mozilla、IE11 和 Safari 以及 PHP 的支持。
亲切的问候,吉迪恩
google-chrome - Chrome中电子智能卡的数字签名
对于在浏览器上运行并且需要专业人员个人签名的电子处方系统,我们使用 Java 小程序对 XML 请求进行签名,然后使用智能卡将其发送到 WS。
但是从版本 42 开始,Chrome 默认禁用 NPAPI 支持,在 2015 年 9 月之后的未来版本中,它将被完全禁用,然后小程序将根本无法使用。
在 Chrome NPAPI 弃用页面指向WebCrypto和 TLS 作为替代方案。但似乎 WebCrypto已经超出了对智能卡的支持范围,而且似乎 TLS 只是关于加密协议,它没有提供使用电子卡的方法。
是否有人使用完全浏览器原生解决方案来签署文档并很好地控制流程。至少需要:
- 用户签名的 XML 请求没有确认和可视化。因为签名的是内部技术请求,对用户没有任何价值,应用程序运行在内部局域网的受控和可信系统中。
javascript - WebCrypto 的不可否认性
如何使用 WebCrypto API 实现不可否认性?
我在如何加密/签署文本方面看到了很多关于 WebCrypto 的示例,但问题总是密钥是在页面运行时生成的,这破坏了不可否认性。我相信应该有一种方法可以问用户关于他要使用的私钥。
我认为 Mozilla firefox 中有一种方法可以向用户询问他的密钥,但现在已将其删除: https ://developer.mozilla.org/en-US/docs/Security/Crypto_Sign_Text_Removal
谢谢,
java - 使用 Web Crypto API 在 Java 和 JavaScript 之间加密/解密
我正在尝试使用 Web Crypto API ( http://www.w3.org/TR/WebCryptoAPI/#SP800-38B ) 在 Java 和 JavaScript 之间进行加密/解密。我在这个论坛上找到了有用的信息,但现在我被困住了......
爪哇:
输出:
JavaScript:
对于 importKey 我使用以下参数:
对于解密,我使用参数:
我得到以下 ArrayBuffer 作为输出:
[213, 168, 98, 252, 218, 52, 221, 67, 4, 31, 93, 40, 60, 199, 161, 64, 145, 92, 95, 160, 158, 47, 212, 189, 56, 180, 27, 45, 122, 169, 133, 181, 61, 5, 26, 240, 135, 108, 251, 239, 209, 214, 86, 141, 171, 96, 175, 188]
与window.btoa(arraybuffer);
它是:"W29iamVjdCBBcnJheUJ1ZmZlcl0="
。
我使用ab2str(buf)
and str2ab(str)
frome:在字符串和 ArrayBuffers 之间转换。
缺少什么以使 Java 和 JavaScript 输出相同?
javascript - Node.js 加密模块 - ECDH
我正在尝试使用crypto 模块在 Node.js 和使用Web Cryptography API的 Web 客户端之间完成密钥交换。
到目前为止,我设法将密钥交换处理到在服务器和客户端上派生共享密钥的地步。在服务器端,我使用了“secp521r1”曲线,在客户端使用了名为“P-521”的等效曲线。
在客户端上,我收到一个长度为 32 字节的共享密钥,我认为这是 256 位 AES-GCM 密钥的正确长度。但在服务器上,我收到一个长度为 66 字节的密钥。下面是生成的密钥的两个示例,一个以 base64 编码,一个为字节数组:
我想我在 Node.js 上错误配置了一些东西,但我在文档中找不到任何关于如何正确操作的提示。
这是我在 Node.js 上提取密钥的方法:
我的问题是:
- 我的假设是否正确,来自 Node.js 的密钥不正确?
- 我需要做什么才能正确提取 AES-GCM 256 位密钥?
- 电流输出是什么意思?
任何指导表示赞赏。