问题标签 [ecdsa]

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.

0 投票
1 回答
302 浏览

c++ - 使用 ECDSA 签名时的 BAD_ACCESS (code=EXC_I386_GPFLT)

我正在尝试在 iOS 上使用 Crypto++。我从Marek Kotewicz 的 GitHub下载了该库的预构建版本。

我正在努力从 Crypto++ wiki运行这个示例代码。

它与以下内容崩溃。它显示在 Xcode 输出窗口中:

这是来自 C++ 文件的 memory.h 的代码片段,它指向 BAD_ACCESS

我收到指向这行库代码的 BAD_ACCESS(code=1 , address=0x0) 错误

这是调试器输出

0 投票
1 回答
523 浏览

java - 公钥生成和签名计算的椭圆曲线应该相同吗?

根据维基百科,ECDSA 中的公钥是私钥(随机数)乘以椭圆曲线 C 上的某个基点 G。而且我们在签名和验证中都使用了 C。

我可以使用一些 G1 和 C1 生成公钥,使用其他曲线 C2 进行签名和验证吗?

我知道这听起来很奇怪,但我的实际目标是在 ECDSA 中使用 GOST 私钥(我已经拥有它们并且必须使用它们)。因此,GOST public 可能是从特殊的 C1、G1 和 JavaSHA256withECDSA可能使用其他知道的曲线生成的。

  1. 如何检测曲线使用的Signature ecdsaSign = Signature.getInstance("SHA256withECDSA", "BC");
  2. 如果签名和验证返回 true,是否意味着我提供给 ECDSA 的 GOST 密钥与 ECDSA 兼容?

    /li>

请注意,GOST 密钥生成的曲线和内部曲线SHA256withECDSA 可能不相等,这就是我问这个问题的原因。

更新

回答

我可以使用一些 G1 和 C1 生成公钥,使用其他曲线 C2 进行签名和验证吗?

不,C1 必须等于 C2。

检测 BC 曲线是可能的——我查看了 BC 的 SignatureSpi 源,发现曲线参数取自密钥。并发现 C2 等于已知 C1。换句话说,不是,SHA256withECDSA而是prKey.getAlgorithm()决定。

但!!密钥的兼容性并不意味着使用它是安全的。GOST 曲线具有特殊的不变量,可能会影响某些 ECDSA 步骤 - 这是一个有趣但非常困难的问题 - ECDSA 中是否存在 GOST 曲线的任何弱点。所以,答案是“兼容但在使用前仔细检查数学人员”

请注意,KBKDF 不会从 ECDSA 中的 GOST 曲线弱点中拯救出来(如果它确实存在于“数学-加密-场景”后面)

0 投票
2 回答
2037 浏览

cryptography - 如何从生成的 ecdsa 密钥中填充 jsonwebkey

我尝试使用jose4j生成一个公钥/私钥对,用于 JWT 的数字签名。我使用椭圆曲线数字签名算法

我的问题是我不知道如何获取代表 edcsa 键含义的参数:

  • crv
  • X
  • 是的
  • d

    /li>
0 投票
1 回答
546 浏览

java - 从 W 参数在主机端生成 ECDSA 公钥

我想将我的小程序中生成的私钥-公钥对 (ECDSA) 的公钥发送到主机应用程序/终端。

在 RSA 中,我通常会发送模数和指数,并在主机端生成公钥。

在 ECDSA 中,我从链接中读到,如果您将 W 参数字节放在卡外,我们可以做同样的事情点击这里:Stackoverflow 答案:在 Java 上编码公钥

我现在有卡中的 W 个字节。有人可以建议如何从中创建公钥吗?

0 投票
1 回答
2135 浏览

java - 使用 secp256r1 曲线 (BouncyCastle) 生成 ECDSA 签名,给出长度为 127 的签名

我正在使用 secp256r1 曲线和使用 BouncyCastle 的 SHA256 算法实现 ECDSA 签名生成。

对于某些输入,签名长度为 127 个字符。我觉得开头的“0”正在被删除,因为签名存储在 ECDSASigner 类中的 BigInteger 数据类型中。

使用确定性方法添加了来自 rfc6979 ECDSA 签名的样本

