一、个人简介
大家好,我是吴灿,硕士在读于西安电子科技大学网络空间安全专业,师从苏锐丹教授,主要研究方向为协议开发与系统安全开发。研究生期间曾参与openHiTLS社区《国密数据报传输层安全协议DTLCP的实现》课题,负责DTLCP协议的原型实现等工作,并获得网络安全学院学生创新资助计划二期优秀学生称号及开源安全奖励计划二等奖。目前正在进行国密传输协议的抗量子改造工作研究。
二、缘起:初识openHiTLS
研一下学期时候,导师苏锐丹老师鼓励我们积极参与开源社区活动,并推荐了openHiTLS社区。当看到openHiTLS社区发布的《国密数据报传输层安全协议DTLCP的实现》课题时,我立刻意识到这是一次难得的机会:我过往经历和技术栈,与项目需求高度契合,于是撰写项目计划书进行了申报,并有幸成功中选。
在加入openHiTLS前,我早已是开源的受益者:我曾使用过许多开源项目,在使用时为了满足特定需求也对源码进行过修改;也曾将自己写过的代码和文档托管在开源平台上,这些经历让我深刻体会到开源的魅力。但我从未向多人开源项目提交过代码,从未真正迈出社区贡献的第一步,"向顶级开源项目提交代码"始终是藏在心底的愿望。
加入契机三要素:导师的信任支持让我能专注研发;国密协议方向与个人技术栈完美匹配;渴望实现从"开源使用者"到"贡献者"的身份转变。
三、初探:破冰之旅
从"跑通代码"到"理解架构"
在开源的世界里,让代码跑起来,把项目用起来,往往是熟悉一个项目最快速的方式。由于我的项目内容是DTLCP协议的支持,所以在项目进展初期,我首先通过查阅项目文档了解了如何编译,运行测试用例。接着通过观察项目结构定位到与协议相关的代码开始进行熟悉。由于当时仓库代码存在着示例代码版本与核心代码不一致的情况,我对示例代码进行了较多修改,最终成功匹配核心代码的API,调通了示例代码,不仅解决了问题,更对核心代码逻辑有了更直观理解。
第一次PR的"成人礼"
完成项目任务书首个目标后,我满怀期待地提交了人生第一个代码合并请求PR。然而企业导师的反馈给我上了生动一课:"代码实现了功能,但缺少单元测试和建链测试,工业级代码必须保证可验证性。"
接下来的两周,我系统学习了openHiTLS的测试框架,理解了单元测试的工作原理和通用的编写原则,并进行了单元测试、建链测试的补充。企业导师审阅完代码后,我们就其中的一些问题在社区中展开了讨论,仅靠打字无法快速说明的问题则约定好会议进行讨论。整个过程中进行了多次迭代,历时近一个月代码终于被合并。
心得体会:这是我在openHiTLS社区,也是在开源社区中提出的第一个PR,也是第一个被合并的PR。通过这次代码提交,我了解了成熟的开源社区完整的开发、测试流程,也体会到工业界代码的严谨性。
四、深耕:在实践中突破与成长
(一)核心项目 1:DTLCP协议实现与适配
项目背景:基于openHiTLS开发基于数据报传输层密码安全协议,openHiTLS当前已经实现了SM2/3/4基础算法和DTLS、TLS协议,需要基于现有框架实现数据报传输层密码安全协议。
项目成果:
1. 完成了基于数据报的DTLCP协议原型实现。对国密密码套件的逻辑和DTLS协议的握手流程进行复用,建链成功,并对DTLCP over UDP的握手数据包进行分析,符合GM/T 0128-2023标准。在完成开发的基础上未改变基础架构,功能上不影响原有的协议功能,代码风格、API命名符合openHiTLS风格,对各功能进行了相应测试用例的设计、编写和提交,代码可以通过openHiTLS门禁,通过ASAN内存扫描,最终都被合并。经过测试后,DTLCP协议建链过程中的平均内存占用小于100KB,平均耗时为39ms,平均吞吐量为193Mbps。
2. 提供了较优的DTLCP与TLCP版本号冲突的解决方案,使得对不同协议的判断独立于版本号,为后续同时支持国密和国际套件的实现提供便利,减小后续重构压力,同时保持对代码最小程度的改动。
遇到的挑战:在项目进展中,我遇到的一个比较大的挑战是DTLCP协议与TLCP协议版本号冲突的问题。该问题会导致核心握手代码无法区分两种协议,也就无法进入正确的条件分支达到预期执行结果。
解决方式:面对该问题,在企业导师的指导下,我首先调研了其他开源协议库处理版本号的方式。但现有的套件面临的场景没有openHiTLS所面临的场景复杂,它们实现的协议较少,而我们要面临的不仅有国际和国密握手协议的同时支持,还要面对国密协议内的版本冲突问题,它们的解决方案只能提供有限的参考意义。后来提出借用已有的协议位掩码体系来标识所支持的握手协议,使得对不同协议的判断独立于版本号,从而避免版本号冲突可能带来的问题,规整了字节流和数据报的分支点以及国密和国际套件的分支点,为后续同时支持国密和国际套件的实现提供便利,减小后续重构压力,同时保持对代码最小程度的改动。。
(二)核心项目 2:openHiTLS社区生态建设
项目背景:技术的价值不仅在于实现,更在于分享。在社区开发中,我发现新加入开发者常面临"入门难"问题:编译链接报错、缺乏协议测试示例、日志信息不直观等。为此,我将精力投入到生态完善中:
- 文档建设:撰写《基于SCTP的DTLS协议实验指导书》、《openHiTLS TLCP实验指导书》两篇技术博客,并提供TLCP、DTLS over SCTP协议的服务端和客户端测试代码。相关指导书文档被社区官网博客收录,帮助开发者快速上手。
- 代码健壮性优化:发现并修复echo命令换行符导致的SCTP测试跳过问题,增强了核心代码健壮性;发现并解决两处仓库代码在编译链接错误,提升开发者和用户的使用便捷性。
- 调试体验提升:发现了文档及运行时打印出的日志的问题并提交了修改,有效的提升了问题定位效率。
五、收获:满满的果实
(一)技术能力提升
编程能力:熟练掌握 C 编程语言、测试框架的编写和使用,代码编写更规范、高效,问题排查和调试能力显著增强。
工程思维:形成 “需求分析 - 方案设计 - 开发测试 - 迭代优化” 的完整工作逻辑,学会从用户角度思考产品实用性。
协作能力:掌握 Git 协作流程、PR 提交规范,能够高效开展跨地域的远程协作,沟通表达更精准简洁。
(二)认知与心态转变
从 “被动学习” 到 “主动探索”:不再局限于课堂知识,学会主动发现问题、解决问题,保持对新技术的敏感度。
理解 “开源精神”:深刻体会开放、共享、协作的价值,明白技术的意义不仅在于实现功能,更在于帮助他人、推动行业进步。
六、给学弟学妹的建议
基础为王:作为计算机相关专业的学生,我们需要打好坚实的专业基础,这是我们学习和工作中所必备的基本素养;
拥抱开源:从修复简单BUG、完善文档入手,逐步积累社区贡献经验。openHiTLS等国产开源项目正急需年轻力量,这是提升工程能力的绝佳平台。
有效沟通:遇到问题时,先通过文档和社区Wiki自查,再带着具体疑问请教社区导师。面对自己不懂的问题时一定不能囫囵吞枣轻易放过,微小的误解可能会造成大量无意义的时间耗费。
1241

被折叠的 条评论
为什么被折叠?



