CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲

前言

密码学为数据的处理、存储和通信过程提供附加的安全级别。近年来,数学家和计算机科学家开发了一系列日益复杂的算法,这些算法被设计用于确保机密性、完整性、身份认证和不可否认性。在密码学家花费大量时间开发强加密算法的同时, 黑客们和政府同样投入了可观的资源来破解这些密码学算法。这产生了密码学领域的"军备竞赛",并且导致如今使用的极其精密的算法的不断发展。

本文将紧密围绕CISSP认证考试的CBK3”安全工程”考纲要求,汇合了《CISSP官方认证学习指南》第六、七章和《CISSP认证考试指南》第三章有关内容,总结分析包括对称密码学、非对称密码学、散列函数、数字签名和公钥基础设施、密码学应用和密码学攻击。

1.密码学的定义和基本概念

1.1 密码学的目标

安全从业人员利用密码系统达到下列4个基本目标:机密性、完整性、身份认证和不可否认性。实现每个目标都需要满足很多设计需求,并且不是所有的加密系统都要达到所有4个目标。接下来,我们将对每个目标进行详细研究,并且对达到目标所需的必要技术进行简要说明。

1.1.1机密性

机密性确保数据在存储中(例如,存储在磁盘上)或在传输中(例如,在两方或多方之间传递)保持秘密状态。这可能是密码系统提到的最广泛目标,即促进个体和组织之间的通信保密。

1.1.2完整性

完整性确保数据在传输的过程中不会被修改。如果采用了适当的完整性机制,那么消息的接收者可以确定接收到的消息与发送出的消息完全相同。

消息完整性通过使用在传输消息时创建的数字签名消息摘要来强制实施。消息的接收者简单地对消息摘要和签名的有效性进行验证,确保消息未在传输过程中修改。

1.1.3身份认证
身份认证对声明的系统用户身份进行验证,并且是密码系统的主要功能。

例如,假设Alice希望与Bob建立通信会话,并且他们都参与到一个共享的保密通信系统。A1ice 可能使用挑战/响应身份认证技术确保Bob 名副其实。

1.1.4不可否认性

不可否认性为接收者提供了担保,保证消息确实来自发送者而不是来自伪装成发送者的人。

不可否认性能够防止发送者宣称原先从未发送过信息(也被称为否认消息)。秘密密钥(或对称密钥)密码系统(如简单的替代密码)并不提供对不可否认性的保证。只有公钥(或非对称密钥)密码系统才提供不可否认性。

1.2 密码学数学原理和常用知识

1.2.1 秘钥空间

密钥空间的范围是:从所有位全部为0 到所有位全部为l 。如果采用另一种方式表示, 那么密钥空间的范围为0 到2^n, 其中n 是密钥的位的长度。因此, 128 位密钥的值可以从0 到2的128次方(大约为3.40282367* 1 038, 这是一个相当大的数字)。保护密钥的安全是非常重要的。事实上, 从密码学获得的所有安全性就只能依赖于保证秘密使用密钥的能力

1.2.2 Kerchoff原则

所有密码学都基于算法的思想。算法通常是一组数学规则,这组规则规定如何进行加密和解密过程。大多数算法都遵循Kerchoff原则。这条原则使算法已知和公开, 并且允许任何人检查和测试算法,但是所有密钥都应当保密。这条原则可归纳为"敌人知道了这个体系"。

1.2.3 逻辑运算

AND OR NOT XOR

1.2.4模函数

模函数十分简单,也就是在完成除法运算后得到余数。

在等式中,模函数通常由缩写词mod 来表示,不过有时也会用%运算符来表示。举例

8 mod 6 = 2

10 mod 2 = 0

1.2.5单向函数

单向函数是一种数学运算, 它可以通过所有可能的输入值组合得出结果, 但是反向得出输入值却是不可能的。公钥密码系统都建立在单向函数的基础上。

1.2.6 随机数

密码学往往通过在加密过程中添加随机性来获得强度。实现这个目标的一种方法是使用随机数。随机数是随机数字发生器, 起到了数学函数中占位符变量的作用。执行数学函数时, 占位符会被替换为在处理时刻生成的随机数。每次使用数学函数时, 随机数都会产生一个独特的数字。随机数的一个更为人接受的示例是初始向量(Initialization Vector, IV), 这是一个与分组长度相同的随机比特串, 并且与原始消息相异或。在每次使用相同密钥加密相同的消息时, N 都被用于创建独特的密文。

1.2.7零知识证明

密码学的一个优点是建立了这样的机制: 在不向第三方揭示事实本身的情况下向第三方证明对事实的了解。这种机制通常涉及密码和其他秘密的身份认证。

1.2.8分割知识

如果执行某个操作所需的信息或权限在多个用户之间分配时, 任何一个人都没有足够的权限来危害环境的安全性。单个解决方案中包含的这种职责分离和两人控制被称为分割知识。分割知识的最佳示例就是密钥托管的概念。通过使用密钥托管, 密码密钥、数字签名甚至数字证书, 可以被存储在或备份在一种被称为密钥托管数据库的特殊数据库中。如果用户的密钥丢失或损坏, 那么可以从备份中抽取出相应的密钥。然而, 如果只存在一个密钥托管恢复代理, 那么就有机会伪造和滥用这种权限。"M of N 控制" 要求: 在总数为N 的代理中, 最少需要M 个代理一起工作才能完成安全性很高的任务。因此, "3 of 8 控制" 要求8 个人(被分配了密钥托管恢复代理的工作任务)中的3 个人一起完成工作, 才能从密钥托管数据库中取出单个密钥(本例说明了M 始终小于等于N) 。

1.2.9 工作函数

通过使用工作函数或工作因数, 从成本和/或时间方面来度量所有努力, 就可以度量密码学系统的强度。通常, 针对加密系统执行完全穷举攻击所需的时间和努力, 就是工作函数所表示的内容。密码系统提供的安全性和保护与工作函辈U因数的值成正比。工作函数的大小应当与受保护资产的相对值匹配。工作函数只需稍大于受保护资产的时间值。换句话说, 所有安全性(包括密码学)都应当是有效益的和有效率的。保护某个资产所花费的成本不能超过这个资产自身的价值, 但是一定要保证提供足够的保护。因此, 如果信息由于时间的推移而失去价值, 那么工作函数的大小只需确保在数据失去价值前提供保护即可。

1.2.10 编码与密码

人们常常将词汇"编码" 和" 密码" 互换使用, 但是从技术上讲,它们是不能互换的。在这两个概念之间,存在很重要的差异。编码是密码学系统中表示词汇或短语的符号,有时是秘密的,但是不一定提供机密性

1.2.11 换位密码

换位密码使用某种加密算法重新排列明文消息中的字母,从而形成密文消息。解密算法只需反演加密转换过程就可以得到原始消息。

1.2.12替代密码

替代密码使用加密算法将明文消息中的每一个字符或比特都替换为不同的字符。由于统计学分析某些字母在段落中频率较高,因此可能受到直接的频率分析攻击。

虽然多字母替代能够防范直接的频率分析, 但是容易遭受二阶形式的频率分析(也被称为周期分析攻击, 这种攻击基于密钥的重复使用进行频率检查)。

1.2.13 一次性填充

一次性填充是一种极为强大的替代密码。一次性填充对明文消息的每个字母都使用一个不同的字母表。它们可以通过下面的加密函数来表示, 其中K 是以C 表示的字母的加密密钥:

