「龙蜥开发者说」来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得、实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量。本期故事,我们邀请了龙蜥社区开发者张天佳来分享,聊聊「从入坑到入门」的那些事儿。

本期故事主角:张天佳,龙蜥社区 商密软件栈 SIG Maintainer,安全技术开发,专注于国内商用密码的技术开发以及推广工作。

回想自己与编程的经历,从最初的一通瞎折腾,到现在能参与以及贡献基础软件社区,已经有十多年时间了。很遗憾,这段经历的大多半时间都是走在一个错误的方向上的,至少现在我是这么认为的。确实没有什么精彩的故事,借着给龙蜥社区朋友们分享的契机讲一讲,列位看官权且当作教训来看,当作吃别人一堑,长自己一智吧。

我上学的主攻方向不是软件工程,也不是计算机,也没有研究什么课题,而是当时感觉非常没有前途的电子科学,现在也只是依稀记得那些课程名字,至于具体内容是什么,已经模糊了。这就导致有了挺多时间打游戏,那时还很流行组队打星际和魔兽争霸,许多工具软件都要去网上找破解版,电脑需要不断通过全盘杀毒来保持健康状态,也不知道 Linux 是做什么用的。

当时看那些能破解软件、写出工具的黑客们真是羡慕不已,也许是出于兴趣,有意无意就关注了起来,从网络和论坛看到他们经常用到一种奇怪的语言,后来才知道那是汇编语言,在没有计算机基础也没有人指引的情况下,走上了这条现在看来方向明显不对的道路,而自己也居然没有放弃。后来,我就找了一些书籍资料在 Windows 下模仿写了一些使用 win32 API 的窗口程序,那时感觉还不错。因为学校的 C 语言课程,老师只会讲一些语法跟考试的内容,除了考二级也不知道还能用来做什么,这样一比较窗口程序显然更像一个真正的程序,虽然简单但能让人产生兴趣也更接近工程实用。就这样断断续续几年居然基本掌握了 x86 汇编和 Win32 的主要 API,也对系统基础有了一定了解。因为自己的认知盲区,错误地选择了入门开发语言和开发环境,导致后来走了很多年的弯路。

很幸运,毕业之后没有失业,也没有从事科班工作,凭借自修的丰富的编程经验 ,终于混进了现在看起来是传统得不能再传统的主机安全行业,主要工作内容也是开发杀毒软件所需要的实时监控,以及一些恶意软件的分析工作。那是 2010 年,正是 PC 机火热的时代,没有移动互联网,当时的杀毒软件还是装机必备、热门赛道,有诸多的企业在里面竞争,一点不亚于现在的社区团购。有多热门呢,当时的 360 还是可以跟腾讯叫板的,并且还能得到网络上的普遍支持,可以跟十年之后的现在做一个对比。

扯回正题。因为工作涉及系统开发的缘故,抱着很不情愿的状态开始使用 C 语言,也许是有汇编基础,C 语言学习起来就顺利了很多,对于许多人诟病的指针好像也没说的那么复杂。其实当时行业主流使用的是 C++ 语言,奈何一直没有学会,直到现在也是一知半解。就这样浑浑噩噩的六年多,分析过 CVE、写过 POC、内核监控、各种 HOOK 信手拈来,开发语言也主要集中在 C、lua 和汇编。但是基本没做什么像样的项目,随着近几年操作系统自身安全性提升和软件分发的把控,操作系统安装一个专门的主机安全软件的必要性也越来越小。

也许因为安全背景,两年前偶然的机会混进了操作系统 OS 安全,基础软件的安全方向跟传统的主机安全还是有挺大区别的。传统安全热衷于攻防,魔高一丈道高一尺,魔高道更高,这样的无限循环,好像永远也到达不了安全的终点,也做不到 100% 的安全。就比如现在非常流行的勒索软件,这是伴随着加密货币而诞生的一种简单粗暴的恶意软件,比特币 09 年就诞生了,那还是一个普遍使用诺基亚的时代,阿里云是那时才开始创业的,iPhone 也才刚刚出道,这十多年云计算和移动互联网对人们生活的改变,带来的社会价值都是有目共睹的。

然而,一个诞生了十多年的加密货币除了催生了一些不能活在阳光下的行业外,似乎没给社会带来什么改变。当然区块链那是另一码事,以至于现在还有不少人觉得加密货币是一个新事物。勒索软件目前在主机端依然没有很好的解决办法,我们只能避免这样的情况发生,也许真的要靠加密货币的自然覆亡来解决勒索软件。这样攻防带来的另一个问题是没法标准化,你的矛升级了,我的盾也得更新,攻一方尽可能隐藏自己的攻击方式,防守方也要保密自己的防守细节。这样的安全方案随着时间推移边际价值是递减的。

