前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >浅谈密码学

浅谈密码学

作者头像
小蜜蜂
发布2019-07-14 13:55:14
6290
发布2019-07-14 13:55:14
举报
文章被收录于专栏:明丰随笔明丰随笔

一、密码学是什么?

密码学是研究如何隐密地传递信息的学科。那怎样才能隐密地传递信息呢?密码学里的答案就是对原文进行加密。主流的加密主要分成两大类:对称加密非对称加密

1.对称加密:采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密。

密文=对称加密算法(秘钥,明文)

明文=对称解密算法(秘钥,密文)

这里面加密和解密的秘钥是相同的,这里会产生一个问题,秘钥需要告诉信息接收方,这样他才能顺利解密,但是这个秘钥又不能泄露出去,一旦泄露出去,企图窃取信息的人也可以对密文进行解密,并得知原文信息。所以这类的算法的缺点:密钥同步比较麻烦,密钥传输的过程不安全,容易被破解。不过这一类的算法的优点是:加密解密的速度比较快,适合原文数据量大的时候使用。一般对称加密算法有:DES(Data Encryption Standard),AES(Advanced Encryption Standard)等等。

2.非对称加密:非对称加密算法需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。

2.1.公开密钥对数据进行加密

密文=非对称加密算法(公钥,明文)

明文=非对称解密算法(私钥,密文)

2.2.私有密钥对数据进行加密

密文=非对称加密算法(私钥,明文)

明文=非对称解密算法(公钥,密文)

非对称加密与对称加密相比,其安全性更好:对称加密的通信双方使用相同的秘钥,如果一方的秘钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对秘钥,一个用来加密,一个用来解密,而且公钥是公开的,秘钥是自己保存的,不需要像对称加密那样在通信之前要先同步秘钥。但是也有它的缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin等等。我们可以试着对比对称加密和非对称加密的各自优缺点,两者之间形成了一定的互补:

对称加密的缺点是秘钥不好管理。非对称加密没有这个问题。非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。对称加密没有这个问题。所以聪明的我们肯定会想到,在实践中应该汲取两者的优点,并避开两者的缺点,进行合理的混合使用。

二、确保Web安全的HTTPS

在互联网时代,我们通过HTTP可以轻松地与全世界进行通信。HTTP是原文传输的,在通信过程中我们可能会遇到信息的泄露和篡改。HTTP加上加密处理和身份认证以及完整性保护后即是HTTPS。HTTPS是身披SSL/TLS外壳的HTTP。HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。TLS是传输层加密协议,前身是SSL协议,由网景公司1995年发布,有时候两者不区分。

HTTPS有如下特点:

验证身份:通过证书认证客户端访问的是自己的服务器。

内容加密:采用混合加密技术,中间者无法直接查看明文内容。

保护数据完整性:防止传输的内容被中间人冒充或者篡改。

我们这里所说的混合加密技术就是对称加密和非对称加密混搭使用,扬长避短,达到一个既安全又性能出色的效果。首先HTTPS里面传输的内容是很大的,所以在传输这个内容的时候只能选择对称加密,因为对称加密解密的速度比较快,适合原文数据量大的时候使用。既然使用对称加密来操作,就需要考虑如何同步秘钥,这个秘钥可以被理解为一段很小的字符串,所以这个秘钥的同步是可以使用非对称加密的方式来进行的。通过这样的混合使用就可以完成整体的内容加密的需求。所以内容加密主要通过以下步骤完成加密:

1.服务器端生成非对称加密的一个公钥和一个私钥,对外公布公钥,私钥只有自己知道。

2.客户端生成对称加密的秘钥,并使用服务器的公钥加密,并传递给服务器端。

3.服务器端拿到客户端加密好的秘钥,使用私钥对其解密,并获得秘钥。这样就完成了对称加密的秘钥同步。

4.客户端需要发送请求给服务器端,在发送请求之前对请求体进行对称加密,然后在发送。

