深入理解加密、解密

1.1. 总述

甲把文件发送给乙,乙收到文件,有几个问题需要搞明白。

  • 文件内容不能被别人偷窥,也不能被被人篡改;

  • 需要确定文件是由甲发过来的,而不是由其他人发过来的;

  • 需要确定甲的签名是甲自己签名的,而不是别人签名的;

  • 需要确定文件时间是甲和乙都认可的,或者说确定文件时间是不能被甲否认的;

对整个加密过程,可以类比想像成现实生活中把信件发送给别人的过程,每一个环节都有可能出现问题。整个发送的过程就是不断解决这些问题的过程——这就是整个信息安全的主要指导思想。

需要思考的问题有:

  1. 如何防止文件被窥?(加密)

  2. 如何确定文件是由甲发送?(加签名)

  3. 如何确定文件没有被篡改?(取摘要)

加密加签名取摘要过程中,又引入新的问题:

  1. 如何保证甲的公钥是甲的公钥?(引入CA中心)

  2. 如何防止甲的私钥丢失?(引入强因素认证)

  3. 如何防止甲否认发送时间?(引入DTS)

1.2. 概念理解

  • 什么是对称加密

    所谓对称加密就是使用同样的字串,对数据进行加密和解密。

  • 什么是非对称加密

    非对称加密,就是把公钥分发给其他人,私钥只有自己知道,私钥能解密被公钥加密的内容,公钥也能解密由私钥加密的内容。

  • 什么是散列算法

    也称哈希算法。散列表的基本思想是将关键字(key)通过散列函数映射到表中的一个位置,在查找的时候只要通过关键字就可以直接获取对应位置的值。那么主要的问题就是如何设计散列函数和如何在不同的关键字映射到同一位置的时候处理冲突。注意我们现在讨论的存放的仅仅是关键字,实际情况存放的是关键字+值。

  • 什么是摘要

    使用散列算法对一段字符串进行操作,得到的结果就是摘要。其特点是,无法通过摘要信息获取任何一点关于明文的信息。接收方只能通过同样的散列算法对字符串进行操作,通过对比摘要信息是否一致来证明文件是否被篡改。

  • 什么是签名

    利用非对称加密算法中的私钥能解密被公钥加密的内容,公钥也能解密由私钥加密的内容的原理,对要发送的内容,使用自己的私钥对某一字符串进行加密,如果接收方能够使用发送方的公钥解密出改字符串,则证明此文件是由接收方发送的。

  • 什么是ca机构

    ca机构是颁发数字证书的、受信任的第三方机构,它承担着公钥体系中公钥合法性检验的责任。

  • 什么是数字证书

    • 定义: 数字证书即ca机构发放的,最简单的数字证书包含公开密钥、名称及证书授权中心的数字签名,一般情况下还包含证书的有效时间、序列号、颁发机构信息等。

    • 作用: 数字证书的作用是证明证书中列出的用户合法拥有证书中列出的公钥,即是用户信息和公钥一一绑定。

  • 什么是强认证机制

    强认证机制就是只有身份拥有者才知道的因素。例如,银行卡密码,不存储于别的地方,只有自己才知道;再比如指纹、虹膜等生物信息;再比如由认证中心颁发的与身份绑定的U盾等。

  • 多因素认证

1.3. 加解密过程

下面的场景之间的关系是递进的,即在解决了一个问题的同时又引入了新的问题,场景二解决了场景一引入的新问题……

1.3.1. 场景一——防文件被偷窥

使用对称加密算法加密明文,使用非对称加密算法加密密钥。

甲的过程:

  • 甲使用对称加密算法中的密钥(串a)对文件进行加密,生成串b

  • 甲使用非对称加密算法中乙的公钥对对称加密算法用到的密钥(串a)进行加密,生成串c

  • 甲把串c和串b一块发给乙,即甲把加密后的密文和加密后的密钥一并发送给乙

乙的过程:

  • 乙使用非对称加密算法中的私钥对串c进行解密,得到甲加密文件是用到的串a

  • 乙使用串a对串b进行解密,得到明文

