zoukankan      html  css  js  c++  java
  • 数字签名 数字证书

    数字签名原理简介(附数字证书)

    首先要了解什么叫对称加密和非对称加密,消息摘要这些知识。

    1. 非对称加密

    在通信双方,如果使用非对称加密,一般遵从这样的原则:公钥加密,私钥解密。同时,一般一个密钥加密,另一个密钥就可以解密。

    因为公钥是公开的,如果用来解密,那么就很容易被不必要的人解密消息。因此,私钥也可以认为是个人身份的证明。

    如果通信双方需要互发消息,那么应该建立两套非对称加密的机制(即两对公私钥密钥对),发消息的一方使用对方的公钥进行加密,接收消息的一方使用自己的私钥解密。

    2.消息摘要

    消息摘要可以将消息哈希转换成一个固定长度的值唯一的字符串。值唯一的意思是不同的消息转换的摘要是不同的,并且能够确保唯一。该过程不可逆,即不能通过摘要反推明文(似乎SHA1已经可以被破解了,SHA2还没有。一般认为不可破解,或者破解需要耗费太多时间,性价比低)。

    利用这一特性,可以验证消息的完整性。

    消息摘要通常用在数字签名中,下面介绍用法。

    了解基础知识之后,就可以看一下数字签名和数字证书了。

    3.数字签名

    假设现在有通信双方A和B,两者之间使用两套非对称加密机制。

    现在A向B发消息。

    那么,如果在发送过程中,有人修改了里面密文消息,B拿到的密文,解密之后得到明文,并非A所发送的,信息不正确。

    要解决两个问题:1. A的身份认证 2. A发送的消息完整性 那么就要用到上面所讲的基础知识。

    数字签名的过程如下图:

    简单解释:

    A:将明文进行摘要运算后得到摘要(消息完整性),再将摘要用A的私钥加密(身份认证),得到数字签名,将密文和数字签名一块发给B。

    B:收到A的消息后,先将密文用自己的私钥解密,得到明文。将数字签名用A的公钥进行解密后,得到正确的摘要(解密成功说明A的身份被认证了)。

    对明文进行摘要运算,得到实际收到的摘要,将两份摘要进行对比,如果一致,说明消息没有被篡改(消息完整性)。

    疑问:

    摘要使用A的私钥加密,如果被拥有A的公钥的第三者截获,不就可以获取到摘要了么?会不会对安全造成威胁。

    不会。因为摘要是不可逆推出原文的。

    4.数字证书

    理解了数字签名之后,数字证书就好理解了。

    由于网络上通信的双方可能都不认识对方,那么就需要第三者来介绍,这就是数字证书。

    数字证书由Certificate Authority( CA 认证中心)颁发。

    关于数字证书的具体描述,需要百度,目前未完全理解。记一个TODO。

    图解如下:

    首先A B双方要互相信任对方证书。//TODO

    然后就可以进行通信了,与上面的数字签名相似。不同的是,使用了对称加密。这是因为,非对称加密在解密过程中,消耗的时间远远超过对称加密。如果密文很长,那么效率就比较低下了。但密钥一般不会特别长,对对称加密的密钥的加解密可以提高效率。


    一.什么是数字证书?

      数字证书是一种权威性的电子文档。它提供了一种在Internet上验证您身份的方式,其作用类似于司机的驾驶执照或日常生活中的身份证。它是由一个由权威机构----CA证书授权(Certificate Authority)中心发行的,人们可以在互联网交往中用它来识别对方的身份。当然在数字证书认证的过程中,证书认证中心(CA)作为权威的、公正的、 可信赖的第三方,其作用是至关重要的。

      Ok,知道什么是数字证书后,先看看它长的什么样吧:>,文件缩略图如下:

      

      双击后打开如下:

      

    二.CA认证机构/CA认证中心

      1.CA认证中心是什么?

      CA认证中心是负责签发管理认证数字证书的机构,是基于国际互联网平台建立的一个公正,权威,可信赖的第三方组织机构。

      2.世界上的CA认证中心不止一间,那他们之间的关系是什么(CA认证中心之间的关系)?

      嗯,回答这个问题之前可以先看看下图:

      

      从图中可以看到,CA认证中心之间是一个树状结构,根CA认证中心可以授权多个二级的CA认证中心,同理二级CA认证中心也可以授权多个3级的CA认证中心...如果你是数字证书申请人(比如说:交通银行),你可以向根CA认证中心,或者二级,三级的CA认证中心申请数字证书,这是没有限制的,当你成功申请后,你就称为了数字证书所有人。值得注意的是,根CA认证中心是有多个的,也就是说会有多棵这样的结构树。FireFox里面默认记录了一些根CA认证机构的信息,如图:

      

      看到这里,肯定有人会问,如果有现在新的根CA认证机构成立,FireFox肯定是没有这个CA认证中心的信息的(这些信息是用来验证子CA认证机构的,很重要,后面来会讲到),那怎么办呢?嗯~~确实,如果今天2009-1-8日突然在哪里成立一个新的CA认证中心,我FireFox里面肯定没有他的信息的!但解决办法还是有的,看上图,可以找到一个"Import"按钮,当我们遇到这样的倒霉事时,只有自己去下载并导入根CA认证中心信息了(其实这样做是不太安全的!),或者期望FireFox的升级会升级这些信息,但这个我是不确定的。

      3.为什么CA认证中心是权威的?

      其实搞清楚这个问题后,你也会真正了解“CA认证中心是如何授权子CA认证中心的?”,“为什么伪造的数字证书是无效的”,“为什么数字证书是一种权威性的电子文档”等等一系列的问题。并且SSL可以说是建立在CA认证中心的权威,公正,可信赖的基础上的,如果CA认证中心的信息可以被伪造的,那么SSL的一切就完了......

      首先,我们先来看看,在FireFox里记录的CA认证中心的信息到底是什么东西??见上图,单击某项,Export导出....你会看到导出的东西很面熟,原来就是数字证书!!

      实际上每个CA认证中心/数字证书所有人,他们都有一个数字证书,和属于自己的RSA公钥和密钥,这些是他们的父CA认证中心给他们颁发的,这里先大概解释一下RSA,RSA是一种非对称加密的算法,它的公钥和密钥是配对的,如果用公钥加密,用私钥解密就可以得到明文;如果用私钥加密,用公钥解密也可以得到原来的明文,这由RSA特性决定,他效果可以用下图概括:

      

      对于私钥:CA认证中心/数字证书所有人自己保存,不公开。

      对于公钥:CA认证中心/数字证书所有人会把公钥存在他的CA认证中心的数字证书内。

      (1).首先,CA认证中心/数字证书所有人,它在网络上的表现形式只能是一张数字证书!所以我们可以把某张数字证书等价于某个CA认证中心/数字证书所有人。这样的话,验证数字证书的合法性就可以确定CA认证中心/数字证书所有人是否是合法的!!!

      (2).数字证书使用数字签名作验证!这里简单说明一下数字签名的过程:你从Firefox/IE导出的数字证书包含3个部分:证书内容(F),加密算法(A),F加密密文(F') (数字证书结构会在第三部分详细介绍),在这里,A不是一个算法,而是两个,所以密文F'是F两次加密后的结果。

      首先,F会被散列算法SHA1计算出hash值h1(称为128bit的摘要),然后h1会被发布这个数字签名的CA认证机构的用私钥进行RSA加密,注意:是发布这个数字签名的CA认证机构,如果现在被加密的数字证书是属于二级CA认证机构的,那么用来加密这个证书的私钥是根CA认证机构的私钥!!RAS加密完后,就形成密文F'。

      当你要验证这个数字证书可信/合法性时,你需要找到你的上一层CA认证中心的数字证书,并且从中获取公钥,把数据证书中的密文F'进行RSA解密,如果得出的值h2和h1比较(h1可以立即用数据证书中的F现场算出来),如果相等,则认为证书是可信的,合法的!由于你是不可能知道上一层CA认证中心的私钥,所以你无法伪造一个可以用上一层CA认证中心公钥解密的数字证书!!

      详细流程图如下:

      

       由于一个数字证书基于上层的数字证书作验证,那上层的数字证书又是否合法呢??这就会出现一直递归上去的现象,事实也是这样的,验证一个证书是否合法,需要验证到他的最顶层的根证书是否合法!从其他的文章弄来的这幅图很好地表达了这个思想:

       

      这里肯定又有人会问,那么最顶层的CA认证中心如何证明它的合法性呢?.......呵~这就是为什么FireFox要预先把一些最顶层(这里的"最顶层"和"根"是同一个概念)的CA认证中心的证书加入到权威信任列表中了,因为,最顶层CA认证中心没有办法证明,所以,最顶层的CA认证中心是总是受信任的!!而事实上,最顶层的CA认证中心在是世界上也是为数不多的。这里大家应该了解为什么我刚才说自己导入根CA证书是不太安全的,因为你无法验证。

    三.数字证书的组成

      可以先看看我从Firefox的证书截图:

      

      1.Certificate(证书):

       (1).Common Name(证书所有人姓名,简称CN,其实就是证书的名字,如第一幅图看到的:ABA.ECOMRoot....)

       (2).Version(版本,现在一般是V3了)

       (3).Issuer(发证机关)

       (4).Validity(有效日期)

       (5).Subject(证书信息,你会发现它和Issuer里面的内容是一样的)

       (6).Subject's Public Key Info(证书所有人公钥,刚才所说的公钥就是这个!)

       (7).Extension(扩展信息)

       (8).Certificate Signature Algorithm(公钥加密算法)、

        以上这几项就是上面所说的证书内容(F)。 

      2.Certificate Signature Algorithm:

        这是描述证书的加密算法,就是上所说的加密算法(A),看它的Fireld Value,一般会写:PKCS #1 SHA-1 With RSA Encryption

      3.Certificate Signature Value:

       这记录的是证书被加密后的结果,相当于上面说讲的F'。

    四.数字证书的验证

      要回答数字证书是如何验证的,首先要知道数字证书是要验证些什么东西:>,数字证书的验证,上面已经讲了一些,这做一个总结:

      1.可信性验证/合法性验证:这个刚才已经说的很明白了吧:>

      2.完整性验证:在验证可信性的过程中,h1和h2的比较,其实已经顺便验证其完整性了。

      3.有效性验证:比如验证它的Vilidity值,看是否过期...

    五.参考资料:

    1.http://baike.baidu.com/view/204415.htm

    2.http://finance.sina.com.cn/money/roll/20080401/00404692291.shtml

    3.http://blog.csdn.net/sfdev/archive/2008/03/12/2174305.aspx

    4.http://man.chinaunix.net/develop/rfc/RFC2313.txt

    5.http://www.zhlmmc.com/diary/14554

    原文链接:http://www.cnblogs.com/SirSmith/p/4985571.html

    http://www.cnblogs.com/hyddd/archive/2009/01/07/1371292.html

  • 相关阅读:
    限制浏览器回退
    thinkphp R方法传参
    MYSQL优化学习总结
    mysql安全小结
    深度解析PHP数组函数array_slice
    深度解析PHP数组函数array_chunk
    深度解析PHP数组函数array_combine
    深度解析PHP数组函数array_merge
    并发编程学习笔记(二十一、ArrayBlockingQueue、LinkedBlockingQueue源码分析)
    并发编程学习笔记(二十、CyclicBarrier源码分析)
  • 原文地址:https://www.cnblogs.com/junge/p/7200148.html
Copyright © 2011-2022 走看看