gown_way的gravatar头像
gown_way 2016-03-06 12:32:38
密码学总结记录(一)

这里记录一下我对密码学的知识的了解:

  1. 先说一下基础的知识和术语

    1.1.明文:指没有加密的字符串,一般人都能看懂的意思(如web开发中以http协议请求时,可通过抓包来获取到浏览器或服务器发送的数据包)。

    1.2.密文:指经过某个加密算法,将明文变成其他字符串。从密文本身,一般不能看出明文本身的意思。不然就失去加密的意义。要想得到明文,就能通过对应的解密算法,才能得到明文,从而知道本来的意思。

    1.3.加密算法和解密算法:指是将明文变成密文或密文变成明文的逻辑步骤。

    1.4.密钥:指一种参数,它是在加密中或解密中输入的数据。

    1.5.消息摘要:指唯一对应一个消息(字符串)的固定长度的值,它由一个消息摘要算法对消息进行作用而产生的。

      特点:抗冲突性高,单向性的

      抗冲突性使得如果一段明文稍有变化,哪怕只更改该段落的一个字母,通过消 息摘要算法作用后都将产生不同的值。

      单向性是指无法从经消息摘要算法作用后产生的值,还原到消息本身。

      作用:检验数据的完整性

      消息摘要算法又叫散列算法,杂凑算法,消息摘要又叫散列值。常见的有MD2,MD4, MD5,SHA-1, SM3(国产的)等等。

 

    1.6.对称加密和解密:指在加解密过程中,参数-->-密钥是相同的,即用的是相同的密钥。

        相对于非对称加密和解密的优点:计算开销小,速度快。缺点是密钥管理困难,需要发送方采用安全的机制共享密钥。

        加解密算法是公开的。常见的有DES,AES,3DES,SM1(国产),SM4(国产)等等

   1.7.非对称加密和解密:指在加解密过程中,参数-->密钥是不相同的。其中一个密钥是公开的,发布出去给别人使用的,称为公钥;另一个密钥是保密的,称之为私钥。

       特点:用公钥或私钥加密的密文,只能由私钥或公钥解密才可以得到相应的明文,否则,无法从密文中得到明文。

       优点:便于密钥管理,分发。缺点是计算开销大,处理速度相对较慢。

       加解密算法是公开的。常见的有RSA、DSA、ECC,SM2(国产)等等

   1.8.数字签名/验签:

       方式1:A要通过网络发送数据(C)给B:

        a.A先将C用非对称私钥加密得到C0,

        b.再将C0和C一起发送给B,

        c.B用公钥解密C0得到明文,再与C做比较,若相同,说明传输过程中没有被人篡改内容。

      方式1的流程图

               密码学总结记录(一)

    

        方式2:a.先将数据C做消息摘要算法,得到消息摘要,

             b.用私钥加密消息摘要得到密文C0,

             c.再和C一起发送给B,

             d.B用公钥解密C0得到消息摘要,再将C以相同的消息摘要算法计算得到消 息摘要,再做比较,若相同,说明传输过程中没有被人篡改内容。

            方式2的流程图

                密码学总结记录(一)

           

             可为什么不用对称加解密来实现呢?为什么不直接用摘要来实现呢?

               这里就说到了数字签名/验签的作用了:

                1.确定该数据包是由发送方发送的(私钥只有发送方才有的,只要用公钥解密后, 两者数据包相同,过程称为验签。就可以确定是发送者发送的)。

                2.确定该数据包在传输的过程中没有被修改(被黑客操作了)。

          