c = ( P + K) mod 26

通常, 一次性填充被记为插入函数的一个很长的数字序列。

一次性填充的巨大好处是: 如果运用得当, 它是一个不可破解的加密方案。由于不存在重复的字母替代模式,这使得密码分析工作徒劳无益。然而, 为了确保算法的完整性, 必须满足下列几个要求:

要求1:加密密钥必须随机生成。使用一个短语或书中的一段话会引入密码分析人员破译这个编码的可能性。

要求2:一次性填充必须进行物理保护, 以防泄露。如果敌人具有这个一次性填充的副本, 那么他们就可以轻易地破译加密的消息。

要求3:每个一次性填充必须只使用一次。如果填充被重复使用, 那么密码分析人员可以比较多个使用相同填充的加密消息中的相似之处, 井有可能确定使用的密钥值。

要求4:密钥必须至少与被加密的消息一样长, 这是因为每个密钥元素都只对消息中的一个字符进行编码。

1.2.14滚动秘钥密码

密码学的许多脆弱性都涉及密钥的有限长度。前面刚介绍过, 通过在加密和解密期间为每个密码转换使用不同的字母表, 一次性填充避免了这些脆弱性。然而, 因为要求填充的物理交换, 所以一次性填充难以实现

对于这个难题, 一个常见的解决方案是使用漆动密钥密码, 也被称为书籍密码。在这种密码中,加密密钥与消息本身一样辰, 并且往往从一般的书籍中选取。例如, 发送者和接收者可以预先约定使用哈利波特以中某一章节从第三段开始的文本作为密钥。双方只是使用足够多的连续字符以便执行加密和解密操作码。

1.2.15分组密码

分组密码按消息的" 组块" 或分组进行操作, 并且对整个消息分组同时应用加密算法。换位密码就是分组密码的一个例子。在挑战/响应算法中使用的简单算法, 是取出完整的词汇井且逆向排列字母。更加复杂的柱状换位密码对整条消息(或一段消息)进行操作, 并且使用换位算法和保密密钥对消息进行加密。大多数现代加密算法都实现了某些类型的分组密码。

1.2.16流密码

流密码对消息、(或数据流)中的每个字符或每一位进行操作, 每次只处理一个字符/一位。一次性填充也是一种流密码, 这是因为该算法对明文信息中的每个宇符独立进行操作。流密码也可以作为一种分组密码使用。在此类情况下, 某个缓冲区被填满实时数据,随后这些数据作为分组进行加密井传送给接收方。

1.2.17混淆与扩散

密码学算法依靠两种基本的操作来隐藏明文信息: 混淆与扩散。混淆出现在明文和密钥的关系十分复杂时, 此时攻击者不能通过继续修改明文和分析产生的密文来确定密钥。扩散出现在明文的改变导致多种变化时, 这些变化被扩散到整个密文中。

思考一下,例如一个算法,首先执行一种复杂的替换,然后使用换位去重新排列替换后的字符。在这个例子中,替换引入了混淆,换位则引入了扩散

2.对称密码学

对称密钥算法依赖于一个" 共享的秘密" 加密密钥, 该密钥会被分发给所有参与通信的成员。所有通信成员都使用这个密钥进行消息的加密和解密, 因此发送者和接收者都拥有共享密钥的副本。通信两端会使用相同的密钥加密和解密消息。当使用很长的密钥时, 对称加密难以被破解。对称密钥算法主要被用于执行批量加密, 并且只为安全服务提供机密性。对称密钥密码学也被称为秘密密钥密码学、私有密钥密码学、会话秘钥密码学、共享秘钥密码学

下图了对称密钥的加密和解密过程。

                       发送者                                                          接收者

术语"私有密钥" 的使用比较复杂, 其原因在于它是具有两种不同含义的三个不同术语中的一部分。术语"私钥" 拍的始终是公钥密码学(也就是非对称密钥密码学)密钥对中的私钥。不过, 私有密钥密码学和共享私钥指的都是对称密码术。词汇"私有" 的含义非如毛仲为两个人共享要保守的秘密, 而不是原有的真实含义: 只有一个人知道要保守的秘密。在学习过程中, 一定不要混淆这些术语。

2.1数据加密标准DES(起初提议的标准密码)

美国政府在1977 年公布了数据加密标准(DES),并且将之作为向所有政府通信而提议的标准密码系统。由于该算法中的缺陷,密码学界和政府不再认为DES 是安全的。大家普遍相信情报机构已经能轻易破解DES 加密的信息。DES 在2001 年12 月被高级加密标准取代。了解DES仍然是重要的,因为它是构成三重DES(3DES)的基础,该加密算法将在下一节进行阐述。

DES 是一个64 位的分组密码, 具有5 种操作模式:

  1. 电子代码本(Electronic CodeBook, ECB)模式

加密少量数据,如秘钥和PIN值

  1. 密码分组链接(Cipher Block Chaini吨, CBC)模式

加密大型数据

  1. 密码回馈(Cipher FeedBack, CFB)模式

加密较小数据,单独加密每个位

  1. 输出回馈(Output FeedBack, OFB)模式

比OFB发生扩展错误的可能性小

  1. 计数(CounTeR, CTR)模式。

IV计数器,并行

这些模式将在接下来的内容中进行阐述。所有DES 模式每次处理64 位的明文, 并且生成一个64 位的密文分组。DES 使用的密钥长度为56 位

DES 利用长序列的异或(XOR)操作生成密文。每个加密/解密操作都要重复1 6 次这个过程, 每次重复通常被称为" 一轮" 加密,因此DES 要执行16 轮加密。

然而,面对现代密码分析技术和超级计算能力,数据加密标准的56 位密钥被认为己不再适用。

秘钥嫌短怎么办?那么就把多个算法组合起来。

DES 的修改版本三重数据加密算法(3DES)能够使用相同的算法实现更安全的加密。

3DES 具有4 种版本。

第1种版本只是使用三个不同的密钥(K1、K2和K3)对明文加密三次。它被称为DES-EEE3 模式(三个E 表示存在三个加密操作, 而数字3 表示使用三个不同的密钥), 这种模式可以利用下面的符号来表示, 其中E(K, P)表示使用密钥K加密明文P:

E(K1,E(K2 ,E(K3,P )))

DES-EEE3 具有的密钥的有效长度为168 位。

第2种3DES 版本DES-EDE3 也使用三个密钥, 但是将第二个加密操作替换为解密操作,如下所示:

E(K1,D(K2,E(K3, P)))

第3种3DES 版本DES-EEE2 只使用两个密钥Kl 和K2 '如下所示:

E ( K 1 ' E ( K2 , E ( K l' P ) ) )

第4种3DES 版本DES-EDE2 也使用两个密钥, 但是在中间使用一个解密操作, 如下所示:

E(K1 'D(K2 ,E(K1'P )) )

第3种和第4种3DES 版本具有的密钥的有效长度都为112 位。

绝大多数专家认为这四种3DES具有同样的安全程度

如果使用双重DES(Double DES2DES),会有怎样的效果?人们尝试过2DES,但是在证明存在攻击使得2DES 并不比标准DES 安全时,很快就放弃了这种算法。

2.2 IDEA&Blowfish&Skipjack

2.2.1 IDEA(秘钥长度不够需要我)

