基于国密HTTPS的网站安全认证

2022-09-09 00:45王森
电子技术与软件工程 2022年14期
关键词:国密数字证书私钥

王森

(国家信息中心信息与网络安全部 北京市 100045)

浏览器校验数字证书能够实现网站信息安全认证。其原理是网站事先从权威认证机构CA申请数字证书,数字证书包含了网站域名等关键信息,当用户使用浏览器通过域名访问网站时,核验域名和数字证书信息是否匹配,并且采用公钥密码算法进行真实性验证,核验通过后才能继续加载网站内容。该过程需要浏览器和网站后端服务器依据相关协议执行验证流程,该协议通常采用HTTPS协议。

虽然HTTPS应用广泛,但支持国产密码算法及数字证书的应用仍不多,存在浏览器、服务器中间件不支持等问题。本文深入研究了相关技术,基于开源项目Tassl和360国密浏览器实现了国产商用密码算法和数字证书HTTPS的网站安全认证方案。

1 网站安全认证需求

网站的安全认证需求源于用户鉴别钓鱼网站。钓鱼网站通过仿冒真实网站,诱导用户访问恶意链接,或窃取用户名、密码等重要信息。钓鱼网站经常采用混淆相似域名的方法,例如用数字“0”代替字母“O”,用小写字母“l”代替数字“1”。攻击者采用邮件、即时消息等方式,将钓鱼网站网址发送给被攻击对象。在没有防备的情况下,很容易打开钓鱼网站,进而产生个人敏感信息或系统账号等泄露,往往会造成经济损失。

启用数字证书认证,验证过程首先判断网站是否拥有合法的数字证书。没有数字证书或数字证书不是由权威数字认证机构颁发的,浏览器会进行安全提示。数字认证机构在核验网站认证申请时,会严格进行审核,包括网站的资质、网站的内容及网站安全性等,如果发现网站可能用于“钓鱼”,会拒绝发放数字证书。防止钓鱼网站还需要验证数字证书信息,点击浏览器网址左侧的锁样图标,展开网站的数字证书详情进行查验,数字证书内容应和目的网站内容相符。例如访问某银行网站,核查数字证书的内容应与官网地址一致。

网站部署证书以便向用户证明自己是合法、正牌的网站。因此,用户和网站共同建立数字证书的安全支撑,用户客户端应使用安全浏览器,不轻易忽略浏览器的安全提醒。

2 国密算法SM2数字证书

在公钥算法中公钥和私钥成对使用,公钥与真实身份绑定并公开,私钥由个人保存,并且严格保密不能向其他人泄漏。使用私钥加密信息生成签名,作为凭据,核验人使用签名者的公钥验证签名。SM2是我国自主研发的椭圆曲线公钥算法,具有安全性高、密钥规模小等特点。数字证书是基于公钥基础设施PKI,将公钥与用户信息绑定,经认证后由权威认证机构CA颁发,数字证书用于实现真实性、抗抵赖等安全特性。

2.1 SM2公钥算法原理

SM2是基于椭圆曲线空间,椭圆曲线的方程为的形式y=x+ax+b,包含相关特性参数,如素数空间、基点、基点的阶、a和b的值、素域规模等。其中素数空间可以是有限域或者二元扩域。当椭圆曲线参数不一致时,即使采用相同的运算方法,其上的运行也不能相互验证,为此国标中对相关参数进行了定义。

SM2素域选择有限域F,基点的阶为256位,椭圆曲线上的点集记为:

E(F)={(x,y)|x,y∈F且满足曲线方程y=x+ax+b}∪{O}

其中O是椭圆曲线的无穷远点。通过椭圆曲线离散对数问题(ECDLP)构造单向密码函数:随机选择k,使得Q=[k]G,G应满足是椭圆曲线的一个基点,多倍点计算可以获得Q,那么求解倍数k的问题称为椭圆曲线离散对数问题。

根据以上椭圆曲线公钥算法原理,随机生成私钥d,d为(n-1)范围内的一个随机正整数,计算Q=[d]G为曲线E(F)上一个非O点,生成公私钥对为(d,Q)。此时,公钥Q需要用坐标系中的一个点(x,y)表示,因此私钥d的长度为256位,而公钥长度为2个256位,即512位。

从SM2原理可以看出,SM2和RSA算法有较大不同。

(1)建立系统空间的方式不同:RSA不需要设定参数,可在实数范围内运算;SM2须设定相关参数,确定椭圆曲线。

(2)生成密钥方式不同。RSA同时生成公钥和私钥;SM2中先确定私钥,由私钥计算公钥。

(3)签名算法不同。RSA通过公钥对签名结果进行计算,推导源文件;SM2根据待签名文件和公钥计算签名结果,将签名结果与签名信息进行对比。

2.2 SM2数字证书原理

