简介:AnolisOS国密是社区在AnolisOS上做出的国密技术方案。编者按:本文由两位主讲人编译。他们在2021阿里云开发者大会“开源操作系统社区与生态分论坛”上分享了演讲。演讲题目是《国密技术开发与实践》,为中国基础软件生态做贡献。作者为阿里云技术专家张天佳和蚂蚁集团高级技术专家杨洋。张天佳主要负责国密技术在AnolisOS上的开发和应用,参与了libgcrypt中的国密算法和linux内核中的SM2算法的实现;杨洋主导了BabaSSL的开发,也是国内唯一的OpenSSL维护者,参与了RFC8998标准国际化的起草和推动。相信两位技术人的干货分享,能给开发者带来一些思考。以下是技术内容解析:国家机密-密码算法国产化说到密码算法,想必大家对MD5、AES、RSA等国际通用标准算法并不陌生。这也是我们目前普遍使用的密码算法。安防、通信、区块链等诸多领域都有广泛的应用。众所周知,这些算法标准是在国外制定的,在某些情况下,这会对国内的信息安全造成不利影响。目前,强国甚至一些大公司都制定了自己的算法标准。顾名思义,国家机密就是密码算法的国产化。和其他领域一样,密码算法的国产化势在必行,这是我们必须要做的。中国的国密算法给我们提供了一个新的选择。在必要的场合,我们可以选择替换那些国际主流算法,尤其是在当前国际贸易冲突和技术封锁不容忽视的环境下。国密算法的大规模推广和采用算法将为国内重要网络基础设施提供可靠的数据安全保障。什么是国家机密?我是谁,我来自哪里?国家机密是一个口语化的名字。正式名称为NationalCommercialCipher,简称Shangmi,拼音缩写为SM。这也是国密标准中具体算法名称的来源。国家秘密是用于商业目的的不涉及国家秘密的密码技术。国家密码标准完全由国家密码管理局制定,主要技术实现基本由国内开发商完成,这对摆脱国外密码技术和产品依赖非常有利。去哪儿?2012年以来,SM2/3/4的国密标准相继公布。目前国密技术生态基本处于逐渐成熟的阶段,但国内的密码基础软件在采用国密算法方面还处于零散状态,比如我们经常可以看到支持国密的库由各种个人或组织开源的算法;此外,这些开源项目的安全更新和社区活动也做得不好。国家机密的宣传,还是需要我们中国基础软件开发者和用户的共同努力。2020年1月1日,《中华人民共和国密码法》正式实施,从法律上规范了国家商用密码的应用和管理,也为国家密码的推广应用提供了必要的法律保障。与国际算法的比较下面是国密算法与国际通用算法的比较。可以直观地看到国密的一个基本情况:对于国际上常用的各种算法类型,如对称算法、公钥算法和消息抽象算法,国密标准定义了相应的具有相同功能的国密算法。例如SM4提供与AES相同的加密强度,支持多种加密模式;SM2是一种基于椭圆曲线的公钥算法,定义了非对称加密和解密、数字签名和密钥交换标准。与RSA相比,SM2密钥更短但支持更高的加密强度;SM3是国密定义的消息摘要算法标准,摘要长度固定为256位,强度等同于SHA256。国密标准除了基本算法外,还定义了TLCP国密双证书协议,支持国内传输层安全协议。这里也有好消息。今年3月,TLS1.3+国密单证书协议正式被国际标准认可,并作为RFC8998标准发布,这意味着我们可以选择使用TLS1.3协议中完整的国密目前,我们也正在联系正规的浏览器供应商,以支持该标准的实施和应用。同时,国密还定义了使用国密算法的X509证书,使用SM3哈希算法,SM2算法作为数字签名,证书类型为SM2-with-SM3。对开发者来说,中国秘密提供了一个选项,可以从国际通用算法平滑迁移。此外,国内还有其他算法标准,不常用,如SM9、ZUC算法等。BabaSSL的前世今生BabaSSL是一个专注于国家机密的密码算法库。兼容OpenSSL1.1.1,作为国密密码算法解决方案而诞生。BabaSSL基于蚂蚁集团和阿里集团之前的OpenSSL版本合并,首次开源。BabaSSL的含义是:智能、轻便、可靠的密码学和SSL/TLS工具库。BabaSSL的绿色商标是基于阿里的橙色和蚂蚁的蓝色混合而成,这也意味着我们希望把BabaSSL打造成一个灵活、紧凑、健壮的密码学基础库。BabaSSL目前在阿里集团和蚂蚁集团内部广泛使用。从具体场景来看,有以下三个方面,即存储、网络和终端设备。其中,网络服务场景是BabaSSL最大的支持场景,如淘宝、天猫、阿里云等涉及到链路加密的服务端。此外,移动应用程序,如支付宝移动应用程序,集成了BabaSSL以实现多种密码学能力。开源的BabaSSL已于去年10月开源。当前代码托管在OpenAnolis上。目前开源的版本是8.2.0,也是我们最新的稳定版本。目前阿里巴巴内部使用的BabaSSL版本与开源版本存在一定差异。我们目前正在逐步将内部版本的功能和特性迁移到开源版本中进行开源,最终成为一个统一的开源版本。完全依赖这个开源版本,不再保留内部闭源版本。特点以下是BabaSSL最新稳定版8.2.0的主要特点:基于OpenSSL1.1.1,具备OpenSSL1.1.1的所有能力,并保持兼容支持国密SM2、SM3、SM4,支持OpenSSL1.1。1补充了缺少的SM2能力,如X509证书的签发和验证。GM/T0024和TLCP国密双证书TLS协议支持RFC8998:TLS1.3+国密单证书在标准化过程中提供IETFDelegatedCredentials支持IETFQUICAPI底层密码能力和更完善的SM2算法支持,如X.509证书颁发和签名验证支持正在申请软件密码模块和OpenSSL一级资质。接下来就是大家关心的BabaSSL和OpenSSL了。这个老式密码算法库的区别:从图中可以看出一些主要的区别:对于一些新的密码技术标准,BabaSSL会采取相对激进的策略快速跟进,比如一些在IETF中的技术方案标准化过程,如委托凭证、紧凑型TLS等,将实现原型和快速跟进,而OpenSSL相对保守,因为OpenSSL社区的策略是原则上只执行已发布的国际标准和国家标准。标准。BabaSSL将对国密算法、国密协议、国密合规、云计算厂商深度融合、硬件本地化等方面提供更深入广泛的支持,而OpenSSL支持有限。在API的易用性上,BabaSSL因为没有历史包袱,可以提供更简单易用的API,而OpenSSL的API相对复杂。对于资源受限的嵌入式设备,BabaSSL会针对体积缩减和内存使用进行规划,而OpenSSL明确表示没有相关规划。未来规划这是BabaSSL后续的版本规划和特性支持,基本上每六个月一个版本,涵盖各种新的密码技术支持,包括几个IETFRFC草案的实现,本地化硬件支持和未来切割支持——后量子密码、同态加密等边缘技术:支持MPKEncryptedSNICompressedCertificateCompactTLSSM算法优化,支持国产化CPU国密算法指令集减容,内存使用优化TinkAPIZUC、SM9PQC同态加密算法法国密码生态框架万事俱备.在国家密码基础算法的支持下,我们可以围绕国家密码算法构建基础软件生态。这是一个国密生态的垂直场景,也是我们国密生态在AnolisOS上的架构。同时也是一个全栈国密解决方案:从底层固件、内核,到基础密码库,在主链路上做国密改造,最终形成一个完整的基于国密的安全信任链。图中右侧是一些垂直的国密应用场景,比如SecureBoot、IMA、内核模块签名、文件完整性验证等,目前我们已经在linux内核等主流基础组件中支持了国密算法、BabaSSL、libgcrypt和gnulib。这部分工作已经反馈到上游开源社区。有兴趣的开发者可以直接使用或参考,未来这些特性和功能也将率先输出到AnolisOS上,实现原生支持国家机密的开箱即用OS。从这里也可以看出,国密生态涉及的软件栈很多,形式也是五花八门。要逐步完善这个生态,还有很长的路要走。近年来的国际技术封锁,也让我们有了做这件事的决心和动力。目前我们已经与同心、海光等厂商合作,也欢迎业内有兴趣的开发者加入社区,一起做这件事。之后,我们的工作将在AnolisDragonLizard社区以开源的方式运行。我们将以开放包容的态度,不断补充和完善这个生态,最终实现一个目标:整个安全信任链完全建立在国密算法之上。国家机密在IMA和modsign中的应用我们知道,密码算法本来就是为安全服务的。我们来看两个安全领域国密转型的具体例子。IMA是Linux内核提供的文件完整性度量框架,用于检测文件是否被恶意篡改。内核模块签名的目的类似,都是用来检测模块的来源是否可信。它们都提供了自己的签名工具,依赖于BabaSSL提供的SM2签名文件的能力进行用户态签名。文件签名的验证是在内核中完成的。由于内核不能直接使用应用层的库,为了支持Linux内核中文件签名的校验,我们在内核中实现了国密SM2/3/4算法和国密证书。支持,用于验证签名是否合法。通过对相应软件栈的改造,我们构建了基于国密算法的IMA和内核模块签名的安全机制,这些都是以往由国际算法保障的。原文链接本文为阿里云原创内容,未经许可不得转载。
