数字证书知多少
由于之前的工作中做了一些和数字证书的相关的工作,今天就给大家分享一点我对数字证书的应用的理解。
大家对数字证书听说的可能会比较多但是对数字证书的实际应用可能却不一定熟悉。我这里先举两个与大家生活比较密切相关的例子:互联网时代我们大家基本都会用到网银和支付宝。我们去银行办理网银的时候,通常会得到一个类似U盘的东西,他们称之为UKey或者U盾,银行里的人通常会告诉你说这个是保证你交易安全的东西,让你在网络上进行交易时插上这个UKey。那这个UKey或是U盾里面到底装的是什么东西呢,其实里面存储的是一张数字证书。我们大家都有支付宝账号,支付宝为了保证网上交易的安全性通常也会推荐大家去申请并安装一张支付宝的数字证书,并且把你是否安装了数字证书作为衡量你的支付宝账号是否安全的一项重要指标。那么问题就来了,数字证书是怎么保证我们通信和交易安全的呢?
在回答这个问题之前,我们先了解一点密码学中关于加解密的一些常识。加密的手段总的来说可以分为两大类:一类是对称加密,一类是非对称加密。所谓对称加密就是加密所用的密钥和解密所用的密钥相同,密钥只有一个,就叫做密钥。非对称加密呢就是加密和解密所用的密钥不同,密钥有两个,一个叫做公钥,另一个叫做私钥,通常公钥用来加密,私钥用来解密。
在历史上很长的一段时间内的加密手段都可以理解为对称加密,对称加密比较简单并且容易进行,常见的对称加密算法有:DES、3DES、AES等。但是对称加密有一个大的缺陷就是当通信参与方变得复杂时,由于每一个通信的双方都需要协商一个密钥,这产生了两个问题:
1. 密钥的保管就成了大问题
2. 通信的双方必须知晓对方,通俗一点就是双方都是熟人(因为密钥需要协商)
当然这两个问题也只是对称加密的缺陷的一部分,我们这里就不再展开讨论了。我们来讨论一下非对称加密是如何解决这两个问题的。
关于非对称加密,我们要先说一下这类加密算法存在的理论基础是什么,就是存在这么一类数学难题,它正着算比较容易,逆着算则无法进行或是不可能。比如有些数分解起来相对容易,但是根据分解的结果推算这个数则比较困难。常见的非对称算法有:RSA,ECC等。
我们前面已经提到,非对称加密有一对公私钥,也就是说我们每个人只需要保管一对公私钥就可以了,准确的说只需要保管一个私钥就可以了,因为公钥顾名思义就是公开的密钥。理论上来讲任何人如果要想和你通信只要使用你的公钥给你加密信息就可以了,因为只有你的私钥可以解开,其他人又无法通过你的公钥推算出你的私钥,因此如果私钥不泄露通信就可以认为是安全的。不过这里需要说明的是,由于非对称加密通常是以数学上的难题为基础,因此加解密的效率就不如对称的高,所以通常加解密的内容不能太长。看样子使用非对称加密似乎就不会有对称加密算法产生的那两个问题,不过细心的童鞋可能又发现了新的问题,就是公钥的归属如何证明呢?
为了更好的说明这个问题我们假设有这样的场景:
张三给李四写了封信,然后使用了李四的公钥进行了加密,为了让李四知道是自己写的,他决定在信封上做个签名,于是他运用摘要算法,提取了信件内容的摘要,再用自己的私钥将摘要加密形成数字签名,附在信封上寄给了李四
李四收到信之后找到张三的公钥,使用张三的公钥解开了摘要信息,从而知道了这是一封张三写的信,然后他用自己的私钥解开了信件的内容,用同样的摘要算法提取了信件的摘要,对比一下发现一模一样,证实了信件未被修改。
现在王五想知道张三给李四写了什么,于是他偷偷的将张三手里李四的公钥换成了自己的,而张三对此毫不知情,这样张三和李四之间的通信就变得不再安全。
所以在这个通信过程中就产生了“当你获得一个公钥你无法确认公钥是谁的?”的问题,这也就是公钥的归属问题,为解决公钥的归属所产生的问题,引入了一个第三方中立可信的机构叫做CA(Certification Authorities),它可以对公钥做认证,实际上CA认证的方式就是用自己的私钥把用户的公钥和一些相关的信息做一个加密然后形成一张数字证书。CA签发的这张证书具有唯一性和不可否认性甚至是有法律保护的(电子签名法),因此公钥归属问题就得到了解决。CA可以理解为数字证书的签发机构。
这样“公钥是谁的?”就得到了解决,只要张三向CA申请一张数字证书(关于数字证书的申请事实上是有一套体系的)这样他在写信时把自己的证书也带上就可以了,李四收到之后使用CA的公钥解开数字证书的内容就可以拿到张三的公钥了。
到这里呢,我们大概就可以知道为什么会有数字证书以及数字证书产生的原因是什么了。由于非对称加密有着比较可靠的安全性,并且对于未知实体间的通信有着天然的优势。因此目前对一些机密信息的传输都使用了数字证书。
我们在开始的时候提到UKey和支付宝证书。那么它们在交易中的作用和我们上面举的例子差不多,一般交易中都会涉及金额,密码等敏感信息为了不使这些信息发生泄漏或篡改,通常都会对这些信息进行数字签名和加密传输。我们前面讲过无论是直接使用非对称加密还是使用数字证书通信安全的前提都是私钥不被泄露,那么UKey和支付宝证书它们的私钥存放在哪里呢,说到这里,我们先要说一下数字证书的格式,数字证书总的来说有两种格式:.cer和.pfx,前一种是只存放公钥信息的,后一种则是公私钥都存放的。支付宝证书是可以从浏览器中导出来的,它导出来的格式是.pfx的,因此它里面既有公钥又有私钥所以私钥信息就含在证书里,而对于UKey它相当于是用硬件的方式保护了私钥信息。
关于数字证书还有一个比较广泛的应用,大家在生活中也经常遇到,我们在上网时会注意到一个现象:大多数的网站的地址是http开头
也有一部分网站则是https开头,那么这两种地址有什么不同呢,http是一种普通的网络传输协议而这种https则是在http的基础上又加了一层用来保证通信安全的,即SSL协议。使用了SSL协议的http(https)的通信是加密的,不使用SSL协议的http所有信息都是明文传播的,所以https的站点比http站点通信相对安全一些。SSL协议的应用也需要使用到数字证书。
关于数字证书在SSL协议(在实际应用中又分单向SSL和双向SSL)当中应用,推荐大家去看知名博主阮一峰的两篇博客:
在网络世界中数字证书就像现实世界中一个人的身份证一样,它能表明你的身份,它也会像你的身份证一样存在有效期,也会存在证件真伪的问题?
因此使用数字证书固然安全,但是在使用中对数字证书的验证则更为重要。那么数字证书如何验证?
数字证书的验证通常包含两个方面,一个是真实性,一个是有效性。我们前面提到数字证书是由CA签发的,因此只要对CA的合法性能够得到验证,那么证书的真实性就能得到验证,因此数字证书的验证其实就是通过验证CA来证明的。不过这里要说明的是一个一级CA可能存在多个二级CA甚至是三级四级CA,所以对于数字证书的真实性验证最终通常会是一个信任链的验证。而数字证书的有效期的验证,则是通过另外的一个方式,这个也和CA有关,CA签发了数字证书,对于每一个数字证书的有效期当然都是有记录的,它会定期的维护一个过期的列表叫CRL(证书注销列表),在列表里的证书显然都是已经过期的了,所以对证书有效性的验证通常是去验证这个列表里是否有被验证的证书。
现在我们来总结一下:
1. 加密手段总共有两类:对称加密,非对称加密
2. 为了解决非对称加密的公钥归属问题,出现了CA,它可以对公钥做认证,并签发认证证书——数字证书
3. 对称加密效率比非对称加密效率高,实际上在应用中一般是两者结合的(https的通信加密其实就是客户端和服务器端协商的密钥,而在协商的过程中使用了数字证书)
4. 数字证书存在生命周期,由CA签发,到期失效或者被CA注销
关于数字证书的使用实际上是在一套基于公开密钥(公钥)技术体系内运行的,这套体系被称为PKI(Public Key Infrastructure),我们提到的CA它就属于PKI系统里的一个重要组件。有兴趣的童鞋,可以找一本关于PKI技术的书籍深入了解一下。
注:
摘要算法:可以将任意长度的消息内容通过一定的算法转化成固定长度信息值,这个固定长度的信息称为摘要,这个算法叫做摘要算法。
这种算法一般具有如下性质:
1. 改变输入消息的内容哪怕是一个bit位,结果都将发生不可预测的巨大变化
2. 计算是单向的,根据输入得到输出是容易的,但根据输出得到输入则在计算上是不可行的或是无法在有效的时间内得到计算结果
常见的摘要算法:MD5,SHA-1,SHA-256,SHA-512
而在数字签名中使用摘要算法最直接的好处就是可以对任意长度的信息进行签名,提高了签名的效率。
关于摘要的使用也比较广泛,例如,我们在比较两个文件内容是否一致的时候,如果文件比较大一行一行的比较显然是不太现实,此时如果比较这两个文件的MD5摘要值则会容易的多。由于摘要算法的特点,因此现在很多网站为了防止用户密码发生泄漏,通常在数据库中存储的是用户密码的MD5摘要值而不是原文。不过MD5目前已经被证明不是安全的了。前些年被炒的沸沸扬扬的美国国防部密码被破解新闻,其实和这个MD5摘要计算被破解有关系。山东大学一位叫王小云的女教授,通过自己不懈的努力,证明了MD5摘要算法被快速破解的可能性, 据说她通过普通的个人电脑在几分钟之内就可以得到有效的结果。所以对于安全较高的密码存储目前都已经不再使用MD5摘要算法了