国际数据加密算法(IDEA)的分组密码是针对DES 算法的密钥长度不够而开发的。与DES一样 ,IDEA 对64位的明文/密文分组进行操作。然而, 国际数据加密算法采用128 位的密钥进行操作。这个密钥随后在一系列操作中被分解成52 个16 位的子密钥。这些子密钥接着使用异或和模运算的组合对输入的文本进行操作,从而生成输入消息的加密/解密版本。IDEA 能够在DES 使用的4种模式(ECB、CBC 、CFB 和OFB)中工作。(缺少了CTR)

IDEA 算法的专利权属于它们的瑞士开发人员。但是, 开发人员向期望使用IDEA 作为非商业用途的人授予了无限制许可。在Phil Zimmerman 的流行的可靠隐私(Pretty Good Privacy, PGP)安全电子邮件包中, 发现了IDEA 的一种流行实现。

2.2.2 Blowfish(秘钥长度为啥不能可变?)

Bruce Schneier 的Blowfish 分组密码是DES 和IDEA 的另一种选择。与它的这些前辈们一样,Blowfish 对64 位文本分组进行操作。然而, Blowfish 扩展了IDEA 的密钥强度, 甚至准许使用变长密钥, 范围从相对不安全的32 位到相当难破解的448 位。很显然, 较长的密钥将导致加密/解密时间的相应增加。不过, 计时试验已经表明, Blowfish 是比IDEA 和DES 更快的算法。Schneier 先生没有对Blowfish 进行许可限制, 人们可以自由使用该密码(公开)。Blowfish 加密被内嵌到许多商业软件产品和操作系统中, 此外还存在许多可以被软件开发人员使用的Blowfish 库。

2.2.3 Skipjack(政府我想控制你们)

Skipjack 算法由美国政府在联邦信息处理标准Federal Information Processing Standard ,FIPS)185 , 即托管加密标准证书(Escrowed Encryption Standard,EES)中批准使用。与许多分组密码一样, Skipjack 对64 位的文本分组进行操作。这种算法使用一个80 位的密钥, 并且支持DES 支持的相同4 种操作模式。美国政府很快接受了Skipjack, 并且提供支持Clipper 和Capstone 高速加密芯片的密码学程序, 这些芯片是为重要商业应用而设计的。

然而, Skipjack 有一个额外的麻烦, 即支持加密密钥的托管。美国国家标准和技术协会(NIST)和财政部这两个政府机构都持有重建Skipjack 密钥所需的一部分信息。当法律执行机构获得合法授权后, 他们将联系这两个机构获得密钥的部分信息, 并且可以对参与成员之间的通信进行解密。Skipjack和Clipper芯片还没有被密码学团体普通接受, 这是因为它的托管程序由美国政府控制

2.3高级加密标准AES(别吵,咱投票决定加密标准)

2000年10月,美国国家标准和技术协会(NIST)宣布Rijindael(发音为"rain del" )分组密码己经被选中成为DES 的替代标准。在同年的12 月, 美国商务部长批准了FIPS 197 , 它要求使用AES/Rijndael 对所有敏感但未被美国政府分类的数据进行加密。(Rijndael是AES内的算法)

AES 密码准许使用三种密钥强度: 128 位、192 位和256 位。AES 最初的规范支持128 位分组的处理,但是Rijndael 超出了这个规范,它准许密码学家使用与密钥长度相等的分组大小。如下所示,加密的轮数依赖于所边的密钥长度:

128 位密钥需要10 轮加密。

192 位密钥需要12 轮加密。

256 位密钥需要14 轮加密。

Twofish算法(AES竞争失败的loser,有了噪声看你还能听得清么?双鱼可以理解为鱼头和鱼尾拍打产生噪音)

由同样是Blowfish的创建者开发的Twofish算法是AES的另一种选择(在最终5个待定算法中,但是在投票中被淘汰)。与Rijndael一样, Twofish也是一种分组密码。这种算法处理1 2 8 位的数据分组, 并且能够使用长度最大为256 位的密钥。

Twofish 利用了其他算法所没有的两种技术:

预白噪声化(prewhitening)涉及在第一轮加密前将明文与一个单独的子密钥进行异或。

后白噪声化(postwhitening)在第1 6 轮加密后进行相似的操作。

2.4 RC系列

RC4

RC4是最常用的流密码之一。(RC系列仅有此一个是流密码)它的秘钥长度可变,用于SSL协议。以前曾被不恰当应用在802.11WEP协议标准中。该算法非常简单、快捷、有效,这也是它如此流行的原因所在。但因为它的扩散率低,所以容易遭受修改攻击。这是最新的无线安全标准(IEEE 802.11i)RC4算法转移到AES算法的原因所在。

RC5

RC5是一种分组密码,其参数(如分组大小、秘钥长度和运行的轮数)都是可变的。它有Rivest设计,并由RSA数据安全公司分析。这种算法使用的分组大小通常为32、64或128位,其秘钥长度可达2048位。用于加密和解密的轮数也是可变的,最多可达255轮。

RC6

RC6是在RC5基础上构建的分组密码,因此它所有属性和RC5相同。这个算法主要是为了AES提交这一目的而开发的,但最终NIST选择了Rijndael,它对RC5算法进行了一些修改,以提高整体速度。

问题:rc5-32/12/16是什么意思?

答:根据rc5-w/r/b结构定义。意识是字长为32位,表示它加密64位数据分组。使用12轮运算。具有16字节(128位)秘钥。

2.5对称加密算法记忆表

下面列举出了常见且著名的对称加密算法及其分组大小和秘钥大小

算法名

分组大小(单位为位)

 密钥大小(单位为位)

数据加密标准(DES)

64

56

三重DES(3DES)

64

112 或168

IDEA(在PGP 中使用)

64

128

Blowfish(通常在SSH 中使用)

64

32-448

Skipjack

64

80

高级加密标准(AES(Rijndael))

128

128,192,256

Twofish

128

1-256

基予RSA 的Rivest 密码2(RC2)

64

128

基于RSA 的Rivest 密码4(RC4)

流式

128

基于RSA 的Rivest 密码5/6(RC5/6)

32,64,128

0-2040

2.5对称秘钥管理

由于加密密钥中包含的信息对于密码系统而言是至关重要的, 因此密码系统的管理员和用户必须采取特殊的措施以保护密钥材料的安全。这些安全措施被统称为密钥管理实践。它们包含密钥的生成、分发、存储、销毁、恢复和托管。

2.5.1 创建和分发对称密钥

正如前面提到的, 对称加密算法内在的一个主要问题是操作算法所需密钥的安全分发。在下面的内容中, 将对下列三个主要的用于安全交换密钥的方法进行分析: 离线分发、公钥加密和Diffie-Hellman密钥交换算法

离线分发(没上学不懂技术)

在技术方面最简单的方法涉及密钥材料的物理交换。一方向另一方提供包含密钥的一张纸或一份存储介质。在很多硬件加密设备中, 密钥材料以电子设备的形式存在, 这类似于插入到加密设备中的真实的钥匙。然而, 这些方法都具有各自固有的缺陷。如果通过电子邮件发送密钥材料, 那么密钥材料就可能被截获。电话可能会被窃听。包含密钥的纸张则可能被无意丢进废纸篓或丢失。

公钥加密(菜鸟程序员只是代码搬运工)

