14.2 数字加密简介

  • 在详细探讨 HTTPS 之前,我们先介绍一些 SSL 和 HTTPS 用到的加密编码技术的背景知识。在这个数字加密技术的入门介绍中,我们会讨论以下内容:
    • 密码:对文本进行编码,使偷窥者无法识别的算法。
    • 密钥:改变密码行为的数字化参数。
    • 对称密钥加密系统:编/解码使用相同密钥的算法。
    • 不对称密钥加密系统:编/解码使用不同密钥的算法。
    • 公开密钥加密系统:一种能够使数百万计算机便捷地发送机密报文的系统。
    • 数字签名:用来验证报文未被伪造或篡改的校验和。
    • 数字证书:由一个可信的组织验证和签发的识别信息。

1. 密码

  • 密码学所能做的不仅仅是加密报文以防止好事者的读取,我们还可以用它来防止对报文的篡改,甚至还可以用密码学来证明某条报文或某个事务确实出自你手,就像支票上的手写签名或信封上的压纹封蜡一样。
  • 密码学基于一种名为密码(cipher)的秘密代码。密码是一套编码方案——一种特殊的报文编码方式和一种稍后使用的相应解码方式的结合体。
  • 明文(plaintext 或 cleartext):加密之前的原始报文。
  • 密文(ciphertext):使用了密码之后的编码报文。
    这里写图片描述
  • 密码机:最初,人们需要自己进行编码和解码,所以起初密码是相当简单的算法。随着技术的进步,人们开始制造一些机器,这些机器可以用复杂得多的密码来快速、精确地对报文进行编解码。

2. 密钥

  • 密钥(key):编码算法和编码机都可能会落入敌人的手中,所以大部分机器上都有一些号盘,可以将其设置为大量不同的值以改变密码的工作方式。即使机器被盗,没有正确的号盘设置(密钥值),解码器也无法工作。要在密码机中输入正确的密钥,解密过程才能正确进行。密码密钥会让一个密码机看起来好像是多个虚拟密码机一样,每个密码机都有不同的密钥值,因此其行为都会有所不同。
    这里写图片描述
  • 在现实中,机器逻辑可能会指向一些可利用的模式,所以拥有机器逻辑有时会有助于密码的破解。现代的加密算法通常都设计为,即使大家都知道这些算法,恶意的攻击者也很难发现任何有助于破解代码的模式。实际上,很多功能最强大的密码都会将其源代码放在公共域中,供大家浏览和学习。
  • 数字密码:随着数字计算的出现,出现了以下两个主要的进展
    • 从机械设备的速度和功能限制中解放出来,使复杂的编/解码算法成为可能。
    • 支持超大密钥成为可能,这样就可以从一个加密算法中产生出数万亿的虚拟加密算法,由不同的密钥值来区分不同的算法。密钥越长,编码组合就越多,通过随机猜测密钥来破解代码就越困难。
  • 与金属钥匙或机械设备中的号盘设置相比,数字密钥只是一些数字。这些数字密钥值是编/解码算法的输入。编码算法就是一些函数,这些函数会读取一块数据,并根据算法和密钥值对其进行编/解码。
  • 给定一段明文报文 P、一个编码函数 E 和一个数字编码密钥 e,就可以生成一段经过编码的密文 C。通过解码函数 D 和解码密钥 d,可以将密文 C 解码为原始的明文 P。当然,编/解码函数都是互为反函数的,对 P 的编码进行解码就会回到原始报文 P 上去。
    这里写图片描述
    这里写图片描述

3. 对称密钥加密技术

  • 很多数字加密算法都被称为对称密钥(symmetric-key)加密技术,这是因为它们在编码时使用的密钥值和解码是一样的(e=d)。我们就将其统称为密钥 k。
  • 在对称密钥加密技术中,发送端和接收端要共享相同的密钥 k 才能进行通信。发送端用共享的密钥来加密报文,并将得到的密文发送给接收端。接收端收到密文,并对其应用解密函数和相同的共享密钥,恢复出原始的明文。
  • 流行的对称密钥加密算法包括:DES、Triple-DES、RC2 和 RC4。