从基础软件层面来考虑安全问题就大不相同了,比如数字签名、加密算法、TLS 协议以及 HTTPS,这些目前都已经是计算机和互联网的安全基石,也是从根本上解决安全问题的一个比较彻底的解决方案,也更容易成为国际通用的方案,其次解决方案规范是公开的,会充分暴露出设计的缺陷,有助于安全能力的逐步提升。我刚到操作系统团队的时候,接到的一个需求就是在 Linux 内核实现国内的商用密码公钥算法 SM2,我对密码算法之前是没有什么开发经验的,经过大半年的开发和社区交流,最终能把 SM2 做到 Linux 上游社区也实在是侥幸。

关于这一段经历,大家可以移步旧文——终于,SM2 国密算法被 Linux 内核社区接受了。之后,正好赶上了龙蜥操作系统社区的成立。彼时国内面临外部的贸易冲突和技术封锁,以及国内数据安全问题,我们决定把全软件栈的国密做大做强,依托于操作系统给支持起来。我们在龙蜥社区的工作,可以参考「商密软件栈SIG」,上面记录了我们的周报、月报和一些最佳实践案例,有比较详细的介绍。龙蜥社区是一个更加开放的平台,有了能对外输出的平台,我的工作可以以社区方式来运作,同时进展也会更快,能跟社区内有相同兴趣的伙伴协同工作,也第一时间把我们的工作成果带给社区用户和开发者。我很喜欢我们公司内部的一句话「一次性把事情做对」。

拿国密来说,从开始的算法标准制定到现在也有十多年的时间了,目前仍然没有被广泛使用是有原因的,工程上的碎片化是很重要的一点,这也是我们一开始坚持的原则,龙蜥的国密不是要做另一个碎片的国密实现,而是把国密的工程实现统一到日常使用的基础软件中去,避免以后国内大量的资源和人力重复投入,一次性把这个事情做好。有了内核 SM2 算法的成功经验后,我们的动力更足了,陆续在 libgcrypt、OpenSSL、coreutils、IMA,甚至 Rust 生态 RustCrypto 等基础软件或者密码算法场景中支持了国内的商用密码算法,并且为 SM3/4 算法支持了 x86 和 Arm64 平台的指令集优化、以及 KTLS 国密算法的支持。

目前我们在商密生态多年的开发工作已经全部回馈到了社区,其中绝大部分贡献到了主流开源项目的上游,总代码量超过万行。比如我们在 Arm64 架构下做了 NEON 和 Crypto Extensions 指令集优化,性能有了质的飞跃。

非常感谢社区各合作伙伴的支持,以及社区工作人员的辛苦付出,经过一年多的努力,我们基本构建起了商密的基础软件设施,不仅解决了从无到有的问题,也把商密的性能提升到了真正能产业化应用的程度,也依托于龙蜥操作系统(Anolis OS)发布了支持全栈商用密码的Anolis 商密版OS,当然这个生态不管是横向还是纵向还有很多工作要做,需要更多内部和外部开发者参与进来一起建设,我们非常欢迎与大家一起合作。

图 | 张天佳在开发者峰会演讲

程序语言世界素来有江湖门派之争,文中难免涉及个人主观判断,只是代表个人想法和意见,仅供大家参考。

以下是我们团队在龙蜥社区上的商密软件栈 SIG,非常欢迎有兴趣的开发能参与进来,为中国的基础软件安全添砖加瓦。

SIG地址:https://openanolis.cn/sig/crypto

代码库:https://codeup.openanolis.cn/codeup/crypto

钉钉交流群:35789429

本期分享到这里结束,期待下期精彩分享哦!(正文完)

从入坑到入门 | 龙蜥开发者说第2期