许多通信人员希望在没有密钥分发之争的情况下获得密钥加密的速度优势。因此,许多人使用公钥加密来建立初始的通信链接。一旦链接成功建立, 并且双方对相互的身份都感到满意, 那么他们就会在安全的公钥链接上交换密钥。随后, 通信双方从基于公钥算法的通信进入基于秘密密钥算法的通信, 并且能够享受快速的处理过程。一般而言, 与公钥加密相比, 私有密钥加密的速度快数千倍。

Diffie-Hellman 算法(高端程序员我爱设计算法)

某些情况下,无论是公钥加密还是离线分发,都是不充分的。双方可能需要相互通信,但是他们没有物理手段交换密钥材料,并且没有适当的公钥基础设施来促进秘密密钥的交换。在这样的情况下,像Diffie-Hellman 这样的密钥交换算法被证明是极为有用的机制。

验证计算:

1.Richard和Sue双方约定p=17,g=10

2.Richard选择随即大整数r=2  Richard计算R=10^2/17=15

3.Sue选择随即大整数s=3   Sue计算,S=10^3/17=14

4.交换R和S(这是这里唯一可能被截获的信息)

5.Richard计算 K=14^2/17=9

6.Sue计算 K=15^3/17=9

7.Richard和Sue都得到了相同的K,K就是他们期望得到的私钥。

2.5.2 存储和销毁对称秘钥

在对称密钥加密中, 另一个主要的挑战是在密码系统中使用的密钥必须进行安全保管。以下给出了存储加密密钥的最佳实践:

1.永远不要将加密密钥存储在存放加密数据的同一个系统中, 这将使攻击者更容易进行攻击!

2.对于敏感的密钥,可以考虑两个不同的人分别持有密钥的一半。他们必须合在一起才能构成完整的密钥。这是众所周知的知识分割原则(见1.2.8小节)。

当知道密钥的用户离开组织或不再被允许访问通过密钥包含的材料时, 密钥必须更改,同时使用该密钥进行加密的所有材料必须用新的密钥进行重新加密。销毁一个密钥并将一个用户从对称密码系统中移除是困难的, 这也是组织转而使用非对称算法的一个重要原因。这部分内容将在第7 章中进行讲述。

2.5.3 秘钥托管

密码学是一种强大的工具。与大多数工具一样, 密码学可以被用于实现许多有益的目的, 但是也可能被恶意使用。为了应对密码学技术的爆炸性增长,各国政府纷纷考虑实现密钥托管系统。这样的系统允许政府在有限的情况下(例如,法院判决)从中央存储设备获得特定通信所使用的密钥。

在过去1 0 年中,人们提议通过下列两种主要途径进行密钥托管:

公平密码系统(我们向往自由,最常见)

在这种托管方法中,通信中使用的私有密钥被分为两个或多个部分,这些部分都被交给独立的第三方。每个部分本身都是无用的,但是通过重新组合可以获得私有密钥。政府获得法律授权访问特定的密钥时,需要向所有第三方提供法院的证据,随后才能重新组装这个私有密钥。

托管加密标准(我们拒绝,自由不可侵犯)

这种托管方法向政府提供解密密文的技术手段。这个标准是本章前面讨论的Skipjack 算法的基础。

政府管理者几乎不可能克服不可避免的法律和隐私障碍来广泛实现密钥托管。虽然技术上没有问题, 但是一般民众不可能接受政府对个人生活的潜在介入。

2.6 对称密码学的弱点

对称密钥密码学具有下列几个弱点:

密钥分发是一个主要问题。在使用对称密钥协议建立通信之前, 通信参与者必须具备一种安全交换密钥的方法。如果没有可用的安全电子通道, 那么往往必须使用离线的密钥分发方法(已不属于交换) 。

对称密钥密码学井未实现不可否认性。由于任意通信方都可以利用共享的密钥对消息进行加密和解密, 因此无法分辨指定消息的来源。

这种算法不可扩展。对于大的用户组来说, 使用对称密钥密码进行通信非常困难。只有在每个可能的用户组合共享私有密钥时, 组中个人之间的安全专有通信才能实现。

密钥必须经常更新。每当有成员离开用户组时, 所有涉及这个成员的密钥都必须被抛弃。

3.非对称密码学

非对称密钥算法也被称为公钥算法, 它为对称密钥加密的弱点提供了解决方案。在这个系统中,每个用户都有两个密钥: 一个在所有用户之间共享的公钥, 以及另一个只有用户自己知道并保管的私钥。但是让人意想不到的是: 相对立的和相关的密钥必须被先后应用于加密和解密。换句话说,如果使用公钥加密消息, 那么只有相关的私钥能够进行解密, 反之亦然。

图6.4 说明了公钥密码系统中加密和解密消息、所使用的算法。

                    发送者                                                            接收者

考虑一下这个例子: 如果Alice希望使用公钥密码学向Bob 发送消息, 她首先生成这条消息, 随后使用Bob 的公钥对消息进行加密。对这个密文进行解密的唯一可能办法是使用Bob 的私钥, 并且唯一有权使用这个密钥的用户就是Bob,因此, Alice 在加密消息后, 甚至不能对这条消息进行解密。如果Bob 希望向Alice 发出回应消息, 他会使用Ali臼的公钥对回应消息进行加密, Alice 随后可以使用她自己的私钥对消息进行解密, 从而读取这些消息。

一旦发送者用接收者的公钥加密了消息, 那么在不知道接收者的私钥(用于生成消息的公钥/私钥对的另一半)的情况下,没有用户(包括发送者)能够解密这些信息。这就是公钥密码学的优点, 即可以使用不安全的通信通道自由共享公钥, 并在以前并不认识的用户之间创建安全的通信信道。

公钥密码学(非对称密码学也称为公钥密码学?)具有较高程度的计算复杂性。为了产生同等加密强度的密码系统,公钥系统中使用的密钥长度必须比私钥系统中使用的密钥长度更长

3.1 RSA(最流行)

最著名的公钥密码系统以其创造者命名。1 977 年, Ronald Rivest、Adi Shamir 和Leonard Adleman提出了RSA 公钥算法, 这种算法成为今天在全世界范围仍在使用的标准。他们为这个算法申请了专利并成立了一家商业公司(RSA 安全公司), 该公司开发使用其安全技术的主流产品。今天, RSA 算法己经构成许多知名安全基础设施(例如Microsoft、Nokia 和Cisco 公司的相应产品)的安全构架。RSA秘钥长度不固定。

RSA 算法依赖于大质数在因数分解时固有的计算难度。密码系统的每个用户都使用下列步骤描述的算法产生一对公钥和私钥:

( 1 ) 选择两个大的质数(每个质数大约200 位), 用p 和q 来表示。

(2) 计算出这两个质数的乘积, 即n = p * q。

(3) 选择一个满足下列两项要求的数字。

a. e小于n 。

b. e 和(n -1 )(q - 1 )互质,也就是说, 除了l 以外,这两个数没有共同的因数。

(4) 找到一个数d,使得(ed - 1 ) mod (p - 1 )(q - 1 ) = 0 。

(5) 把e 和n 作为公钥分发给所有的密码系统用户, 将d 作为私钥并保持其秘密性。如果Alice 想把一条加密的消息发送给Bob, 那么她会使用如下所示的公式将明文(p)加密为密文(C), 其中密钥产生过程中生成的e 是Bob 的公钥,n 是p 和q 的乘积:

