问题标签 [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.
security - WebCrypto:从 RSA-OAEP 到 RSA-PSS 的安全转换
WebCrypto 支持 RSA,但强制您为可以执行的不同操作选择填充方案。RSA 可以同时执行签名/验证和加密/解密(+密钥包装),但这对于 webcrypto API 来说不太可能。
当我使用 RSA-OAEP 生成 RSA 密钥时,相同的密钥可以用于 RSA-PSS,但是没有明确的方法可以绕过那些使用 webcrypto API 的密钥。
我最初的想法是采取这些步骤来转换密钥:
exportKey
使用with导出密钥jwk
- “修复”
alg
从(例如)RSA-OAEP-512
到PS512
“使固定”
key_ops
一个。
encrypt
->verify
湾。
decrypt
->sign
使用正确的算法导入“固定”密钥
当密钥不可导出时,该系统会崩溃,我想这样做是为了提高私钥的安全性(恶意脚本、self-xss 等)。
在算法类型之间“转换”但保留密钥而无法导出的好方法是什么?
webcrypto-api - JOSE:签名请求
JOSE 标准引入了签名 (JWS) 和加密数据 (JWE),它们描述了已签名或加密的数据包。但是我找不到“签名请求”或“加密请求”(可以使用 JWE 作为解密请求)。
我想问一个远程端,作为共享秘密所有权的证明,“使用这个算法和这个密钥给我签名这些字节”,其响应是一个 JWS 以及“使用这个密钥加密这些字节”,响应是 JWE。
我试图不在这里重新发明轮子,在阅读 JOSE 规范时,我找不到任何可能有用的东西。这似乎是一种常见的请求类型,我想知道为什么/如何将其排除在外。
javascript - Python - 加密 AES-GCM 以兼容 Web 加密 API
在 Python 中通过 AES-GCM 加密数据以使用 Web 加密 API 解密的正确方法是什么?(使用 PyCryptodome)因为 PyCryptodome 使用 nonce 和 WCA IV。这是个问题吗?
Python:
Javascript:
javascript - 用 AES 密钥包装 RSA 私钥,然后解包
我一直在尝试对使用 Web Cryptography API 生成的 RSA 私钥进行密码保护。去做这个,
- 我首先生成一个 RSA 密钥对
- 然后我从密码中导出一个 AES 对称密钥
- 然后我用来自 step2 的 AES 密钥包装来自 step1 的 RSA 私钥。
- 完成后,我尝试通过立即将所有这些传递给
unwrap
我尝试打开它的方法来验证它是否有效
这是代码:
但是代码不起作用。包装代码不会引发任何错误,并且似乎会生成密钥(尽管我不知道这些是否有效)。但是当我尝试运行该unwrapKey
方法时,出现以下错误:
在过去的 24 小时里,我一直在拔头发,因为我无法让它发挥作用。谁能发现问题?这是一段完全独立的代码,因此您可以通过复制并粘贴到 HTML 文件中并在浏览器中打开来试用它。
encryption - 带有 RSA OAEP 的 Webcrypto wrapKey 哈希填充
我能够生成一个 AES 密钥,并与我导入的 OpenSSL 生成的公钥一起,用如下代码包装它:
我的问题是,关于 OpenSSL RSA OAEP 密钥,它似乎总是使用 SHA-1 进行填充。似乎无论我在 webCrypto wrapKey 函数中指定什么哈希,我仍然可以使用我的 OpenSSL 私钥使用类似的命令解密 encryptedSharedKey
当我包装密钥时,是否存在 webcrypto 实际上没有更改哈希类型的错误,或者我误解了哈希是如何发挥作用的?
javascript - 无法从 java 程序执行 web-crypto 脚本
Java 代码:
JavaScript 代码:
错误:
线程“main”javax.script.ScriptException 中的异常:ReferenceError:“window”未在 jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine. java:470) 在 jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:392) 在 jdk.nashorn.api.scripting.NashornScriptEngine.invokeMethod(NashornScriptEngine.java:199) 在 WebCryptoInvoke.main(WebCryptoInvoke.java :20) 原因:/home/rajasekhar/Desktop/webcrypto.js:9 ReferenceError:“窗口”未在 jdk.nashorn 的 jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) 中定义。 jdk.nashorn.internal.runtime.ECMAErrors 处的 internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319)。jdk.nashorn.internal.objects.Global 的参考错误(ECMAErrors.java:291)。jdk.nashorn.internal.scripts.Script的 noSuchProperty (Global.java:1441)$Recompilation$2$86$webcrypto.generateKeyPair(/home/rajasekhar/Desktop/webcrypto.js:9) 在 jdk.nashorn.internal.runtime.ScriptFunctionData .invoke(ScriptFunctionData.java:637) 在 jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494) 在 jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393) 在 jdk。 nashorn.api.scripting.ScriptObjectMirror.callMember(ScriptObjectMirror.java:199) 在 jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:386) ... 2 更多
webcrypto-api - Web Crypto API – ECDH – 可以仅使用私钥组件导入私钥,而无需公钥组件?
给定一个 P-256 椭圆曲线 Diffie-Hellman 私钥(它只是一个随机的 256 位整数):是否可以使用 window.crypto.subtle.importKey() 方法将此私钥导入 CryptoKey 对象Web Crypto API – 没有公钥组件?
我知道如果公钥组件(从私钥组件派生)也可用,则可以导入私钥。例如,下面的代码运行成功:
但是,如果只有私钥组件可用,而没有公钥组件,如下面的代码所示,Web Crypto API 会引发 DOMException,并显示消息“提供给操作的数据不符合要求”。
我也尝试过使用 pkcs8 格式作为密钥,而不是 JWK,但也没有运气。
Web Crypto API 的文档显示可以导入 JWK 格式的 ECDH 私钥 - 因此,似乎在没有公钥组件的情况下也可以这样做(Web Crypto API 应该能够如果需要,从内部的私钥组件计算公钥组件,就像使用 .generateKey() 方法一样)。但是,importKey() 方法似乎仅在包含公钥组件时才有效。
我在这里错过了什么吗?如果没有,是否有人知道解决方案或解决方法,在导入之前单独计算公钥组件,并将它们与私钥组件一起包含在 importKey() 方法中(这似乎过于繁琐且不必要)?
javascript - PKI.js V2 和 WebCrypto - 添加主题备用名称和 CSR(证书签名请求)
我在 PKI.js 和 WebCrypto API 的 V1 中有一个完整的功能代码,它添加了带有 CSR 的主题备用名称 (DNS:)。我正在尝试使用 V2,但代码没有运行。
版本 1 的完整功能示例
带有CSRhelp的 V1 示例。此示例不使用 CSR 添加主题备用名称。
请下载此 zip:https ://getwww.me/V1-csrhelp-master.zip在文件csrhelp-master\app\src\csrhelps\CsrhelpService.js的第 516 行中,您将找到以下代码:
我用下面给出的代码替换了上面的代码,行号 480 到 511(在#region SubjectKeyIdentifier 中)。它工作正常。
版本 2
现在我正在尝试使用 V2 示例PKCS#10 复杂示例。请注意,我直接从 pkijs.org 链接而不是 github 获取此代码。
请下载此 zip:https ://getwww.me/V2-PKCS10_complex_example.zip在文件V2 PKCS10_complex_example/PKCS10_complex_example.js行号 16784 中,您将找到以下代码:
我用下面给出的代码替换了上面的代码(在区域 SubjectKeyIdentifier 中),行号 16749 到 16780。
但这没有运行。我不知道我在哪里做错了。请帮忙。
我已将 V1 和 V2 示例(修改)作为 zip 附加:上面给出了链接。
提前致谢。
cryptography - 从 Web Crypto API 中的私钥对应部分生成 RSA 公钥
我认为这将是一件简单的事情,但看起来 webcrypto api 没有提供一种获取私钥并生成其公钥对应项的方法。
这是真的?还是我错过了什么?
我尝试这样做的原因是因为我想传输密钥对并尝试减小总大小。如果我可以只导出私钥然后检索这两对,那就太好了。