问题标签 [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.
android - 在 Kotlin 中将 ByteArray 转换为 PrivateKey
我有一个原始格式的私钥,一个字节数组:
我需要将此数组转换为私钥。我使用这个功能:
我不知道如何设置getInstance
. 我的私钥是 P256,也称为 secp256r1 和 prime256v1。任何的想法 ?
提前非常感谢!
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 中的预期行为吗?
encryption - 使用 ES256 的 JWT 签名无效
我正在尝试手动创建一个 ES256 JWT 令牌。我有一个用 python 编写的小脚本,它签署了一个使用ecdsa-python的 sha256 哈希。但是jwt.io上的签名无效。
重现步骤:
- 创建 base64 标头 + 有效负载:
eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0
- 从 base64 标头 + 有效负载创建 SHA256 哈希:
FFC89E33091FFDD3C61798A0A74BF7C2D1A6FD231A6CB519F33952F7696BBE9F
- 生成 ec_private 密钥:
openssl ec -in ec_private.pem -noout -text
- 使用python小程序对SHA256哈希进行ecdsa签名
输出:
Base64:MEQCIFyP4IoZGhzGfDCPX6fVxjtB+nrXDVhOTQwdc5vu8z4eAiBNalfGHqdaO3nCmTqimpAHF+IHzxk8em+OMMHrJkPOhA==
Base64Url:MEQCIFyP4IoZGhzGfDCPX6fVxjtB-nrXDVhOTQwdc5vu8z4eAiBNalfGHqdaO3nCmTqimpAHF-IHzxk8em-OMMHrJkPOhA
哈希验证成功:True
- 检查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
但是签名仍然无效。
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());
请建议我在这里缺少什么。
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
但我不知道,要采取什么字节片:(
python - 如何将 x509.get_pubkey().type() 转换为人类可读的字符串?
我想打印 SSL 公钥类型:
问题,它是一个数字...例如,我想打印“secp256r1”。我该怎么做?