c = p^e mod n

当Bob 收到消息时, 他会运用下面这个公式得到明文消息:

p = c^d mod n

验证计算:

1.假设小明想要发送的密文为m=12

2.随后小明随机选取互质的两数p=3,q=5,则n=15, φ(n)=(3-1)*(5-1)=8

3.在1~8中随机选取一个与8互质的数作为公钥e,假设小明选取了e=3,则(15, 3)为公钥

4.那么根据e *d%8=1,可以算出d=19,则(15,3)为公钥,(15,19)为私钥

5.加密时:

实际发送出去的密文为:12^3%15=3

7. 解密时:

收到密文内容为3后,解密文: 3^19%15=12

对于RSA加密解密算法而言,(e,n)为公开密钥,那么破解RSA最直接的方法就是分解整数n,得到n=p* q中的p与q的值,之后由 φ(n)=(p-1)(q-1) 计算得到 φ(n),再通过 e*d%φ(n)=1,即可求出私钥d,之后使用(d,n)即可得出加密之前的明文。但是如果密钥的大小过大的话,那么就会产生“大整数分解难题”,从而导致解密失败。

3.2 EI Gamal(不想花钱只能耗费资源喽)

我们己经学习了Diffie-Hellman 算法如何使用大的整数和模数算法来帮助在不安全的通信信道上安全交换秘密密钥。1985年, T. El Gamal (盖帽儿)博士发表了一篇文章, 文中介绍了Diffie-Hellman\密钥交换算法背后的数学原理如何被扩展用于支持整个密码系统中的消息加密和解密。

在发布时, El Gamal 算法优于RSA 算法的一个主要方面是: 它是公开发布的。El Gamal 博士没有申请Diffie-Hellman 算法的扩展专利权, 并且它的使用是免费的, 不像商业化的己取得专利的RSA 技术(在2000年,RSA公布其算法到公共领域)。

然而, EI Gamal 算法也有一个主要缺点, 即用此算法加密的任何消息的长度都加倍了。当加密长信息或数据并且要在带宽较窄的通信线路上传输时, 这会表现出难以克服的困难。

3.3 椭圆曲线密码系统ECC(虽然复杂,但是我效率高啊)

在1985年,来自华盛顿大学和来自IBM的两位数学家独立地提出了运用椭圆曲线密码系统(ECC)理论来开发安全的密码系统。

使用下面这个方程式可以定义任何椭圆曲线:

y^2 = x^3 + ax + b

在这个方程式中,x、y、a和b都是实数。每个椭圆曲线都有一个对应的椭圆曲线组, 这个椭圆曲线组由椭圆曲线上的点和位于无穷大处的点0组成。在同一个椭圆曲线组中的两个点(P和Q)

可以用椭圆曲线的加法算法加在一起。这个运算非常简单, 如下所示:

P + Q

这个问题可以被扩展以涉及乘法。假设Q是P的倍数, 如下所示:

Q = xP

计算机科学家和数学家相信, 即使在P和Q 己知的情况下,找到像x 这样的数也是极其困难的。

这个难题被称为椭圆曲线的离散对数问题, 也是形成椭圆曲线密码学的基础。人们一般认为, 解决这个问题比解决RSA 密码系统依赖的质数因数分解问题和Diffie-Hellman 与El Gamal 应用的标准离散对数问题还要困难。前面的"密钥长度的重要性" 通过具体数据阐述了这个问题, 也就是1088位的RSA 密钥的加密强度相当于160 位的椭圆曲线密码系统密钥的加密强度

4混合加密方法

我们已经了解到,对称算法速度很快,但存在一些缺点,如缺乏扩展性、秘钥难以管理、仅提供机密性。非对称算法没上述缺点,但是他们的速度非常慢。两种加密方法都有不尽如人意之处。我们转而考虑使用结合对称与非对称加密方法的混合系统。

4.1对称与非对称算法结合使用

公钥密码学使用由于非对称算法为保护加密秘钥和秘钥分发而生产的两个秘钥(公钥和私钥),还有一个由对称算法为加密批量数据而生成的秘密秘钥。它是两种不同算法(对称算法那和非对称算法)的混合物。

两种方法混合使用时,它们发挥着不同的功能,以互补的方式工作。对称算法产生用于加密批量数据的秘钥,而非对称算法那则产生用于自动化秘钥分发工作的秘钥。(和2.5.1章节的第二种分发秘钥类似)

4.2会话秘钥

会话秘钥是只使用一次的对称秘钥,用于对通信会话期间两个用户之间的消息进行加密。会话秘钥与前面介绍的对称秘钥没有区别,它只是为了更好的完成用户之间的一次通信会话。

与静态的对称秘钥相比,会话秘钥提供了更多的保护,因为它只是在两台计算机的一次会话中有效。如果攻击者截获了会话秘钥,那么他只有很短的时间间隙来解密来回传输的加密消息。

5.散列函数

散列函数具有一个非常简单的用途,那就是它们接收一条可能会很长的消息,然后根据消息内容生成唯一的输出值。该值通常被称为消息摘要。消息摘要可以由消息的发送者产生, 并连同完整的消息一起传送给接收者,这其中有两个原因:

首先,接收者能够使用相同的散列函数对完整的消息进行重新计算, 得出消息摘要。然后, 接收者将计算得出的消息摘要与传送过来的消息摘要进行比较, 从而确保始发者发送的消息与接收者收到的是同一条消息。如果两个消息摘要不匹配, 那么就表明消息在传送的过程中因为某种原因被修改过。

其次,消息摘要可以被用于实现数字签名算法。

大多数情况下,消息摘要为128 位或更长。不过,某个单位值可以被用于执行奇偶校验功能,低位或单位校验值被用于提供单独的验证点。大多数情况下,消息摘要越长,完整性验证就越可靠。

按照RSA 安全公司的标准,对密码学散列函数有下列5个基本要求:

 1.输入值可以是任意长度。

 2.输出值具有固定的长度。

 3.散列函数在计算任何输入值时要相对容易。

 4.散列函数是单向的(意味着在提供输出值时确定输入值是极其困难的)。

 5.散列函数是不会发生冲突的(意味着找到产生相同散列值的两条消息是极其困难的) 。

接下来,我们将介绍2类常见的散列算法: SHA系列、MD系列。本章稍后部分还将对HMAC进行讨论。

5.1 SHA

安全散列算法(SHA)及随后衍生的SHA-l和SHA-2算法是由美国国家标准和技术协会(N1ST)开发的政府标准的散列函数,并在正式的政府出版物一一安全散列标准(Secure Hash Standard, SHS)中进行了说明,此标准也被称为联邦信息处理标准(FIPS) 180 。

SHA-l表面上可以接受任意长度的输入数据(事实上,在此算法中输入值的长度的上限大约是2097152TB),并且生成一个160位的消息摘要。SHA- l 算法处理512 位的消息分组。因此,如果消息的长度不是512的倍数,那么SHA 算法就会用附加的数据填充消息,直至长度达到512 的下一个最高倍数。

近年来的密码分析攻击己证明SHA-1算法中存在缺陷,这导致SHA-2算法的出现,SHA-2具有下列4种变体:

变体1:SHA-256 处理512 位的分组大小, 生成一个256 位的消息摘要。

变体2:SHA-224 处理512 位的分组大小, 使用删减版本的SHA-256 散列算法生成一个224 位的消息摘要。