在公钥算法中每个用户都可以生产公钥,因此验证签名时缺少公钥与真实身份绑定关系的证明。认证服务机构和公钥基础设施PKI由于真实性证明,认证服务机构CA是具有良好信誉的服务部门,将用户信息与公钥信息打包一起签名,实现用户信息认证。因此数字证书的本质是数字签名文件,使用认证服务机构私钥对用户信息与公钥绑定关系进行签名。数字证书的有效性验证,可以通过认证服务机构的证书,对用户证书验证。

申请数字证书过程通常包括以下步骤:

(1)用户为申请数字证书,本地生成公钥和私钥。私钥应保存在安全密码模块中,具有不可导出、不可见等特性,使用时通过调用密码服务应用接口。

(2)用户与CA进行交互。向CA提交数字证书制作请求,请求文件中包含需要公开相关信息和用户公钥。

(3)CA会严格验证信息的真实性,并核对合法性、合理性。验证通过后,CA使用自己的私钥,将包含网站信息和公钥的文件进行数字签名,最后按照数字证书规范格式,封装网站信息、网站公钥、数字签名封装,并下发给用户。

2.3 SM2数字证书格式信息

GB/T 20518-2018《信息安全技术 公钥基础设施 数字证书格式》定义了数字证书的格式,证书主结构及TBSCertificate、extensions的字段。网站证书必须填写扩展项中密钥用法KeyUsage和主体可替换名称subjectAltName两个字段信息,按照TLCP协议要求,网站应提供签名证书和加密证书,签名证书KeyUsage应为digitalSignature和nonRepudiation,加密证书KeyUsage应为dataEncipherment。subjectAltName必须为网站的url地址,否则浏览器无法完成网站证书校验。

3 国家标准传输层加密协议TLCP

HTTPS协议是SSL安全协议封装的HTTP协议。SSL是传输层安全协议,我国标准应依据GB/T 38636-2020《信息安全技术 传输层密码协议(TLCP)》,其内容主要描述了数字证书认证和密钥交换过程,包括预主密钥协商、计算主密钥、推导工作密钥、使用工作密钥进行加解密和完整性校验等。

3.1 数据封装

记录层协议是传输层加密的核心,位于传输层报头后的载荷部分。记录层协议接收应用层数据,通过分块、压缩、加密处理,放入传输层载荷中传输。接收到的数据经过解密、验证、解压缩、重新封装,传送给高层应用。

记录层协议包含4中类型,握手、报警、密码规格变更、应用数据等类型,类型标识的位置数据报的标头,数据载荷如图1所示。

图1:记录层格式详解

3.2 握手协议族

通过握手协议实现安全认证和密钥交换过程,包括以下协商步骤,如图2所示。

图2:握手协议过程

(1)交换hello消息来协商密码套件,以及随机数。客户端发送客户端hello消息给服务端,服务端应回应hello消息。

(2)服务器交换必要的参数,实现预主密钥协商,交换服务器证书;

(3)双方根据随机数生成预主密钥及主密钥;

(4)在协议栈中,记录层调用握手协议产生的主密钥,使用协商的算法等安全参数生成记录层数据;

(5)验证握手过程的真实性和完整性。

客户端Hello消息标明客户端支持的密码套件列表,套件的排序按照客户端优先级顺序排列。每个密码套件包括一个密钥交换算法,一个加密算法和一个校验算法,目前新版国标较国密标准在密码套件定义方面有所改变,去掉了SM1和SHA1,添加了SHA256。详细信息见表1。

表1:国家标准支持的密码套件

服务端在密码套件列表中选择一个与之匹配的密码套件,如果没有可匹配的密码套件,应返回握手失败报警消息并且关闭连接。按安全协议规定,服务端必须发送一个服务端证书消息提供客户端验证,因此Server Certificate总是跟在Server Hello消息之后,消息的内容为服务端的签名证书和加密证书。证书格式为X.509 v3,证书使用类型KeyUsage必须能适用已经确定的密钥交换算法,并且签名证书在前,加密证书在后。

4 基于国密SM2的HTTPS实践

4.1 证书链

国密浏览器是支持国密HTTPS和国密数字证书的浏览器,目前已有齐安信浏览器、360浏览器、红莲花浏览器、密信浏览器等多个国产浏览器。国密浏览器访问网站时,验证网站的数字证书,包括验证数字证书的有效性和证书链有效性两个步骤。

4.1.1 验证数字证书的有效性

经过HTTPS握手过程,实现了以下相关信息的验证。

(1)网站拥有数字证书对应的私钥,即网站是数字证书真正拥有者,安全协议验证了私钥,保证伪造网站无法使用原网站证书。

(2)验证颁发者的数字签名,确认数字证书是经合法权威机构签发。

(3)验证数字证书有效期。使用时间应在数字证书生效的起始时间和结束时间。

