相信了解国密应用的朋友都听说过双证书。那么这个双证书到底是怎么回事呢?但我们今天说的双证书是指国家商用密码体系中的双证书(加密证书+签名证书),而不是站点部署自适应的双证书(SM2算法证书+RSA算法证书),先跟童鞋们讲清楚,以免混淆。好的,今天我们就详细来聊一聊。
什么是双证书?
首先我们来明确一下双证书到底指的是什么,先来看国家密码管理局颁布的《GMT0024-2014 SSL VPN 技术规范》(以下称“技术规范”)中有关于双证书的描述。在5.2.2章节里就说明了服务端双证书的性质和作用。
5.2.2 服务端密钥
服务端密钥为非对称密码算法的密钥对,包括签名密钥对和加密密钥对,其中签名密钥对有VPN自身密码模块产生,加密密钥对应通过CA认证中心向KMC申请,用于握手过程中服务端身份鉴别和预主密钥的协商。
这里需要解释说明一下,KMC: key management center 是密钥管理中心的简称。
其实不单单是服务端用到了双证书,在客户端的秘钥也是采用双证书体系,见“技术规范”的5.2.3。
5.2.3 客户端密钥
客户端密钥为非对称密码算法的密钥对,包括签名密钥对和加密密钥对,其中签名密钥对由VPN自身密码模块产生,加密密钥对应通过CA认证中心向KMC申请,用于握手过程中客户端身份鉴别和预主密钥的协商。
我们在之前的文章《关于国密https的那些事》里面就介绍了使用ECC-SM4-SM3套件握手的秘钥交换过程中有服务端的双证书参与。而在另一个加密套件ECDHE-SM4-SM3中就需要客户端双证书的参与,详细见《GMT0009-2012SM2 密码算法使用规范》的9.6密钥协商版块。
国密双证书和传统单证书区别在哪里?
了解完双证证书作用。我们再来看看国密的双证书和传统的单证书有什么区别。
熟悉PKI的人都知道,证书有加密和签名的功能。证书的公钥用来加密,对应的私钥用来解密。证书的私钥用来签名,公钥用来验证签名(说到这里或许有童鞋就问了,我用私钥加密,公钥用来解密不可以么?我们反向思考一下,既然公钥是公开的,私钥加密的产生的密文,别人都可以拿你的公钥来解密了,那这样的加密还有意义吗?)。
言归正传,国密的双证书体系和传统的单证书,最大的区别就是将单证书的的加密和签名功能一分为二了—-加密证书只用来进行加密,签名证书只用来签名。至于这样做的优劣势就不详细展开了,仁者见仁,智者见智。上升到哲学的角度来说就是凡是都有两面性。
如何辨别加密证书和签名证书?
接来我们要知道加密证书和签名证书有什么区别,我们才能区分哪个是加密证书,哪个是签名证书。
答案很简单,那就是看证书里面的扩展项–密钥用法(KeyUsage)这一项。在《GMT 0015-2012 基于SM2密码算法的数字证书格式》协议5.2.4.2.2中就说明了证书的各种密钥用法,见下图:
现在相信你很快能分辨出下面的图片中哪个是加密证书,哪个是签名证书了~
秋天的第一枚彩蛋
我们再补充一个很多人容易和双证书弄混的一个概念–双向认证:
之前在论坛里就看到有人问,双证书是不是指的就是双向认证。其实这两个是完全不同的概念。
双向认证是指客户端对服务端证书进行认证的同时,服务端对客户端的身份也进行认证。通常很多情况下浏览器会对服务端证书是否可信进行验证。而服务端对客户端的身份是不做限制的,如我们的常用的购物网站,视频网站等。无论你用手机还是用电脑只要输入正确的网址都可以正常访问。
但是有些特殊的场景,为了安全性,服务端会鉴别客户端的身份,这时候就需要在双方握手的过程中,客户端需要将证明自己身份的证书传递给服务端。如有些VPN设备,或政务网站需要用key才能进行登录,这很可能就启用了双向认证。
想要关注更多的内容,微信搜索“国密应用研究院”。本文由沃通原创,转载请注明详细出处,违者必究。
原文链接:https://weibo.com/ttarticle/p/show?id=2309404562107390885890