代码的相关部分: -

根据文件的预期签名 R 和 S:-

但我得到

唯一的区别是 r 值为零。由于这个签名长度只有 127。

请让我知道我的推断是否正确。这是Bouncy Castle中的错误吗?

0 投票
1 回答
4697 浏览

c# - .NET 中的 ECDiffieHellmanCng 是否具有实现 NIST SP 800-56A 第 5.8.1 节的密钥派生函数

我手头的任务需要使用 NIST SP 800-56A 第 5.8.1 节中描述的密钥派生函数派生密钥材料。我不是密码学专家,所以如果问题很幼稚,请原谅。这是我到目前为止所做的:

  1. 我有对方的公钥和我的私钥
  2. 现在我尝试使用 ECDH 1.3.132.1.12 使用 C# (.NET 4) ECDiffieHellmanCng 类生成共享密钥,如下所示:

    /li>

最后这样做:

我在哪里/如何设置其他参数算法 ID、U 方信息、V 方信息?

编辑 我愿意使用 Bouncy Castle 等其他库(前提是它们可以从.NET 调用)

0 投票
0 回答
1006 浏览

android - ECDSA prime256v1 跨平台签名验证失败

我需要使用 Java/Android 和在 .Net 环境中创建的 ATEC108A 芯片验证签名。(使用 SunEC 和 AndroidOpenSSL)

签名使用 BCrypt 在 .Net 中创建,密钥也使用 BCrypt 创建并存储在 Microsoft 密钥库中。签名和公钥可以发送到 AT 芯片并进行验证,但它不适用于 Android。

密钥/签名过程:

  1. 公钥以 x.509 密钥格式从 BCrypt 导出,其中包括 SHA256-ECDSA 的标识符和曲线 prime256v1,导致:

  2. BCrypt 的签名是 64 字节格式,但 android 需要序列和长度标识符,从而导致签名如下:

  3. 用于签名和验证的消息是“Hello World”,其散列为:

安卓进程:

  1. 从上述密钥字节数组创建 X509 密钥规范和公钥:

  2. 使用 AndroidOpenSSL 提供程序创建签名:

  3. 加载上面的哈希数组:

  4. 验证上述签名:

上面的签名和密钥在 AT 芯片上签出(也在运行 JavaScript-OpenSSL 的 ECDSA 示例上验证),但未通过 AndroidOpenSSL 验证。我错过了一些简单的东西还是问题出在哪里?

公钥结构在 ASN.1 解码器上检查并在代码中成功加载(从公钥中提取和检查),签名采用 Java 的预期格式,并且两侧的哈希值相同。

0 投票
0 回答
242 浏览

c++ - 如何在没有 openssl 的情况下创建 ECDSA 密钥对

我正在用 C++ 编写一个跨平台的应用程序。我想知道是否可以在不使用任何外部库的情况下创建一个 ECDSA 密钥对(公钥和私钥),只需纯 c++。任何使我走上正确道路的答案将不胜感激。

0 投票
2 回答
7063 浏览

c# - 如何在 C# 中使用带有 ECDSA 算法的 SHA256 创建数字签名

我需要创建一个签名,该签名是一个 URL-Safe-Base-64 编码的 SHA256+ECDSA 消息签名。这将用于使用远程 REST 服务。

我得到了一个 HAL 浏览器实现,它按预期连接到它们,并在 SCALA 中完成了一个测试实现。

我正在尝试使用 C# 生成相同的签名。

到目前为止,这就是我的签名方法的样子

我正在构建代码,但创建了一个无效的签名。这是调用方法

0 投票
1 回答
2517 浏览

php - 如何使用 PHP 验证 ecdsa-with-SHA256 签名?

我在开发安全系统时遇到了以下问题:

我们收到一些必须通过签名验证的数据。签名算法是 ecdsa-with-SHA256,而openssl_verify()似乎没有这个选项。已经尝试搜索像 phpseclib 这样的独立 PHP 库 - 也没有运气,ecdsa-with-SHA1 似乎是他们提供的最佳选择。

什么是该问题的适当解决方案?也许我错过了一些实现此类功能的库?