这里举个案例

    场景:A要与B通信,并且保证数据的安全传输

    要求:1.确保通信双方是彼此;

        2.确保通信内容不被别人知道(即使被抓包,也无法知道消息内容)

        3.内容在传输中若被修改,接收方在接受数据后可以知道

       以上是信息安全传输的最基本要求。

    分析:数字签名正好可以解决要求1的问题,私钥只有发送方有,发送方发送一个数字签名包,若接收方能用对应的公钥验签成功,就可以说明发送方是与之通信的一方。

        要求2是不可以用数字签名的方式来解决的,因为消息明文也在数字签名数据包中。

        要求3就不说了,true&&false --------->已经是false了(短路运算)。

       通过上面分析,若只通过一次交互就满足上述的3个要求,显然不太可能。所以解决的办法  只有通过多次的交互,来满足这3个要求。

       步骤1:先确认通信双方的身份(要求1),这个可以通过数字签名来实现

       步骤2:要确保内容不被别人知道,不能采用非对称加密的方式(因为公钥是公开的),这里采用对称加密的方式(加密算法和密钥应该是在会话的过程中临时产生,保存在内存中的)。通信双发需要商量两者都支持的

            对称加密类型。

       步骤3:要确保内容传输中被修改后,接收方能够知道,可以采用对消息做消息摘要,然后再用对称加密消息本身和消息摘要。

       总结:双方发送数字签名包,作用:1.确定通信双方的身份;2.协商好一个对称加密类型(算法);3.协商好一个摘要算法类型

             双方通过数字信封来传递对称密钥(双方只确定了对称加密的类型,还需要密钥才 可以进行对称加解密)。

         数字信封:

           密码学总结记录(一)

       上图是带数字签名的数字信封(好处是既有通信双发的身份确认,有可以确保对称密钥的可靠传输;缺点是A所支持的对称加密类型算法,B都支持),不适合本文讲述的应用场景。所以采用不带数字签名的数字

         信封,如下图:

           密码学总结记录(一)

   

       现在还有一个问题没有解决:A的私钥对应的公钥,B如何获得;B的私钥对应的公钥, A如何获得?因为A和B之间可能没有任何的联系,如浏览器与某一台web服务器。

       这里采用数字证书的方式来解决。

     数字证书:  

       干什么的:1.可以确保身份

              2.可以使接收者安全的接收发送方的公钥

       怎么生成的:这里说一个组织(CA),简而言之就是一个给人发数字证书的这么一个机构。B需要证书,B提交申请给CA,CA会审核,通过后就会给你发一个证书。过程就不介绍了(自行google)。说一下证书里面的主要

               信息(如下图)

           密码学总结记录(一)

       

       颁发者:一般就是指CA了

       有效期:证书的寿命

       使用者:就是申请者了

       公钥:申请者私钥对应的公钥

       签名哈希算法:数字证书的摘要算法

       指纹:CA的私钥对证书的摘要值得加密值(签名值)

       签名算法:CA的非对称加密算法类型

       指纹算法:证书的摘要算法

      大致产生证书的过程:申请者B提交数据给CA(申请者的公钥,申请者的说明等),CA审核通过后,会对申请者提交的数据以一定数据格式封装,再用CA的私钥做数字签名(带摘要的签名),然后再给到申请者B,供B通

                   信用。

     A得到B的数字证书后,怎么确保B的呢?A的操作系统在安装时就已经有了CA的一个数字证书(跟着系统来的),A只需要从CA证书中取出CA的公钥,用公钥去解密指纹,再用指纹算法去对整个证书做摘要,然后比较两者的

     摘要是否相同即可(CA证书可通过ie浏览器---->internet选项------>内容------>证书)。

 

     暂时就到了,第一次写博客,写了好几个小时,文中有误的地方,欢迎指出。后面会举例:https网站的交互(密码学的一种应用)。


打赏
最近浏览
wwwww为撒发顺丰 2021年5月22日
暂无贡献等级
youwuzuichen  LV10 2019年10月5日
浪里个啷gl 2019年2月13日
暂无贡献等级
xxxasd  LV7 2018年10月23日
可爱的小猪  LV11 2017年8月21日
nxq_zdm  LV10 2017年4月22日
nan613 2016年10月25日
暂无贡献等级
花香满庭s版 2016年10月12日
暂无贡献等级
bobo_sun  LV5 2016年9月26日
190181458  LV2 2016年9月7日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友