问题标签 [ecies]
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.
c++ - crypto++ ECIES BERDecodePrivateKey 的问题
我正在尝试将带有 DEREncodePrivateKey 的 ECIES num0 PrivateKey 存储到 std::string 并将其重新加载到 num1 PrivateKey 对象中以进行测试。问题是当密钥在第二个 PrivateKey 对象中加载了 BERDecodePrivateKey 时,它无法被验证(也测试了未经验证的加密和解密并且没有解密)
这是代码
elliptic-curve - ECIES:KDF的正确ECDH输入方式?安全效果?
为了完全理解 ECIES 并使用我最喜欢的库,我自己实现了 ECIES 的某些部分。这样做并比较结果会导致我不太清楚的一点:KDF 的输入到底是什么?
ECDH的结果是一个向量,但是你用什么来做KDF呢?它只是 X 值,还是 X + Y(可能带有前置 04)?您可以在野外找到这两个概念,并且为了互操作性,哪种方式是正确的方式真的很有趣(如果有正确的方式 - 我知道 ECIE 更像是一个概念并且有几个自由度)。
解释(如果我在特定点上错了,请纠正我)。如果我谈论字节长度,这将指的是具有 256 位 EC 密钥的 ECIES。
所以,首先,大局:这是 ECIES 流程,我说的是第 2 步 -> 第 3 步:
接收者的公钥是向量 V,发送者的临时私钥是标量 u,密钥协商函数 KA 是 ECDH,它基本上是 V * u 的乘积。结果,您得到了一个共享密钥,它也是一个向量——我们称之为“共享密钥”。
然后获取发送者的公钥,将其与共享密钥连接,并将其用作密钥派生函数 KDF 的输入。
但是:如果您想将此向量用于密钥派生函数 KDF,您有两种方法:
- 你可以只使用共享密钥的 X。然后你有一个 32 字节的字节串。
- 您可以使用共享密钥的 X 和 Y,并像使用公钥一样在其前面加上 0x04。然后你有一个 01 + 32 + 32 字节的字节串 [3) 只是为了完整:你也可以使用 X + Y 作为压缩点)
字节串的长度并不重要,因为在 KDF(通常涉及散列)之后,您总是有一个固定值,例如 32 个字节(如果您使用 sha256)。
但是,如果您选择其中一种方法,KDF 的结果当然会大不相同。所以问题是:正确的方法是什么?
- eciespy 使用方法 2 https://github.com/ecies/py/blob/master/ecies/utils.py#L143
- python cryptography 在他们的 ECDH 中只返回 X:https ://cryptography.io/en/latest/hazmat/primitives/asymmetric/ec/#cryptography.hazmat.primitives.asymmetric.ec.ECDH 。他们没有 ECIES 支持。
- 如果我正确理解 CryptoC++s 文档,他们也只会返回 X:https ://cryptopp.com/wiki/Elliptic_Curve_Diffie-Hellman
- 与 Java BountyCastle 相同,如果我没看错的话 - 结果是一个整数:https ://github.com/bcgit/bc-java/blob/master/core/src/main/java/org/bouncycastle/crypto/agreement/ DHBasicAgreement.java#L79
- 但您也可以找到带有 X 和 Y 的在线计算器:http ://www-cs-students.stanford.edu/~tjw/jsbn/ecdh.html
因此,我试图在文档中获取更多信息:
- 有 ECIES 的 ISO 提案。他们没有详细描述它(或者我找不到它),但我会将其解释为完整向量 X 和 Y 的方式:https ://www.shoup.net/papers/iso- 2_1.pdf
- 有这篇论文在互联网上被广泛链接,它指的是在第 27 页仅使用 X:http ://www.secg.org/sec1-v2.pdf
所以,结果是:我很困惑。谁能指出我正确的方向,或者这只是你拥有的一定程度的自由(以及在兼容性方面有很多乐趣的理由)?
bouncycastle - 在 JKS 中使用带有 KeyPair 的 Bouncy Castle 执行 ECIES 操作
我需要使用 secp256r1 和 BC 作为提供者来执行 ECIES 加密/解密。
我需要参考(1)如何在 JKS 密钥库中存储 ECIES 私钥-公钥对(2)从 JKS 检索公钥。
我根据https://zombiesecured.com/html/tutorials/Keytool/ECC-JK.html使用 keytool 命令提供密钥对。
- 签名算法名称:SHA256withECDSA
- 主题公钥算法:256 位 EC 密钥
(2) 您能否帮助如何检索 ECDSAPublicKey 格式的密钥作为加密的输入。
我找到了对 ECPublicKey 的解码密钥的参考,如下所示。我的第一个论点应该是什么?如何从 JKS 检索编码的密钥?
- 如何使用 IESCipher、IESParameterSpec、engineInit 执行 ECIES 加密/解密。
encryption - 使用 ECIES 进行文件加密
我目前正在尝试构建一个项目(自学),该项目本质上是一个用于共享文件的网站(在两个用户之间)。我想使用 ECIES(主要目标)加密文件(pdf),然后将其发送给另一个用户。我的问题是:
- 如何在客户端加密文件?
- 如何将加密文件发送到服务器(哪种语言/库/技术)
正如我的问题所暗示的,我是 Web 开发的初学者。
encryption - ECIES:在 Javascript 中加密并在 Java/Kotlin 中解密
我在 javascript 中使用 eccrypto 库使用 ECIES 算法 (curve-secp256k1) 进行加密。在 JS 代码中加密生成的密码无法在 Kotlin 中解密。
这是Javascript代码。
这是kotlin的解密代码
使用此代码进行解密,我得到了一个坏块异常。
但是,如果我只是使用Java进行加密和解密,则没有问题。此外,Javascript 中的加密和解密也可以正常工作。
有什么我想念的吗?
c++ - 使用crypto++时如何读取从java bouncycastle生成的ECC公钥
我使用以下代码从 bouncycastle 创建 ECC 公钥:
然后我复制公钥并在 iOS 中使用以下代码读取:
我得到错误
libc++abi.dylib:以 CryptoPP::CryptoMaterial::InvalidMaterial 类型的未捕获异常终止: CryptoMaterial:此对象包含无效值
有人可以帮我解决这个问题吗?
c++ - 如何将 Crypto++ 用于 ECIES 并检索公共秘密、身份验证标签和密文
我正在尝试使用crypto++ wiki中的示例进行 ecies 加密,它符合 IEEE P1363 的方案版本。ETSΙ ΤS 102 941 v1.3.1 标准中描述的方案的前两个步骤是:
发送者在 [1, q-1] 中生成一个临时私钥 r,...
发送方从接收方加密公钥 Kr 中导出共享秘密 S。S = Px,其中...
但是,在 crypto++ 示例中,第一行是:
它使用私有的解密器并将加密器基于它。我看不出它如何匹配算法的步骤。
此外,wiki 声明加密函数返回一个元组 {K,C,T},其中 K 是加密的公共秘密,C 是密文,T 是身份验证标签。但是,在示例中,它们没有被检索到,我不知道它们是如何检索的。
任何见解和帮助将不胜感激。谢谢!
java - Apple eciesEncryptionCofactorVariableIVX963SHA256AESGCM vs BouncyCastle ECCDHwithSHA256KDF
我正在尝试使用 Apple 算法eciesEncryptionCofactorVariableIVX963SHA256AESGCM加密 Java ( BouncyCastle ) 和 iOS 之间的通信。
Apple 的算法没有很好的文档记录,但我发现这篇文章很有帮助。
我还在BouncyCastle 文档中发现了以下算法,该算法似乎与我正在寻找的内容接近:
ECCDHwithSHA256KDF
它使用 X9.63 KDF 和 SHA256 作为 PRF 表示 EC 辅因子 DH
不幸的是,这不起作用并导致异常。
我错过了什么?可以通过少量更改来修复此代码吗?
javascript - Javascript。ECIES方案如何有效存储Secp256k1私钥
我一直很难弄清楚如何从多个库中存储一个 Secp256k1 私钥(目前在这个用于 ECIES 加密的库中:https ://npm.io/package/@toruslabs/eccrypto )。
我尝试过使用 base64 进行编码和解码,许多函数的实现将输入编码字符串的数组缓冲区复制到 localStoarge 并从 localStorage 相应的输出 Uint8Array,我尝试使用 IndexedDB,JSON.stringify 和解析不适用于二进制数据,等等更多的变化。
当我单独遍历数组缓冲区元素以将其复制到新的 Uint8Array 中时,我得到了一个类似的私钥,但缺少两个键/字段(父项和偏移量),我相信这就是我迄今为止尝试过的每个库都返回一些内容的原因当我尝试从它们生成公钥时,会出现很长的“坏私钥”行。
我已经筋疲力尽了,我想要一些专业的见解,因为我在这个特定的主题上缺乏技能。那么如何存储(只要它是客户端/本地的)Secp256k1 私钥,如果我从该持久客户端数据库调用它,它们可以用于生成公钥?
javascript - Eccrypto ECIES Decrypt Scheme, JavaScript
This will probably need some sort of background in https://www.npmjs.com/package/eccrypto . I am trying to decrypt a message that was retrieved from an api with the ECIES scheme but it keeps telling me that the public key is "bad".
error:
I am pretty sure the decrypt parameter where you pass in the message object contains the public key in it. And if I am wrong then it gets derived from the private key parameter but I don't believe this is, since the private key seems to be fine, and deriving the public key from the private when decrypting is counter intuitive to what ECIES decrypting does, encrypting is another deal.
Below you will see the decrypting function and functions used in it:
This is how the message object gets encrypted before it gets sent to the API for later retrieval:
I am not sure what is wrong since I did provide the decrypt message function with a valid private key, and as far as I know, I did encrypt the message correctly in the first place which is what I eventually passed into decrypt message function. What am I not doing right? Any help and closure will be of great usage for me. Thank you.