变体3:SHA-512 处理1024 位的分组大小, 生成一个512 位的消息摘要。

变体4:SHA-384 处理1024 位的分组大小, 使用删减版本的SHA-5 12 散列算法生成一个384 位的消息摘要。

记忆:SHA2-X分组是512位还是1024位呢?记住分组大小一定要大于摘要位数。

密码机构通常将SHA-2 算法视为安全的,但是这种算法在理论上存在与SHA-l 算法相同的缺陷。在2012年,美国联邦政府宣布选择Keccak 算法作为SHA-3 标准。然而, SHA-3 标准仍是草案的形式并且一些技术细节仍然需要完成。观察家认为,一旦NIST 定型SHA-3,SHA-2 仍将是NIST安全散列标准(SHS)的一部分,直到有人证明对SHA-2的有效实际攻击。

5.2 MD

MD2

MD2 散列算法由Ronald Rivest(也就是Rivest、Shamir 和Adleman 中的同一人)于1989年开发,是为8位处理器提供的一种安全散列函数。MD02 对消息进行填充, 从而使消息的长度成为16 字节的倍数。然后,该算法会计算出一个16 字节的校验和,并添加到消息的结尾处。最后,通过使用完整的原始消息与添加的校验和共同生成128 位的消息摘要。

存在针对MD2算法的密码分析式攻击,尤其是Nathalie Rogier 和Pascal Chauvaud 发现,如果校验和在消息摘要计算之前没有被添加到消息中,那么就有可能发生冲突。之后,Frederic Mueller证明MD2不是一种单向函数。因此,这种算法己不再使用。

MD4

1990 年, Rivest 增强了其信息摘要的算法,进而支持32 位的处理器并提高了安全级别。这种高级的算法被称为MD4。这个增强算法先对消息进行填充,确保消息的长度比512 比特的倍数短64 比特。例如,一条16比特的消息会用432比特的附加数据进行填充,使之达到448比特,这条消息的长度是比512比特的倍数短64比特。

随后,MD4算法对512 位的消息分组进行处理,经过三轮计算,最后的输出结果是一条128比特的消息摘要。

Hans Dobbertin在1996 年发表了一篇论文,概述了如何使用现代个人计算机在不到一分钟的时间内找到针对MD4 消息摘要的冲突。因此,MD04已经不再被认为是一种安全的散列算法,如有可能,应当尽量避免使用这种算法。

MD5

1991年,Rivest发布了其消息摘要算法的下一个版本,也就是MD05。这个算法还是处理512位的消息分组,但是使用4 轮明显不同的计算生成与MD2和MD4算法一样长度的消息摘要(128位).MD5与MD4具有同样的填充要求,即消息长度必须比512位的倍数短64位。

MD5 实现了额外的安全特性,显著降低了消息摘要的生成速度。遗憾的是,近来的密码分析攻击己经证明MD5 协议会产生冲突,这表明它不是一种单向函数。特别地,Aiien Lenstra和其他一些人在2005年证明了使用不同的公钥能够创建两个具有相同MD5 散列的数字证书

HAVAL

变长散列(Hash ofVariab1e Length, HAVAL). HAVAL 是MD5的修改版, 这种算法使用1024 位的分组,并且产生128 、160 、192 、224 和256 位的散列值。

5.3 其他

MAC(Message Authentication Code):消息认证代码,是一种使用密钥的单向函数,可以用它们在系统上或用户之间认证文件或消息。HMAC(用于消息认证的密钥散列法)就是这种函数的一个例子。  

CRC(Cyclic Redundancy Check):循环冗余校验码,CRC校验由于实现简单,检错能力强,被广泛使用在各种数据校验应用中。占用系统资源少,用软硬件均能实现,是进行数据传输差错检测地一种很好的手段(CRC 并不是严格意义上的散列算法,但它的作用与散列算法大致相同,所以归于此类)。

5.4 散列算法记忆表

算法名称

哈希值的长度

MD2

128

MD4

128

MD5

128

SHA1

160

SHA224

224

SHA256

256

SHA384

384

SHA512

512

HAVAL

128,160,192,224,256

记忆:SHA1摘要是160,224=64+160,384=64+2*160

这里难以记忆的主要是SHA1哈希值长度是160。查看某基线sha1.c代码可以看到digest数组0-19位就可以装满SHA1输出值。Char[20]总共160bit,因此SHA1摘要是160位。

6.数字签名

一旦选择足够安全的散列算法, 那么就能够使用其实现数字签名系统。数字签名基础结构具有两个明显的目标:

1.数字化的签名消息可以向接收方保证: 消息确实来自己声明的发送者, 并且实施了不可否认性(也就是说, 排除了发送者之后声称消息是伪造的情况)。

2.数字化的签名消息可以向接收方保证: 消息在发送方和接收方之间进行传输的过程中不会被改变。这种方法确保消息不会受到恶意的修改(第三方想要修改消息的含义)以及无意识的修改(由通信过程中的故障造成,如电磁干扰) 。

数字签名算法的基础是本章已经介绍过的两个重要概念: 公钥密码学和散列函数

(公钥密码学=非对称密码学)

如果Alice 想要数字化签名一条发送给Bob 的消息,那么她会执行下列动作:

(1) Alice 使用一种足够安全的散列算法(如SHA-512)生成原始明文消息的消息摘要。

(2) 然后, A1ice 使用她的私钥只对消息摘要进行加密。加密的消息摘要便是数字签名。

(3) Alice 将签名的消息摘要添加到明文消息中。

(4) Alice 将完成添加的消息传送给Bob。

当Bob 接收到数字化签名的消息时,他会逆向完成如下过程:

(1) Bob 使用Alice 的公钥解密数字签名。

(2) Bob 使用相同的散列函数, 生成从Alice 那里接收到的完整明文消息的消息摘要。

(3) 然后, Bob 将从Alice那里接收到的已解密的消息摘要与自己计算得到的消息摘要进行比较。

如果两个消息摘要匹配, 那么Bob 就能够确认接收到的消息是由Alice 发送的。如果这两个消息摘要不匹配, 那么这条消息有可能不是Alice 发送的, 也有可能在传输过程中被修改了。

需要注意的是,数字签名过程本身并不提供任何隐私保护。数字签名只是确保满足加密目标中的完整性和不可否认性。然而,如果Alice 想保证发送给Bob 的消息的隐私性,那么她就要在消息生成的过程中增加额外的步骤。在将己签名的消息摘要添加到明文消息中以后,Alice可以用Bob的公钥加密整条消息。当Bob接收到消息时,他会用自己的私钥在上述所列的步骤之前对消息进行解密。

数字签名不仅仅用于消息,软件供应商经常使用数字签名技术对从互联网上下载的编码分发(例如,applet和软件补丁)进行身份认证。

6.1 HMAC

HMAC 算法实现了部分的数字签名功能,即保证了消息在传输过程中的完整性,但是不提供不可否认性。

通过使用一个共享的密钥, HMAC 可以与任何标准的消息摘要生成算法(如SHA-2)组合在一起。因此,只有知道此密钥的通信双方能够产生或验证数字签名。如果接收方解密消息摘要,但是无法将这个消息摘要与明文消息产生的消息摘要进行成功比较, 那么就说明这条消息在传输过程中被更改了。

