Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Sign in
issue
issue
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 23
    • Issues 23
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Commits
  • Issue Boards
Collapse sidebar

新注册的用户请输入邮箱并保存,随后登录邮箱激活账号。后续可直接使用邮箱登录!

  • chainmaker
  • issueissue
  • Issues
  • #1059

Closed
Open
Opened Apr 24, 2024 by zhang yong@zhangy2 of 19 tasks completed2/19 tasks

基于三未信安硬件加密卡生成证书失败

【问题分类】

  • bug
  • P2P网络相关(包含libp2p,liquid)
  • 链账户身份与权限相关(证书问题、public、多签投票问题)
  • 核心交易引擎相关(交易池、DAG)
  • 共识相关
  • 智能合约相关
  • 存储相关
  • SDK相关
  • 长安链CMC工具
  • 长安链管理台
  • 长安链浏览器
  • 长安链合约IDE
  • 长安链web签名插件
  • 跨链相关
  • 轻节点相关
  • 隐私计算相关
  • 密码学相关
  • 环境依赖
  • 其他补充:三未信安硬件加密失败

【问题描述】(请对问题进行描述,方便定位问题)

基于chainmaker-cryptogen生成硬件加密证书时失败,加密卡采用的是三未信安加密卡,详情如下:

三未信安加密卡信息

  1. 加密卡信息
    |     项目      |   返回值  
   _|_______________|______________________________________________________
   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 |  [ - ][ - ]  [ - ][ - ]  [ - ][ - ]  [ - ][ - ]  [ - ][ - ]

操作步骤

  1. 设置环境变量
    拷贝 libupkcs11.so 到 /usr/local/lib64/pkcs11/libupkcs11.so
    拷贝 upkcs11.ini 到 /etc/upkcs11.ini
$ export HSM_LIB=/usr/local/lib64/pkcs11/libupkcs11.so
  1. 编译适配器 hsm_adapter.so, 并拷贝到 /usr/local/lib64/hsm_adapter.so
$ export HSM_ADAPTER_LIB=/usr/local/lib64/hsm_adapter.so
  1. 配置 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"
  1. 执行命令
# ./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
  1. 生成的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
  1. 可能的问题发现以及未解决的问题(无法解决)
    根据代码逻辑,问题所在是因为解析出来的公钥无法进行验签操作,导致后续执行失败。根据该思路,编写了如下测试程序,确实无法通过验签操作。
// ......
        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)
  1. 其它问题 长安链只能根据索引读取加密卡中密钥信息吗?能否在无密钥对的情况下自动生成密钥对?代码中提供了类似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
Assignee
Assign to
None
Milestone
None
Assign milestone
Time tracking
None
Due date
None
Reference: chainmaker/issue#1059

Copyright © 2021 ChainMaker Org. All Rights Reserved. 长安链 版权所有。