openHiTLS4cj
需要构建仓颉原生全场景密码学套件,解决服务端高并发安全传输、国密算法加速及协议栈内存安全难题。
悬赏内容
招募内容
项目背景与战略目标
在金融级交易、政务云通信、物联网设备接入及微服务网格等关键后端场景中,安全传输协议(TLS/SSL)与密码学原语是保障数据机密性、完整性与身份认证的基石。现有的开源密码库(如 OpenSSL, BoringSSL)多基于 C/C++ 开发,存在内存管理复杂、易受缓冲区溢出攻击、线程模型沉重等问题,且对国产密码算法(SM2/SM3/SM4)的支持往往依赖动态链接或插件,集成成本高且性能损耗大。
本项目旨在利用仓颉编程语言(Cangjie Language)1.0.0+重构并深度适配 openHiTLS,打造一款内存绝对安全、国密原生支持、极致并发性能的后端安全基础设施库。
内存安全与零漏洞:利用仓颉的所有权机制与借用检查器,在编译期彻底杜绝缓冲区溢出、释放后使用(Use-After-Free)及数据竞争等常见 CVE 漏洞,构建“默认安全”的密码学底座。
国密算法原生加速:内置 SM2/SM3/SM4/SM9 等国密算法的高效实现,利用仓颉内联汇编或 CJNative 调用硬件指令集(如 ARM NEON, x86 AES-NI),实现比通用实现提升 3-5 倍的加解密吞吐。
轻量级高并发模型:基于仓颉轻量级线程(Lightweight Threads)重构 TLS 握手与数据传输流程,单节点可支撑百万级并发安全连接,资源开销较传统线程模型降低 80%。
全场景协议覆盖:支持 TLS 1.2/1.3 完整协议栈,兼容 DTLS 用于 UDP 场景,提供统一的 Secure Channel 接口,无缝适配 HTTP/2, HTTP/3 (QUIC) 及自定义 RPC 协议。
核心功能需求与技术规格
功能模块分解
模块类别 | 核心职责 | 关键技术要求 (仓颉特性) | 验收依据 |
|---|---|---|---|
密码原语引擎 | 实现对称/非对称加密、哈希、签名验签(含国密套件) | 利用仓颉 | 国密 SM4 吞吐量 > 10GB/s,RSA/SM2 签名延迟 < 0.5ms |
TLS 协议栈核心 | 实现 TLS 1.2/1.3 握手状态机、密钥派生、记录层处理 | 利用状态机模式管理握手流程,所有权机制确保密钥材料不落盘、不泄露 | 握手成功率 100%,支持会话复用,抗重放攻击 |
证书与信任管理 | 解析 X.509 证书链,管理 CA 根证书,支持 OCSP Stapling | 利用强类型结构定义证书字段,自动验证有效期与签名算法 | 证书解析耗时 < 10μs,支持 CRL/OCSP 实时吊销检查 |
安全 IO 通道 | 封装 SecureSocket 接口,集成异步非阻塞 IO 模型 | 结合仓颉异步运行时,实现零拷贝读写,避免内核态与用户态频繁切换 | 百万并发连接下 CPU 占用率 < 30%,吞吐量线性增长 |
随机数与安全存储 | 提供 CSPRNG(密码学安全随机数生成),安全内存清零 | 利用系统熵源,确保随机数不可预测;利用 RAII 自动清零敏感内存 | 随机数通过 NIST SP 800-22 测试,敏感数据无内存残留 |
非功能性需求规范
性能指标:TLS 握手延迟 P99 < 5ms(局域网),大数据包加解密吞吐量 > 5Gbps(单核),并发连接数支持 > 100 万/节点。
安全要求:通过形式化验证关键算法逻辑;严禁使用不安全的外部依赖;所有密钥操作必须在安全内存区域进行,退出作用域自动清零。
可靠性:具备完善的错误恢复机制,网络波动下自动重连而不泄露状态;支持热加载证书与配置,服务不中断。
可维护性:密码算法与协议逻辑解耦,支持插拔式算法提供者;代码符合侧信道攻击防护规范(如恒定时间比较)。
核心接口设计示例 (伪代码)
// 定义加密套件枚举
enum CipherSuite {
case TLS_AES_128_GCM_SHA256
case TLS_SM4_GCM_SM3
case TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
// ... 其他套件
}
// 定义证书结构
struct X509Certificate {
subject: String
issuer: String
validFrom: TimePoint
validTo: TimePoint
publicKey: PublicKey
signatureAlgorithm: String
func verifyChain(trustAnchors: List<X509Certificate>): Result<Unit, CertError>
}
// 定义安全通道配置
struct TlsConfig {
mode: TlsMode // Client or Server
certificates: List<X509Certificate>
privateKey: PrivateKey // 所有权敏感对象
cipherSuites: List<CipherSuite>
alpnProtocols: List<String>
verifyPeer: Bool
}
// 定义安全 IO 接口
interface SecureChannel {
// 异步握手
async func handshake(): Result<Unit, TlsError>
// 异步读取
async func read(buffer: inout ByteArray): Result<Int32, TlsError>
// 异步写入
async func write(data: ByteArray): Result<Int32, TlsError>
// 获取对端证书
func getPeerCertificate(): Option<X509Certificate>
// 安全关闭
async func close(): Unit
}
// 错误类型定义
enum TlsError {
case HandshakeFailed(String)
case CertificateExpired
case DecryptError
case ProtocolViolation
case IoError(NetworkError)
}
// 工厂类
object HiTlsFactory {
static func createServerChannel(config: TlsConfig, ioContext: IoContext): SecureChannel
static func createClientChannel(config: TlsConfig, ioContext: IoContext): SecureChannel
}
项目交付物与实施路线图
阶段性交付物清单
第一阶段:核心密码原语(国密 + 国际算法)+ 基础 TLS 握手状态机 + 单元测试 (覆盖率≥95%)。
第二阶段:安全 IO 通道集成 + 证书管理体系 + 高并发压测 + 侧信道攻击防护验证。
第三阶段:完整协议栈(TLS 1.3/DTLS)+ 性能调优报告 + 模糊测试(Fuzzing)+ cjpm 发布包 + 安全白皮书。
项目实施路线图
阶段 | 核心任务 | 交付成果 | 周期预估 | 里程碑 |
|---|---|---|---|---|
基础构建 | 密码原语实现、状态机开发、单测 | 可编译库、单测集、算法基准报告 | 6-8 周 | cjpm test 全量通过,算法精度验证 |
性能攻坚 | IO 模型集成、并发优化、侧信道防护 | 压测报告、安全审计初稿 | 6-8 周 | 达到预设 QPS/延迟指标,无高危漏洞 |
生态集成 | 协议完善、Fuzzing 测试、文档发布 | 用户手册、cjpm 包、安全白皮书 | 4-5 周 | 上架仓颉三方库社区,通过第三方安全认证 |
技术实现规范与质量认证体系
仓颉语言专项质量规范
编码规范:100% 符合仓颉语言官方编码规范,通过
cjfmt自动格式化校验。类型安全:充分利用泛型与代数数据类型定义密码学对象,利用所有权机制强制管理密钥生命周期,防止泄露。
错误处理:所有安全相关操作必须显式返回
Result,严禁静默失败;敏感错误信息不得泄露给客户端。恒定时间编程:涉及密钥比较、查表等操作必须采用恒定时间算法,防止时序攻击。
测试与验证标准
单元测试:核心模块行覆盖率≥95%,重点覆盖边界条件、非法证书、 malformed 数据包。
一致性测试:通过 RFC 官方测试向量及 Google BoringSSL 测试集,确保协议行为一致。
模糊测试(Fuzzing):集成 AFL 或 LibFuzzer 对握手协议与解析逻辑进行长时间模糊测试,挖掘潜在崩溃点。
性能基准:建立与 OpenSSL, Rustls 的性能对比基准,确保在同等安全级别下性能领先。
文档与可维护性
API 文档:代码须包含规范的文档注释,详细说明各算法适用场景及安全配置建议。
架构决策记录(ADR):记录算法选型、内存管理策略及并发模型的设计依据。
安全白皮书:详细描述库的安全模型、威胁分析及防护措施。
贡献指南:明确仓颉项目构建、调试、提交及安全审查流程。
持续集成质量门禁
#!/bin/bash
# PR 自动化流水线脚本
# 1. 格式检查
cjpm fmt --check
# 2. 构建检查 (Debug & Release)
cjpm build
cjpm build --release
# 3. 静态 Lint 与安全扫描
cjpm lint --deny-warnings
# 调用额外的静态分析工具检查潜在内存问题
cjanalyze --security-level high
# 4. 全量测试与覆盖率
cjpm test --all-features --coverage
# 5. 一致性测试 (RFC Vectors)
cjpm test --suite rfc-compliance
# 6. 性能基准测试
cjpm bench --threshold 2%
# 7. 模糊测试 (定期运行)
# cjpm fuzz --duration 1h
技术栈与开发环境
核心语言:仓颉编程语言(Cangjie Language)1.0.0 及以上版本(强制)。
构建与包管理:CJPM (Cangjie Package Manager)。
测试框架:仓颉原生测试框架,集成 Fuzzing 工具。
质量工具:cjfmt, cjpm lint, cjanalyze (静态分析), cjpm bench。
环境要求:仓颉 1.0.0+ 标准工具链,CI 环境需预置国密算法测试向量及高性能网络模拟环境。
相关附件
质量认证要求
交付件
NO | 交付件描述 | 备注 |
1 | 三方库源代码 | 源代码 |
2 | 三方库测试方案和用例 | 测试用例和文档 |
3 | 用户手册,API文档,设计文档,license文档 | 资料和文档 |
验收标准
1.功能
三方库必须有明确的功能;
如果参考对标库移值开发,功能与参考三方库保持一致。
2.资料
Readme:包含简介,软件架构,目录结构,下载安装(编译构建),接口说明,使用示例,约束限制,开源协议,参与贡献等内容;
Changelog,三方库版本需包含基本的修改说明。
3.标准遵从性(可选),三方库实现需满足对应协议或行业标准,举例
appquth:支持对OAuth 的PKCE扩展;
icu4j:支持unicode标准库,通用字符集ISO/IEC 10646。
4.性能目标
性能敏感三方库接口运行性能持平对标三方库
5.开源协议遵从,必须包含License文件
放置合适的开源License协议,建议Apache License Version 2.0;
引用或参考开源三方库,需遵从开源协议。
6.网络安全要求
满足基础的网络安全红线及隐私要求,符合安全编码规范。
过程质量要求
指标分类 | 指标名称 | 指标要求 | 度量工具 | 牵引 OR Must |
代码度量 | 平均文件代码行 | ≤300 LOC | CMetricsPlus,CJMetric | Must |
总文件重复率 | C/C++≤4%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
源文件重复率 | C/C++≤4%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
平均函数或方法代码行* | ≤30 LOC | CMetricsPlus,CJMetric | Must | |
总代码重复率 | C/C++≤10%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
源文件代码重复率 | C/C++≤10%;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
平均圈复杂度 | ≤5;相比开源不劣化 | CMetricsPlus,CJMetric | Must | |
冗余代码 | “0” 【2】; | CMetricsPlus,CJMetric | Must | |
不安全函数 | NA | CMetricsPlus,CJMetric | Must | |
静态检查 | 编译告警 | “0” 【2】 | Compile工具 | 牵引 |
通用静态告警 | “0” 【2】 | Pclint plus,CJLINT | Must | |
开发者测试 | DT用例密度(个/KLOC) | > 40 | 手工 | 牵引 |
DT代码语句覆盖率 | >=85% | Gcov,cjcov | 牵引 | |
DT代码分支覆盖率 | >=50% | Gcov,cjcov | 牵引 | |
未做DT文件数 | 0 | 手工 | 牵引 | |
问题解决率 | 遗留问题DI | 整体<10 | Issue | 牵引 |
遗留致命缺陷数(0) | 0 | Issue | Must | |
累计缺陷解决率 | 85% | Issue | 牵引 | |
软件开发 | 每日构建成功率 | 100% | CI | 牵引 |
测试评估 | 测试缺陷密度(/KLOC) | 5-9 | 人工 | 牵引 |
测试用例密度(个/KLOC) | 20-40 | 人工 | 牵引 | |
初验用例自动化率 | 100% | CIDA | 牵引 | |
HLT自动化用例比率 | 【85%,95%】 | CIDA | 牵引 | |
开源第三方(含构建工具) | 开源片段引用 | 0(除例外备案类) | FOSSBOT+人工 | Must |
可信构建 | 二进制一致性 | 0(含可澄清) | 人工 | Mus |