因为HMAC 依赖于一个共享的密钥, 所以它无法提供任何的不可否认性功能(正如前面提到的)。然而,与下面将要介绍的数字签名标准相比,HMAC 以一种更加有效的方式进行操作,并且可能更适合于使用对称密码学的应用。简而言之, 在不使用加密的消息摘要算法与基于公钥密码学的采用计算方式的昂贵数字签名算法之间, HMAC能够起到折中的作用。

6.2 数字签名标准

在美国联邦信息处理标准(FIPS)186-4 中, 美国国家标准和技术协会指定了联邦政府可以使用的数字签名算法,该标准也被称为数字签名标准(DSS)。这个文档指定美国联邦政府批准的所有数字签名算法都必须使用SHA2 散列函数

DSS还指定了可以被用于支持数字签名基础结构的加密算法。目前存在下面三种经过批准的标准加密算法:

1.数字签名算法(DSA)

2.RSA 算法

3.椭圆曲线数字签名算法(ECDSA)。

DSA仅仅用于数字签名,DSA验证数字签名比RSA慢。 DSA是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)。 DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多。

RSA能用于数字签名、加密、对称秘钥的分发。

ECDSA是DSA作用于椭圆曲线的一种变体算法。ECDSA签名算法的输入是数据的哈希值,而不是数据的本身,至于哈希算法选用哪一个就取决于自己了。

还应当了解其他两种数字签名算法, 至少要知道它们的名字: Schnorr 签名算法和NybergRueppel签名算法。

数字签名使用实例:

1.从某资料中看到比特币中使用的数字签名算法是“双SHA256+ECDSA”。

2.某项目数字证书使用的数字签名算法:Signature Algorithm: sha256WithRSAEncryption

7.公钥基础设施

公钥加密的主要优点是使原本互不认识的双方之间的通信变得容易。受信任的公钥基础设施(PKI)层次使得这一点成为可能。这种信任允许结合非对称和对称算法以及哈希和数字证书,为我们提供混合加密方式。

在下面的内容中,你将了解公钥基础设施的基本组件,以及使全球安全通信成为可能的密码学概念。你将学习数字证书的组成、证书授权的作用、生成和销毁证书的过程。

7.1数字证书

数字证书为通信双方提供了保证, 保证正在与之通信的人确实具有他们所宣称的身份。数字证书本质上是个人公钥的认可副本。当用户验证证书确实是由可信证书颁发机构(CA)发布时,他们就相信这个公钥是合法的。

数字证书包含特定的身份标识信息,并且其结构归国际标准X.509 决定。遵循X.509 标准的证书包含下列数据:

1.证书遵循的X.509 版本。

2.序列号(来自证书建立者) 。

3.签名算法标识符(指定证书授权机构对证书的内容进行数字签名时使用的技术)。

4.发布者姓名(发布证书的证书授权机构的身份标识) 。

5.有效期(指定证书有效的日期和时间: 开始的日期、时间,以及结束的日期、时间) 。

6.主体的名字(包括区分实体身份的唯一名字或DN,相应实体拥有证书中包含的公钥) 。

7.主体的公钥(证书的内容: 证书拥有者用于建立安全通信的实际公钥)。

8.当前版本的X.509(.版本3)支持证书扩展: 定制变量,这些变量包含为支持对证书或各种应用程序进行跟踪而由证书授权机构插入到证书中的数据。

找了某项目的一个数字证书,来找一找证书是否包含上述信息:

7.1.1证书授权机构

证书授权机构(CA)将公钥基础设施绑定在一起。这些中立的组织机构为数字证书提供公证服务。为了从著名的CA 处获得数字证书, 必须亲自前往其代理机构, 并且出示适当的身份识别文档。

下面的列表中包括一些主要的CA:

• Symantec

• Thawte

• GeoTrust

• GlobalSign

• Comodo Limited

• Starfield Technologies

• GoDaddy

• DigiCert

• Network Solutions. LLC

• Entrust

没有办法能够阻止任何组织开展CA 性质的业务。然而,这些由CA 发布的证书只是相当于对发布它们的组织的信任。在接到来自第三方的数字证书时,这一点是需要考虑的重要内容。如果并不认可和信任发布证书的CA,那么根本就不应该信任这个证书。如果配置浏览器让其信任一个CA,它会自动信任由该CA 颁发的所有数字证书。浏览器开发者预先设置了浏览器可信任的主要CA,以减轻用户的负担。

注册授权机构(RA)在数字证书发布之前帮助CA 验证用户的身份。队本身并不直接发布证书,但是在认证过程中扮演重要的角色, 从而允许CA 远程验证用户的身份。

7.1.2证书的生成与撤销

公钥基础设施背后的技术概念相当简单。在下面的内容中, 我们将研究证书授权机构建立、确认和撤消客户证书的过程。

1.注册

当希望获得一个数字证书时, 你必须首先采用某种方式向证书授权机构证明身份, 这个过程被称为注册。前一小节曾经提到过, 这常常涉及携带正确的身份标识文档前往证书授权机构的代理处。一些证书授权机构提供了其他认证方法, 包括使用可信团体领导人提供的信用报告数据和身份认证。一旦证书授权机构对你的身份表示满意, 你就可以向其提供你的公钥。CA 接着建立一个包合你的身份识别信息和公钥副本的X.509 数字证书。CA 随后使用其私钥对证书进行数字化签名, 并且向你提供己签名数字证书的副本。最后, 你可以安全地将这个证书分发给希望与之进行安全通信的人。

2.验证

当收到来自希望与之通信的人的数字证书时,就需要通过使用CA的公钥检查CA 的数字签名来验证这个证书。接着,必须检查并确保证书并没有公布在证书撤消列表(Certificate Revocation List,CRL) 中。此时,假如满足下列要求,那么就可以认定在证书中列出的公钥是可信的:

1.CA 的数字签名是可信的。

2.你信任CA。

3.证书没有被列在CRL 中。

4.证书实际上包含你信任的数据。

最后一点很微妙,但却是极其重要的要求。在信任与某人有关的信息中的身份识别内容之前,应当确信这些内容确含在证书中。如果某个证书包含电子邮件地址(billjones@foo.com),但是没有个人的名字,那么就只能够确信其中包含的公钥与这个电子邮件账户相关联。CA 不能断定billjones@foo.com 电子邮件账户的实际身份。然而, 如果证书包含名字Bill Jones 以及地址和电话号码, 那么CA 也同样担保这些内容。数字证书验证算法内建在许多流行的Web 浏览器和电子邮件客户端软件中, 因此不必常常涉及这个特定的过程。不过, 深入理解幕后的技术细节, 这对于为组织机构进行正确的安全性判断来说是十分重要的。当购买证书时, 应该选择一个被广泛信任的CA。这样做的理由是, 如果一款主流的浏览器不接纳这个CA 或将此CA 从信任CA 列表中移除, 这将极大限制所购买证书的使用。

3. 撤消

有时,证书授权机构会由于下列某种原因需要撤消证书:

1.证书遭到破坏(例如,证书所有者不慎丢失了私钥) 。

2.证书被错误地发放(例如,CA 错误地发放了一个没有进行正确验证的证书) 。

3.证书的细节发生变化(例如, 主体的名字发生了变化)。

4.安全性关联发生变化(例如, 担保这份证书的组织机构不再雇用主体)。

提示:

