openHiTLS 新功能实践:基于命令行的非对称加解密与数字签名操作指南

dawn_r1sing Lv4

openHiTLS 新功能实践

openHiTLS 的设计哲学非常清晰:高效、敏捷、全场景覆盖。项目采用高度模块化的架构,算法与协议特性可按需裁剪,从而灵活控制 RAM/ROM 的占用规模。目前,openHiTLS 已支持标准的对称/非对称密码算法、(D)TLS 及 (D)TLCP 等安全通信协议,并针对 ARM、x86 等主流 CPU 架构做了深度性能优化。

在 TLS 握手机制中,客户端与服务端需要协商一套“密码套件”(Cipher Suite),以约定本次连接中使用的密钥交换、认证、加密和消息认证算法。此前,openHiTLS 在算法函数、对称加密、密钥生成等基础能力上已有扎实积累,而本次贡献的重点,正是将非对称加解密与数字签名能力完整地接入到工具层,让开发者能够开箱即用。


本次升级:我们带来了什么

这次开源贡献围绕密码套件的功能完善展开,主要集中在以下两个方向:

1. 公钥加密(asymutil

基于 RSA 算法实现了完整的非对称加解密流水线。支持从密钥文件加载公钥/私钥、OAEP 填充模式、分段加解密,以及加密私钥的口令保护。

2. 数字签名(sign

实现了 SM2 与 ECDSA 两大签名体系,覆盖密钥加载、摘要计算、签名生成与验证全流程。针对国密场景,特别适配了 SM2+SM3 的组合;而 ECDSA 则支持 P-256 等多种曲线,并可灵活选用 SM3、SHA256、SHA384、SHA512、SHA1 等摘要算法。


核心能力详解

RSA 非对称加密与分段处理

asymutil 的实现中,RSA 加密采用了 OAEP 填充模式(目前基于 SHA256 构建掩码生成函数)。由于 RSA 对单次加密的数据长度存在严格上限,实现中采用了分段加解密策略。例如,在 1024 bit 密钥长度下,OAEP 的最大单次明文长度约为 62 字节(计算方式:128 - 64 - 2)。工具会根据密钥长度自动规划分段大小,确保大文件也能被可靠处理。

同时,工具充分考虑了私钥的安全状态:既可以处理经对称密码加密存储的私钥(需提供口令解密),也支持明文私钥的直接加载,满足不同环境下的使用需求。

多算法数字签名体系

sign 模块的设计兼顾了国密合规与国际通用性:

  • SM2 签名:遵循国密规范,摘要算法固定为 SM3,支持设置用户 ID(UserID)以适配 SM2 签名标准流程。
  • ECDSA 签名:支持 P-256 等标准曲线,摘要算法可自由选择 SM3、SHA256、SHA384、SHA512、SHA1。

签名结果采用分离式存储——原文件与签名文件各自独立。验签时,工具会同时读取原始数据和 .sig 签名文件,通过公钥完成验证。需要特别说明的是,当前签名操作要求私钥为明文状态,暂不支持直接在加密私钥上进行签名(需先解密)。


快速上手指南

下面通过几个典型场景,展示如何在命令行中调用这些新能力。

RSA加解密:

  1. 生成RSA公私钥文件:

    使用“123”作为口令。

1
2
3
./hitls genrsa -cipher aes128_cbc -out rsa_prv.pem 1024 #生成RSA私钥,使用aes128 cbc加密(可改),长度1024bit(可改),

./hitls pkey -in rsa_prv.pem -aes128_cbc -pubout -out rsa_pub.pem # 通过文件rsa_prv.pem提取RSA公钥,使用aes128 cbc解密(可改)
  1. 测试加解密一致:
1
nano rsa_input.txt
1
2
3
./hitls asymutil -keylen 1024 -enc -in ./rsa_input.txt -out ./rsa_mid.txt -passfile ./rsa_pub.pem -pkeyalg rsa	# 加密

./hitls asymutil -keylen 1024 -dec -in rsa_mid.txt -out rsa_output.txt -passfile ./rsa_prv.pem -pkeyalg rsa -cipher aes128_cbc -password pass:123 # 解密

SM2签名:

  1. 生成SM2公私钥文件
1
2
3
./hitls genpkey -algorithm EC -pkeyopt ec_paramgen_curve:sm2 -out sm2_priv.pem -aes128_cbc -pass pass:123	# 生成sm2私钥,使用aes128_cbc加密(可改)

./hitls pkey -in sm2_priv.pem -aes128_cbc -passin pass:123 -pubout -out sm2_pub.pem # 通过文件sm2_priv.pem提取SM2公钥,使用aes128 cbc解密(可改)
  1. 测试签名、验签操作
1
nano sm2_input.txt
1
2
3
./hitls sign -in sm2_input.txt -out sm2_output.txt -key sm2_priv.pem -pkeyalg sm2		# 签名

./hitls sign -verify -in sm2_input.txt -sig sm2_output.txt -pubkey sm2_pub.pem -pkeyalg sm2 # 验签

P_256签名:

  1. 生成P_256公私钥文件
1
2
3
./hitls genpkey -algorithm EC -pkeyopt ec_paramgen_curve:P_256 -aes128_cbc -pass pass:123 -out P_256_priv.pem	# 生成P-256曲线上的ECDSA私钥,使用aes128_cbc加密(可改)

./hitls pkey -in P_256_priv.pem -aes128_cbc -passin pass:123 -pubout -out P_256_pub.pem # 通过文件P_256_priv.pem提取P_256公钥,使用aes128 cbc解密(可改)
  1. 测试签名、验签操作
1
2
3
./hitls sign -in P_256_input.txt -out P_256_output.txt -key P_256_priv.pem -pkeyalg ecdsa		# 签名

./hitls sign -verify -in P_256_input.txt -sig P_256_output.txt -pubkey P_256_pub.pem -pkeyalg ecdsa # 验签

致谢贡献者

本次能力的完善离不开社区开发者的共同努力。特别感谢以下五位贡献者(按姓名拼音首字母排序):

  • 董晓冉刘恩宇陆泊羽王昊伟周家熠

结语

随着非对称加密与数字签名能力的落地,openHiTLS 在密码套件层面的工具支撑已更加完整。无论你是需要在资源受限的嵌入式设备中集成轻量级 RSA 加密,还是要在国密合规场景下构建 SM2/SM3 的签名验签流程,都可以借助 openHiTLS 的模块化设计快速达成目标。

密码学的世界没有终点,只有持续的迭代与完善。欲了解更多详情,欢迎访问 openHiTLS 社区官网 及代码仓库,亲自体验这套敏捷高效的密码学开发套件。

  • Author: dawn_r1sing
  • Created at : 2026-05-25 11:55:43
  • License: This work is licensed under CC BY-NC-SA 4.0.(转载请注明出处)