(4)数字证书没有被吊销。认证服务机构可以吊销数字证书,并将序号存储在吊销文件CRL中,验证过程核查了CRL是否包含当前数字证书的序列号。

4.1.2 验证数字证书链

大部分运行CA都是由一级CA签发的,例如CA_1是由CA_0进行签发的,需要用CA_0的公钥,验证CA_1数字证书的签名。CA_0是签发CA的CA,通常是权威认证机构的根CA,根CA不用来制作用户的数字证书。认证服务机构根据不同的应用领域,使用根CA制发不同的运行CA。

当验证运行CA颁发的用户数字证书时,需要提供根CA和运行CA的数字证书,包括用户的数字证书共3张证书一起证明用户身份。使用时可以将3张证书打包成一个压缩文件。权威机构根CA可以预置在操作系统或浏览器中。

图3是一个证书链的示例,位于左侧CFCA SM2是一个运行CA,右侧ROOTCA为我国国密SM2根证书。CFCA SM2数字证书的授权密钥标识表示为KeyID=4c32b197d93 31bc4a605c1c6e58b625bf0977658,查看右侧ROOTCA的授权密钥标识也为KeyID=4c32b197d9331bc4a605c1c6e58b625 bf0977658,ROOTCA是自签根,可以证明CFCA SM2是由ROOTCA颁发的。

图3:CFCA SM2证书链示例

4.2 支持国密数字证书的浏览器

国际GlobalSign、VeriSign等认证机构不支持我国国密算法的数字证书。一般由国内认证服务机构颁发SM2算法数字证书。目前,我国已建成国家电子认证根,并公布了4个电子认证根,其中社会公众应用根(SM2),其主题项为CN=ROOTCA,O=NRCAC,C=CN,即为CFCA SM2的签发CA。

360安全浏览器国密专版增加了密码模块和安全协议模块,实现了对国产密码算法和安全协议的完整支持,10.1beta中已经带有了国产密码模块和安全协议模块,不再以专版的形式发布。密信浏览器基于 Chromium 开放源代码项目开发(版本:Chromium 66),主要增加了对国密算法SM2/SM3/SM4的支持,支持国密SSL证书。齐安信浏览器发布了《商用密码证书可信计划》,目前已发布14家国密SM2数字证书,例如北京数字认证股份有限公司Beijing SM2 CA、中金金融认证中心有限公司CFCA CS SM2 CA等。

4.3 基于Nginx的国密服务器配置

江南天安通过开源方式提供一种国密服务器搭建方法,开源项目名称为Tassl,包含一套提供国密算法支持的OpenSSL算法库,以及支持Tassl的Ngnix。编译安装该版本Nginx后,可以先利用测试证书验证系统运行。生成证书示例脚本程序为gen_sm2_cert.sh,运行完成后,生成可供测试使用相关国密数字证书。修改nginx服务器的配置文件nginx.conf,添加数字证书和私钥相关配置。

重新启动Ngnix,使用360浏览器访问服务器。此时服务端测试的根证书还没有预添加到浏览器可信数字证书列表中,网站URL前仍然会提示一个打红叉的锁,代表证书链没有通过验证,如图4所示。此时需要把Tassl生成的CA.crt文件保存到360国密浏览器ctl.dat文件中。此后重启浏览器,浏览器加载根证书后,浏览器不再进行报警。

图4:浏览器地址栏的报警提示

5 结束语

近期,俄罗斯因俄乌冲突受美国制裁,很多全球性电子认证服务机构不再签发俄罗斯的数字证书申请,导致俄罗斯国内很多网站证书面临过期失效风险。此事件也为我国敲响警钟,密码等核心技术不能受“卡脖子”限制。在电子认证服务领域,我们拥有自主知识产权的SM2算法,并且建立了以国家根为信任源点的多级电子认证服务体系。近年来,我国的安全可信生态体系逐步成熟,选用安全的产品也成为政府、企业开展系统建设的首要因素,国密浏览器成熟度越来越高,用户数量和市场占有了较大提升。本文介绍了网站身份认证的基本概念,分析了网站认证的安全需求,详细介绍了国密公钥算法、国密数字证书、国密根认证体系、证书链等,基于360国密浏览器和开源项目Tassl,实现了一个完整的国密网站认证方案。为开展国密改造的网站管理者提供了参考方案。

猜你喜欢
国密数字证书私钥
清扫机器人避障系统区块链私钥分片存储方法
比特币的安全性到底有多高
国密技术在智能燃气表系统的应用与分析
基于改进ECC 算法的网络信息私钥变换优化方法
Hyperledger Fabric平台的国密算法嵌入研究
自助终端设备国密改造方法探究
基于国密算法的银行移动营销终端安全系统研究
一种基于虚拟私钥的OpenSSL与CSP交互方案
当心黑客利用数字证书的漏洞
基于数字证书的军事信息系统安全防护方案