openssl pkeyutl执行SM2椭圆曲线数字签名

本文介绍如何使用opensslpkeyutl子命令执行SM2椭圆曲线数字签名及验证,适用于Ubuntu19.04、Fedora30或红帽RHEL8.0正式版。文中提供具体命令示例,包括使用私钥签名数据和使用证书验证签名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用openssl pkeyutl子命令,执行SM2椭圆曲线数字签名,需要openssl命令版本大于1.1.1正式版,推荐运行环境为Ubuntu19.04、Fedora30或红帽RHEL8.0正式版,上述操作系统自带openssl1.1.1b无需从源代码开始编译SM2国密算法支持

命令09. Sign some data using an SM2 private key and a specific ID:

openssl pkeyutl -sign -in file -inkey sm2.key -out sig -rawin -digest sm3 -pkeyopt sm2_id:someid

命令10.Verify some data using an SM2 certificate and a specific ID:

openssl pkeyutl -verify -certin -in file -inkey sm2.cert -sigfile sig -rawin -digest sm3 -pkeyopt sm2_id:someid

参考资料

手册

### Tongsuo 国密开源库简介 Tongsuo 是一个支持中国国家密码局制定的标准(简称国密标准)的开源加密库。该库实现了多种国密算法,包括但不限于SM2椭圆曲线公钥密码算法、SM3杂凑算法以及SM4分组密码算法[^1]。 ### 安装与配置 为了使用 Tongsuo 库,在大多数Linux发行版上可以通过包管理器安装依赖项并下载源码编译: ```bash git clone https://github.com/TongTech-Lab/tongsuo.git cd tongsuo ./config make && make install ``` 上述命令会克隆仓库到本地机器,并完成构建过程[^2]。 ### SM2加解密操作实例 对于基于ECC的非对称加密方案——即SM2而言,可以利用openssl命令行工具来进行简单的测试: #### 生成密钥对 ```bash openssl genpkey -algorithm sm2 -out sm2_key.pem ``` 此指令用于创建一对新的私钥和对应的公钥文件sm2_key.pem[^3]。 #### 数据加密 假设有一个名为`plaintext.txt`的纯文本文件需要被保护,则可执行如下命令实现其加密处理: ```bash openssl pkeyutl -encrypt -in plaintext.txt -pubin -inkey sm2_pub.key -rawin -out ciphertext.bin ``` 这里假定已提前提取出了公钥部分保存于`sm2_pub.key`之中[^4]。 #### 解密恢复原文本 当接收方收到经过编码的消息体ciphertext.bin之后,可通过下面的方式还原原始信息: ```bash openssl pkeyutl -decrypt -in ciphertext.bin -inkey sm2_key.pem -rawin -out recovered_plaintext.txt ``` 这一步骤需要用到之前产生的私钥来解锁消息内容[^5]。 ### SM3哈希函数应用案例 要计算任意输入数据string对应的一个固定长度摘要值,只需调用相应接口即可得到结果: ```python from hashlib import new as hash_new digest = hash_new('sm3') message = b'example message' digest.update(message) print(digest.hexdigest()) ``` 这段Python脚本展示了如何借助hashlib模块中的new()工厂方法获取指定名称为'sm3'的对象实例化对象,并传入待散列的数据流进行加工转换成十六进制字符串表示形式输出显示出来[^6]。 ### SM4对称加密实践指南 针对采用AES类结构设计而成的支持128位秘钥大小及相同尺寸区块模式下的高效序列变换机制—也就是常说作SM4来说,同样存在简便易懂的操作流程供开发者参考学习: #### 密钥初始化 先定义好用来参与运算的一串随机数作为种子材料: ```python import os key_material = os.urandom(16) # 获取16字节长的安全伪随机数值 iv_vector = bytes([0]*16) # 初始化向量IV设为空白填充型态 ``` #### 加密过程 接着把明文转化为密文表达方式存储起来: ```python from Crypto.Cipher import SM4 cipher_instance = SM4.new(key=key_material, mode=SM4.MODE_CBC, iv=iv_vector) encrypted_data = cipher_instance.encrypt(b'This is a secret.') ``` 此处引入PyCryptodome扩展库提供了更高级别的封装层使得API更加友好易于理解掌握[^7]。 #### 验证签名真伪 最后介绍关于数字证书体系下验证电子文档签署行为合法性的具体做法: ```bash openssl dgst -sm3 -sign sm2_key.pem -out signature.bin file_to_sign.txt openssl dgst -sm3 -verify sm2_pub.key -signature signature.bin file_to_sign.txt ``` 通过以上两步分别完成了对目标资源file_to_sign.txt施加数字指纹标记动作及其后续校验环节确认无误后返回OK字样提示成功[^8]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值