news 2026/10/14 17:42:30

openHiTLS 开源密码套件全解:五大组件架构、特性全景与 CMake 构建实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
openHiTLS 开源密码套件全解:五大组件架构、特性全景与 CMake 构建实战
  • 密码学
  • 网络安全

【免费下载链接】openHiTLS

旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!

项目地址:https://gitcode.com/openHiTLS/openhitls
点击查看免费下载

openHiTLS 是面向全场景的开源密码学开发套件,提供标准密码算法、(D)TLS/(D)TLCP 安全通信协议与 PKI 证书能力,其核心设计是通过 CMake 特性开关实现模块与算法的按需裁剪。本文基于仓库 README-zh.md 展开,结合 CMakeLists.txt、cmake/hitls_options.cmake 等构建源码,系统讲解 openHiTLS 的组件划分、特性清单、构建安装流程与交叉编译方法,帮助开发者在十分钟内完成环境搭建并掌握特性级裁剪能力。

一、项目定位与架构总览

openHiTLS 的目标是提供高效、敏捷的全场景开源密码学开发套件,采用轻量级、可剪裁的软件技术架构,让密码技术应用更简单,同时探索后量子等先进算法创新实践。据 README-zh.md 描述,其架构高度模块化,RAM/ROM 尺寸取决于所选特性,已支持 5 个组件,算法特性可按需配置,并已通过 ISO 19790 认证,支持 ARM、x86 架构 CPU 上的算法性能优化。

从仓库源码结构看,当前代码版本标识为openHiTLS 0.4.0(见 include/bsl/bsl_version.h 中的OPENHITLS_VERSION_S默认值)。仓库顶层目录与五大组件一一对应,另有命令行工具与测试工程:

目录组件/角色说明
bsl/BSL(Base Support Layer)基础支持层:SAL 系统适配、ASN.1、PEM/Base64、错误堆栈、日志、列表、参数等基础能力,需与其他组件一起使用
crypto/Crypto完整密码算法库:对称/非对称算法、哈希、MAC、KDF、DRBG、后量子算法,可被 TLS 使用,也可仅与 BSL 搭配
tls/TLS覆盖 TLS1.3、DTLS1.3、TLS1.2、DTLS1.2 及 TLCP/DTLCP,包含握手、记录层、告警、证书与连接管理,可与 Crypto、BSL 或第三方密码组件、PKI 库配合使用
pki/PKI证书、CRL 解析与验证,CSR 生成,证书链生成与验证等
auth/Auth认证组件:Privacy Pass token、TOTP/HOTP、SPAKE2+ 等协议
apps/命令行工具编译产物为hitls,入口见 apps/src/hitls.c,功能类似 openssl 命令行
codecs/编解码编码/解码链(如 PKCS#8 密钥解码)
include/公共头文件按模块分层:include/crypto/、include/tls/、include/bsl/、include/pki/、include/auth/
testcode/测试工程SDV 测试用例、benchmark、demo 示例、构建脚本
cmake/构建系统特性选项、构建预设(presets)、工具链文件(toolchain)

组件间的典型搭配关系是:Crypto 既可独立与 BSL 组合提供纯算法能力,也可作为 TLS 的密码底座;TLS 还可对接第三方密码组件或 PKI 库,这种松耦合设计正是"RAM/ROM 尺寸取决于所选特性"的底层原因。

二、功能特性全景

README-zh.md 将特性分为"功能特性"与"DFX 特性"两类,完整清单如下。

2.1 协议支持

  • TLS 系:TLS1.3、DTLS1.3、TLS1.3-Hybrid-Key-Exchange(混合密钥交换)、TLS-Provider、TLS-Multi-KeyShare、TLS-Custom-Extension、TLCP、DTLCP、TLS1.2、DTLS1.2;
  • 认证协议:Privacy Pass token、HOTP、TOTP、SPAKE2+。

在构建系统中,这些协议能力对应独立的特性开关。以 cmake/hitls_options.cmake 为例,HITLS_TLS_PROTO_TLS13、HITLS_TLS_PROTO_DTLS13、HITLS_TLS_PROTO_TLCP11、HITLS_TLS_PROTO_DTLCP11等选项可单独裁剪,TLS 1.3 的扩展能力(如HITLS_TLS_FEATURE_KEM混合 KEM、HITLS_TLS_FEATURE_PHA握手后认证、HITLS_TLS_FEATURE_SESSION_TICKET会话票证)也都是独立选项,说明协议特性支持细粒度开关。

2.2 密码算法

类别支持算法
后量子算法ML-DSA、ML-KEM、SLH-DSA、XMSS、Classic McEliece、FrodoKEM
对称算法AES、SM4、Chacha20 及各类对称加密模式(GCM/CBC/CTR/CCM/ECB/XTS/CFB 等)
传统非对称算法RSA、RSA-Bind、DSA、ECDSA、EDDSA、ECDH、DH、SM2、SM9、Paillier、ElGamal
随机数DRBG、GM-DRBG
密钥派生HKDF、SCRYPT、PBKDF2
哈希算法SHA 系列、MD5、SM3
消息认证码HMAC、CMAC
其他HPKE

源码侧可在 crypto/ 下逐目录印证:crypto/mlkem/、crypto/mldsa/、crypto/slh_dsa/(hbs 目录)、crypto/xmss(hbs 目录)、crypto/mceliece/、crypto/frodokem/对应后量子算法,crypto/sm2/、crypto/sm9/、crypto/ecc/、crypto/rsa/、crypto/dh/对应国密与传统非对称算法。后量子证书与 TLS 混合密钥交换能力由HITLS_TLS_FEATURE_KEM、HITLS_CRYPTO_HYBRIDKEM、HITLS_CRYPTO_COMPOSITE等选项支撑。

2.3 PKI 能力

  • 后量子能力:XMSS、ML-DSA、ML-KEM、SLH-DSA 证书能力,ML-DSA CMS SignedData 能力;
  • 传统证书能力:X.509 解析验证、CRL 解析验证、CSR 请求生成、证书链生成、部分/全部证书链验证;
  • 封装格式:PKCS7、PKCS8、PKCS12。

实现位于 pki/:pki/x509_cert/(证书)、pki/x509_crl/(CRL)、pki/x509_csr/(CSR)、pki/x509_verify/(链验证)、pki/cms/(CMS)、pki/pkcs12/(PKCS#12)。配套的端到端示例可参考 testcode/demo/example_pki_certificate_generate.c、testcode/demo/example_pki_chain_verify.c、testcode/demo/example_pki_pq_certificate_generate.c 等。

2.4 命令行工具

支持基础命令、随机数、加解密、密钥和参数管理、证书等。命令行工具编译产物为hitls,其入口在 apps/src/hitls.c,apps/下按命令拆分源文件(如app_rand.c、app_enc.c、app_x509.c、app_client.c等),命令列表覆盖help/version/list、enc/mac/dgst/kdf、genpkey/pkeyutl、x509/crl/req/verify、s_client/s_server等,详见 docs/zh/4_使用指南/5_命令行指南.md。

注意:hitls命令行工具默认不参与编译,需在 CMake 配置时显式开启-DHITLS_BUILD_EXE=ON。

2.5 DFX(可设计、可维护、可测试)特性

  • 弹性架构:特性高度模块化,支持按需裁剪特性;
  • 性能优化:基于 ARMv8、ARMv7、x86_64 CPU 的算法性能优化(构建选项含HITLS_ASM_X8664、HITLS_ASM_ARMV8、HITLS_ASM_ARMV7等,且支持 AVX512 变体HITLS_ASM_X8664_AVX512);
  • 可维可测:支持基于日志和错误堆栈的功能维测,日志模块位于 bsl/log/,错误堆栈模块位于 bsl/err/。

三、快速开始:克隆与默认构建

按 README-zh.md「开发 → 快速开始」,最小构建路径如下:

git clone https://gitcode.com/openhitls/openhitls.git cd openhitls mkdir -p build && cd build cmake .. && make && make install

其中:

  • cmake ..为默认构建,启用所有特性,同时生成静态库和共享库。从 cmake/hitls_options.cmake 可见HITLS_BUILD_PROFILE默认值为full,而 cmake/presets/full.cmake 会强制打开HITLS_BSL、HITLS_CRYPTO、HITLS_PKI、HITLS_TLS、HITLS_AUTH五个组件开关;
  • 默认安装前缀为/usr/local:头文件安装至/usr/local/include/hitls/下按模块划分的子目录(对应 CMakeLists.txt 末尾的install(DIRECTORY ...)规则),库文件安装至/usr/local/lib;
  • 非 root 用户执行make install需加sudo,或在配置时通过-DCMAKE_INSTALL_PREFIX=<目录>指定自定义前缀。

构建完成后,仓库中还提供了一整套算法级 demo(见 testcode/demo/,含 TLS1.2/1.3 基础握手、DTLS1.3 UDP、SM2 签名验签、SM3 摘要、ML-KEM 封装解封装等数十个示例),以及 benchmark 工程(testcode/benchmark/),可作为集成后的验证与压测素材。

四、CMake 构建选项详解

openHiTLS 使用纯 CMake 构建系统,通过-D参数控制所有构建选项。在 README-zh.md 给出的常用配置之上,结合 docs/zh/4_使用指南/1_构建及安装指导.md 的完整参数表,常用命令与参数如下。

4.1 常用配置命令

# 准备构建目录 cd openhitls && mkdir -p ./build && cd ./build # 默认构建(启用所有特性,同时生成静态库和共享库) cmake .. # 全量构建(使用预设) cmake .. -DHITLS_BUILD_PROFILE=full # 手动选择特性(不加载内置预设,只启用 SHA256) cmake .. -DHITLS_BUILD_PROFILE=none -DHITLS_CRYPTO_SHA256=ON # 启用汇编优化(自动检测平台类型:x86_64 / ARMv8 / ARMv7) cmake .. -DHITLS_ASM=ON # x86_64 汇编优化全量构建 cmake .. -DHITLS_BUILD_PROFILE=full -DHITLS_ASM_X8664=ON # 构建命令行工具 hitls cmake .. -DHITLS_BUILD_EXE=ON # 打包为单个库 cmake .. -DHITLS_BUNDLE_LIB=ON # 仅静态库 / 仅动态库 cmake .. -DHITLS_BUILD_SHARED=OFF cmake .. -DHITLS_BUILD_STATIC=OFF # 覆盖编译选项 / 链接选项 cmake .. -DHITLS_COMPILE_OPTIONS="-O0;-g" cmake .. -DHITLS_SHARED_LINK_FLAGS="-shared;-Wl,-z,now" # 修改构建类型 cmake .. -DCMAKE_BUILD_TYPE=Debug # 执行构建和安装 make -j && make install

4.2 核心参数说明

CMake 参数说明
HITLS_BUILD_PROFILE构建预设,可选值full、iso19790、none;none表示跳过内置预设,仅使用显式传入的特性开关
HITLS_BSL/HITLS_CRYPTO/HITLS_TLS/HITLS_PKI/HITLS_AUTH启用/禁用对应组件(ON/OFF)
HITLS_CRYPTO_<算法名>启用/禁用特定算法特性,如HITLS_CRYPTO_SHA256=ON、HITLS_CRYPTO_SM2=ON
HITLS_BUILD_STATIC/HITLS_BUILD_SHARED构建静态/共享库,默认均为 ON
HITLS_BUNDLE_LIB将所有模块打包为单个库
HITLS_BUILD_EXE构建可执行命令行工具hitls,默认 OFF
HITLS_ASM自动检测平台并启用汇编优化
HITLS_ASM_X8664/HITLS_ASM_ARMV8/HITLS_ASM_ARMV7指定架构的汇编优化
HITLS_ASM_X8664_AVX512x86_64 AVX512 汇编优化,自动连带开启HITLS_ASM_X8664
HITLS_PLATFORM_ENDIAN/HITLS_PLATFORM_BITS/HITLS_PLATFORM_INT128手动指定目标平台字节序、位数、128 位整数支持(通常自动检测,无需手动设置)
HITLS_SKIP_CONFIG_CHECK跳过未满足依赖项的配置检查

4.3 特性开关的层级与依赖推导

从 cmake/hitls_options.cmake 的选项组织方式可以看出,特性开关采用父-子层级:例如HITLS_CRYPTO_MD代表所有哈希算法,开启它会连带启用HITLS_CRYPTO_MD5、HITLS_CRYPTO_SHA256等子项;反向亦然——只开启子项时构建系统会自动补全父项。文件头注释明确说明:"when a user enables HITLS_CRYPTO_MD5, HITLS_CRYPTO_MD is automatically enabled"。

这一机制由根 CMakeLists.txt 中的三段式流程实现:

# Derive all children for each enabled option hitls_feature_children_derive() # Derive TLS suite options based on cipher, key exchange and authentication method selections hitls_tls_suites_derive() # Derive all dependencies for each enabled option hitls_feature_dependencies_derive()

即:先由显式开启的选项向上推导父特性,再根据密码算法、密钥交换与认证方式的选择推导 TLS 套件(cipher suite)组合,最后向下推导依赖。随后hitls_generate_config_h_file生成构建目录下的config/hitls_build_config.h(模板见 cmake/config.h.in),hitls_collect_feature_macros收集全部特性宏并通过add_compile_definitions注入编译,hitls_config_check则打印未满足依赖的警告。这意味着开发者只关心业务语义开关(如HITLS_CRYPTO_MLKEM=ON),编译宏、父特性、TLS 套件组合都由构建系统自动推导,这也是"按需裁剪"能落地的关键。

4.4 构建预设(Profile)

仓库在 cmake/presets/ 下提供了两套预设文件:

  1. full预设(cmake/presets/full.cmake):一键打开全部五个组件(BSL/Crypto/PKI/TLS/Auth),即默认构建行为;
  2. iso19790预设(cmake/presets/iso19790.cmake):面向 ISO 19790 合规模式的最小集,只启用 EAL/Provider/CMVP-ISO19790 模块与合规算法组合(AES、Chacha20、SHA1/SHA2/SHA3/SM3、HMAC/CMAC/GMAC、HKDF/PBKDF2、DRBG CTR/HASH/HMAC、RSA/DSA/DH/ECDSA/ECDH/SM2/Ed25519/X25519、SLH-DSA/ML-KEM/ML-DSA 等),并通过-Wl,--version-script链接 cmake/presets/libhitls_cmvp.ld 版本脚本,约束导出符号——这与 README 中"已支持 5 个组件、通过 ISO 19790 认证"的描述相互印证。

4.5 交叉编译

交叉编译推荐使用仓库自带的工具链文件(cmake/toolchain/ 下提供 aarch64、arm32、riscv64、macOS 等常见平台模板):

cd openHiTLS && mkdir -p ./build && cd ./build cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/toolchain/aarch64-linux-gnu-gcc.cmake make -j

也可以不用工具链文件,直接在配置阶段指定交叉编译器(如 aarch64-linux-gnu-gcc):

cmake .. \ -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_SYSTEM_PROCESSOR=aarch64 \ -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \ -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \ -DCMAKE_ASM_COMPILER=aarch64-linux-gnu-gcc

工具链文件的实质是设置CMAKE_SYSTEM_NAME/CMAKE_SYSTEM_PROCESSOR并通过find_program定位前缀编译器,如 cmake/toolchain/aarch64-linux-gnu-gcc.cmake 所示。

依赖提示:DTLS 特性依赖 sctp,默认未启用,如需开启需提前在系统中预装 sctp 依赖。

此外,testcode/script/build_hitls.sh 提供了开发态的一键构建脚本,支持debug、asan、ctvalgrind、pure_c(纯 C 无汇编)、x86_64、armv8_le、riscv64等模式,适合开发调试场景快速验证。

4.6 集成到 C/C++ 工程

安装后头文件按模块分层安装于/usr/local/include/hitls/<模块>/,代码引用哪些模块就需要为哪些模块加-I,例如仅引用 crypto 与 bsl:

gcc application.c -o app \ -lhitls_crypto -lhitls_bsl \ -I /usr/local/include/hitls/crypto -I /usr/local/include/hitls/bsl \ -L /usr/local/lib

链接动态库的程序首次运行前需保证动态库可被加载:Linux 执行sudo ldconfig刷新缓存;macOS 设置export DYLD_LIBRARY_PATH=/usr/local/lib或编译时追加-Wl,-rpath,/usr/local/lib。否则会出现libhitls_crypto.so: cannot open shared object file报错。最小验证用例(SM3 摘要)与完整接口用法可参考 docs/zh/3_快速入门.md。

五、文档体系与深入路径

README-zh.md 的「文档」一节指向 docs/index/index.md,其中组织了完整的中文/英文文档索引:

文档内容相对路径
发行声明版本说明docs/zh/1_发行声明.md
关键特性产品特性总览docs/zh/2_关键特性.md
快速入门安装、集成、最小示例docs/zh/3_快速入门.md
构建及安装指导CMake 参数、交叉编译docs/zh/4_使用指南/1_构建及安装指导.md
测试指南SDV 测试框架与执行docs/zh/4_使用指南/2_测试指南.md
配置指南特性说明docs/zh/4_使用指南/4_配置指南.md
命令行指南hitls 全部命令docs/zh/4_使用指南/5_命令行指南.md
加密完保应用开发指南Crypto EAL 接口开发docs/zh/5_开发指南/1_加密完保应用开发指南.md
安全通信应用开发指南TLS 协议栈开发docs/zh/5_开发指南/2_安全通信应用开发指南.md
API 参考接口全集docs/zh/5_开发指南/3_API参考.md
provider 开发指南Provider 机制docs/zh/5_开发指南/4_provider开发指南.md
CMake 构建系统开发配置指南构建系统内部机制docs/zh/5_开发指南/6_CMake构建系统开发配置指南.md
术语列表术语对照docs/zh/6_附录/1_术语列表.md

六、贡献与许可

  • 项目采用 Mulan PSL v2 许可证(见 LICENSE);
  • 有意贡献代码者需先在 CLA 签署平台完成 CLA 签署,再 fork 官方 Git 库并克隆自己的公共副本进行开发;
  • 漏洞类问题(密码缺陷、内存安全、时序侧信道)应通过 SECURITY.md 所述渠道上报;
  • 贡献流程与提交规范见 CONTRIBUTING-zh.md。

七、小结

openHiTLS 以"BSL 基础层 + Crypto 算法层 + TLS 协议层 + PKI 证书层 + Auth 认证层"的模块化组织,配合 CMake 特性开关的父子推导与依赖自动补全机制,实现了从"全量构建"到"仅保留某几个算法"的连续裁剪粒度。对于使用者,cmake .. && make && make install即可完成默认全量集成;对于裁剪场景,掌握HITLS_BUILD_PROFILE三值(full/iso19790/none)与HITLS_CRYPTO_*、HITLS_TLS_*、HITLS_BUNDLE_LIB等核心开关即可覆盖绝大多数工程需求。算法示例、测试用例与 benchmark 均随仓库提供(testcode/),可作为裁剪正确性与性能评估的验证手段。

  • 密码学
  • 网络安全

【免费下载链接】openHiTLS

旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!

项目地址:https://gitcode.com/openHiTLS/openhitls
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 17:42:30

STM32F103 ADC+LCD+串口三外设协同设计实战

简介&#xff1a;本资源是一套基于STM32F103ZET6的嵌入式综合实践工程&#xff0c;面向嵌入式初学者与课程设计者&#xff0c;聚焦ADC电压采集、LCD实时显示与UART串口数据上传三大核心功能&#xff0c;解决模拟信号获取—本地可视化—远程传输的一体化开发需求。压缩包共88个文…

作者头像 李华
网站建设 2026/10/14 17:41:59

Surfer 13 从安装到精通:网格化、等值线图与脚本自动化实战指南

简介&#xff1a;Surfer 13 是美国 Golden Software 公司推出的三维可视化与等值线绘图软件&#xff0c;广泛应用于地质、测绘、气象、环境等领域的空间数据成图与网格分析。本资源面向需要快速上手三维表面图、等值线图与影像图绘制的科研人员、工程师及地学专业学生&#xff…

作者头像 李华
网站建设 2026/10/14 17:41:12

Java3D三个jar库详解:j3dcore、j3dutils、vecmath实战指南

简介&#xff1a;Java3D是Oracle开源的Java三维图形编程库&#xff0c;基于OpenGL&#xff0c;可在Java平台上创建并交互3D场景。资源包将Java3D开发所需的核心依赖打包齐全&#xff0c;包含j3dcore、vecmath、j3dutils三个JAR库&#xff0c;其中j3dcore负责场景图管理与渲染&a…

作者头像 李华
网站建设 2026/10/14 17:40:43

Vue3+TypeScript音乐项目实战:从工程搭建到播放器状态管理

都说后端项目看状态流转&#xff0c;前端项目看交互设计。但如果你想把 Vue 3 和 TypeScript 同时练扎实&#xff0c;音乐类项目确实是一个绕不开的样本——它既需要真实的网络请求和状态管理&#xff0c;又需要处理音频播放、数据缓存、列表渲染这些高频场景。我在复盘 vue-ty…

作者头像 李华
网站建设 2026/10/14 17:40:14

空间-角度注意力网络:光场重建中的纹理增强与视差对齐

光场重建&#xff08;Light Field Reconstruction&#xff09;是这几年我持续在跟的方向&#xff0c;断断续续读了不少论文&#xff0c;多数工作都是在堆网络深度或者把各种花哨的卷积模块塞进去&#xff0c;但真正把空间维度和角度维度分开来做文章、还做明白了的&#xff0c;…

作者头像 李华
网站建设 2026/10/14 17:39:48

openHiTLS 社区贡献指南:CLA 签署、Issue 讨论与本地构建验证实战

密码学网络安全 【免费下载链接】openHiTLS 旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件&#xff0c;通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求&#xff0c;让密码技术应用更简单&#xff0c;同时探索后量子等先进算法创新实践&#xff…

作者头像 李华