1. 密钥长度与枚举攻击

  • 保持密钥的机密状态是很重要的。在很多情况下,编/解码算法都是众所周知的,因此密钥就是唯一保密的东西了。
  • 枚举攻击(enumeration attack):好的加密算法会迫使攻击者试遍每一个可能的密钥,才能破解代码。用暴力去尝试所有的密钥值称为枚举攻击。如果只有几种可能的密钥值,居心不良的人通过暴力遍历所有值,就能最终破解代码了。但如果有大量可能的密钥值,他可能就要花费数天、数年,甚至无限长的时间来遍历所有的密钥,去查找能够破解密码的那一个。
  • 可用密钥值的数量取决于密钥中的位数,以及可能的密钥中有多少是有效的。就对称密钥加密技术来说,通常所有的密钥值都是有效的,x位密钥有2的x次方个可能的密钥值(有些加密技术中只有部分密钥值是有效的。比如,在最知名的非对称密钥加密系统 RSA 中,有效密钥必须以某种方式与质数相关。可能的密钥值中只有少量密钥具备此特性)。
  • 在传统的对称密钥加密技术中,对小型的、不太重要的事务来说,40 位的密钥就足够安全了。但现在的高速工作站就可以将其破解,这些工作站每秒可以进行数十亿次计算。相比之下,对于对称密钥加密技术,128 位的密钥被认为是非常强大的。实际上,长密钥对密码安全有着非常重要的影响,美国政府甚至对使用长密钥的加密软件实施了出口控制,以防止潜在的敌对组织创建出美国国家安全局(National Security Agency,NSA)自己都无法破解的秘密代码。

2. 建立共享密钥

  • 对称密钥加密技术的缺点之一就是发送者和接收者在互相对话之前,一定要有一个共享的保密密钥。
  • 这将导致服务器上会产生与数量庞大的用户相对应数量的共享密钥,对管理者是个噩梦。

4. 公开密钥加密技术

  • 公开密钥加密技术没有为每对主机使用单独的加密/解密密钥,而是使用了两个非对称密钥:一个用来对主机报文编码,另一个用来对主机报文解码。编码密钥是众所周知的(这也是公开密钥加密这个名字的由来),但只有主机才知道私有的解密密钥。
    这里写图片描述
  • 这样,每个人都能找到某个特定主机的公开密钥,密钥的建立变得更加简单。但解码密钥是保密的,因此只有接收端才能对发送给它的报文进行解码。
  • 比如:
    • 节点 X 可以将其加密密钥 ex 公之于众。现在,任何想向节点 X 发送报文的人都可以使用相同的公开密钥了。因为每台主机都分配了一个所有人均可使用的编码密钥,所以公开密钥加密技术避免了对称密钥加密技术中成对密钥数目的 N 的2次方扩展问题。
    • 尽管每个人都可以用同一个密钥对发给 X 的报文进行编码,但除了 X,其他人都无法对报文进行解码,因为只有 X 才有解码的私有密钥 dx。将密钥分隔开来可以让所有人都能够对报文进行编码,但只有其所有者才能对报文进行解码。这样,各节点向服务器安全地发送报文就更加容易了,因为它们只要查找到服务器的公开密钥就行了。
      这里写图片描述
  • 通过公开密钥加密技术,全球所有的计算机用户就都可以使用安全协议了。制定标准化的公开密钥技术包是非常重要的,因此,大规模的公开密钥架构(Public-Key Infrastructure,PKI)标准创建工作已经开展十多年了。

1. RSA

  • 所有公开密钥非对称加密系统所面临的共同挑战是,要确保即便有人拥有了下面所有的线索,也无法计算出保密的私有密钥:
    • 公开密钥(是公有的,所有人都可以获得);
    • 一小片拦截下来的密文(可通过对网络的嗅探获取);
    • 一条报文及与之相关的密文(对任意一段文本运行加密器就可以得到)。
  • RSA 算法就是一个满足了所有这些条件的流行的公开密钥加密系统,它是在 MIT 发明的,后来由 RSA 数据安全公司将其商业化。
  • 即使有了公共密钥、任意一段明 文、用公共密钥对明文编码之后得到的相关密文、RSA 算法自身,甚至 RSA 实现的源代码,破解代码找到相应的私有密钥的难度仍相当于对一个极大的数进行质因数分解的困难程度,这种计算被认为是所有计算机科学中最难的问题之一。
  • RSA 加密技术的细节中包括很多繁琐的数学问题,你不需要拥有数论方面的博士学位,有大量的库可以用来执行 RSA 算法。

2. 混合加密系统和会话密钥

  • 公开密钥加密算法的计算可能会很慢,实际上它混合使用了对称和非对称策略。
  • 比如,比较常见的做法是在两节点间通过便捷的公开密钥加密技术建立起安全通信,然后再用那条安全的通道产生并发送临时的随机对称密钥,通过更快的对称加密技术对其余的数据进行加密。

