7.1 非对称密码
第6章的“现代密码学”一节介绍了私钥(对称)和公钥(非对称)密码的基本原则。
你曾学过,对称密钥密码系统要求通信双方使用同一个共享秘密密钥,因而形成了安全分发密钥的问题。
你还曾学过,非对称密码系统跨过了这道坎,用公钥私钥对给安全通信带来方便,免去了复杂密钥分发系统的负担。
以下各节将详细说明公钥密码的概念,还将介绍当今用得比较多的四种公钥密码系统:
Rivest-Shamir-Adleman (RSA) 、ElGamal、椭圆曲线密码(ECC)和Diffie-Hellman。我们还将探讨新兴的量子密码领域。
7.1.1 公钥和私钥
你一定还记得,第6章讲过,公钥密码系统(public key cryptosystem)给每个用户都分配一对密钥:一个公钥和一个私钥。
顾名思义,公钥密码系统用户可以随意把自己的公钥交给要与他们通信的任何人。
只拥有公钥的第三方不会对密码系统有任何削弱。另一方面,私钥留给拥有密钥对的人单独使用。
除了密钥托管和恢复安排的情况以外,用户通常不应把自己的私钥与任何其他密码系统用户共享。
公钥密码系统用户之间的正常通信过程如图7.1所示。
请注意,这个过程不要求共享私钥。发送者用接收者的公钥加密明文消息(P)以创建密文消息(C)。
接收者打开密文消息后,用自己的私钥将其解密以重建原始明文消息。
发送者用接收者的公钥给消息加密后,包括他本人在内的任何用户都将因为不知道接收者的私钥(用于生成消息的公钥私钥对的第二部分)而不能解密这条消息。
这就是公钥密码的美妙之处——公钥可通过不受保护的通信自由共享,然后用于在以前互不相识的用户之间建立安全通信信道。
前一章还讲过公钥密码需要提高计算复杂性。
公钥系统使用的密钥必须比私钥系统所用密钥更长,才能产生同等强度的密码系统。
—————————————————————————————————————————
注意:
公钥密码有很高的计算要求,因此,除了简短消息的发送以外,架构师通常更喜欢对其他所有情况使用对称加密法。
在本章的后续小节中,你将了解混合加密法是怎样综合对称和非对称加密法的优点的。
—————————————————————————————————————————
7.1.2 RSA
这个最著名的公钥密码系统以它的创建者命名。
1977年,Ronald Rivest、Adi Shamir 和Leonard Adleman提出RSA公钥算法(RSA public key algorithm) ,直到今天,这个算法始终都是被全世界接受的一个标准。
Rivest、Shamir和Adleman取得算法专利权,组建了一个名为RSA Security的公司,为他们的安全技术开发主流执行方案。
如今,RSA算法已进入公共域,被广泛用于安全通信。
RSA算法所依靠的是因式分解大素数乘积的天然计算难度。
密码系统的每个用户都用以下步骤涉及的算法生成一对公钥和私钥。
(1) 选择两个大素数(每个都约为200位),用p和q表示。
(2) 计算这两个数的乘积:n=p*q。
(3) 挑选一个满足以下两项要求的数e:
①e小于n 。
②e和(p-1)(q-1)是互素的——这两个数没有除了1以外的公因数。
(4) 找到一个数d, 使ed= 1mod((p-1)(q-1))。
(5) 把e和n作为公钥分发给密码系统的所有用户。d作为私钥保密。
如果Alice要发送一条经过加密的消息给Bob, 她用下式(其中e是Bob的公钥,n是密钥生成过程中产生的p和q的乘积)从明文(P)生成密文(C):
C =P^e mod n
Bob收到消息后将执行以下计算来恢复明文消息:
P= C^d mod n
—————————————————————————————————————————
Merkle-Hellman 背包
Merkle-Hellman背包算法是早期的另一种非对称算法,于RSA发布的第二年被开发出来。
与RSA一样,这种算法也基于进行因式分解运算的艰难性,但它所依靠的是集合理论的一个组成部分(即超递增集)而非大素数。Merkle-Hellman于1984年被破解,因而被证明无效。
密钥长度的重要性
密码密钥的长度或许是可由安全管理员自主设定的最重要的一个安全参数。
你必须搞清你的加密算法的能力,据此选择一个可以提供适当保护水平的密钥长度。
而作出这种判断的依据,来自根据数据的重要性对击败某一特定密钥长度的难度的计量(即测算击败密码系统需要花费的处理时间量)。
一般来说,你的数据越关键,用来保护它的密钥应该越强。数据的时效性也是需要考虑的一个重要因素。
你还必须考虑计算能力快速提高的问题——摩尔定律指出,计算能力大约每两年翻番。
如果说当前的计算机需要用一年的处理时间来破解你的密码,那么到了四年后,用那时的技术再来做这件事,大概只需要三个月就够了。
如果你预计你的数据到了四年后还属敏感范畴,那你就应该选择一个很长的密码密钥,使它即使在将来也始终能保持安全。
此外,由于攻击者如今已经能够利用云计算资源,他们自然能以更高的效率攻击被加密的数据。
云允许攻击者租用可扩展计算能力,例如按小时租用强大的图形处理单元(GPU)和在非高峰时间使用过剩能力时享受大幅打折优惠。
这使强大算力落到了许多攻击者的经济承受范围之内。
各种密钥的强度还会因为你使用的密码系统而表现出巨大差异。
由于算法使用密钥材料的方式不同,下表所示三个非对称密码系统的密钥长度都能提供同等级别的保护。
密码系统 密钥长度
对称 128位
RSA 3072位
椭圆曲线 256位
—————————————————————————————————————————
7.1.3 EI Gamal
如第6章所述,Diffie-Hellman算法借助大整数和模运算,使人们能方便地利用不安全的通信信道安全地交换秘密密钥。
1985年,Taher. ElGamal博士发表了一篇论文,说明Diffie-Hellman密钥交换算法所基于的数学原则经过扩展后可支持用来加密和解密消息的整个公钥密码系统。
该论文面世时,相比于RSA算法,ElGamal 的主要优势之一在于,他的论文是在公共域公开发表的ElGamal博士没有为他对Diffie-Hellman算法的扩展申请专利权,而是免费供人使用,这与当时已取得专利的RSA技术不同,RSA到2000年才把算法在公共域公开。
不过,ElGamal也有劣势——由它加密的任们消息都被加长了一倍。
在给必须通过网络发送的大量数据加密时,这是一个很大的难题。
7.1.4 椭圆曲线
同在1985年,另外两位数学家——华盛顿大学的Neal Koblitz和IBM的Victor Miller分别提出一个理念:
把椭圆曲线密码(elliptic curve cryptography, ECC)投入实际应用。
—————————————————————————————————————————
注意:
椭圆曲线所基于的数学概念相当复杂,大大超出了本书的论述范围。
不过你在准备CISSP 考试的时候,还是应该大致了解椭圆曲线算法和它的潜在应用。
—————————————————————————————————————————
任何椭圆曲线都可由下式定义:
y²=x³+ax+b
在这个方程式中,x、y、a和b都是实数。
每条椭圆曲线都有个相应的椭圆曲线群(elliptic curve group) ,由椭圆曲线上的点和位于无限远的点O组成。
可以用一种椭圆曲线加法算法将同一个椭圆曲线群内的两个点(P和Q)相加。
这个运算表达起来非常简单:
P+Q
如果设Q是P的倍数,则可扩展这道题以引入乘法,如下式:
Q=xP
计算机科学家和数学家相信,即便P和Q是已知的,也极难算出x。
这道难题(被称为椭圆曲线离散对数题)构成了椭圆曲线密码的基础。
业界广泛认为,相比于RSA密码算法所基于的素数因式分解题以及Diffie-Hellman和ElGamal借用的标准离散对数题,这道题更难解。
前面阐述“密钥长度的重要性”时展示的数据就说明了这一点;
其中,3072位RSA密钥在密码强度上等同于256位椭圆曲线密码系统密钥。
7.1.5 Diffie-Hellman 密钥交换
在第6章,你了解到Diffie-Hellman算去允许两个人通过不安全通信通道生成共享秘密密钥。
掌握了非对称加密法的知识后,我们现在可以更深入地了解这一算法的实际工作原理了,因为Diffic-Hellman密钥交换是公钥密码的一个例子。
该算法的美妙之处在于,两个用户能够生成一个他们共同知晓而又不必传输的共享秘密。
这样一来,他们可以用公钥密码生成一个共享秘密密钥,然后用这个密钥与对称加密算法通信。
这就是所谓混合密码(hybrid cryptography)的一个用例。关于混合密码(混合加密法),稍后将详细讨论。
与RSA算法类似, Diffie-Hellman 算法是由素数数学原理支撑的。
不妨假设一个例子,Richard和Sue想通过一条经过加密的安全连接进行通信,但是他们地处不同城市而且没有共享的秘密密钥。
Richard或Sue可以简单地创建这样一个密钥,但是他们没有办法在不将密钥暴露给窃听者的前提下彼此共享它。
于是,他们按以下流程使用Diffie-Hellman算法。
(1) Richard和Sue商定采用两个大数:一个素数p和一个整数g, 同时设1 (2) Richard挑选了一个大随机整数r并进行以下计算: R=g^r mod p (3) Sue挑选了一个大随机整数s并进行以下计算: S=g^s mod p (4) Richard把R发送给Sue, 而Sue把S发送给Richard。 (5) Richard随后进行以下计算: K=S^r mod p (6) Sue随后进行以下计算: K=R^s mod p 这时,Richard和Sue都有了同一个值K, 可以用这个值在两方之间进行秘密密钥通信。 这里的要点是,Diffie-Hellman本身并不是加密协议。从技术角度说,它属于密钥交换协议。 但是,它常常被用来为传输层安全(TLS) 的使用(这里指DHE或EDH)创建共享秘密密钥。 稍后将讨论Diffie-Hellman的这个用途。 ————————————————————————————————————————— 注意: Diffie-Hellman密钥交换算法依赖于大素数的使用。 ECDHE 密钥交换算法是这种方法的变体,它用椭圆曲线问题来执行类似的密钥商定过程。 ————————————————————————————————————————— 7.1.6 量子密码 量子计算(quantum computing)是计算机科学和物理学的一个高级理论研究领域。 量子计算背后的理论是,我们可以借助量子力学原理,用名为“量子比特”(qubit) 的多维量子位取代数字计算的二进制1和0位。 量子计算尚属新兴领域,量子计算机当前也仅限于理论研究,还没有人开发出实用量子计算机的实际执行方案。 也就是说,如果量子计算机真的出现,它们有可能为有史以来最强大的计算机提供技术基础,从而彻底改变计算机科学领域。 这些计算机将很快颠覆现代网络安全的许多原则。 量子计算对密码学领域的最重要影响在于,量子计算机或许能够解决当代计算机无法解决的问题。 这个概念被称为量子霸权(quantum supremacy),如果它被实现,将能轻松解决许多经典非对称加密算法所依赖的因式分解难题。 这种情况如果真的出现,可能会使RSA、Diffie-Hellman等流行算法变得不再安全。 当然,量子计算机也可用来创建更新、更复杂的密码算法。 这些量子密码(quantum cryptography)系统可能具有更强大的力量以抵御量子攻击,并且可能开创密码学的新时代。 研究人员已经在实验室开发了量子密钥分发(quantum key distribution, QKD)执行方案,这种方法借助量子计算在两个用户之间创建共享秘密密钥,跟Diffie-Hellman的目的很相似。 与广义概念的量子密码一样,QKD尚未达到实用阶段。 ————————————————————————————————————————— 后量子密码 今天,量子计算的最大实际意义在于,网络安全专业人员应该知道他们的信息究竟要保密多长时间。 攻击者可能会把偷窃来的加密数据副本保留很长一段时间,待日后利用量子计算的未来发展把数据解密出来。 如果数据到那时依然处于必须保密的状态,则机构可能会因此而受到损害。 对于安全专业人员来说,最重要的是在今天就必须为自己当前的数据在后量子世界中的安全性做好预判。 此外,量子计算的首个重大实际应用可能会在密码分析攻击中秘密出现。 发现了破解现代密码实用手段的情报部门或其他机构如果不公开这个发现并利用它来为自己谋利,将会是最大受益者。 今天,这样的发现说不定已经秘密地问世了! ————————————————————————————————————————— 7.2 哈希函数 接下来,本章将介绍密码系统如何通过执行数字签名来证明一条消息源自密码系统的某一特定用户,同时确保消息在双方之间传递的过程中未曾有过改动。 在你能完全掌握这个概念之前,我们将先解释哈希函数(hash function)的概念,探讨哈希函数的基本原理,并介绍几个经常被用在现代数字签名算法中的哈希函数。 哈希函数的目的非常简单一提取一条可能会比较长的消息,然后从消息内容中派生一个唯一的输出值。 这个值就是我们常说的消息摘要(message digest)。 消息摘要可由消息的发送者生成,并与整条消息一起发送给接收者,其原因主要有以下两点。 第一个原因是,接收者可用同一个哈希函数根据整条消息重算消息摘要。 接收者随后可将算出的消息摘要与传来的消息摘要进行比较,确保原发者发送的消息与接收者收到的消息相同。 如果两条消息摘要不匹配,意味着消息在传输过程中有某种程度的改动。 值得注意的是,消息必须完全相同,摘要才可能匹配。 即便消息只在空格、标点符号或内容上有微小差异,消息摘要值也会完全不同。 虽然只靠比较摘要并不能判断两条消息有多大差异,但即便是微小的差异,也会产生完全不同的摘要值。 第二个原因是,消息摘要可用来执行数字签名算法。 这个概念将在本章“数字签名“一节讨论。 多数情况下,消息摘要为128位或更长。 然而,一个个位值便可用来执行奇偶校验功能,一个低级或个位校验和值便可用来提供一个检验单点。 多数时候,消息摘要越长,它的完整性检验越可靠。 RSA Security公司指出,密码哈希函数有5个基本要求: •输入可以是任何长度。 •输出有一个固定长度。 •哈希函数的计算对任何输入而言都相对容易。 •哈希函数是单向的(意味着很难根据输出确定输入)。第6 章描述过单向函数及其在密码学中的用途。 •哈希函数抗碰撞(意味着几乎不可能找到可以产生相同哈希值的两条消息)。 这里的底线是: 哈希函数创建一个值,这个值唯一地表示原始消息中的数据,但不能被逆向推算或“反哈希化运算"。 如果只访问哈希值,将无法确定原始消息实际包含的内容。 如果同时访问原始消息和原始哈希值,则可通过生成一个新哈希值并对新旧两个哈希值进行对比来证明消息自第一个哈希值创建以来没有被人更改过。 如果两个哈希值匹配,则哈希函数可以在同一个输入数据上运行,因此输入数据不曾被人更改。 下面各节将介绍几种常用哈希算法:“安全哈希算法”(SHA)、“消息摘要5"(MD5)和“RIPE消息摘要”(RIPEMD) 。 稍后还将讨论基于哈希的消息身份认证码(HMAC)。 ————————————————————————————————————————— 提示: 许多哈希算法并不在CISSP考试的涵盖范围之内。但是,除了SHA、MD5、RIPEMD和HMAC以外,你还应该知道HAVAL。 可变长度哈希(HAVAL)是MD5的修订版。HAVAL使用1024位块,产生128、160、192、224和256位哈希值。 ————————————————————————————————————————— 7.2.1 SHA “安全哈希算法”(SHA)及其后继算法SHA-1、SHA-2和SHA-3是美国国家标准与技术研究院(NIST)力推的政府标准哈希函数,一份正式政府文件——联邦信息处理标准(FIPS)180“安全哈希标准”(SHS) 已对其作出规定。 SHA-1实际上可以提取任何长度的输入(该算法的实际上限约为2 097152太字节),由此生成一个160位的消息摘要。 SHA-1算法可处理512位块中的消息。 因此,如果消息长度不是512位的倍数,SHA算法将用附加数据来填充消息,直至它的长度达到512位的下一个最高倍数。 密码分析攻击揭示了SHA-1算法存在的弱点,因此NIST弃用SHA-1, 不再建议将其用于任何目的,其中包括数字签名和数字证书。 Web浏览器也于2017年终止了对SHA-1的支持。 后来,NIST推出了SHA-1的替代品——SHA-2标准;SHA-2有4个主要变体。 •SHA-256:用512位块大小生成256位消息摘要。 •SHA-224:借用了SHA-256哈希的缩减版,用512位块大小生成224位消息摘要。 •SHA-512:用1024位块大小生成512位消息摘要。 •SHA-384:借用了SHA-512哈希的缩减版,用1024位块大小生成384位消息摘要。 ————————————————————————————————————————— 提示: 这里讲述的内容看起来并不起眼,但你还是应该花时间牢牢记住本章描述的每种哈希算法生成的消息摘要的大小。 ————————————————————————————————————————— 密码学界普遍认为,SHA-2算法是安全的,然而从理论上说,它们存在着与SHA-1算法相同的弱点。 2015年,联邦政府宣布将Keccak算法定为SHA-3标准。 SHA-3系列的开发旨在直接取代SHA-2哈希函数,通过一种不同的算法提供与SHA-2相同的变体和哈希长度。 SHA-3可以提供与SHA-2相同的安全强度,但是速度比SHA-2慢,因此虽然在一些特殊情况下,该算法可以在硬件中有效执行,但SHA-3使用得并不普遍。 7.2.2 MD5 “消息摘要2"(MD2)被Ronald Rivest(就是大名鼎鼎的Rivest、Shamir和Adleman中的那个Rivest)于1989年开发出来,可为8位处理器提供安全哈希函数。 1990年,Rivest强化了他的消息摘要算法,以支持32位处理器并用一个名为MD4的版本提高了安全强度。 1991年,Rivest发表他的下一版消息摘要算法,他称之为MD5。 MD5还是处理512位消息块,但是它通过4轮不同的计算生成一个长度与MD2和MD4算法相同的摘要(128位)。 MD5的填充要求与MD4相同——消息长度必须比512位的倍数小64位。 MD5执行新增的安全性能,大幅降低了消息摘要的生成速度。 然而不幸的是,密码分析攻击显示, MD5协议也非常容易出现碰撞,阻碍它成为保证消息完整性的手段。 具体来说,Arjen Lenstra等人于2005年证明,根据拥有相同MD5哈希的不同公钥,完全可以创建两个数字证书。 一些工具和系统依然在依靠MD5, 因此你在今大还能看到它,但是,现在建议依靠更安全的哈希算法(如SHA-2),其性能远远优于前者。 7.2.3 RIPEMD "RIPE消息摘要”(RIPEMD)系列哈希函数是SHA系列的替代方案,已被用在一些应用之中,例如比特币加密货币执行方案。 这套哈希函数包含一系列日益复杂的函数。 •RIPEMD生成128位摘要,并且含有一些结构化缺陷,致使人们认为它不安全。 •RIPEMD-128取代了RIPEMD,也生成128位摘要,但也被认为不再安全。 •RIPEMD-160取代了RIPEMD-128, 至今一直被认为安全,是被使用得最普遍的RIPEMD变体。它生成160位哈希值。 ————————————————————————————————————————— 提示:你可能还听说过RIPEMD-256和RIPEMD-320。 事买上,这两个函数分别基于RIPEMD-128和RIPEMD-160。 它们只是为需要更长哈希值的用例创建了更长的哈希值而已,对安全强度并无任何提升。 从安全强度上说,RIPEMD-256与RIPEMD-128相同,RIPEMD-320与RIPEMD-160相同。 这就导致了一种怪象:RIPEMD-160安全,而RIPEMD-256不安全。 ————————————————————————————————————————— 7.2.4 各种哈希算法的哈希值长度比较 表7.1 列出了著名的哈希算法以及执行算法得出的以位为单位的哈希值长度。 请在这一页做上标记并牢牢记住其中的内容。 7.3 数字签名(digital signature) 选好密码学意义上合适的哈希函数和密码算法后,使可用它们来执行数字签名(digital signature)系统了。 数字签名基础设施旨在达到两个不同目的。 •有数字签名的消息可以向接收者保证,消息确实来自声称的发送者。 这样的消息还可提供不可否认性保障(即,它们可使发送者日后不能声称消息是伪造的)。 •有数字签名的消息可以向接收者保证,消息在发送者与接收者之间的传送过程中不曾有过改动。 这样可以抵御恶意篡改(第三方篡改消息的含义)和无意改动(由于通信过程中发生的故障,如电子干扰等)。 数字签名算法依靠本章前面讨论过的两大概念公钥加密法和哈希函数发挥组合作用。 如果Alice要给发送给Bob的一条消息加上数字签名,她会执行以下步骤。 (1) Alice用密码学意义上合适的一种哈希算法(如SHA2-512)为原始明文消息生成一个消息摘要(即哈希)。 (2) Alice随后用自己的私钥单独给消息摘要加密。这个被加密的消息摘要就是数字签名。 (3) Alice把签名的消息摘要附在明文消息末尾。 (4) Alice把有附件的消息发送给Bob。 Bob收到有数字签名的消息后,按如下方式逆向执行上述操作。 (1) Bob用Alice的公钥解密数字签名。 (2) Bob用同一个哈希函数为收到的整条明文消息创建一个消息摘要。 (3) Bob随后将收到并解密了的消息摘要与自己算出的消息摘要进行比较。 如果两个摘要相匹配,他就可以确定,自己收到的消息发自Alice。 如果二者不匹配,则要么消息不是Alice发送的,要么消息在传送过程中被改动过。 ————————————————————————————————————————— 注意: 数字签名不仅用于消息。软件厂家常用数字签名技木来鉴别从互联网下载的代码,如applet和软件补丁。 ————————————————————————————————————————— 请注意,数字签名流程并不对消息所含内容以及签名本身提供任何保密性保护。 它只确保密码的完整性、身份认证和不可否认性目标的实现。下面来分析一下。 如果发送者生成的哈希值与接收者生成的哈希值匹配,我们就能推断这两条哈希化的消息是相同的,因而得到完整性保证。 如果数字签名通过了用发送者公钥进行的验证,即可判断它是用发送者的私钥创建的。 这个私钥应该只有发送者知晓,因此验证结果向接收者证明签名确实来自发送者,从而提供了原发者身份认证。 接收者(或其他任何人)日后可以向第三方演示这个过程,提供不可否认性。 不过,Alice若想确保自已发送给Bob的消息所含隐私不外泄,她还应该给消息创建流程加上一个步骤。 在将经过签名的消息摘要附在明文消息末尾之后,Alice可以用Bob的公钥给整条消息加密。 Bob收到消息时,可在执行前文所述步骤之前,先用自己的私钥给消息解密。 7.3.1 HMAC 基于哈希的消息身份认证码(HMAC)算法执行部分数字签名可保证消息在传输过程中的完整性,但不提供不可否认性服务。 ————————————————————————————————————————— 到底该用哪个密钥? 如果你是初学公钥加密法的新手,那么,在为各种应用挑选正确密钥时可能会感到困惑。 加密、解密、消息签名和签名验证全都使用同一种算法,只是密钥输入不同。 这里介绍几条简单规则,帮助你在准备CISSP考试时记住这些概念。 •如果你要加密消息,则使用接收者的公钥。 •如果你要解密发送给你的消息,则使用自己的私钥。 •如果你要给即将发送给别人的消息加上数字签名,则使用自己的私钥。 •如果你要验证别人发来的消息上的签名,则使用发送者的公钥。 这四条规则是公钥加密法和数字签名的核心原则。 如果你掌握了每条规则,则无疑有了一个良好的开端! ————————————————————————————————————————— HMAC可通过一个共享秘密密钥与任何标准消息摘要生成算法(如MD5、SHA-2或SHA-3)配套使用。 因此,只有知晓密钥的通信参与方可以生成或验证数字签名。 如果接收者解密了消息摘要却不能使其与根据明文消息生成的消息摘要成功匹配,这说明消息在传送过程中发生了变动。 由于HMAC依靠一个共享秘密密钥,它不提供任何不可否认性功能(前面已经讲过)。 然而,它的运行方式比下一节将要描述的数字签名标准更有效,并且可能适用于使用对称密钥加密法的应用程序。 简而言之,HMAC既非不经加密地使用一种消息摘要算法,也不是基于公钥加密法使用计算成本昂贵的数字签名算法,而是二者之间的一个中点。 7.3.2 数字签名标准 美国国家标准与技术研究院(NIST)通过FIPS 186-4“数字签名标准”(DSS)规定了数字签名算法可用于联邦政府。 这份文件规定,联邦批准的所有数字签名算法都必须使用SHA-3哈希函数。 DSS还规定了可用来支持数字签名基础设施的加密算法。 当前得到批准的标准加密算法有三种: •FIPS 186-4规定的数字签名算法(DSA)。 该算法是前面介绍过的ElGamal非对称密码系统的创建者Taher ElGamal博士开发的一种算法的变体。 •ANSIX9.3规定的Rivest-Shamir-Adleman(RSA)算法。 •ANSIX9.62规定的椭圆曲线DSA(ECDSA)。 ————————————————————————————————————————— 提示: 截至本书(英文版)付印的2021年,FIPS 186-5“数字签名标准”的下一个版本还处于草案阶段。 该草案提案把DSA从得到批准的算法中移除,同时保留了RSA和ECDSA, 并给DSS增加了Edwards曲线数字答名算法(Ed.DSA) 。 ————————————————————————————————————————— 7.4 公钥基础设施(public key infrastructure, PKI) 公钥加密的主要优势在于它能协助以前不相识的双方进行通信。 这是通过公钥基础设施(public key infrastructure, PKI)信任关系层级体系实现的。 这些信任关系使我们能把非对称加密法与对称加密法,以及哈希函数和数字证书结合起来使用,从而形成混合加密法。 在以下各节,你将学习公钥基础设施的基本成分以及使全球安全通信得以实现的密码学概念,并学习数字证书的构成、发证机构扮演的角色以及生成和销毁证书的流程。 7.4.1 证书 数字证书(certificate) 向通信双方保证,与之通信的确实是他们声称的人。 数字证书其实就是一个人的公钥的签注副本。 当用户证实一份证书是由一个可信的发证机构(CA)签发时,他们知道,公钥是合法的。 数字证书内含具体识别信息,它们的构成受国际标准X.509辖制。 符合X.509的证书包含以下数据: •证书遵守的X.509版本 •序号(证书创建者编制) •签名算法标识符(规定了发证机构给证书内容数字签名时采用的技术) •发证者名称(标识签发证书的发证机构) •有效期(规定证书保持有效的日期和时间——起始日期和时间以及终止日期和时间) •主体名称(内含证书的普通名称CN以及拥有证书所含公钥的实体的可识别名DN) •主体的公钥(证书的主要内容——证书拥有者用来建立安全通信的实际公钥) 证书可为各种目的签发,其中包括以下对象的公钥: •计算机/机器 •个人用户 •电子邮件地址 •开发者(代码签名的证书) 证书的主体可能包括证书名通配符,表明证书还适用于子域。通配符被指定用星号表示。 例如,签发给*.example.org的通配符证书对以下所有域都有效: •example.org •www.example.org •mail.example.org •secure.example.org ————————————————————————————————————————— 提示: 通配符证书只适用于一层子域。因此,*.example.org证书对www.cissp.example.org子域无效。 ————————————————————————————————————————— 7.4.2 发证机构(certificate authority, CA) 发证机构(certificate authority, CA)是将公钥基础设施结合到一起的粘合剂。 这些中立机构提供数字证书公证服务。 你若想从一家信誉良好的CA获得数字证书,则首先必须证明自己的身份达到了这家CA的要求。 下面列出几大CA, 它们提供的数字证书被广泛接受。 •Symantec ••Iden Trust •Amazon Web Services •GlobalSign •Comodo •Certtum •GoDaddy •DigiCert •Secom •Entrust •Actalis •Trustwave 目前没有规定禁止什么机构开店经营CA。但是,CA签发的证书起码要对得起人们对证书的信任。 这是收到第三方数字证书时需要考虑的一个重要问题。 如果你不承认和不信任签发证书的CA, 你就不应该信任来自这家CA的证书。PKI依靠的正是信任关系的层级体系。 如果你把自己的浏览器设置成信任一家CA, 浏览器将自动信任这家CA签发的所有数字证书。 浏览器开发商预先把浏览器设置成信任几家知名CA, 以免这个负担落到用户身上。 ————————————————————————————————————————— 提示:“let’s Encrypt!”是一个知名CA,它为鼓励人们给数据加密而免费提供证书。 可以访问其官方网站以进一步了解这项免费服务。 ————————————————————————————————————————— 注册机构(registration authority, RA)分担了CA签发数字证书前验证用户身份的工作。 RA虽然本身并不直接签发证书,但是它们在认证流程中扮演了重要角色,使CA能够远程验证用户的身份。 发证机构必须严密保护自己的私钥以维护自己的信任关系。 为了做到这一点,他们往往用一个离线CA (oflline CA)来保护自己的根证书(root certificate),即整个PKI的顶级证书。 这个离线CA不被需要时与网络断开连接并关闭电源。 离线CA用根证书创建次级中间CA(intermediate CA),这些中间CA充当在线CA (online CA),常规签发证书。 这种CA信任模式会使用一系列中间CA, 形成所谓证书链(certificate chaining)。 为了验证证书,浏览器首先验证中间CA的身份,然后沿信任路径追溯到已知的根CA, 验证信任链中每一环的身份。 发证机构不一定是第三方服务提供商。许多机构运营自己的内部CA, 这些CA提供自签证书(self-signed certificate)以便机构内部使用。这些证书不会被外部用户的浏览器信任,但是内部系统经配置以后可信任内部CA, 从而节约从第三方CA获取证书的费用。 7.4.3 证书的生命周期 公钥基础设施背后的技术概念比较简单。以下各节将讨论发证机构创建、验证和注销客户端证书的流程。 1. 注册(enrollment) 若想得到一份数字证书,则首先必须以某种方式向CA证明自己的身份;这个过程就是注册(enrollment)。 如前所述,注册有时需要用户拿着自己的相关身份文件与发证机构办事员会面。 有些发证机构会提供其他验证渠道,包括使用信用报告数据和值得信赖的单位领导人出具的身份证明。 向发证机构证明了自己的身份后,你还要通过一份证书签名申请(Certificate Signing Request, CSR) 向他们提供自己的公钥。 CA接下来会创建一个X.509数字证书,内含你的身份识别信息和一个公钥拷贝。 CA随后会在证书上用CA的私钥写上数字签名,并把签了名的数字证书的一个副本交给你。 以后,你便可以把这份证书出示给需要与你安全通信的任何人了。 发证机构根据他们执行的身份认证级别签发不同类型的证书。 最简单且最常见的证书是域验证(Domain Validation, DV)证书,其中CA只验证证书主体对域名是否具有控制权。 扩展验证(Extended Validation, EV)证书则可提供更高级别的保证,CA将采取步骤验证证书拥有者是不是一家合法企业,然后才决定是否签发证书。 2. 验证(verify) 当收到某个要与你通信的人的数字证书时,应当用CA的公钥检查CA在证书上的数字签名,从而验证(verify)这份证书。 接下来,必须检查证书的有效期,确保当前日期不早于证书的启用日期,并且证书还没有到期。 最后,必须对照证书注销列表(Certificate Revocation List,CRL)或在线证书状态协议(Online Certificate Status Protocol, OCSP)对证书进行检查,以确保这份证书未被注销。 这时,只要证书满足以下要求,你便可以认定证书所列公钥真实有效了。 •CA的数字签名真实。 •你信任这家CA。 •证书未被CRL收录。 •证书确实包含你信任的数据。 最后一点微妙而又极其重要。你在相信某人的身份信息前,首先要确定这些信息确实包含在证书内。 如果证书只含电子邮件地址而不含个人姓名,则你可以确定,证书所含公钥只与该电子邮件地址关联。 CA没有对该电子邮件账号所涉实际身份下任何结论。 然而,如果证书包含Bill Jones这个姓名以及一个地址和电话号码,则CA还证明了这一信息。 许多流行的Web浏览器和电子邮件客户端都嵌入了数字证书验证算法,因此你通常不需要介入验证流程的细节。 然而,你仍然有必要熟练掌握后台发生的技术细节,以便为机构作出恰当的安全判断。 因此,我们在购买数字证书时,要挑选一家在业界赢得广泛信任的CA。 如果一家CA未被一个主流浏览器录入可信CA名单,或者后来被从名单中剔除,这势必会大大限制你对证书的使用。 2017年,数字证书业发生了一起重大安全事故。Symantec通过一系列关联公司签发了多个不符合行业安全标准的数字证书。 Google作出回应,宣布Chrome浏览器不再信任Symantec的证书。 Symantec最终只得将自己签发证书的业务出售给DigiCert, 后者允诺签发证书前对证书进行适当的验证。 这起事故充分证明,适当验证证书请求的过程有多重要。规程上一连串看上去不起眼的小失误足以毁掉一家CA的大部分业务。 证书固定(certificate pinning)法指示浏览器在很长一段时间内把证书附着在主体上。 站点使用证书固定时,浏览器将把站点与它们的公钥关联起来。 这使用户或管理员能够注意到证书的意外变更并对其进行干预。 3. 注销(revoke) 发证机构偶尔需要注销(revoke)证书。这种情况的出现可能是由以下原因造成的。 •证书失信(例如,证书拥有者意外泄露了私钥)。 •证书误发(例如,CA未经适当验证就错误签发了证书)。 •证书细节更改(例如,主体名称发生变化)。 •安全关联变更(例如,主体不再被申请证书的机构雇用)。 ————————————————————————————————————————— 提示: 注销请求宽限期是CA执行任何“请求注销"的最长响应时间。 该宽限期由“证书实践规范陈述"(Certificate Practice Statement, CPS)定义。 CPS阐明了CA在签发或管理证书时所应遵循的实践规范。 ————————————————————————————————————————— 可以用以下三种技术手段验证证书的真实性并识别被注销的证书。 1)证书注销列表(CRL) 证书注销列表由各家发证机构建立和维护,内含CA签发和注销的证书序号,以及注销的生效日期和时间。 证书注销列表的主要缺点在于,用户必须定期下载CRL并交叉查对,这在证书注销的时间与最终用户得知注销的时间之间产生了一个滞 后期。 2)在线证书状态协议(OCSP) 这一协议提供了实时验证证书的渠道,消除了证书注销列表固有的时间滞后问题。 客户端收到一份证书后可向CA的OCSP服务器发送一个OCSP请求。 服务器随后将把该证书的有效、无效或未知状态回复给客户端。 浏览器将根据这一信息确定证书是否有效。 3)证书装订(certificate stapling) OCSP的主要问题是,给由发证机构运行的OCSP服务器带来极大的负担。 这些服务器必须处理来自网站的每个访问者或数字证书的其他用户的请求,确认证书有效且未被注销。 证书装订是在线证书状态协议的扩展,可在一定程度上减轻原始协议给发证机构带来的负担。 用户访问网站并发起安全连接时,网站会将它的证书发送给最终用户,通常最终用户应负责联系OCSP服务器以验证证书的有效性。 而在证书装订法中,Web服务器负责联系OCSP服务器本身,并从OCSP服务器接收签名和时间戳回应,然后将这些东西附加或装订到数字证书上。 接下来,当用户请求安全的Web连接时,Web服务器会将证书与OCSP的回应装订到一起以发送给用户,然后,用户的浏览器验证证书的真实性以及装订好的OCSP 回应的真实性和最新性。 CA在OCSP回应上的签名使用户得知它来自发证机构,而时间戳则可以向用户证明,CA最近验证了证书。 由此,通信得以正常继续进行。 当下一个用户访问网站时,节省时间的效果就体现出来了。 Web服务器可以简单地重用装订好的证书,而不必重新联系OCSP服务器。 只要时间戳足够新,用户就会接受装订好的证书,而不必再次联系CA的OCSP服务器。 装订好的证书有效期通常为24小时。这会减轻OCSP服务器的负担。 从每天处理每个用户的请求(或许是几百万个请求),到每天只需要为每个证书处理一个请求,这可是一种巨大的减负。 7.4.4 证书的格式 数字证书保存在文件里,而这些文件有多种不同格式,可以是二进制的,也可以是基于文本的: •最常见的二进制格式是区分编码规则(DER)格式。DER证书通常保存在带.der 、.crt或cer扩展名的文件中。 •隐私增强邮件(PEM)证书格式是DER格式的一种ASCII文本版。PEM证书通常保存在带pem或crt扩展名的文件中。 ————————————————————————————————————————— 注意: 你可能已经注意到,二进制DER文件和文本PEM文件都以.crt作为文件扩展名。 这确实令人困惑!不过你应该记住,如果不切实看一眼文件中的内容,就无法判断CRT证书究竟是二进制的还是文本的。 ————————————————————————————————————————— •个人信息交换(PFX)格式通常被Windows系统使用。PFX证书以二进制格式保存,可使用pfx或p12文件扩展名。 •Windows系统还使用P7B证书,这种证书以ASCII文本格式保存。 表7.2归纳了各种证书格式。 7.5 非对称密钥管理 你若是在公钥基础设施内工作,则必须遵守多项最佳实践规范要求,才能确保自身的通信安全。 首先,挑选加密系统时要理智审慎。 如前所述,“通过隐匿获得安全"算不上好办法。 你要挑选这样的加密系统:它配备的算法已在公共域公开,且经历了业界专家的百般挑剔。 有些系统采用某种“暗箱”方法,且始终认为算法的保密性是确保密码系统完整性之关键,对于这种系统,你务必当心。 你还必须以合适的方式挑选密钥。 所用密钥的长度应在安全要求和性能考虑之间取得平衡。 此外,你还要保证密钥确实是随机生成的。 密钥内存在的任何成形的模式都会提高攻击者破解加密信息和降低密码系统安全强度的可能性。 你若使用公钥加密,则务必为私钥严格保密! 任何情况下都不允许其他任何人接触你的私钥。 请一定记住,无论是谁,只要你允许他访问你的私钥,哪怕是仅仅一次,都有可能造成你(过去、现在或将来)用这个私钥加密的所有通信永久性失信,使第三方有机会成功假冒你的身份。 密钥完成使命后要退役。 许多机构为避免出现察觉不出的密钥失信情况而提出了强制性密钥轮换要求。 如果你所在的机构没有正式制订必须遵守的相关策略,你就必须根据自己的密钥使用频率为密钥挑选一个适当的轮换时限。 如果可行,你可能需要每隔几个月更换一次密钥对。 你还必须备份自己的密钥! 当你因为数据损毁、灾害或其他情况而丢失保存私钥的文件时,你肯定需要一个可用的备份。 你可能需要自己创建密钥备份,或者使用密钥托管服务,请第三方为你保存备份。 无论属于哪种情况,你都务必使备份有安全保障。要知道,密钥备份与主密钥文件同等重要! 硬件安全模块(hardware security module, HSM)也提供管理加密密钥的有效方法。 这些硬件设备以某种安全的方式存储和管理加密密钥,使人员不必直接接触密钥。 许多HSM还能提高密码运算效率,形成所谓硬件加速流程。 不同的HSM在适用范围和复杂性上差异很大,其中既有非常简单的设备,例如把密钥加密后拷进USB装置供人使用的YubiKey, 也有安放 在数据中心的更复杂的企业产品。 HSM有内置的防篡改机制,可防止可物理接触设备的人访问设备内保存的密码材料。 云提供商(如Amazon、Microsoft等)也配备了基于云的HSM, 由这些HSM为基础架构即服务(IaaS)提供安全密钥管理。 7.6 混合加密法(hybrid cryptography) 你现在已经了解了两大类密码系统:对称算法和非对称算法。 你还了解了每种方法的主要优点和缺点。 其中最主要的事实是: 对称算法速度快,但会带来密钥分发挑战; 尽管非对称算法解决了密钥分发问题,但其计算量大且速度慢。 你在挑选这些方法时将不得不在方便和速度之间做出抉择。 混合加密法(hybrid cryptography)把对称加密法和非对称加密法结合到一起,以对称算法的速度发挥非对称密码系统的密钥分发优势。 这种方法首先用非对称密码在两个通信实体之间建立初始连接。 这个连接只用于一个目的:交换随机生成的共享秘密密钥,即临时密钥(ephemeral key)。 接下来,双方用共享的秘密密钥以及对称算法交换他们想要的任何数据。 通信会话结束时,临时密钥将作废。以后需要再次通信时,重复执行这一过程即可。 这种方法的美妙之处在于,它用非对称加密法进行密钥分发,而这项任务只需要对一小部分数据加密。 接下来,它切换到速度更快的对称算法来交换绝大部分数据。 传输层安全(TLS)是混合加密法的最著名例子,稍后将对其进行讨论。 7.7 应用密码学 到目前为止,你已经学习了有关密码学的基础知识、各种密码算法的内部工作机理以及如何利用公钥基础设施通过数字证书分发身份凭证等。现在,你应该已经熟悉密码学的基本原理并准备好进入下一阶段的学习:利用这一技术解决日常通信问题。 下面各节将探讨如何运用密码技术来保护静态数据(例如存储在便携设备里的数据),以及借助安全电子邮件、加密的Web通信、联网等技术传输的数据。 7.7.1 便携设备 眼下,笔记本电脑、智能手机和平板电脑无处不在,给计算领域带来了新的风险。 这些设备往往包含高度敏感的信息,一旦丢失或失窃,会对所涉机构、机构的客户、员工和下属单位造成严重损害。 出于这一原因,许多机构转而借助加密技术来保护这些设备上的数据,以防它们因为被放错地方而造成损失。 流行操作系统的当前版本如今都有硬盘加密能力,以便用户在便携设备上使用和管理加密。 例如,Microsoft Windows配备了BitLocker和Encrypting File System(EFS)技术, macOS配备了FileVault加密技术,而VeraCrypt开源程序包可用来在Linux、Wmdows和Mac系统上给硬盘加密。 ————————————————————————————————————————— 可信平台模块(Trusted Platform Module, TPM) 现代计算机往往配有一个名为可信平台模块(Trusted Platform Module, TPM)的专用密码组件。 TPM是安放在设备主板上的一块芯片,可发挥诸多作用,包括保存和管理用于全硬盘加密(FDE)解决方案的密钥。 TPM只在成功验证用户身份之后向操作系统提供密钥访问权,可防止有人把硬盘驱动器从设备上拆下来并插进另一设备以访问驱动器上的数据。 ————————————————————————————————————————— 市场上的许多现成的商用工具可提供额外的性能和管理能力。 这些工具的主要差别在于: 它们以何种方式保护存储在内存里的密钥,所提供的是全硬盘加密还是卷加密,以及是否能与基于硬件的可信平台模块(TPM)集成到一起以提供额外的安全保护。 每当挑选加密软件时都应分析备选产品在这些特点上的优劣。 ————————————————————————————————————————— 提示: 制定便携设备加密策略时千万不要忘记考虑智能手机。 大多数主流智能手机和平板电脑平台都具有支持给手机保存的数据加密的企业级功能。 ————————————————————————————————————————— 7.7.2 电子邮件 前面讲过多次,安全是讲究成本效益的。 当谈及电子邮件安全时,简便易行是成本效益最高的方案,但是有时,你会不得不使用加密功能提供的特定安全服务。 为了在确保安全的同时追求成本效益,下面介绍几条有关电子邮件加密的简单规则: •如果你发送的电子邮件需要保密性,你应该给邮件加密。 •如果你的邮件必须保持完整性,你必须对邮件进行一次哈希运算。 •如果你的邮件需要身份认证、完整性或不可否认性,你应该给邮件加上数字签名。 •如果你的邮件同时要求保密性、完整性、身份认证和不可否认性,你应该给邮件加密并加上数字签名。 发送者始终有责任采用恰当机制确保邮件或传输的安全(即保持保密性、完整性、真实性和不可否认性)。 ————————————————————————————————————————— 提示: 本章对电子邮件的论述侧重于讲解如何借助密码技术在两方之间提供安全通信。 笫12章将提供更多有关电子邮件安全主题的内容。 ————————————————————————————————————————— 密码学的最大应用需求之一是给电子邮件消息加密和签名。 直到最近,经过加密的电子邮件依然要求使用复杂、难用的软件,而这反过来要求人工介入以执行复杂的密钥交换规程。 近年来,人们对安全的重视程度不断提高,因而要求主流电子邮件软件包执行强加密技术。 接下来将介绍当今被广泛使用的几个安全电子邮件标准。 1. 良好隐私 1991年,Phil Zimmerman的“良好隐私"(Pretty Good Privacy, PGP)安全电子邮件系统在计算机安全领域初露头角。 它把本章前面描述过的CA层级体系与“信任网”概念结合到了一起,也就是说,你必须得到一名或多名PGP用户的信任才能开始使用系统。 接下来,你要接受其他用户对新增用户有效性的判断,以此类推,你还要信任一个从你最初获得信任判断的级别逐级往下延续的多层级用户“网”。 PGP的推广使用在最初遇到了许多障碍。其中最难逾越的是美国政府的出口规定,这些规定将加密技术列为军用品,禁止对外出口强加密技术。 幸运的是,这一限制后来被取消,PGP如今已经可被自由出售给大多数国家。 PGP有两个可用版本。商业版被Symantec出售,成为PGP的开源变体,被称为OpenPGP。 这些产品允许在PGP框架内使用现代加密算法、哈希函数和签名标准。 PGP消息通常以文本编码格式发送目的是与其他电子邮件系统兼容。 下面举一个例子,看看用PGP发送的加密消息是什么样子的: 与此类似,被数字签名的消息包含消息文本以及附在后面的PGP 签名,例如: 上面这个例子以明文形式发送消息,在消息底部附加一个PGP签名。 如果你添加加密以保护消息的保密性,则加密要在消息被数字签名后执行,从而产生与任何其他加密消息类似的输出。 同一条有数字签名的消息被添加了加密后的样子如下所示: 如你所见,在这条消息被解密之前,你无法判断消息是否经过了数字签名。 许多商用产品供应商还以基于Web的云电子邮件服务、移动设备应用程序或Webmail插件的形式提供基于PGP的电子邮件服务。 这些服务深受管理员和最终用户欢迎,因为它们取消了配置和维护加密证书的复杂操作,为用户提供了受严格管理的安全电子邮件服务。 ProtonMail、StartMail、Mailvelope、SafeGmail和Hushmail就属于这类产品。 2. S/MIME安全/多用途互联网邮件扩展协议 安全/多用途互联网邮件扩展(Secure/Multipurpose Internet Mail Extensions, S/MIME)协议已经成为加密电子邮件的事实标准。 S/MIME使用RSA加密算法,并且得到了业界大佬的支持,包括RSA Security。 S/MIME目前已被大量商业产品采用,包括: •Microsoft Outlook和Office365 •Apple Mail •Google G Suite企业版 S/MIME通过X.509证书交换加密密钥。 这些证书包含的公钥用于数字签名和交换对称密钥,而这些对称密钥将用于较长的通信会话。 接收用S/MIME签名的消息的用户将能用发送者的数字证书验证这条消息。 用户若想用S/MIME保证保密性或想自己创建有数字签名的消息,则必须得到自己的证书。 尽管S/MlME标准得到了业界的强力支持,但是它的技术局限阻碍了它被广泛采用。 虽然主要的桌面邮件应用都支持S/MIME电子邮件,但是基于Web的主流邮件系统并不支持它(需要使用浏览器扩展)。 7.7.3 Web应用 加密被广泛用于保护网上交易。 这主要源自电子商务的强劲发展,以及电子商务供应商和消费者在网络上安全交换财务信息(如信用卡信息)的需求。 接下来将探讨在Web浏览器中负责小锁锁定图标(small lock icon)的两项技术-安全套接字层(SSL)和传输层安全(TLS) 。 1. 安全套接字层(SSL) SSL最初由Netscape开发,可为通过超文本传输协议安全(HTTPS)发送的Web流量提供客户端/服务器端加密。 多年来,安全研究人员发现SSL协议存在大量关键缺陷,致使它在今天已被视为不安全。 不过,SSL毕竟是它的后继者传输层安全(TLS) 的技术基础,而后者至今仍被广泛使用。 ————————————————————————————————————————— 提示: 即便TLS已经存在了十多年,许多人依然误称其为SSL。 当你听到有人使用SSL这个词时,这就是一个危险信号,表明你应该进一步调查,以确保他们使用的其实是现代的、安全的TLS, 而不是过时的SSL。 ————————————————————————————————————————— 2. 传输层安全(TLS) TLS依靠交换服务器数字证书在浏览器与Web服务器之间协商加密/解密参数。 TLS的目的是创建面向整个Web浏览会话开放的安全通信信道。 它依赖于对称和非对称加密法的结合。以下是其中涉及的步骤: (1) 当一名用户访问一个网站时,浏览器检索Web服务器的证书并从中提取服务器的公钥。 (2) 浏览器随后创建个随机对称密钥(即临时密钥),用服务器的公钥给密钥加密,然后将加密后的对称密钥发送给服务器。 (3) 服务器随后用自己的私钥解密对称密钥,这时两个系统通过对称加密密钥交换所有未来的消息。 这种方法允许TLS借用非对称加密法的高级功能,同时用速度更快的对称算法对数据的绝大部分内容进行加密和解密。 当人们最初提出用TLS替换SSL时,并非所有浏览器都支持这种更现代的方法。 为了便于过渡,早期版本的TLS遇到通信双方都不支持TLS的情况时,支持降级至SSL3.0以进行通信会话。 不过到了2011年,TLS 1.2取消了这项向后兼容性。 2014年,一次名为“Padding Oracle On Downgraded Legacy Encryption" (POODLE) 的攻击揭示了TLS的SSL3.0回退机制的一个严重缺陷。 在修复这一漏洞的过程中,许多机构完全取消了对SSL的支持,如今只依靠TLS的安全保护了。 TLS的初始版本TLS 1.0只是对SSL3.0标准的增强。 2006年开发的TLS 1.1是TLS 1.0的升级版,还包含已知的安全漏洞。 2008年发布的TLS 1.2如今已被认为是最低安全选项, 而2018年发布的TLS 1.3也是安全的,并且改进了性能。 要知道,TLS本身并不是加密算法。 它是一个框架,其他加密算法可以在这个框架中发挥作用。 因此,不能只验证系统使用的是不是TLS的安全版本。 安全专业人员还必须确保与TLS配套使用的算法也是安全的。 每个支持TLS的系统都提供一个得到TLS支持的密码套件列表。 这些都是TLS愿意与之配套使用的加密算法组合,相互通信的两个系统可根据这些列表找出双方都支持的安全选项。 密码套件由四个成分组成。 •用于交换临时密钥的密钥交换算法。例如,服务器可能支持RSA、Diffie-Hellman(缩写为DH)和椭圆由线Diffie-Hellman(缩写为ECDH) 。 •用于证明服务器或客户端身份的身份认证算法。例如,服务器可能支持RSA、DSA和ECDSA。 •用于对称加密的批量加密算法。例如,服务器可能支持多个版本的AES和3DES。 •用于创建消息摘要的哈希算法。例如,服务器可能支持不同版本的SHA算法。 密码套件通常用一个长字符串表示,该字符串把这四个元素全部组合到一起。例如,密码套件: 这表明服务器支持使用Diffie-Hellman(DH)密钥交换的TLS。 这个密码套件用RSA协议进行身份认证,用带256位密钥的AES CBC模式执行批量加密,并用SHA-384算法进行哈希化运算。 ————————————————————————————————————————— 注意: 你可能还见过使用DHE或ECDHE密钥交换算法的密码狂。 这里的“E”表明Diffie-Hellman(或椭圆曲线Diffie-Hellman)算法为每次通信使用不同的临时密钥,以提供前向保密并降低密钥泄露的可能性。 这些算法的“E”版本可提供额外的安全保护,但这是以增加计算复杂性为代价的。 ————————————————————————————————————————— 3. 洋葱网和暗网(Tor) 洋葱网(Tor) 以前叫洋葱路由器(The Onion Router) ,它提供了一种机制,可通过加密和一组中继节点在互联网上匿名传送通信流。 它依靠的是一种名为完全前向保密(perfect forward secrecy)的技术,这种技术的多层加密可阻止中继链中的节点读取它们需要接收和转发的通信流中特定信息以外的任何信息。洋葱网将完全前向保密与一组(三个或更多)中继节点结合到一起,使你既可以匿名浏览标准互联网,又可以在暗网上托管完全匿名的网站。 7.7.4 隐写术和水印(steganography) 隐写术(steganography)是通过加密技术把秘密消息嵌入另一条消息的技艺。 隐写算法的工作原理是从构成图像文件的大量位中选出最不重要的部分并对其作出改动。 这种技术使通信参与方得以把消息藏匿在光天化日之下——例如,通信参与方可以把一条秘密消息镶嵌到一个原本毫无关系的网页里。 ————————————————————————————————————————— 注意: 我们还可以把消息嵌入更大的文本摘编中,该方法便是所谓的隐藏密码法。 ————————————————————————————————————————— 使用隐写术的人一般会把秘密消息嵌入图像文件或WAV文件,因为这两种文件通常比较庞大,即便是眼光最敏锐的检查者,也难免漏过隐藏在其中的秘密消息。 隐写术往往用于非法勾当,如间谍活动和儿童色情。 ————————————————————————————————————————— 注意: 隐写术通常通过修改像素值的最低有效位(LSB)来发挥作用。 例如,可以用0~255的三个十进制数来描述每个像素。 其中一个十进制数代表图像中红色的色度,第二个代表蓝色,第三个代表绿色。 如果一个像素的蓝色值是64, 那么将该值改成65后将出现一个难以察觉的变化,但这确实执行了对1位隐写数据的编码。 ————————————————————————————————————————— 隐写术简便易用,你可在互联网上找到免费工具。 图7.2展示了一款这样的工具iSteg的完整界面。 这个工具只要求你指定一个内含秘密消息的文本文件和一个用来隐藏消息的图像文件。 图7.3显示了一张嵌入了秘密消息的图片; 一个人只凭肉眼的话根本无法查出图片中的消息,因为文本文件是通过只修改文件最低有效位添加到消息中的。 这些东西无法在印刷过程中保留下来,事实上,即便你检查了原始全彩色、高分辨率数字图像,也无法发现其中的差异。 7.7.5 联网 本章探讨的密码学的最后一项应用是用密码算法保护联网服务的安全。 下面各节将简要介绍用于确保通信线路安全的方法。 1. 线路加密 安全管理员可用两种加密技术保护在网络上传送的数据。 •链路加密(link encryption) 通过使用硬件解决方案或软件解决方案在两点之间创建一条安全隧道来保护整个通信线路, 硬件或软件解决方案都在隧道的一端加密流入的所有通信流,然后在另一端解密流出的所有通信流。 例如,一家有两个办公地点的公司用一条数据线路连接两个办公室, 这家公司可能会用链路加密来防止攻击者在两个办公室之间的某个点上监视通信线路。 •端到端加密(end-to-end encryption) 独立于链路加密执行,保护通信双方(例如一个客户端和一台服务器)之间的通信。 例如,用TLS 来保护一个用户与一台Web服务器之间的通信时使用的就是端到端加密。 这种做法既可防止入侵者在已加密链路的安全端监视通信流,也可防止入侵者监视通过未加密链路传送的通信流。 链路加密和端到端加密之间的关键差别在于: 1.在链路加密中,所有数据都是被加密的(包括消息报头、消息尾部、地址和路由数据)。 因此,每个数据包必须在每个中继段进行解密,然后重新加密,才能正常进入下一个中继段继续发送,这减慢了路由的速度。 2.端到端加密不给报头、尾部、地址和路由数据加密,因此从一个点到另一个点的传送速度更快,但是面对嗅探器和窃听者时会更脆弱。 加密在OSI模型的较高层级进行时,通常采用端到端加密; 如果加密在OSI模型的较低层级进行,则通常使用链路加密。 安全壳(SSH)是端到端加密技术的一个好例子。 这套程序为常用的互联网应用程序(如文件传输协议、Telnet、rlogin等)提供了加密备选方案。 SSH其实有两个版本。 SSH1(如今已被业界认为不安全)支持“数据加密标准”(DES)、"三重DES" (3DES)、”国际数据加密算法”(IDEA)和Blowfish算法。 SSH2取消了对DES和IDEA的支持,但是增加了几项安全强化措施,包括支持Diffie-Hellman密钥交换协议以及支待在一个SSH连接上运行多个会话。 SSH2增加了抵御中间人(路径)攻击、窃听和IP/DNS 欺骗的保护措施。 2. IPsec互联网协议安全 当今有各种安全架构可供使用,每个架构都是为解决不同环境中的安全问题而设计的。 互联网协议安全(IPsec)标准就是支持安全通信的一个架构。 IPsec是由互联网工程任务组(IETF)提出的一个标准架构,用于在两个实体之间建立安全信道以交换信息。 IPsec协议为受保护的网络通信提供了完整的基础设施。 IPsec如今赢得了广泛认可,已成为许多商用操作系统产品包的必含之物。 IPsec依靠的是安全关联,其中包含两个主要成分: •身份认证头(AH) 为消息的完整性和不可否认性提供保障。AH还提供身份认证和访问控制,可抵御重放攻击。 •封装安全载荷(ESP) 为数据包内容的保密性和完整性提供保障。ESP还提供加密和有限的身份认证,也可抵御重放攻击。 ————————————————————————————————————————— 注意: ESP还可以提供一些有限的身份人证服务,但达不到AH的水平。 虽然ESP有时也脱离AH单独使用,但是这种情况非常少见。 ————————————————————————————————————————— IPsec可在两种离散模式下运行。 IPsec在传输模式(transport mode) 下用于瑞到端加密时,只加密数据包载荷。这种模式是为对等通信设计的。 IPsec在隧道模式(tunnel mode) 下使用时,将加密包括报头在内的整个数据包。这一模式是为链路加密设计的。 在运行过程中,要通过创建一个安全关联(security association, SA)来建立会话。 SA代表通信会话,记录了有关连接的所有配置和状态信息。 SA还代表一次单纯连接若想建立一条双向信道,你将需要建立两个SA, 两个方向各用一个。 此外,若想建立一条支持同时使用AH和ESP的双向信道,你将需要建立四个SA。 IPsec能根据每个SA对通信进行过滤或管理,这样一来,存在安全关联的客户端或网关(无论它们使用哪些协议或服务)只要能够使用IPsec连接,就能受到严格管理,这成了IPsec最大的优势之一。 此外,在没有明确定义有效安全关联的情况下,成对的用户或网关之间将不能建立IPsec链路。 7.7.6 新兴的应用 密码学在网络安全和技术的许多新兴领域发挥着核心作用。 下面将简单介绍其中的几个概念:区块链、轻量级加密和同态加密。 1. 区块链(blockchain) 用最简单的话来说,区块链(blockchain)是一种分布式不可变公共分类账本。 这意味着区块链可以把记录分散保存到广布于世界各地的许多不同系统中,而且可在这一过程中防止任何人篡改记录。 区块链创造了一种任何人都无法篡改或毁坏的数据存储。 区块链的第一大应用是加密货币(cryptocurrency)。 区块链最初就是作为比特币的一项基础技术而被发明出来的,它不必动用中心化机构便可跟踪比特币交易。 通过这种方式,区块链使一种货币得以在没有中央监管机构的情况下存在。 比特币的交易权分布于比特币区块链中的所有参与者。 尽管加密货币是区块链最受关注的应用,但分布式不可变分类账还有许多其他用途,也正因为如此,似乎每天都有区块链技术的新应用冒出来。 例如,财产所有权记录可以极大地受益于区块链应用。 这种方法把记录放在一个透明的公共存储库中,以防止故意或意外损坏。 区块链技术还可用于跟踪供应链,让消费者确信他们的产品来自信誉良好的来源,同时允许监管机构轻松追溯被召回产品的来源。 2. 轻量级加密 你可能会在自己的职业生涯中遇到许多算力和能量有限的密码学特殊用例。 有些设备能量水平极低,运行时必须高度注重节能。 例如,假设要以有限的能源把卫星送入太空。 成千上万小时的工程设计就是为了尽可能延长有限能源的使用寿命。 地球上也有类似的情况——远程传感器必须借助太阳能、小电池或其他设备传输信息。 智能卡是低能源环境的另外一个例子。 它们必须能够与智能卡读卡器保持安全通信,但是只有存储在卡上或通过磁场传输到卡上的能量可供使用。 面对这些情况,密码学家往往会设计耗能尽可能低的专用硬件来执行轻量级密码算法。 你不需要了解这些算法的工作细节,但你应该知晓专用硬件可将能耗降至最低的概念。 密码学的另一特殊用例是对低延时要求高的情况。”对低延时要求高”其实是指加密解密不可耗时太长。 加密网络链接是低延时加密的一个常见例子。数据在网络中快速移动,应尽快完成加密,以免成为瓶颈。 专用加密硬件也可解决许多低延时要求问题。 例如,专用VPN硬件设备可能包含密码硬件,能以高效形式执行加密解密操作,实现速度的最大化。 当加密操作过程必须完整保留数据并使之不被意外破坏时,就有了高回弹性要求。 在回弹性极其重要的情况下,解决这一问题的最简单方法是让数据发送方保留一份副本,直到接收方确认成功接收和解密数据。 3. 同态加密 隐私问题也给加密引入了一些特殊用例。特别地,我们有时会遇到既要保护个人隐私,又要用个人的数据进行计算的情况。 同态加密(homomorphic encryption)技术可以满足我们的婓求,它给数据加密的方式为我们保留了对数据进行计算的能力。 当你用同态算法加密数据,然后对数据执行计算时,你会发现,解密数据的结果,会与你最初对明文数据执行计算时所得到的结果完全一致。 7.8 密码攻击 分析攻击 这是试图降低算法复杂性的一种代数操控。分析攻击的焦点是算法本身的逻辑。 实现攻击 这是探寻密码系统在执行过程中暴露的弱点的一种攻击。 它着重于挖掘软件代码,其中不仅包括错误和缺陷,还涉及用来给加密系统编程的方法。 统计攻击 统计攻击探寻密码系统的统计学弱点,例如浮点错误和无力生成真随机数。 统计攻击试图在承载密码应用的硬件或操作系统中找到漏洞。 暴力破解攻击 暴力破解攻击是直截了当的攻击。这种攻击尝试找出密钥或口令的每种可能的有效组合。 实施攻击时极力使用处理能力来系统化猜测用于加密通信的密钥。 故障注入攻击 在这些攻击中,攻击者试图通过造成某种外部故障来破坏密码设备的完整性。 例如,攻击者可能会利用高压电力、高温或低温或者其他因素引发故障,从而破坏设备的安全性。 边信道攻击 计算机系统会生成活动的特征足迹,例如处理器利用率、功耗或电磁辐射的变化。 边信道攻击寻求利用这些信息监视系统活动并检索当前正在加密的信息。 计时攻击 计时攻击是边信道攻击的一个例子,攻击者精确测出完成加密运算所需的时间,从中获取可用来破坏加密安全性的有关加密过程的信息。 就无缺陷协议(nonflawed protocol)而言,通过暴力破解攻击发现密钥所需的平均时间与密钥长度成正比。 只要时间充分,暴力破解攻击早晚会成功。密钥长度每增加一位,执行暴力破解攻击的时间会增加一倍,因为潜在密钥的数量也翻了一番。 攻击者可从两个方面改进暴力破解攻击,以提升暴力破解攻击的效果。 •彩虹表为密码哈希提供预先算出的值。彩虹表通常用于破解以哈希形式保存在系统中的口令。 •专为暴力破解攻击设计的可扩展计算硬件可以大幅提高这一攻击手段的效率。 ————————————————————————————————————————— 加盐保护口令 盐或许会危害你的健康,但它却能保护你的口令! 为了帮助抵抗暴力破解攻击,包括借助词典和彩虹表的暴力破解攻击,密码学家利用了一种名为密码盐(cryptographic salt)的技术。 密码盐是一个随机值,在操作系统对口令进行哈希运算之前被添加到口令末尾。 盐随后与哈希值一起保存在口令文件中。操作系统需要对用户提交的口令与口令文件进行比较时,首先检索盐并将其附在口令之后。 操作系统向哈希函数输入连续值,然后将得出的哈希值与保存在口令文件里的哈希值进行对北。 PBKDF2、bcrypt、scrypt等专用于口令的哈希函数允许利用盐创建哈希,同时采用一种名为密钥拉伸(key stretching)的技术增加猜测口令的难度。 加盐技术的使用,特别是与密钥拉伸技术结合在一起的时候,会大幅提升暴力破解攻击的难度。 任何想创建彩虹表的人都必须为密码盐的每个可能值单独建表。 ————————————————————————————————————————— 频率分析和唯密文攻击 许多时候可供攻击者摆弄的只有经过加密的密文消息,这种情景就是唯密文攻击(ciphertext-only attack) 。 在这样的情况下,频率分析,即统计每个字母在密文中出现的次数,被证明是有助于破解简单密码的一种技术手段。 众所周知,E、T、A、O、I、N是英语中最常用的字母;攻击者就是借助这一知识来测试以下两个假设的: ·如果这些字母也在密文中使用得最频繁,则密码可能是一种移位密码,即重新排列了明文字符而未加任何改动的密码。 ·如果密文中使用得最频繁的是其他字母,则密码可能是某种替换密码,即更换了明文字符的密码。 这是频率分析的简单形式,而这一技术的许多复杂变体可用来破解多表替换密码和其他复杂密码系统。 已知明文 在已知明文攻击中,攻击者掌握了加密消息的副本以及用于生成密文(副本)的明文消息。 这些信息可为攻击者破解弱代码提供很大帮助。 例如,不妨想象一下,如果你掌握了同一条消息的明文副本和密文副本,那么破解第6章所述凯撒密码将是一件多么轻而易举的事情。 ————————————————————————————————————————— Ultra与Enigma 第二次世界大战之前,德国军工企业为政府改造了一台商用代码机,取名Enigma。 这台机器用一系列3~6位轮转执行一种极其复杂的替换密码。 在当时的技术条件下,解密消息的唯一可行办法是使用一台类似的机器,并配以传输设备采用的相同轮转设定(rotor setting)。 德国人极其重视对这些设备的保护,因而设置了重重防卫,使盟国几乎无法弄到一台。 为攻击Enigma代码,盟国军队开始了一次代号为Ultra的绝密行动。 直到波兰军队成功重建一台Enigma样机并把他们的发现通报给英美密码专家时,盟国的努力才终见成效。 盟国在阿兰·图灵的领导下于1940年成功破解Enigma代码。 历史学家确信,这一成就对于盟国最终击败轴心国发挥了至关重要的作用。 盟国破解Enigma的故事已被多部著名电影广泛歌颂,其中包括《猎杀U-571》和《模仿游戏》。 日本人在二战中使用了一台类似的机器,名为日本紫密机。 美国人对这一密码系统的猛烈攻击导致日本代码在战争结束前被破解。 日本的发报机采用非常正式的消息格式,使多条信息中存在大量相似文本,给密码分析带来了方便——这无疑帮助了美国人。 ————————————————————————————————————————— 选择明文 在这种攻击中,攻击者获得与自己选中的一组明文对应的密文。 这使攻击者可以尝试提取所使用的密钥,从而解密用该密钥加密的其他消息。 这个过程可能很困难,但并非不可成功。差异密码分析等更先进的技术手段属于选择明文攻击类型。 选择密文 在选择密文攻击中,攻击者能够解密密文消息中被选中的部分,然后用解密了的那部分消息来发现密钥。 中间相遇 攻击者可能通过中间相遇攻击手段来击败采用两轮加密的加密算法。 正是这种攻击的出现,导致作为DES加密可行强化版的“双重DES" (2DES)很快被弃用,并被“三重DES" (3DES)取代。 攻击者在中间相遇攻击中使用一条已知的明文消息。 这条明文消息随后用每个可能的密钥(k1)加密,得出的密文再用所有可能的密钥(k2)解密。 找到匹配时,对应的一对(k1 、k2)将代表双重加密的两个部分。 这种攻击的耗时通常只是破解提供最低附加保护的单轮加密所需时间的两倍(或2n, 而不是预计的2n * 2n) 。 中间人 在中间人攻击中,一个心怀歹意之人在两个通信方之间的某一个地方拦截所有通信(包括密码会话的设定)。 攻击者回应原发者的初始化请求并与原发者建立一个安全会话。 攻击者随后用一个不同的密钥冒充原发者与预期接收者建立第二个安全会话。 攻击者这时便“位于通信中间”了,可以读取两个通信参与方之间的所有通信内容。 一些网络安全专业人士开始将这些攻击称为“路径攻击“,以避免性别歧视。 ————————————————————————————————————————— 提示: 把中间相遇攻击与中间人攻击弄混。 它们看起来名称相近,但却是完全不同的两种攻击。 ————————————————————————————————————————— 生日 生日攻击也叫碰撞攻击(collision attack)或反向哈希匹配(reverse hash matching),详见第14章中有关暴力破解攻击和词典攻击的讨论。 这种攻击寻求从哈希函数的一对一性质中找出破绽。 实施生日攻击时,心怀歹意者尝式在有数字签名的通信中换用一条可生成和同消息摘要的不同消息,从而保待原始数字签名的有效性。 ————————————————————————————————————————— 注意: 切记,社会工程技术手段也能用于密码分析。 如果你直接问发送者就能获取解密密钥,那岂不比破解密码系统容易太多? ————————————————————————————————————————— 重放 重放攻击针对的是没有采用临时保护措施的密码算法。 在这种攻击中,心怀歹意之人在通信双方之间拦截经过加密的消息(常常是身份认证请求),然后通过“重放”捕获的消息来建立一个新会话。 给每条消息打上时间戳并给它们设定过期时间,采用挑战-应答机制,用临时会话密钥给身份认证会话加密,诸如此类的手段可以挫败重放攻击。 ————————————————————————————————————————— 注意: 许多其他攻击也会利用密码技术。 例如,第14章将描述在哈希传递和Kerberos漏洞中使用密码技术的情况,笫21章将描述勒索软件攻击使用密码技术的情况。 —————————————————————————————————————————