问题标签 [secp256r1]

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 回答
225 浏览

android - 在 Kotlin 中将 ByteArray 转换为 PrivateKey

我有一个原始格式的私钥,一个字节数组:

我需要将此数组转换为私钥。我使用这个功能:

我不知道如何设置getInstance. 我的私钥是 P256,也称为 secp256r1 和 prime256v1。任何的想法 ?

提前非常感谢!

0 投票
0 回答
485 浏览

go - Golang 中 ECDSA 签名验证使用 secp256r1/scep384r1/secp521r1 性能差异

我正在使用 Golang 验证由 ECDSA 密钥和 secp256r1/scep384r1/secp521r1 签署的数字签名。

secp256r1/scep384r1/secp521r1的签名验证性能差异令人震惊。

对于由密钥 secp256r1签名的数字签名,Golang 每秒能够验证大约 27k 个签名

对于使用secp384r1 密钥签名的签名,每秒可以验证大约 1700 个签名,而对于使用 secp521r1 密钥签名的签名,每秒仅验证 350 个签名

数字签名的验证差异确实很大,三种情况下的签名算法都是相同的,即SHA256和ECDSA。

用于验证签名的示例代码:

我在这里错过了什么吗?我是否需要以不同的方式处理 secp384r1 和 secp521r1 来验证签名?如何提高验证这些签名的性能?对于这些键类型,这是 Golang 中的预期行为吗?

0 投票
1 回答
1557 浏览

encryption - 使用 ES256 的 JWT 签名无效

我正在尝试手动创建一个 ES256 JWT 令牌。我有一个用 python 编写的小脚本,它签署了一个使用ecdsa-python的 sha256 哈希。但是jwt.io上的签名无效。

重现步骤:

  1. 创建 base64 标头 + 有效负载:

eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0

  1. 从 base64 标头 + 有效负载创建 SHA256 哈希:

FFC89E33091FFDD3C61798A0A74BF7C2D1A6FD231A6CB519F33952F7696BBE9F

  1. 生成 ec_private 密钥:

openssl ec -in ec_private.pem -noout -text

  1. 使用python小程序对SHA256哈希进行ecdsa签名

输出:

Base64:MEQCIFyP4IoZGhzGfDCPX6fVxjtB+nrXDVhOTQwdc5vu8z4eAiBNalfGHqdaO3nCmTqimpAHF+IHzxk8em+OMMHrJkPOhA==

Base64Url:MEQCIFyP4IoZGhzGfDCPX6fVxjtB-nrXDVhOTQwdc5vu8z4eAiBNalfGHqdaO3nCmTqimpAHF-IHzxk8em-OMMHrJkPOhA

哈希验证成功:True

  1. 检查jwt.io中的签名给出无效的签名

eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.MEQCIFyP4IoZGhzGfDCPX6fVxjtB-nrXDVhOTQwdc5vu8z4eAiBNalfGHqdaO3nCmTqimpAHF-IHzxk8em-OMMHrJkPOhA

键:

上市:

-----开始公钥----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE1TG2uvIMdfWkteiDWeHNYbQNSW/0 uoYcvX4Z7ROUIgYRvgfpsjBaIv70SuYpmBLwl0AuEBoXIVTCclCme6SdEQ== -----结束公钥-----

私人的:

-----开始 EC 私钥----- MHcCAQEEIJfChy9fKFItzqcb8DKBm+2oH0YTZ7N61SQpyABgVZANoAoGCCqGSM49 AwEHoUQDQgAE1TG2uvIMdfWkteiDWeHNYbQNSW/0uoYcvX4Z7ROUIgYRvgfpsjBa Iv70SuYpmBLwl0=AuBoXIVTCCLIVCATE6--EBoXIVTC

我知道有很多 jwt 签名 python 库,但使用它是为了了解 jwt 令牌是如何创建的。

编辑:

正如@Topaco 指出的那样,这个库使用曲线 secp256k1 而不是 secp256r1。secp256r1 | 素数256v1 | NIST P-256 是不同标准组织为同一曲线选择的所有不同名称(Elliptic Curve Cryptography (ECC) Cipher Suites for Transport Layer Security (TLS))。我将库更改为python-ecdsa并将代码更改为:

输出:

Base64: rMBgC0ismGdd5rd7n1L+LDsQ2UO5+cjBwPNYh+xBZvO6fKoJIfmfyNpxw+kxmyKWlK+55dF5eMH1u327DMJvvA==

Base64Url: rMBgC0ismGdd5rd7n1L-LDsQ2UO5-cjBwPNYh-xBZvO6fKoJIfmfyNpxw-kxmyKWlK-55dF5eMH1u327DMJvvA

哈希验证成功:True

但是签名仍然无效。

0 投票
1 回答
376 浏览

java - java - 如何使用secp256r1椭圆曲线密钥对在java中执行加密和解密?

我们需要使用 EC 密钥对在 java 中执行一些字符串消息的加密/解密。密钥对已使用 secp256r1 椭圆曲线生成。我们只想使用 java 核心实用程序。

加密代码 - 在 java 服务器端解密代码 - 它假设在 android 和 ios 密钥 - 非对称 EC 密钥对,在 java 加密端随时可用的公钥和在 android/ios 解密端随时可用的私钥。我们不必担心密钥分配,机制已经存在。

由于跨平台存在加密和解密代码,我们希望避免使用任何第三方库,因为它可能不适用于所有三个平台 - java、android、ios

ECIES,一种加密对我们有用,但如何在普通的 java 实用程序或一些库中进行,这些库在所有三个平台上都可用 - java、android、ios

我的示例代码(java加解密)——

但上面的代码让我出错 -

在线 -iesCipher.init(Cipher.ENCRYPT_MODE, ecKeyPair.getPublic());

请建议我在这里缺少什么。

0 投票
0 回答
186 浏览

c - secp256r1 上的 ECDSA 和 asn1 编码

我得到了以下go-program:

我想知道,东西是如何连接的。有一个 asn1 编码是什么意思。当我解组它时,我有 68 字节的切片。但是当我解组 r, s big.Int 值时,我得到了 65 字节(64 字节,前缀字节为 0x04)。我也无法理解为什么 r2 和 s2 变为 nil。我可以解组但不能编组签名...操作是可逆的吗?

我想为这个库提供签名和公钥: https ://github.com/kmackay/micro-ecc/tree/static

但我不知道,要采取什么字节片:(

0 投票
0 回答
76 浏览

python - 如何将 x509.get_pubkey().type() 转换为人类可读的字符串?

我想打印 SSL 公钥类型:

问题,它是一个数字...例如,我想打印“secp256r1”。我该怎么做?