基于三未信安硬件加密卡生成证书失败
【问题分类】
- bug
- P2P网络相关(包含libp2p,liquid)
- 链账户身份与权限相关(证书问题、public、多签投票问题)
- 核心交易引擎相关(交易池、DAG)
- 共识相关
- 智能合约相关
- 存储相关
- SDK相关
- 长安链CMC工具
- 长安链管理台
- 长安链浏览器
- 长安链合约IDE
- 长安链web签名插件
- 跨链相关
- 轻节点相关
- 隐私计算相关
- 密码学相关
- 环境依赖
- 其他补充:三未信安硬件加密失败
【问题描述】(请对问题进行描述,方便定位问题)
基于chainmaker-cryptogen
生成硬件加密证书时失败,加密卡采用的是三未信安加密卡
,详情如下:
三未信安加密卡信息
- 加密卡信息
| 项目 | 返回值
_|_______________|______________________________________________________
1| 生产厂商 | SANSEC
2| 设备型号 | SC48-A2N
3| 设备序列号 | 2022050248010292
4| 设备版本 | v00000000
5| 支持标准版本 | v1
6| 支持公钥算法 | 00030700 | 00000000
7| 支持对称算法 | 0000a533
8| 支持杂凑算法 | 000000bf
9| 用户存储空间 | 180KB
2.预先生成的SM2签名私钥信息
查看密钥状态:
-------------
_____|____________________________________________________________________
1 | [256][ - ] [256][256] [256][256] [256][256] [256][256]
6 | [256][256] [256][256] [256][256] [256][256] [256][256]
11 | [256][256] [256][256] [256][256] [256][256] [256][256]
16 | [256][256] [256][256] [256][256] [256][256] [256][256]
21 | [256][256] [256][256] [256][256] [256][256] [256][256]
26 | [256][256] [256][256] [256][256] [256][256] [256][256]
31 | [256][256] [256][256] [256][256] [256][256] [256][256]
36 | [256][256] [256][256] [256][256] [256][256] [256][256]
41 | [256][256] [ - ][ - ] [ - ][ - ] [ - ][ - ] [ - ][ - ]
46 | [ - ][ - ] [ - ][ - ] [ - ][ - ] [ - ][ - ] [ - ][ - ]
51 | [ - ][ - ] [ - ][ - ] [ - ][ - ] [ - ][ - ] [ - ][ - ]
56 | [ - ][ - ] [ - ][ - ] [ - ][ - ] [ - ][ - ] [ - ][ - ]
操作步骤
- 设置环境变量
拷贝libupkcs11.so
到/usr/local/lib64/pkcs11/libupkcs11.so
拷贝upkcs11.ini
到/etc/upkcs11.ini
$ export HSM_LIB=/usr/local/lib64/pkcs11/libupkcs11.so
- 编译适配器
hsm_adapter.so
, 并拷贝到/usr/local/lib64/hsm_adapter.so
$ export HSM_ADAPTER_LIB=/usr/local/lib64/hsm_adapter.so
- 配置
crypto_config.yml
的pkcs11
部分
# ... 略
pkcs11:
enabled: true
type: pkcs11 #support sdf | pkcs11
library: /usr/local/lib64/pkcs11/libupkcs11.so
label: HSM
password: 11111111
session_cache_size: 10
hash: "SM3"
- 执行命令
# ./chainmaker-cryptogen generate -c crypto_config.yml -p pkcs11_keys.yml
2024/04/24 15:15:55 invalid pluginPath params[], use HSM_ADAPTER_LIB[/usr/local/lib64/hsm_adapter.so] from env
Error: CreateCertificateRequest failed, pkcs11: 0x30: CKR_DEVICE_ERROR
Usage:
chainmaker-cryptogen generate [flags]
Flags:
-h, --help help for generate
-o, --output string specify the output directory in which to place artifacts (default "crypto-config")
Global Flags:
-c, --config string specify config file path (default "../config/crypto_config_template.yml")
-p, --pkcs11_keys string specify pkcs11 keys file path (default "../config/pkcs11_keys.yml")
2024/04/24 15:15:55 failed to execute, err = CreateCertificateRequest failed, pkcs11: 0x30: CKR_DEVICE_ERROR
- 生成的
crypto-config
目录结构
# tree ./crypto-config
crypto-config
`-- wx-org1.chainmaker.org
|-- ca
| |-- ca.crt
| `-- ca.key
`-- user
`-- admin1
`-- admin1.sign.key
4 directories, 3 files
- 可能的问题发现以及未解决的问题(无法解决)
根据代码逻辑,问题所在是因为解析出来的公钥无法进行验签操作,导致后续执行失败。根据该思路,编写了如下测试程序,确实无法通过验签操作。
// ......
bcPriv, err := sdf.NewPrivateKey(sdfHandle, "1", []byte("11111111"), bccrypto.SM2)
if err != nil {
log.Fatal(err)
}
plain := []byte("hello world")
sig, err := bcPriv.SignWithOpts(plain, &bccrypto.SignOpts{Hash: bccrypto.HASH_TYPE_SM3})
if err != nil {
log.Fatal(err)
}
ok, err := bcPriv.PublicKey().VerifyWithOpts(plain, sig, &bccrypto.SignOpts{
Hash: bccrypto.HASH_TYPE_SM3,
})
if err != nil {
log.Fatal(err)
}
log.Infof(">> 验签结果 | OK:%v", ok)
- 其它问题
长安链只能根据索引读取加密卡中密钥信息吗?能否在无密钥对的情况下自动生成密钥对?代码中提供了类似
GenerateKeyPair
接口,但是没有使用。
【相关日志文件】(如果有报错日志请贴图,或者上传附件)
【系统信息】(请填写系统信息,方便定位问题)
- chainmaker-go version * : [v2.3.2]
- OS & version * : CentOS 7
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information