0

我在 nitro key hsm 上创建了一个 Brainpool EC,并希望将其用于 .NET Framework 的加密操作,例如System.Security.Cryptography.ECDiffieHellman.

我用pkcs11-tool --list-objects公钥提取,但只得到一个值,即 EC_POINT。

那么,如何获得该点的坐标呢?

DER 编码 EC_POINT

Public Key Object; EC  EC_POINT 320 bits
  EC_POINT:   0451040defed7988b095679e5aca422382d949c2e7fd937646def25cf7eb5140d41f12d077ac615773952da53efad266c8642c6877b8b215d091ba687acafd3c33f35ffb5ca6aadaf248ef1a126cd55e0d0598
  EC_PARAMS:  06092b2403030208010109
  label:      Brainpool #1
  ID:         10
  Usage:      verify

解码的 EC_POINT

这个 EC_POINT 是 DER 编码的,我用来提取 EC_POINT 的真实值

040defed7988b095679e5aca422382d949c2e7fd937646def25cf7
eb5140d41f12d077ac615773952da53efad266c8642c6877b8b215
d091ba687acafd3c33f35ffb5ca6aadaf248ef1a126cd55e0d0598

(Or this JS Script https://lapo.it/asn1js/#0451040DEFED7988B095679E5ACA422382D949C2E7FD937646DEF25CF7EB5140D41F12D077AC615773952DA53EFAD266C8642C6877B8B215D091BA687ACAFD3C33F35FFB5CA6AADAF248EF1A126CD55E0D0598 )

4

1 回答 1

5
040defed7988b095679e5aca422382d949c2e7fd937646def25cf7
eb5140d41f12d077ac615773952da53efad266c8642c6877b8b215
d091ba687acafd3c33f35ffb5ca6aadaf248ef1a126cd55e0d0598

是你的公钥。第一个字节表示它是一个未压缩的密钥(04),即其余字节中,前半部分是X坐标,后半部分是Y坐标。

Qx =0defed7988b095679e5aca422382d949c2e7fd937646def25cf7eb5140d41f12d077ac615773952d

Qy =a53efad266c8642c6877b8b215d091ba687acafd3c33f35ffb5ca6aadaf248ef1a126cd55e0d0598

http://www.secg.org/sec1-v2.pdf,第 2.3.4 节(八位字节串到椭圆曲线点转换)。

(并且由于参数 ( 06092b2403030208010109) 是 DER-oid 1.3.36.3.3.2.8.1.1.9 (brainpoolP320r1) 一切看起来都是正确的,因为 Qx/Qy 是 320 位值)

于 2017-05-15T15:06:04.983 回答