潜在问题:黑客执行甲的步骤,然后把串c和串b发给乙,乙同样会得到明文,但是这个明文与期待中的明文是不一样的,即文件被篡改。那如何防止文件被篡改?

1.3.2. 场景二——防文件被篡改

利用非对称加密算法中,公钥能解开同为一对的私钥加密的密文的原理(使用甲才拥有的私钥加密,这个过程就是签名的过程),来证明文件是由甲发送过来的,而非别人,即文件没有被篡改。

甲的过程:

  • 甲使用对称加密算法中的密钥(串a)对文件进行加密,生成串b

  • 甲使用非对称加密算法中乙的公钥对对称加密算法用到的密钥(串a)进行加密,生成串c

  • 甲使用散列算法对文件进行取摘要操作,然后使用自己的私钥进行加密,生成串d,这个串d就是甲的签名

  • 甲把串d、串c和串b一块发给乙

乙的过程:

  • 乙使用非对称加密算法中的私钥对串c进行解密,得到甲加密文件是用到的串a

  • 乙使用串a对串b进行解密,得到明文

  • 乙使用甲的公钥对串d(即甲的签名)进行解密,得到明文摘要

  • 乙使用同样的散列算法对明文进行取摘要,与上一步得到的明文摘要进行对比,相同即可认为是文件内容没有被修改

潜在问题:在乙的解密过程中,乙使用甲的公钥对串d进行解密,如何确保一定是甲的公钥呢?

1.3.3. 场景三——防身份被冒用

通过公认的第三方机构来验证公钥与公钥持有者的信息的原理来证明改公钥就是公钥持有者的。

甲的过程:

  • 甲使用对称加密算法中的密钥(串a)对文件进行加密,生成串b

  • 甲使用非对称加密算法中乙的公钥对对称加密算法用到的密钥(串a)进行加密,生成串c

  • 甲使用散列算法对文件进行取摘要操作,然后使用自己的私钥进行加密,生成串d

  • 甲拷贝一份自己的数字证书的拷贝

  • 甲把串d、串c和串b以及数字证书的拷贝一块发给乙

乙的过程:

  • 乙使用非对称加密算法中的私钥对串c进行解密,得到甲加密文件是用到的串a

  • 乙使用串a对串b进行解密,得到明文

  • 乙使用甲的公钥对串d进行解密,得到明文摘要

  • 乙使用同样的散列算法对明文进行取摘要,与上一步得到的明文摘要进行对比,相同即可认为是文件内容没有被修改

  • 乙校验数字证书的签名来验证数字证书的有效性(ca中心会广播给域内任何一台主机一个字符串,这个字符串就是ca的签名数据,校验时只需要对比数字证书中的ca的签名是否与自己本地存储的ca中心的签名是否一致即可),如果校验通过,则可以相信数字证书中包含的公钥所属者

潜在问题:甲虽然把合同发送给乙,但是甲拒不承认在签名(数字签名就相当于书面合同中的文字签名)显示的那一刻签署过此文件,把此过错归咎于电脑。

1.3.4. 场景四——防时间被篡改

取大家公认的第三方服务提供的时间作为可信时间。

具体过程:

  • 甲把要发送的文件加上时间戳,然后用哈希编码形成摘要,再把摘要发送给DTS;

  • DTS再对收到文件添加时间戳,再进行签名,然后返回给甲;

  • 甲把时间戳(包括加了时间戳的文件的摘要、DTS收到文件的时间和日期、DTS的签名)连同之前的所有信息一并发送给乙,因此具有不可否认性;

潜在问题:整个连贯的场景中,涉及到的重中之重是甲的私钥,如果甲的私钥丢失,整个过程就变的不可信,不安全。那如何保证私钥的安全?

1.3.5. 场景五——防私钥丢失

  • 使用强认证机制;

欢迎微信搜索公众号: “天晴小猪”,阅读更多内容。

你可能感兴趣的:(深入理解加密、解密)