5.服务器端接受到请求之后,对请求体进行对称解密,然后再做请求的处理。

6.服务器端处理完成之后,会把响应内容返回给客户端,在响应内容返回之前,对其对称加密,然后再返回。

7.客户端接受到相应内容之后,对响应内容进行对称解密,于是获取了解密后的响应内容。

这个详细地说明了加密的过程,单单从破解并窃取信息的角度来说,我们已经做到了不可破解。但是并不能保证数据的完整性。例如,我们在HTTPS的传输途中,我们的密文被黑客篡改了,黑客虽然不能破解密文,但是它还是可以搞点破坏,把密文篡改了,我们在解密篡改之后的密文所得到的明文其实并不是原文内容,所以是不可以信任的。那么我们怎么样才能保护数据完整性?

我们使用数字签名技术来对原文进行保护,在这个之前我们先了解一下什么是数字摘要?

数字摘要:通过单向hash函数对原文进行哈希,将需加密的明文“摘要”成一串固定长度(如128bit)的密文,不同的明文摘要成的密文其结果总是不相同,同样的明文其摘要必定一致,并且即使知道了摘要也不能反推出明文。

数字签名过程:发送报文时,发送方用一个哈希函数从报文文本中生成数字摘要,然后用自己的私人密钥对这个摘要进行加密,这个加密后的摘要将作为报文的数字签名和报文一起发送给接收方,接收方首先用与发送方一样的哈希函数从接收到的原始报文中计算出数字摘要,接着再用发送方的公用密钥来对报文附加的数字签名进行解密,如果这两个摘要相同、那么接收方就能确认该数字签名是发送方的。数字签名有两种功效:

1.是能确定消息确实是由发送方签名并发出来的,因为别人假冒不了发送方的签名。

2.是数字签名能确定消息的完整性。

现在数据的传输的过程中内容也加密,也保护了数据完整性,但是怎么保证对方就是我想要找的站点,而不是其他站点伪装起来的呢?

答案就是对网站安装CA认证的数字证书。

CA认证的数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式。它是由CA机构,又称为证书授权(CertificateAuthority)中心发行的,人们可以在网上用它来识别对方的身份。它是一个经CA数字签名的包含拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及CA数字签名。数字证书还有一个重要的特征就是有一个有效日期。CA认证的数字证书又是如何保证网站的真实性的呢?

首先CA认证的数字证书包括了:使用CA自己的私钥加密数字证书原文,之后得到的数字证书密文,还有CA对数字证书的数字签名(经过先通过Hash函数计算得到证书数字摘要,然后用权威机构私钥加密数字摘要得到数字签名)。当客户端收到这个证书之后,使用本地配置的CA机构的公钥对数字证书密文进行解密得到数字证书明文和证书的数字签名,数字签名经过CA公钥解密得到证书的数字摘要,然后根据数字证书明文计算出当前证书的数字摘要,与收到的签名里的数字摘要作对比,如果一样,表示证书一定是服务器下发的,没有被中间人篡改过。

通过这一系列的操作,CA才能验证网站的身份。

数字证书其实就是一对公钥和私钥。上面讲的是CA认证的数字证书,所以必须含有:拥有者信息,公钥和证书授权中心数字签名。

当我们站点使用HTTPS的时候,必须要有一套数字证书,可以自己制作,也可以向CA机构申请。区别是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用CA认证的证书则不会弹出提示页面。

三、在实践中领悟

在通过HTTPS的实践中,我们归纳出了八个字:公钥加密,私钥签名。

公钥加密:当公钥端向私钥端发送信息的时候,可以使用公钥加密之后再传输,私钥端接受到密文之后使用私钥进行解密,这个思路是没有办法破解的,可以保证信息不会泄露。

私钥签名:当私钥端向公钥端发送信息的时候,可以使用数字签名技术,来对原文进行完整性的保护。具体请看上文的解释。

谢谢观看!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 明丰随笔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档