此文原系2021年阿里云开发者大会,开源操作系统社区和生态分论坛,题为《国密技术开发与实践》的分享会后解读。 AnolisOS国密是社区在AnolisOS上做的国密技术解决方案,非常欢迎业界有兴趣的开发者能够参与到OpenAnolis社区,为国内的基础软件生态添砖加瓦。

演讲嘉宾: 张天佳:阿里云技术专家,主要负责AnolisOS上国密技术的开发和应用,参与实现了libgcrypt中的国密算法和linux内核中的SM2算法。 杨洋:蚂蚁集团高级技术专家,主导开发了BabaSSL,也是国内唯一的一个OpenSSL maintainer,参与起草并推动RFC8998标准国际化。

缘起

说到密码算法,大家一定很熟悉MD5,AES,RSA这些通用的国际标准算法,这也是目前我们普遍采用的密码学算法,它们在数据安全、通信、区块链等众多领域都有着广泛的应用。

众所周知,这些算法标准都是国外制定的,在某些情况下这会对国内信息安全有不利影响。当下有实力的国家,甚至有些大公司都制定了自己的算法标准。

顾名思义,国密就是密码算法的国产化,跟其它领域一样,密码算法的国产化已经势不可挡,这也是我们必须要做的事情。中国的国密算法为我们提供了一个新的选择,在必要的场合中可以选择替代那些国际主流算法,尤其是当下国际贸易冲突,技术封锁不可忽视的大环境下,大规模推广和采用国密算法将为国内重要的网络基础设施提供可靠的数据安全保障。

国密简介

我是谁,从哪里来

国密是一个口语化的称呼,官方名称是国家商用密码,简称商密,拼音缩写是SM,这也是国密标准中具体算法名字的来源。国密是用于商用的、不涉及国家秘密的密码技术。

国密标准完全由中国密码管理局制定,主要的技术实现也基本是国内开发人员完成的,这对摆脱国外的密码技术和产品依赖是非常有利的。

到哪里去

自2012年以来,SM2/3/4的国密标准陆续公布,目前国密技术生态基本处于一个正在逐步走向成熟的阶段,但国内密码基础软件在采用国密算法方面仍处于碎片化的状态,比如我们经常可以看到各种个人或组织名义开源的支持国密算法的库;此外这些开源项目的安全更新和社区活跃也都做的不好。国密的推广仍然需要我们中国基础软件的开发者和用户共同努力。

2020年1月1日,《中华人民共和国密码法》正式实施,从法律层面规范了国家商用密码的应用和管理,这也为推广和应用国密提供了必要的法律保障。

与国际算法的对比

这里是国密算法和国际通用算法的一个对比,可以直观地看到国密的一个基本情况:

针对各种常用的国际能用算法类型,比如对称算法,公钥算法和消息摘要算法,国密标准都定义了对应的相同功能的国密算法,比如SM4提供了与AES同样的加密强度,并且支持各种加密模式;SM2是基于椭圆曲线的公钥算法,同时定义了非对称加解密,数字签名和密钥交换标准,相对于RSA,SM2的密钥更短,但支持的加密强度却更高;SM3是国密定义的消息摘要算法标准,摘要长度是固定的256位,强度等同于SHA256。

除了基础的算法,国密标准也定义了TLCP国密双证书协议,用以支持国内的传输层安全协议。这里还有一个好消息,今年三月份,TLS1.3+国密单证书协议正式被国际标准所承认,并且以RFC8998标准发布,这意味着我们可以选择在TLS1.3协议中使用完整的国密套件,目前我们也在联系正规浏览器厂商支持这个标准的实施和应用。

同时国密也定义了使用国密算法的X509证书,使用SM3哈希算法,SM2算法作为数字签名,证书类型是SM2-with-SM3。 对开发者来说,国密提供了一个选择,可以选择从国际通用算法平滑迁移过来。除此之外,国密还有其它一些算法标准,是不太常用的,比如SM9,ZUC算法等。