撤消请求宽限期是CA 执行被请求的撤消证书的最长响应时间,这个时间在证书实践声明(Certificate Practive Statement, CPS) 中定义。CPS 规定了发布和管理证书时CA 的利用实践。

可以使用下列两种技术来验证证书的可靠性以及确定撤消的证书:

证书撤消列表

证书撤消列表(CRL) 由不同的证书授权机构进行维护, 并且包含CA 发布的己被撤消的证书的序列号以及撤消生效的日期和时间。证书撤消列表的主要缺点是它们必须定期下载并交叉参照, 这样就会在证书被撤消和通知最终用户证书撤消之间存在一段时间延迟。然而, CRL仍然是今天检查证书状况的最常见方法。

联机证书状态协议(Online Certificate Status Protocol,OCSP) 

这个协议通过提供实时证书验证方法消除了认证撤消列表所带来的固有延迟。当客户端收到一份证书时, 就会向CA 的OCSP 服务器发送OCSP 请求。服务器随后回应这份证书的状态(有效、无效或未知) 。

7.2非对称秘钥的管理

在公钥基础设施内,通过遵守若干最佳方法需求来维护通信安全性是非常重要的。

首先,明智地选择加密系统。“隐藏式安全”不是一种适当的途径。选择算法公开的加密系统,其算法必须经过行业专家的彻底检查。慎重选择使用" 黑箱" 途径的加密系统和维护算法的秘密性,这对于密码系统的完整性来说至关重要。

必须以适当的方式选择密钥。选择密钥长度时应当考虑、安全需求与性能之间的平衡。此外, 应当确认密钥真正随机。密钥内的任何模式都会增加攻击者破译加密和减弱密码系统安全性的可能性。

使用公钥加密时,一定要保证私钥的机密性! 在任何情况下都不能允许其他人获知你的私钥。需要记住的是,偶尔允许某人访问私钥,会持久地危害使用该密钥加密的所有通信(无论是过去、当前还是将来),并且准许第三方能够成功地进行假冒。

密钥在服务一段时期后应当停止使用。许多组织机构具有强制的密码轮换需求,从而防止未被发现的密钥泄露。如果没有必须遵循的正式策略,那么可以基于密钥的使用频率选择适当的密钥轮换时间间隔。如果可能的话, 可以几个月更改一次密钥对。

最后,备份密钥! 如果由于数据损坏、崩溃或其他情况丢失包含私钥的文件,那么无疑希望具有可用的备份。此时,既可以创建自己的备份, 也可以使用维护备份的密钥托管服务。在任何情况下,都需要确保以安全的方式处理备份。毕竟,备份与主密钥文件一样重要!

8.密码学攻击

与任何安全机制一样,心怀恶意的个人已经找到了许多击败密码系统的攻击方法。你要了解各种不同的密码学攻击所引起的威胁,从而使系统的风险降低到最小,这是非常重要的。

分析攻击 这是一种试图降低算法复杂性的代数运算。分析攻击关注于算法本身的逻辑'性。

实现攻击 这种攻击类型利用密码学系统的实现中的弱点, 关注于对软件代码的利用, 不仅仅涉及错误与缺陷, 而且还涉及编写加密系统程序所使用的方法。

统计攻击 统计攻击利用密码系统中的统计弱点, 例如无法生成随机数和浮点错误。统计攻击试图发现驻留密码学应用程序的硬件或操作系统中的漏洞。

蛮力攻击 蛮力攻击十分简单。这种攻击尝试每种可能的、有效的密钥或密码组合。蛮力攻击涉及使用大规模的处理能,对保护通信安全的密钥进行有系统的猜测。

频率分析和仅知密文攻击 在许多情况下, 你唯一拥有的信息是加密后的密文信息, 即所谓的仅知密文攻击。在这种情况下,频率分析就是一种己证明可行的对抗简单密码的技术。它计算每个字母出现在密文中的次数。使用你掌握的知识, 宇母E、T、0、A、I 和N 是最常见的英语字母,

可以测试几个假设:

• 如果这些字母在密文中最常见, 这个密码可能是移位密码, 只是重新排列明文字符但不改变它们。

• 如果其他字母在密文中最常见, 密码可能是某种形式的置换密码并代替明文字符。

这是对频率分析的简单概述, 这个技术的众多复杂的变种可以用来对付多表密码和其他复杂的密码。

已知明文攻击 在己知明文攻击中,攻击者具有己加密消息的副本以及用于产生密文(副本)的明文消息。知道了这些消息,可以极大地帮助攻击者破解较弱的编码。。

选定密文攻击 在选定密文攻击中,攻击者能够解密所选的部分密文消息,并且可以使用已解密的那部分消息来发现密钥。

选定明文攻击 在选定明文攻击中,攻击者能够加密所选的明文消息,随后可以分析加密算法输出的密文。

中间相遇攻击 攻击者可以使用中间相遇攻击击败使用两轮加密的加密算法。这种攻击导致双重DES(2DES)很快被抛弃, 并且转而使用三重DES(3DES)这种增强的DES 加密技术。

中间人攻击 在中间人攻击中, 怀有恶意的人置身于通信双方之间的位置并截获所有的通信(包括密码学会话的设置)。攻击者对始发者的初始化请求做出响应, 并且建立与始发者的安全会话。然后,攻击者伪装成始发者,使用不同的密钥与预期的接收者建立另一个安全会话。这样一来,攻击者就能够" 坐在" 通信双方的中间,读取流经的所有数据流。

生日攻击 生日攻击也被称为冲突攻击或逆向散列匹配,它能够寻找散列函数一一对应特性中的缺陷, 请参阅第14 章" 控制和监控访问" 中对穷举攻击和字典攻击的讨论。在这种攻击中, 怀有恶意的人在数字化签名的通信中寻找可以生成相同消息摘要的不同消息, 从而维持原有数字签名的有效性。

社会工程学 也可以用于密码分析。如果能够获得解密密钥且只是简单地要求发送者发送密钥,就比试图破解密码系统容易得多!

重放攻击 重放攻击被用于对付那些没有结合临时保护措施的加密算法。在这种攻击中, 怀有恶意的人拦截通信双方之间的加密消息(通常是身份认证的请求), 然后" 重放" 捕获的信息以打开新的会话。通过在每条消息中结合时间标记和过期时间, 就可以防御这种攻击。

总结

密码学术语里对称密钥密码学也被称为“秘密密钥密码学”、“私有密钥密码学”、“会话秘钥密码学”、“共享秘钥密码学”。非对称密码学也可以成为“公钥密码学”。

非对称密码学和数字签名的四条核心原则。

1.如果想要加密消息,那么就使用接收者的公钥。

2.如果想要解密友送给你的消息,那么就使用自己的私钥。

3.如果想要数字化签名发送给其他人的消息,那么就使用自己的私钥。

4.如果想要验证由其他人发送过来的消息中的签名,那么就使用发送者的公钥

不同算法的不同功能表

算法类型

加密

数字签名

散列函数

秘钥分发

DES

Y

3DES

Y

Blowfish

Y

IDEA

Y

RC

Y

Diffie-Hellman

Y

RSA

Y

Y

Y

ECC

Y

Y

Y

EI Gamal

Y

Y

Y

DSA

Y

MD

Y

SHA

Y

参考资料:
《CISSP官方认证学习指南》第六章“密码学和对称密码算法”

第七章“PKI和密码学应用”

《CISSP认证考试指南》第三章“安全工程”

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值