Go miekg/pkcs11模块ECDSA模板(secp256k1)参数配置问题求解
miekg/pkcs11模块配置secp256k1 ECDSA密钥模板的实操修正
- 先纠正模板里的核心错误:严禁将
CKA_ECDSA_PARAMS属性放入私钥模板,该属性按照PKCS#11标准仅允许挂载在公钥模板下,哪怕后续参数值填的完全正确,只要放在私钥模板里,就会触发模块的规范校验拦截,根本无法完成密钥生成流程。 - secp256k1曲线对应的
CKA_ECDSA_PARAMS固定参数值:该属性存储的是secp256k1曲线OID的DER编码结果,经不同硬件安全模块、密码机、软加密库实际适配验证,可正常识别secp256k1曲线的标准字节数组为:
[]byte{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x0A} - 修正后的公私钥模板写法(移除原私钥模板中错误放置的曲线参数,将曲线参数迁移至公钥模板):
// 私钥模板(去掉原代码里错误添加的CKA_ECDSA_PARAMS行) privateKeyTemplate := []*pkcs11.Attribute{ pkcs11.NewAttribute(pkcs11.CKA_TOKEN, tokenPersistent), pkcs11.NewAttribute(pkcs11.CKA_SIGN, true), pkcs11.NewAttribute(pkcs11.CKA_LABEL, label), pkcs11.NewAttribute(pkcs11.CKA_SENSITIVE, true), pkcs11.NewAttribute(pkcs11.CKA_EXTRACTABLE, true), } // 公钥模板(在此处配置secp256k1曲线参数) publicKeyTemplate := []*pkcs11.Attribute{ pkcs11.NewAttribute(pkcs11.CKA_TOKEN, tokenPersistent), pkcs11.NewAttribute(pkcs11.CKA_VERIFY, true), pkcs11.NewAttribute(pkcs11.CKA_LABEL, label + "_pub"), pkcs11.NewAttribute(pkcs11.CKA_ECDSA_PARAMS, []byte{0x06, 0x05, 0x2B, 0x81, 0x04, 0x00, 0x0A}), }
- 适配提示:部分遵循PKCS#11 v3.0规范的新实现会弃用旧的
CKA_ECDSA_PARAMS属性常量,可将其替换为CKA_EC_PARAMS,传入相同的secp256k1 DER编码值即可正常适配。
内容的提问来源于stack exchange,提问作者Jorge Alvarado
相关产品推荐
相关产品推荐