从入坑到入门 | 龙蜥开发者说第2期相关推荐

  1. 龙蜥开发者说:开源是场马拉松!来自广州大学姚同学的开源成长记 | 第 13 期

    「龙蜥开发者说」第 13 期来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得.实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量.本期故事,我们邀请了龙蜥社区 ...

  2. 龙蜥开发者说:6 年前打开的开源“潘多拉盲盒”,如今都解了哪些未知数 | 第 15 期

    「龙蜥开发者说」第 15 期来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得.实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量.本期故事,我们邀请了龙蜥社区 ...

  3. 龙蜥开发者说:海纳百川,有容乃大,我在龙蜥社区的升级之旅 | 第 11 期

    「龙蜥开发者说」第 11 期来了!开发者与开源社区相辅相成,相互成就,这些个人在龙蜥社区的使用心得.实践总结和技术成长经历都是宝贵的,我们希望在这里让更多人看见技术的力量.本期故事,我们邀请了龙蜥社区 ...

  4. 和我一起入坑-React-Native入门-ToDoList

    前置工作 (〇)了解官方文档是必须的 react-native官方文档 react-native中文文档 (一)安装必需的软件 以下步骤官网早有详细步骤,在此不必赘述. 1.Chocolatey Ch ...

  5. 多年锤炼,迈向Kata 3.0 !走进开箱即用的安全容器体验之旅| 龙蜥技术

    文/云原生 SIG(Special Interest Group) 一.Kata 的过去 让我们将时钟拨回 2015 年 5 月,Hyper.sh 和 Intel 开源技术中心的工程师们分别独立发布了 ...

  6. 今天 2 点:关于龙蜥社区云原生 SIG 及安全容器 runD 介绍 | 第 24 期

    「龙蜥大讲堂」第 24 期来啦!本期 SIG 双周会邀请了龙蜥社区云原生 SIG 来分享<龙蜥云原生 SIG 目标及规划>和<runD--Kata 3.0 原型介绍>,快来扫码 ...

  7. 保姆级教程,龙蜥操作系统安装使用一步到位!

    本文以龙蜥操作系统(Anolis OS) 8.4 为例,为龙蜥社区的用户提供安装指南,希望本文能帮助用户可使用图形化安装接口部署 Anolis OS 到目标平台上. 一.准备 ISO 安装镜像 登录龙 ...

  8. php jwt token 解析,JSON Web Token(JWT)入坑详解

    JSON Web Token(JWT)入坑详解 龙行    PHP    2019-6-17    1651    0评论 /** JWT生成类 **/ class Jwt { private $al ...

  9. 云脉芯联加入龙蜥社区,共建网络“芯”生态

    近日,云脉芯联签署了 CLA(Contributor License Agreement,贡献者许可协议),正式加入龙蜥社区(OpenAnolis). 云脉芯联是一家专注于云数据中心网络芯片产品研发与 ...

  10. 向量数据库入坑:使用 Docker 和 Milvus 快速构建本地轻量图片搜索引擎

    本篇文章,我来分享如何使用 Docker 来搭建一个能够跑在本地的轻量图片搜索引擎,实现日常生活中我们习以为常,但是实现起来颇为麻烦的功能:以图搜图. 写在前面 之前网上看到一个问题<如何在自己 ...

最新文章

  1. mysql审计权限_MySQL对普通用户(没有super)开启审计功能
  2. Linux入门(9)——Ubuntu16.04安装flash player
  3. Linux的简单介绍.
  4. java为何重复调用方法_通过反射调用Java中的getter:重复调用它的最快方法是什么(在性能和可伸缩性方面)?...
  5. 软件工程师你应该知道的100个原则
  6. 第7章 比高斯更快的计算
  7. c语言自建一个窗口,C语言 手把手教你写个自定义printf
  8. 奈飞文化手册_《奈飞文化手册》内容提炼分享1
  9. Spring学习之整合Activiti(一)
  10. 华为鸿蒙手机用大卡还是小卡,【荣耀3XPro评测】大卡+小卡双3G网络-中关村在线...
  11. SOS1 Ras GEF蛋白高纯度测定
  12. 启用mysql系统找不到指定的文件类型_net start mysql 发生系统错误2 系统找不到指定的文件...
  13. PA2.2 PA2.3
  14. quartz简单入门
  15. [渝粤教育] 山东大学 生物信息学 参考 资料
  16. JDK14环境变量配置,JDK版本切换(Win10)
  17. 交换机断网的原因分析
  18. 中国IT研发实力最强的城市分析(转载)
  19. php7模拟,认识PHP7虚拟机()三
  20. 大学计算机python编程的函数及作用总结_【转】python 内置函数总结(大部分)...

热门文章

  1. PHIL2650 是个好课程
  2. 十五天精通WCF——第四天 你一定要明白的通信单元Message
  3. 【Beta】Scrum Meeting 3
  4. Linux基础教程之系统管理篇系统部署
  5. 在WPF控件上添加Windows窗口式调整大小行为
  6. 项目管理和版本跟踪——Redmine和SVN的结合
  7. JAR运行出现ClassNotFoundException异常的解决办法
  8. mysql-innodb-undo和redo
  9. SQL Server Compact 数据库内容查看工具
  10. 使用zoom、overflow解决IE6、IE7、FF下嵌套容器清除浮动问题