- HTTPS
- HTTPS 是最流行的 HTTP 安全形式。它是由网景公司首创的,所有主要的浏览器和服务器都支持此协议。
大家来看这个图,
HTTPS 方案的 URL 以 https://,而不是 http:// 开头,据此就可以分辨某个 Web 页面是通 过 HTTPS 而不是 HTTP 访问的(有些浏览器还会显示一些标志性的安全提示)
使用 HTTPS 时,所有的 HTTP 请求和响应数据在发送到网络之前,都要进行加密。 HTTPS 在 HTTP 下面提供了一个传输级的密码安全层。
我们可以来看一下关于 HTTP 和 HTTPS 的层。
大部分困难的编码及解码工作都是在 SSL or TLS 库中完成的,所以 Web 客户端和服务器在使用 安全 HTTP 时无需过多地修改其协议处理逻辑。在大多数情况下,只需要用 SSL 的输入 / 输出调用取代 TCP 的调用,再增加其他几个调用来配置和管理安全信息就行了。
2.数字加密
关于数字加密,很容易理解的,不知道大家看过一些 “神剧” 么? 在抗战时期的电报密码,都是用本子的形式,然后密码本不同的字母来对应不同的数据信息,然后把对应的数字拼接起来。这只是我们对数字密码的简单理解,来官方的说法:
这里面的编码器和解码器在 “神剧”中不就是密码本的存在么?用密码来生成保密信息已经有数千年了。传说尤利乌斯 · 凯撒(Julius Caesar)曾使用过 一种三字符循环移位密码,报文中的每个字符都由字母表中三个位置之后的字符来取代。 在现代的字母表中,“A”就应该由“D”来取代,“B”就应该由“E”来取代,以此类推。
我们按照 “旋转3” 为例子,
密码就可以将报文“meet me at the pier at midnight”编码为密文“phhw ph dw wkh slhu dw plgqljkw”。
1 通过解码,在字母 表中旋转 -3 个字符,就可以将密文解密回原来的明文报文。
但是缺点我们同时也能想到,密码本容易被对方给获取,编码机器也容易被敌人获取,在战争年代,密码本这是必争之物呀。
所以大部分机器上都有一些号盘,可以将其 设置为大量不同的值以改变密码的工作方式。即使机器被盗,没有正确的号盘设置(**值),解码器也无法工作。
这些密码参数被称为**(key)。要在密码机中输入正确的**,解密过程才能正确进 行。密码**会让一个密码机看起来好像是多个虚拟密码机一样,每个密码机都有不同的 **值,因此其行为都会有所不同。
上图中就是使用不同**的旋转 N 字符密码。。**越长,编码组合就越多,通过随机猜测 **来**代码就越困难。
给定一段明文报文 P、一个编码函数 E 和一个数字编码** e,就可以生成一段经过编码的密文 C 如下图。通过解码函数 D 和解码** d,可以将密文 C 解码为原始的明文 P。当然,编 / 解码函数都是互为反函数的,对 P 的编码进行解码就会回到原始报文 P 上去。
对称**加密算法为编 / 解码使用相同的**,流行的对称**加密算法包括:DES、Triple-DES、RC2 和 RC4。
3.1 **长度与枚举攻击
在很多情况下,编 / 解码算法都是众所周知的,因此***就是唯一保密的东西了。
好的加密算法会迫使攻击者试遍每一个可能的**,才能**代码。用暴力去尝试所有的**值称为枚举攻击(enumeration attack)。如果只有几种可能的**值,居心不良的人通过暴力遍历所有值,就能最终**代码了。但如果有大量可能的**值,他可能就要花 费数天、数年,甚至无限长的时间来遍历所有的**,去查找能够**密码的那一个。
可用**值的数量取决于**中的位数,以及可能的**中有多少是有效的。
8 位的**只有 256 个可能的**值, 40 位的**可以有 240 个可能的**值(大约是一万亿个**),128 位的**可以产生 大约 340 000 000 000 000 000 000 000 000 000 000 000 000 个可能的**值。
但是也有例外,并不是所有的加密技术中的**值都是全部有效果的,比如,在最知名的非对称加密算法 RSA 中,有效** 必须以某种方式与 质数相关。可能的**值中只有少量**具备此特性。
在传统的对称**加密技术中,对小型的、不太重要的事务来说,40 位的**就足够安 全了。但现在的高速工作站就可以将其**,这些工作站每秒可以进行数十亿次计算。 相比之下,对于对称**加密技术,128 位的**被认为是非常强大的。
实际上,长**对密码安全有着非常重要的影响,美国*甚至对使用长**的加密软件实施了出口控制,以防止潜在的敌对组织创建出美国国家安全局(National Security Agency,NSA)自己都无法**的秘密代码。
Applied Cryptography 这本书中有一个表,记录了1995年的通过猜测所有的**来**一个 DES 密码所需的时间进行了描述。
可能这个数据并不是很适用现在,计算机的速度在成倍数的增长,但是这个图,我们也可以乘以相对应的倍数,那还是比较有参考价值的哈。
对称**加密技术的缺点之一就是发送者和接收者在互相对话之前,一定要有一个共享的保***。
比如你想要和淘宝卖家建立私密的对话的话,那么在安全下单之前,需要和淘宝网建立一个私有的保***,你需要一种产生保***并将其记住的方式,如果全网的人都是这样的,那就可能记住太多的东西了,这就是噩梦般的存在呀。于是就出现了后边的内容,请看下边:
4.公开**加密
公开**加密技术没有为每对主机使用单独的加密 / 解***,而是使用了两个非对称**:一个用来对主机报文编码,另一个用来对主机报文解码。编码**是众所周知的(这 也是公开**加密这个名字的由来),但只有主机才知道私有的解***。
每个人都能找到某个特定主机的公开**,**的建立变得更加简单。但解码**是保密的,因此只有接收端才能对发送给它的报文进行解码。
公开**加密技术是非对称的,为编码和解码使用了不同的**。
那我们就需要把对称**加密和公开**加密来做个对比了。
所有公开**非对称加密系统所面临的共同挑战是:
公开**(是公有的,所有人都可以获得);
一小片拦截下来的密文(可通过对网络的嗅探获取);
一条报文及与之相关的密文(对任意一段文本运行加密器就可以得到)。
就算你知道这三个条件,也无法计算出保密的私有**,这就是公开**非对称加密系统所要面临的挑战。
RSA 算法就是一个满足了所有这些条件的流行的公开**加密系统,关于RSA算法,本文先不深究,之后在我看完密码学这本书之后,然后再给大家进行解读。
5.数字签名
前面我们已经说了对称和非对称**加 / 解密,下面我们来说数字签名是什么意思。
百度百科:数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名是非对称**加密技术与数字摘要技术的应用。
其实说白了,数字签名就是附加在报文上的特殊加密校验码。
我们用一个例子来进行解释,我们先看一幅图,节点 A 是如何向节点 B 发送一条报文,并对其进行签名的。
节点 A 将变长报文提取为定长的摘要。
节点 A 对摘要应用了一个“签名”函数,这个函数会将用户的私有**作为参数。因 为只有用户才知道私有**,所以正确的签名函数会说明签名者就是其所有者。在图中,,由于解码函数 D 中包含了用户的私有**,所以我们将其作为签名函数使用。
一旦计算出签名,节点 A 就将其附加在报文的末尾,并将报文和签名都发送给 B。
在接收端,如果节点 B 需要确定报文确实是节点 A 写的,而且没有被篡改过,节点 B 就可以对签名进行检查。节点 B 接收经私有**扰码的签名,并应用了使用公开 **的反函数。如果拆包后的摘要与节点 B 自己的摘要版本不匹配,要么就是报文在传输过程中被篡改了,要么就是发送端没有节点 A 的私有**(也就是说它不是节点 A)。
把图理解是,是不是关于数字签名就很好理解了呢?
6.数字证书
我们来看一下百度百科对他的解释:数字证书是指CA(电子认证服务)机构发行的一种电子文档,是一串能够表明网络用户身份信息的数字,提供了一种在计算机网络上验证网络用户身份的方式,因此数字证书又称为数字标识。数字证书对网络用户在计算机网络交流中的信息和数据等以加密或解密的形式保证了信息和数据的完整性和安全性。
数字证书其实并没有我们想的那么难,数字证书的基本架构是公开**PKI,即利用一对**实施加密和解密。其中**包括私钥和公钥,私钥主要用于签名和解密,由用户自定义,只有用户自己知道;公钥用于签名验证和加密,可被多个用户共享。
HTTPS 建立了一个安全 Web 事务之后,现代的浏览器都会自动获取所连接服务器的 数字证书。如果服务器没有证书,安全连接就会失败。服务器证书中包含很多字段,其中包括:
Web 站点的名称和主机名;
Web 站点的公开**;
签名颁发机构的名称;
来自签名颁发机构的签名
浏览器收到证书时会对签名颁发机构进行检查。1 如果这个机构是个很有权威的公共签名 机构,浏览器可能已经知道其公开**了(浏览器会预先安装很多签名颁发机构的证书)。