问题标签 [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 回答
184 浏览

encryption - (当前程序使用的 CPU 时间的皮秒数 + 时钟时间)是对伪随机数生成器的密码分析免疫的种子吗?

我正在尝试在 Haskell 中使用此ECDSA实现,如果您查看第 15 行,您会看到 k 值使用randomRIO,它使用全局随机数生成器,其 获取器使用theStdGen ,它使用mkStdRNG,通过以下方式生成种子:

(挂钟上的当前秒数)* 12345 +(挂钟上的当前皮秒数)+(当前程序使用的 CPU 时间的皮秒数)

这足以签署价值数十亿美元的数据吗?

0 投票
2 回答
8184 浏览

java - 根据 RFC 测试向量在 Java 中计算 ECDSA 签名

我正在用 java 为与 ikev2 协议相关的程序编写测试工具。作为其中的一部分,我需要能够计算 ECDSA 签名(特别是使用 NIST P-256 曲线)。

RFC 4754描述了 IKEv2 中 ECDSA 的使用,并提供了一组测试向量(包括我需要的 p256 曲线)。

我正在尝试使用以下代码通过 java 的 ECDSA 签名实现运行 ECDSA-256 测试向量值(RFC 中的第 8.1 节):

结果应该是:

CB28E099 9B9C7715 FD0A80D8 E47A7707 9716CBBF 917DD72E 97566EA1 C066957C 86FA3BB4 E26CAD5B F90B7F81 899256CE 7594BB1E A0C89212 748BFF3B 3D5B0315

相反,我得到:

30460221 00dd9131 edeb5efd c5e718df c8a7ab2d 5532b85b 7d4c012a e5a4e90c 3b824ab5 d7022100 9a8a2b12 9e10a2ff 7066ff79 89aa73d5 ba37c8768 5ec f787c8768 5ec f76

我知道长度差异是由于 Java ASN.1 Encoding the signature。但是,其余部分完全错误,我不知道为什么。

任何帮助或建议将不胜感激!

PS 我不是 ECDSA 或 Java 加密专家,所以这可能是我犯的一个愚蠢的错误

0 投票
1 回答
4707 浏览

c - 使用 OpenSSL C 库在多个线程中生成椭圆曲线密钥对 (EC_KEY_generate_key)

我想生成许多 ec 密钥对。稍微加快了进程,我重写了我的应用程序以使用多个线程来完成这项工作。这是每个线程想要生成密钥的方式的代码片段:

乍一看,一切似乎都很好。在我的 i5 520m 上使用四个线程,应用程序的运行速度提高了一倍。但是在 3-4 个 E6 密钥生成之后,它突然出现了段错误。如果我锁定 EC_KEY_generate_key 操作,则不再存在段错误,但使用多个线程的优势就消失了。现在我的问题。是否可以在不破坏内存的情况下将密钥的创建拆分为多个线程?我没有使用谷歌找到任何信息。不过,SSL Docu没有提到任何关于线程安全的内容。非常感谢任何帮助。谢谢

0 投票
2 回答
3301 浏览

openssl - 将 ECDSA 十六进制私钥转换为公钥

我正在使用以下两行来生成 ECDSA 私钥的十六进制:

那些输出是这样的:

然后我如何使用该十六进制密钥生成公共 ECDSA 密钥,像这样?

任何帮助表示赞赏。

0 投票
1 回答
1293 浏览

node.js - node.js 中的十六进制编码 ECDSA 密钥

我正在构建一个与 API 服务器对话的 nodejs 应用程序。API 服务器要求我向它发出的每个请求都包含一个X-Signature使用prime256v1ECDSA 曲线和sha256特定数据集散列的标头。

我查看了加密tls文档,但没有找到任何合适的东西。我已经成功生成了一个私钥,openssl ecparam -name prime256v1 -genkey但它是 PEM 格式的。我还生成了一个 DER 格式密钥。这两者都包括一些额外的元数据,如所使用的曲线以及在 PEM 的情况下的注释。

我可以使用这些密钥对自己的操作进行签名,但服务器要求我使用十六进制编码上传公钥(以便服务器可以验证我对请求所做的签名。)

具体来说,服务器需要类似于以下 Python 代码的输出:

pubkey 的示例输出(无换行符):c5bd76cd0cd948de17a31261567d219576e992d9066fe1a6bca97496dec634e2c8e06f8949773b300b9f73fabbbc7710d5d6691e96bcf3c9145e15daf6fe07b9

我宁愿不将 python 作为依赖项添加到我的节点应用程序...任何人都知道我可以从 PEM 或 DER 文件中提取代表我的私钥的二进制数据的方法,这样我就可以将它放在缓冲区中并调用buffer.toString('hex')?或者我可以使用本机crypto库生成 ECDSA 密钥对的方法?或者一个会做同样事情的图书馆?

0 投票
1 回答
236 浏览

java - 如何在 ECDSA 中处理具有较长基点顺序的短哈希

我正在使用带有 Brainpool256r1 曲线和 SHA1 哈希的椭圆曲线签名的 CVC 证书(如果您还没有听说过它们,就假装它们是 X509)。在带有 bouncycastle 的 java 中,我只是像这样验证它们:

一切正常。但是,我还需要在嵌入式设备中验证它们,我遇到了一个问题,因为我应该使用最左边的 256 位哈希来获得z 至少根据维基百科 ECDSA 文章的值。但 SHA1 只有 160 位。

bouncycastle如何解决这个问题,是否有一些关于如何处理这个问题的一般理论?

0 投票
0 回答
4612 浏览

php - 在 PHP 中实现 secp256k1 (ECDSA)(用于比特币)

对于热衷于投票的人和/或更接近的人:如果您认为这与 SO 无关,请指出其他 StackExchange 站点,在该站点上这个问题更合适。


如何在 PHP 中实现 ECDSA 曲线secp256k1

或者更确切地说:是否有任何解决方案 - 即。包含的专业课程 - 已经完成了吗?

我可以看到有很多可用于其他语言(JavaScript、Python 等)的开源库、类和东西,但我整个下午都在谷歌上搜索一些/任何 PHP 解决方案,但......什么也没有!.

这是我的一个比特币项目,我需要一种如何从私钥生成公钥的方法......然后我想生成最终的比特币地址

我知道如何生成私钥(不用担心它是否是随机的——这里不是问题)而且我有 256 位十六进制和 WIF 表示法。但是下一步:想出一个公钥,然后是最终的比特币地址,这对我来说是个问题,因为我几乎没有密码学背景,而且我知道解决方案是以某种方式利用 secp256k1。

这是我到目前为止所拥有的:

tl;博士如何在 PHP 中实现这一点?(..和 privKey->pubKey转换之前)

http://i.stack.imgur.com/U2neg.png

我知道...

  • http://github.com/mikegogulski/bitcoin-php .. 它非常简洁,有很多有用的方法和方法如何通过 RPC 控制bitcoind,但不幸的是,缺少可以处理privKey->pubKey机制的纯 PHP 方法。
  • http://bitcoinphp.com/ .. 我在那里找不到它。
  • PHP 中的 openssl 扩展,但不幸的是,OPENSSL-PHP 文档中提到的唯一摘要方法是“ecdsa-with-SHA1”,如果我错了,请纠正我,但我需要“ecdsa-with-SHA256”或其他东西像那样 (?)
  • 我什至尝试从bitcoinjs.js转换算法,但是凭借我的加密知识,我无法提取任何内容的要点。我根本不理解那些曲线和它们的位操作以及其他令人毛骨悚然的东西。

我正在寻找纯 PHP 解决方案。我不是在寻找使用运行 bitcoind 的 shell,然后为密钥对解析 JSON,然后......

为什么没有一段代码可以完全在 PHP 中处理?或者在那里?!:)

0 投票
3 回答
6235 浏览

python - 运行 paramiko 时 Python 模块 ecdsa 错误

我正在尝试安装 paramiko 模块..它失败并出现以下错误

有关如何进行 paramiko 安装的任何建议?

0 投票
1 回答
309 浏览

signing - 如何从发件人那里恢复压缩的 y 值?

我正在处理以下场景:

  1. 生成私钥和公钥
  2. 生成压缩公钥:

    PublicKey.AccessGroupParameters().SetPointCompression(true)

  3. 签署一些数据并使用压缩的公钥发送到另一端。

  4. [在另一端] 使用公钥验证签名

对于第 4 步,我需要恢复 y 值。Crypto++ 中是否有一些我可以使用的 API?

0 投票
1 回答
1304 浏览

command-line - 如何使用 OpenSSL 命令验证 ECC 签名?

我有一个公钥、一个 192 位哈希和一个 384 位签名,都是 .txt 十六进制文件,曲线是 prime192v1。

我可以使用哪些命令行来验证 OpenSSL 的消息?