JWK EC公钥坐标编码机制及私钥重建P-521 JWK失败问题
问题:通过私钥重建P-521格式JWK失败
我尝试仅通过私钥重建P-521格式的JWK。根据JWK规范第4.2.1节:
“x成员包含椭圆曲线点的x坐标,采用坐标大端表示的base64url编码。”
我已按以下步骤操作:对私钥做base64url解码,将其与P-521基点进行标量乘法得到公钥点,再将x、y坐标转换为大端字节表示并重新编码为base64url格式,但结果与原JWK中的x、y字段不匹配。P-256曲线的尝试同样失败,相关代码如下:
const elliptic = require('elliptic'); const EC = elliptic.ec; const {base16, base64url} = require('rfc4648'); const BN = require("bn.js"); const padBase16ToWholeOctets = s => s.length%2===0 ? s : '0'+s; const bnToB64 = n => base64url.stringify(base16.parse(padBase16ToWholeOctets(n.toString(16)))) console.log('begin'); // forces console output to show from async IIFE (async () => { let keyPair = await crypto.subtle.generateKey({ name: "ECDSA", namedCurve: "P-521" }, true, ['sign']) let jwk = await crypto.subtle.exportKey("jwk", keyPair.privateKey) console.log(jwk) const dHex = base16.stringify(base64url.parse(jwk.d, { loose: true })) const ec = new EC('p521') const [x,y] = ec.curve.g.mul(new BN(dHex, 16, 'be')).toJSON() console.log(`expected x: ` + jwk.x) console.log(`actual x: ` + bnToB64(x)) console.log(`expected y: ` + jwk.y) console.log(`actual y: ` + bnToB64(y)) })();
内容的提问来源于stack exchange,提问作者knaccc
相关产品推荐
相关产品推荐

