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

    0. 简介

    简单介绍一下使用加密的通信流程,以及数字证书的作用。

    1. 一般的通信过程

    1.1 通信过程1

    双方采用非对称加密算法RSA进行通信加密:

    “客户”有公钥

    “服务器”有私钥


    “客户”不能确定对方是不是“服务器”

    ➡“客户”需要判断对方是否有私钥

    1.2 通信过程2

    “客户”和“服务器”双方采用非对称加密算法RSA加密的通信过程中有“黑客”时:

    由于黑客没有“客户”手中公钥配对的私钥进行通信,从而导致“客户”不能对其发来的密文进行公钥解密,于是“客户”得知对方不是“服务器”。

    1.3 通信过程3

    “客户”和“服务器”双方在后续的通信仍旧采用非对称加密算法RSA加密进行通信吗?

    NO!NO!NO!

    一方面,公钥任何人都可以拥有,一旦“服务器”用私钥加密密文被其他人得到后,用公钥一解密,那么信息就泄露了!

    另一方面,由于非对称加密算法加密和解密的过程都比对称加密算法耗时,因此后续的通信过程双方进行协商,采取对称加密算法进行:

    1.4 通信过程4

    “客户”和“服务器”双方后续用对称加密算法进行通信的过程:

    此处非对称加密算法RSA所起到的作用有:

    • “客户”通过公钥判断对方是否有私钥,进而判断对方是不是“服务器”;

    • 再使用该RSA算法进行对称加密算法和密钥的协商。

    1.5 通信过程4中的问题

    通信过程4看起来很安全了,但“客户”的公钥从哪得到的呢?

    2. 具有数字证书的通信

    2.1 数字签名

    咱们再来考虑另一个问题。若“客户”不在乎自己的隐私信息被其他人知道,只在乎“服务器”给出的回复是真实可信的,那么“黑客”在“服务器”回复信息的时候修改了信息的内容,这时“服务器”和“客户”又该确定“黑客”有没有修改消息内容呢?

    扩充一下,只要存在通信,则会存在一些公开信息的传输,那么要怎们确保传输的内容没有被其他人篡改呢?

    由于Hash运算可以将任意长的输入压缩成固定的长度,即哈希值。

    1. Hash函数具有单向性(抗原像攻击性):从哈希值逆向算出原文是不现实的
    2. Hash运算具有抗碰撞攻击性:两个哈希值相同,其输入数据一定不同
    3. Hash值不表达任何关于输入数据的信息

    于是,对原内容进行Hash运算得到哈希值,称为“数字摘要(Digest)”,再用发送方自己的私钥进行加密得到“数字签名(Signature)”,再将原内容和该“数字签名”发送出去就可以了。

    流程如下:

    2.2 数字签名的漏洞

    但“黑客”还在努力呀!

    他从信息传输中截获了发送方A的信息,再自己伪造一份发给接收方B,再告诉接收方B公钥或使用一些手段替换掉了发送方A的公钥,那么接收方B得到的验证结果不论证明说都是不可靠的。

    那么现在又陷入了通信过程4中的问题——这个公钥究竟是不是可靠的?是不是通信双方要采用的那个公钥?

    2.3 数字证书

    那么CA中心发的这个数字证书有什么能耐可以保证通信的信息安全呢???
    数字证书是一种电子文档,是由CA中心所颁发的一种较为权威与公正的证书。比较常用的版本是TUTrec.x.509V3,由国际电信联盟制定。

    数字证书里有哪些内容呢?

    • 证书序列号
    • 证书的发布机构
    • 证书的有效期
    • 证书所有者(Subject)
    • 公钥
    • 签名所使用的算法
    • 指纹以及指纹算法 ➡ 保证完整性
    • ……

    数字证书有什么作用呢?

    1. 安全性。用户申请证书时会有两份不同证书,分别用于工作电脑以及用于验证用户的信息交互,若所使用电脑不同,用户就需重新获取用于验证用户所使用电脑的证书,而无法进行备份,这样即使他人窃取了证书,也无法获取用户的账户信息,保障了账户信息。
    2. 唯一性。数字证书依用户身份不同给予其相应的访问权限,若换电脑进行账户登录,而用户无证书备份,其是无法实施操作的,只能查看账户信息,数字证书就犹如“钥匙”一般,所谓“一把钥匙只能开一把锁”,就是其唯一性的体现。
    3. 便利性。用户可即时申请、开通并使用数字证书,且可依用户需求选择相应的数字证书保障技术。用户不需要掌握加密技术或原理,就能够直接通过数字证书来进行安全防护,十分便捷高效。数字证书是由CA中心所签发的,CA中心是一个具权威性、依赖度极高的第三方,其资格证书经国家颁发,可有效保障网络数据信息的安全性,使数据信息处国家掌握当中。用户在浏览网络数据信息或进行网上交易时,利用数字证书可保障信息传输及交易的安全性。

    注意到数字证书中有一个指纹和指纹算法,那是什么东西呢?

    你向CA中心申请了证书,CA中心将证书发送给你,那CA中心怎么保证这证书没有被别人改动过呢?于是,CA中心需要采用数字签名的操作,也就是这里的指纹(Hash值),所以CA中心根据指纹算法(Hash算法)计算整个证书的指纹(哈希值),然后将其与证书一起发送给你。你接收后进行验签,然后根据前面的2.1 数字签名中的内容就可以知道你的证书有没有被动过啦。

    通信过程5

    采用数字证书进行通信的流程:

    从上面的通行流程可以看出,数字证书的主要作用为:

    1. 是否为受信任的权威机构发布?
    2. 是否被篡改?
    3. 是否是服务器发过来的?

    通信过程5中的问题



    文中的内容根据网络上其他博文整理而来。 关于数字证书的详细内容将在整理完《GM/T 0034-2014 基于SM2密码算法的证书认证系统密码及其相关安全技术规范》之后给出,链接为:[【简介】《GM/T 0034-2014 基于SM2密码算法的证书认证系统密码及其相关安全技术规范》](https://www.cnblogs.com/11sgXL/p/14979182.html)。



  • 相关阅读:
    Python常用转换函数
    Python随机数
    sublime text的pylinter插件设置pylint_rc后提示错误
    使用Pydoc生成文档
    字符编码笔记:ASCII,Unicode和UTF-8
    Windows编程MessageBox函数
    魔方阵算法及C语言实现
    iOS通讯录整合,兼容iOS789写法,附demo
    谈谈iOS app的线上性能监测
    ReactiveCocoa代码实践之-更多思考
  • 原文地址:https://www.cnblogs.com/11sgXL/p/13517660.html
Copyright © 2011-2022 走看看