You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python从JWK生成密钥验证新西兰疫苗通行证COSE签名?

报错核心原因:

  1. 混淆了EC2类型和OKP类型密钥的参数常量,政府提供的JWK是EC2类型密钥,不能使用OKP前缀的参数
  2. 曲线参数赋值错误,之前将曲线参数赋值为密钥类型常量,未对应JWK中的P-256曲线
  3. 公钥参数映射错误,将x、y值赋值到了OKP类型的专属字段中

修正代码

首先导入所需常量:

from cose.keys import CoseKey
from cose.keys.keytype import KtyEC2
from cose.keys.curves import P256
from cose.keys.ec2 import EC2KpX, EC2KpY, EC2KpCurve
from cose.keys.keyops import VerifyOp
from cose.headers import KpKid, KpKeyOps

修正后的密钥字典配置:

key_as_dict = {
    KpKty: KtyEC2,
    EC2KpCurve: P256,
    KpKid: kid,
    KpKeyOps: [VerifyOp],
    EC2KpX: jwk_key['x'],
    EC2KpY: jwk_key['y'],
}
govt_key = CoseKey.from_dict(key_as_dict)
cose_decoded.key = govt_key
print("key ready")
print("签名验证结果", cose_decoded.verify_signature())

映射规则说明

政府提供的JWK和COSE密钥字典的对应关系如下:

  • JWK的kty: "EC"对应KpKty字段,取值固定为KtyEC2
  • JWK的crv: "P-256"对应EC2KpCurve字段,取值固定为P256常量
  • JWK的x字段直接对应EC2KpX,无需额外解码
  • JWK的y字段直接对应EC2KpY,无需额外解码
  • 密钥ID直接赋值到KpKid字段即可

内容的提问来源于stack exchange,提问作者hey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:15:02