BabaSSL前世今生

BabaSSL是主打国密的密码算法库,与OpenSSL 1.1.1保持兼容,作为国密的密码算法解决方案而诞生。

BabaSSL是基于之前蚂蚁集团和阿里集团内部的OpenSSL版本合并而来,并首次进行了开源。BabaSSL的含义是:灵巧、轻快且靠谱的密码学和SSL/TLS工具库。

BabaSSL的绿色商标,是基于阿里的橙色和蚂蚁的蓝色混合而来,也意味着我们希望将BabaSSL打造成一个灵活、小巧并且健壮的基础密码学库。

BabaSSL目前在阿里集团和蚂蚁集团内部得到了非常广泛的使用。从具体场景来看,有如下三个方面,分别是存储、网络和端上的设备。其中网络服务的场景,是BabaSSL最大的支撑场景,例如淘宝、天猫、阿里云等各种涉及到链路加密的服务器端。此外移动端App,例如支付宝手机App中集成了BabaSSL来实现多种密码学的能力。

开源

BabaSSL已经在去年的10月份进行了开源,目前代码是托管在OpenAnolis上,当前开源的版本是8.2.0,也是我们目前最新的稳定版本。

目前BabaSSL在阿里内部使用的版本和开源版本之间存在一定的差异,我们目前正在逐步把内部版本的功能特性迁移到开源版本上进行开源,最终变成一个统一的开源版本,那么届时阿里内部也完全依赖于这个开源的版本,而不会再保留内部的闭源版本。

特色功能

以下是BabaSSL当前最新稳定版本 8.2.0的主要特色功能特性:

  • 基于OpenSSL 1.1.1,具备OpenSSL 1.1.1的全部能力并且保持兼容
  • 支持国密SM2, SM3和SM4,并对OpenSSL 1.1.1中所欠缺的SM2能力,比如X509证书的签发和验证功能进行了补全
  • GM/T 0024 和 TLCP 国密双证书TLS协议
  • 支持RFC 8998:TLS 1.3+国密单证书
  • 提供了对IETF正在标准化过程中的Delegated Credentials
  • 支持 IETF QUIC API 底层密码学能力
  • 更加完善的SM2算法支持,比如X.509证书签发、验签的支持
  • 正在申请软件密码模块一级资质

与OpenSSL对比

接下来是大家很关心的BabaSSL和OpenSSL这种老牌的密码算法库之间的区别:

从图上可以看到一些主要区别:

  • 对于一些新的密码学技术标准,BabaSSL会采取一种相对激进的策略快速跟进,比如在IETF中一些正在标准化流程中的技术方案,例如delegated credentials, compact TLS等,会进行原型的实现和快速跟进,而OpenSSL则是相对保守,因为OpenSSL社区的策略是原则上只实现已经发布了的国际标准和国家标准。
  • 在对于国密算法、国密协议、国密的监管合规、云计算厂商的深度集成、以及国产化硬件等方面,BabaSSL会进行更加深度和广泛的支持,而OpenSSL则支持的比较有限。
  • 对于API的易用程度,由于没有历史包袱,所以BabaSSL可以提供更加简单易用的API,而OpenSSL的API则相对复杂
  • 对于资源受限的嵌入式设备,BabaSSL会进行体积裁剪和内存使用量的规划,OpenSSL则明确表示没有相关的计划。

未来规划

这个是一个后续BabaSSL未来的版本规划和特性支持,基本上是每半年一个版本,涵盖了多种新的密码领域技术的支持,包括对IETF的几个RFC草稿的实现、国产化硬件的支持以及未来对于后量子密码学以及同态加密等前沿技术的支持:

  • 支持MPK
  • Encrypted SNI
  • Compressed Certificate
  • Compact TLS
  • SM算法优化
  • 支持国产化CPU的国密算法指令集
  • 体积裁剪,内存使用量优化
  • Tink API
  • ZUC,SM9
  • PQC
  • 同态加密算法