5. 数字签名

  • 数字签名(digital signing):除了加/解密报文之外,还可以用加密系统对报文进行签名(sign),以说明是谁编写的报文,同时证明报文未被篡改过。
  • 数字签名是附加在报文上的特殊加密校验码。使用数字签名有以下两个好处:
    • 签名可以证明是作者编写了这条报文。只有作者才会有最机密的私有密钥(此时假定私有密钥没有被人偷走。大多数私有密钥都会在一段时间后过期。还有一些“取消列表”记录了被偷走或入侵的密钥),因此,只有作者才能计算出这些校验和。校验和就像来自作者的个人“签名”一样。
    • 签名可以防止报文被篡改。如果有恶意攻击者在报文传输过程中对其进行了修改,校验和就不再匹配了。由于校验和只有作者保密的私有密钥才能产生,所以攻击者无法为篡改了的报文伪造出正确的校验码。
  • 数字签名通常是用非对称公开密钥技术产生的。因为只有所有者才知道其私有密钥,所以可以将作者的私有密钥当作一种“指纹”使用。
  • 下图说明了节点 A 是如何向节点 B 发送一条报文,并对其进行签名的:
    • 节点 A 将变长报文提取为定长的摘要。
    • 节点 A 对摘要应用了一个“签名”函数,这个函数会将用户的私有密钥作为参数。因为只有用户才知道私有密钥,所以正确的签名函数会说明签名者就是其所有者。下图中,由于解码函数 D 中包含了用户的私有密钥,所以我们将其作为签名函数使用。
    • RSA 加密系统将解码函数 D 作为签名函数使用,是因为 D 已经将私有密钥作为输入使用了。注意,解码函数只是一个函数,因此,可以将其用于任意的输入。同样,在 RSA 加密系统中,以任意顺序应用 D 和 E 函数时,两者都会相互抵消。因此 E(D(stuff)) = stuff,就像 D(E(stuff)) = stuff 一样。
    • 一旦计算出签名,节点A就将其附加在报文的末尾,并将报文和签名都发送给B。
    • 在接收端,如果节点 B 需要确定报文确实是节点 A 写的,而且没有被篡改过,节点 B 就可以对签名进行检查。节点 B 接收经私有密钥扰码的签名,并应用了使用公开密钥的反函数。如果拆包后的摘要与节点 B 自己的摘要版本不匹配,要么就是报文在传输过程中被篡改了,要么就是发送端没有节点 A 的私有密钥(也就是说它不是节点 A)。
      这里写图片描述

6. 数字证书

  • 数字证书(certs):因特网上的“ID 卡”,包含了由某个受信任组织担保的用户或公司的相关信息。

1. 证书的主要内容

  • 数字证书中还包含一组信息,所有这些信息都是由一个官方的“证书颁发机构”以数字方式签发的。基本的数字证书中通常包含一些纸质 ID 中常见的内容,比如:
    • 对象的名称(人、服务器、组织等);
    • 过期时间;
    • 证书发布者(由谁为证书担保);
    • 来自证书发布者的数字签名。
  • 数字证书通常还包括对象的公开密钥,以及对象和所用签名算法的描述性信息。任何人都可以创建一个数字证书,但并不是所有人都能够获得受人尊敬的签发权,从而为证书信息担保,并用其私有密钥签发证书。典型的证书结构如图:
    这里写图片描述

2. X.509 v3证书

  • 数字证书没有单一的全球标准,有很多略有不同的形式,现在使用的大多数证书都以一种标准格式——X.509 v3,来存储它们的信息。
  • X.509 v3 证书提供了一种标准的方式,将证书信息规范至一些可解析字段中。不同类型的证书有不同的字段值,但大部分都遵循 X.509 v3 结构。
  • X.509证书字段:
    这里写图片描述
    这里写图片描述
  • 基于 X.509 证书的签名有好几种,其中包括 Web 服务器证书、客户端电子邮件证书、软件代码签名证书和证书颁发机构证书。

3. 用证书对服务器进行认证

  • 通过 HTTPS 建立了一个安全 Web 事务之后,现代的浏览器都会自动获取所连接服务器的数字证书。如果服务器没有证书,安全连接就会失败。
  • 服务器证书中包含很多字段,其中包括:
    • Web 站点的名称和主机名;
    • Web 站点的公开密钥;
    • 签名颁发机构的名称;
    • 来自签名颁发机构的签名。
  • 浏览器收到证书时会对签名颁发机构进行检查。浏览器和其他因特网应用程序都会尽量隐藏大部分证书管理的细节,使得浏览更加方便。但通过安全连接进行浏览时,所有主要的浏览器都允许你自己去检查所要对话站点的证书,以确保所有内容都是诚实可信的。
  • 如果这个机构是个很有权威的公共签名机构,浏览器可能已经知道其公开密钥了(浏览器会预先安装很多签名颁发机构的证书)。这样,就可以像之前所讨论的那样验证签名了。如果对签名颁发机构一无所知,浏览器就无法确定是否应该信任这个签名颁发机构,它通常会向用户显示一个对话框,看看他是否相信这个签名发布者。签名发布者可能是本地的 IT 部门或软件厂商。
    这里写图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值