博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
密码学基础概念
阅读量:6245 次
发布时间:2019-06-22

本文共 2736 字,大约阅读时间需要 9 分钟。

hot3.png

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

  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网站的交互(密码学的一种应用)。

转载于:https://my.oschina.net/newchaos/blog/865364

你可能感兴趣的文章
Linux学习之路-Linux-内部yum配置及hostname修改【11】---20171226
查看>>
详解CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI区别
查看>>
针对ASP.NET页面实时进行GZIP压缩优化的几款压缩模块的使用简介及应用测试!(附源码)...
查看>>
IDEA常用快捷键
查看>>
input 回车提交
查看>>
xp创建***拨号连接
查看>>
win下一些常用的工具软件及网管管理系统
查看>>
Index.get_indexer 方法的含义
查看>>
从C#到TypeScript - Generator
查看>>
Exchange 2010 (一) 为多台CAS/HUB配置证书
查看>>
你有合并单元格我都不怕-Lookup特殊使用破合并单元格求值
查看>>
CSS代码格式化工具
查看>>
【开发笔记】单点登录CAS测试登录Invalid credentials无效凭据
查看>>
检查到apache有错误发送邮件
查看>>
3.4 usermod命令;3.5 用户密码管理;3.6 mkpasswd命令
查看>>
IBM中国研究院院长沈晓卫谈认知计算
查看>>
rhel6创建iso镜像
查看>>
Unix整理笔记-vi简介-里程碑M8
查看>>
Java中方法覆盖的约束
查看>>
用路由器做CA的基于数字证书的ipsec ***
查看>>