原文链接:http://blog.youkuaiyun.com/ddk3001/article/details/53997927
说明:本文内容是《CISSP Official Study Guide(第7版)》第6章(Cryptography and Symmetric Key Algorithms)和第7章(PKI and Cryptographic Applications)的学习总结。这两章全面介绍了密码学的知识,本文是概要总结,可作为地图参考,对于其中的细节,请查阅相关书籍和资料。
1 密码学基础
1.1 密码学的目标
目标 | 说明 | 技术 |
---|---|---|
机密性 | 保证数据未被泄露 | 秘密密钥系统、公开密钥系统 |
完整性 | 保证数据未被修改 | 秘密密钥系统、公开密钥系统。 保护消息:数字签名 (第7章)。 保护文件:Hash算法 (第21章)。 |
身份验证 | 对用户声明的身份进行验证。 A要确认正在通信的对方是B, 即,B要使A相信他是B。 | 挑战/响应技术 |
不可否认 | 为接收者提供担保, 保证消息确实来自发送者,而不是其他人。 A说消息来自B,B否认不了。 即,A要使B不能否则消息是他发送的。 | 公开密钥系统:因为只有自己持有私钥。 不能使用秘密密钥系统, 因为B可以说消息是A自己做的。 |
FIPS Federal Information Processing Standard 联邦信息处理标准
FIPS 140-2 密码模块的安全需求 :为密码模块定义了硬件和软件需求
1.2 密码学的数学原理
1、One-Way Function单向函数
公钥密码系统都是建立在单向函数的基础上。
2、Nonce 随机数
在加密过程中添加Nonce,从而获得更大强度。
例子:IV(初始化向量) 参见DES
3、零知识证明
零知识证明:在不向第三方揭示事实本身的情况下,向第三方证明你对事实的了解。
密码学:使用公钥加密系统,能提供零知识证明。
4、Split Knowledge 分割知识
分割知识:责任分离
例子:密钥托管(key escrow)。
- 密钥、数字签名、数字证书可以存储在托管数据库中。
- 如果用户密钥丢失,可以从托管数据库中提取密钥。
- “M of N控制”要求:N个人中至少有M个人一起工作,才能完成这项工作。
5、工作函数
工作函数:从成本或时间方面来度量密码系统的强度。
1.3 密码算法(Cipher)
1、One-Time pad 一次性密码本
主要障碍:很难生成、分发和保护冗长的密钥
主要应用:保护极其敏感的通信,实际中只用于短消息。
2、Running Key Cipher 滚动密钥密码
书籍密码,用于生成一次性密码本所需的密钥
3、混淆(Confusion)和扩散(Diffusion)
密码学算法依赖两种基本操作来隐藏明文信息:混淆和扩散
Confusion :明文与密钥的关系十分复杂,攻击者不能通过通过观察明文和密文的关系来确定密钥。
Diffusion :明文的改变导致多种变化,这种变化会扩散到整个密文中。
密码算法 :“替换”引入了混淆,“换位”引入了扩散。
1.4 现代密码学
秘密密钥系统 | 公开密钥系统 |
---|---|
机密性 | 机密性、完整性、身份验证、不可否认性 |
带外交换密钥 密钥需要经常更新 剔除用户困难 | 带内交换公钥 只有用户私钥被破坏时,才需要重建密钥 容易剔除用户 |
速度快 用于批量数据加密 | 慢度速 用于少量数据加密(数字签名、数字信封、数字证书) |
不可扩展:n(n-1)/2 每两人之间都需要一个密钥 | 可扩展:2n 每个人需要两个密钥(公钥和私钥) |
Hash算法
2 对称密钥加密
2.1 对称加密算法
DES | Data Encryption Standard | 数据加密标准 |
AES | Advanced Encryption Standard | 高级加密标准 |
IDEA | International Data Encryption Algorithm | 国际数据加密算法 |
2.1.1 DES
1977年 美国政府发布 用于政府通信
DES已经不再安全,2001年AES取代了DES
DES:分组长度64位,密钥长度56位(另外有8位用作奇偶校验或随意设置),16轮加密。
算法过程:http://wenku.baidu.com/view/ed21dc80b9d528ea81c7796b.html?re=view
操作模式Mode | 操作方法 | 特点 | |
---|---|---|---|
ECB | Electronic CodeBook 电子密码本 | 把明文分为64位的分组, 使用密钥对每个分组进行加密。 | 缺点:安全性差 只用于交换少量数据 |
CBC | Cipher Block Chaining 加密分组链接 | 第一个分组使用IV(初始化向量)进行异或,然后进行加密。 之后的每个分组与前一个密文分组进行异或,然后进行加密。 IV需要发送给接收方,方法: 1、以明文方式放在完整密文之前。 2、用密钥和ECB模式对IV进行加密。 | 缺点:如果某个分组出错,会传播到后面所有分组 (错误传播)。 |
CFB | Cipher FeedBack 加密反馈 | CFB是流加密形式的CBC, 区别是只是对实时数据进行加密 | 缺点:错误传播 |
OFB | Output FeedBack 输出反馈 | 与CBC几乎相同, 区别是它使用种子值与明文进行异或。 IV用于创建种子值,通过对先前的种子值运行DES算法,可以派生出之后的种子值。 | 优点:不会传播错误 |
CTR | CounTeR 计数器 | 流加密,类似于OFB, 但它不使用种子值,而使用计数器。 | 优点:不会传播错误 适合并行计算 |
ECB | 缺点:安全性差 | |
分组加密 | 流加密 | |
CBC | CFB | 缺点:错误传播 |
IV | IV | |
OFB | CTR | 优点:不会传播错误 |
IV+种子值 | IV+计数器 |
2.1.2 3DES
2DES并不比DES更安全
3DES使用相同的而算法实现更安全的加密。
有四个版本:
- EEE3 、EDE3 密钥长度56*3 = 168 // 3个密钥
- EEE2 、EDE2 密钥长度56*2 = 112 // 2个密钥
2.1.3 各种算法比较
美国政府算法 | 分组长度 | 密钥长度 | 特点和用途 |
---|---|---|---|
DES | 64 | 56 16轮加密 | 1977年发布,用于美国政府通信 2001年AES取代了DES |
3DES | 64 | 168 | 与DES的算法相同 实现了更安全的加密 |
AES | 128 | 128 10轮加密 | 2001年开始使用 Rojndael扩展了AES |
Skipjack | 64 | 80 | 用于FIPS 185 (联邦信息处理标准) 因密钥托管受美国政府控制,所以未被普遍接受。 |
专利算法 | 分组长度 | 密钥长度 | 特点和用途 |
---|---|---|---|
IDEA | 64 | 128 | 瑞士开发人员的专利 在PGP中使用 |
RC2 | 64 | 128 | RSA公司 |
RC4 | 流式 | 128 | RSA公司 |
RC5 | 32/64/128 | 0 ~ 2048 | RSA公司 |
自由使用算法 | 分组长度 | 密钥长度 | 特点和用途 |
---|---|---|---|
Blowfish | 64 | 32~448 | 比DES和IDEA更快。 在许多商业软件和操作系统中使用,例如SSH |
Twofish | 128 | 256 | 是AES的另一个选择 |
2.2对称密钥管理
(1)创建和分发
- 方法1:离线分发
- 方法2:公钥加密
- 方法3:Diffie-Hellman算法
- 方法:是“离线分发”和“公钥加密”的折中,它基于标准离散对数问题。
- 应用:S-RPC使用此算法交换密钥
- 缺点:容易受到中间人攻击
Diffie-Hellman算法 :
1、交换数据:A和B约定两个大数,即p(质数)和g(整数),并且 1 < g < p
2、计算R和S
- a) A选择一个随机的大整数r,计算:R = gr % p (r只有A知道)
- b) B选择一个随机的大整数s,计算:S = gs % p (s只有B知道)
3、交换数据:A把R发送给B,B把S发送给A
4、计算密钥
- a) A计算:K = Sr % p = gsr % p (r只有A知道)
- b) B计算:K = Rs % p = gsr % p (s只有B知道)
- c) K可作为通信用的私钥
5、 分析:根据g、p、R、S,无法推断出r和s?
(2)存储和销毁
(3)恢复和托管
- Fair Cryptosystems(公平加密系统):密钥被分成多个部分,交给多方保存。
- Escrowed Encryption Standard(托管加密标准):
- 方法为政府提供了解密密文的技术方法,用于FIPS 185 (联邦信息处理标准)。
- 这个标准是Skipjack的基础。因密钥托管受美国政府控制,所以Skipjack未被普遍接受。
2.3 密码术的生命周期
选择密码系统时,要考虑在信息的生命周期内,足以保证信息的安全。
选择时要考虑:
- 列表内容
- 加密算法
- 密钥长度
- 使用的安全交易协议,例如:SSL、TLS
3 非对称密钥加密
算法 | 基于 | 特点 |
---|---|---|
RSA | 大质数的因式分解 | 1977年提出,是RSA公司的专利, 2000年时RSA向公开领域发布了该算法。 |
Merkle-Hellman 背包算法 | 集合论中的超递增集的因式分解 | 1984年被破解 |
El Gamal | 标准离散对数问题 | El Gamal扩展了Diffie-Hellman算法,用于支持公钥密码系统。可自由使用。 缺点:密文长度是明文长度的两倍。 |
ECC | 椭圆曲线的离散对数问题 | 优点:使用相同密钥长度时, 比RSA和El Gamal提供更大的加密强度。 |
下面三种密钥长度提供相同的保护程度:
- RSA : 1088位。 Rivest、Shamir、Adleman
- DSA : 1024位。 Digital Signature Algorithm
- ECC : 160 位。 Elliptic Curve Cryptosystem
3.1 RSA
RSA算法已经成为许多知名安全基础设置的安全骨干,例如微软、Nokia、Cisco。
参考:http://blog.youkuaiyun.com/sunmenggmail/article/details/11994013
RSA算法:计算公钥和私钥
1、选择两个大质数p和q,计算:
- a) N = p * q
- b) r = (p-1)(q-1)
2、选择一个小于 r 的整数 e,求得 e 关于模 r 的模反元素d。(模反元素存在,当且仅当e与r互质)
3、将 p 和 q 的记录销毁。
4、(N,e)是公钥,(N,d)是私钥。
例子:计算公钥和密钥
1、假设p = 3、q = 11
- a) N = pq = 33
- b) r = (p-1)(q-1) = (3-1)(11-1) = 20
2、计算:
- a) 根据模反元素的计算公式,可以得出e·d ≡ 1 (mod 20),即e·d = 20n+1 (n为正整数);
- b) 假设n=1,则e·d = 21。e、d为正整数,并且e与r互质,则e = 3,d = 7。
- c) 到这里,公钥和密钥已经确定。公钥为(N, e) = (33, 3),密钥为(N, d) = (33, 7)。
3.2 Merkle-Hellman背包算法
基于“集合论中的超递增集”因式分解,
用的是:集合论中的超递增集(super-increasing sets)
1984年被破解
3.3 El Gamal
El Gamal扩展了Diffie-Hellman算法,用于支持公钥密码系统。
El Gamal和Diffie-Hellman算法都是基于:标准离散对数问题
优点:该算法可自由使用
缺点:密文长度是明文长度的两倍。
3.4 ECC
基于:椭圆曲线的离散对数问题
4 Hash函数
散列函数:输出消息摘要(散列值)
消息摘要:可以确认消息未被修改过
散列算法:
- SHA :SHA-1、SHA-2、SHA3
- MD :MD2、MD4、MD5
- HMAC
- HAVAL :对MD5做了修改。使用1024位的分组,产生128/160/192/224/256位的散列值。
4.1 SHA
SHA Secure Hash Algorithm 安全散列算法
SHA是NIST开发的美国政府标准(FIPS 180)
SHA-1 512位分组 160位散列值 // 已证明此算法存在缺陷
SHA-2:
- SHA-256 : 512位分组、256位散列值
- SHA-224 : 512位分组、224位散列值
- SHA-512 : 1024位分组、512位散列值
- SHA-384 : 1024位分组、384位散列值
SHA-3: 2012年,使用Keccak算法
4.2 MD
MD Message Digest 消息摘要
1989年,由Rivest开发
MD2 : 128位散列值 // 已证明不安全
MD4 : 512位分组、128位散列 // 已证明不安全
MD5 : 512位分组、128位散列 // 已证明不安全
5 数字签名
DSA 数字签名算法
5.1 使用公钥的DSA
“消息摘要”可用于数字签名算法(系统)
数字签名:证明某个消息来自一个特定用户(不可否认),并保证消息未被修改过(完整性)。
数字签名算法使用了:公钥密码系统(不可否认)、散列算法(完整性)
数字签名算法如下:
1、A执行操作:
- a) 使用散列算法计算明文消息的消息摘要
- b) 使用A的私钥对消息摘要进行加密,加密后的消息摘要就是“数字签名”
2、A将明文消息和数字签名一起发送给B
3、B收到消息后:
- a) 使用A的公钥对数字签名进行解密,从而确认这个消息这是A发送的。(不可否认)
- b) 计算明文的消息摘要,并与解密的消息摘要对比,从而确认明文内容未被修改。(完整性)
数字签名提供:完整性、身份认证、不可否认
如果要保证机密性,需要执行:
1、A用B的公钥对“明文消息+数字签名”进行加密,然后发送给B
2、B执行:
- a) 用B的私钥对消息进行解密 => 机密性
- b) 用A的公钥解密数字签名 => 身份认证、不可否认
- c) 比较消息摘要 => 完整性
5.2 使用密钥的DSA
HMAC Hashed Message Authentication Code 散列消息身份验证码
简单方法 :明文消息 + 未加密的消息摘要 //
复杂方法 :明文消息 + 私钥加密消息摘要 // 完整性、不可否认
HMAC :消息明文 + 密钥加密消息摘要 // 完整性
5.3 数字签名标准
NIST FIPS 186-4指定了政府使用的数字签名算法(DSA),称为DSS(数字签名标准)
- 散列算法:SHA-2
- 加密算法:可以选择如下
- DSA :FIPS 186-4
- RSA :ANSI X93.1
- EC DSA :ANSI X9.26 (椭圆曲线DSA)
另外两种数字签名算法:
- Schnorr
- Nybergrueppel
6 PKI(公钥基础架构)
6.1 PKI的基本概念
PKI的基本概念:
使用“公钥和私钥”证明身份:
- A生成公钥和私钥,把公钥给B
- A用私钥加密信息发送B
- B用公钥能解密消息,就能证明这个消息来自A。
怎么保证“公钥”确实是A生成?(详见注册和验证)
- CA是中立机构,A和B都相信它
- CA确保A确实是他声称的身份,并用A提供的公钥制成“数字证书”。
- A把CA确认过的数字证书(公钥)提供给B,因为B信任CA,所以相信这个公钥确实是A的。
CA | Certificate Authority | 证书授权机构 | CA为数字证书提供公证服务 |
RA | Register Authority | 注册授权机构 | RA帮助CA验证用户的身份 |
Digital Certification | 数字证书 | 用于证明个人的身份,本质是用CA的私钥加密了用户的公钥。 如果用户确认数字证书是由CA发布的,那就知道这个公钥是合法的。 数字证书被内建在许多Web浏览器、Email客户端软件中。 |
PKI是一个概念,使用一个中立机构来证明A提供公钥的有效的。
6.2 数字证书
数字证书:用于证明个人的身份,其本质是个人公钥。
如果用户确认数字证书是由CA发布的,那就知道这个公钥是合法的。
数字证书包含特定的身份识别信息,其标准是ITU-T X.509 。
注册
- CA验证用户身份,用户向CA提供公钥
- CA建立一个数字证书,其中包含“用户身份和用户公钥”的ITU-T X.509数字证书
- CA用其私钥对证书进行数字签名,提供给用户
- 数字证书本质:用CA的私钥加密了用户的公钥
验证
- 用CA的公钥解密数字证书,从而确认这来自CA。
- 检查保证数字证书没有在CRL(证书撤销列表)中
- 确认证书中包含你信任的数据
撤销
- CRL 证书撤销列表 :列表验证。有延迟,但仍然是最常用的方法。
- OCSP 联机证书状态协议 :实时验证。无延迟。
7 密码学的应用
7.1 便携设备
加密:
- Windows :BitLocker 和EFS(加密文件系统)
- Mac OSX :FileVault
- TrueCrypt :开源软件,可用于Linux、Windows、Mac
7.2 隐写术和水印
Steganopgraphy 隐写术 // 隐藏信息
Watermarking 水印 // 保护知识产权
7.3 DRM
DRM Digital Rights Management 数字版权管理
- 电子书 :DRM最成功的应用
- 文档
- 音乐
- 电影
- 视频游戏
7.4 Email
Email要求 | 保护方法 |
---|---|
机密性 | 加密 |
完整性 | 散列算法 |
身份验证、完整性 | 数字签名 |
机密性、完整性、身份验证、不可否认 | 加密 + 数字签名 |
电子邮件标准:
(1)PGP Pretty Good Privacy
主要用于:基于Web的电子邮件系统
商业版本:RSA进行密钥交换、 IDEA加解密、 MD5散列算法
免费版本:DH进行密钥交换、 CAST 128位加解密、 SHA-1散列算法
(2)S/MIME Secure / Multipurpose Internet Mail Extensions
主要用于:桌面邮件应用程序
RSA加密算法、AES和3DES加密算法
7.5 Web应用
SSL : Secure Socket Layer
TLS : Transport Layer Secure
HTTPS : HTTP over SSL
(1)TLS
SSL已经发现有漏洞,现在已被TLS替换。
(2)SSL
Netscape开发,用于对C/S之间网站流量进行加密。
HTTPS使用TCP 443端口在C/S之间协商加密通信会话。
SSL的目的:为Web浏览会话建立安全的通信通道。
方法是:
1、 用户访问一个网站时,浏览器检索Web服务器的数字证书,从中提取服务器的“公钥”。
2、 浏览器创建一个随机的“对称密钥”,使用服务器的“公钥”来加密,然后发送给服务器。
3、 服务器用自己的“私钥”进行解密,得到“对称密钥”,此后用这个对称密钥来交换信息。
7.6 网络连接
使用密码学算法保护通信线路安全,即对通信线路进行加密。
线路加密的类型:
- 链路加密 :加密整个数据包,逐跳完全解密。
- 端到端加密 :只加密数据包中的用户数据,接收端解密。
(1)SSH ( Secure Shell )
SSH提供了端到端加密
SSH提供了常见网络服务的加密方案:Telnet、FTP、Rlogin
两个版本(SSH1和SSH2),SSH1现在被认为不安全。
(2)IPsec
IPsec为安全网络通信提供了一个体系结构,它没有规定所有实现细节,而是一个开放的模块化架构。
IPsec用于在两个实体(系统、路由器、网关)之间建立交换信息的安全通道。
IPsec使用IP协议,通过公钥密码术提供:机密性、访问控制、不可否认、消息身份验证。
主要用于VPN,通常与L2TP一起使用。
IPSec有两个主要组件:
- AH(身份验证首部):提供消息完整性、不可否认性、身份验证。
- ESP(封装安全负载):提供数据包内容的机密性和完整性。
IPSec提供了两种操作模式:
- 传输模式:只加密数据包的负载。用于peer间通信。
- 隧道模式:加密整个数据包(包括头),用于网关间通信。
在运行时,通过创建SA(安全关联)来建立IPSec会话。
如果要双向通信,需要两个SA(每个方向一个)。
如果要支持使用AH和ESP的双向通信,需要四个SA。
(3)ISAKMP 网络安全关联和密钥管理协议
IPSec依赖于SA的系统,这些SA通过使用ISAKMP进行管理。
ISAKMP通过协商、建立、修改和删除SA,为IPSec提供后台的安全支持服务。
(4)无线互联
WEP : Wired Equivalent Privacy , WEP算法存在显著缺陷
WPA : Wifi Protected Access , 改进了WEP加密
IEEE 802.1x : 常用的无线安全标准
应用层 | HTTP, FTP, LPD, SMTP, Telnet, TFTP, EDI, POP3, IMAP, SNMP, NNTP, S-RPC, SET |
表示层 | Encryption protocols and format types, such as ASCII, EBCDICM, TIFF, JPEG, MPEG, MIDI |
任务层 | NFS, SQL, RPC |
传输层 | SPX, SSL, TLS, TCP, UDP |
网络层 | ICMP, RIP, OSPF, BGP, IGMP, IP, IPSec, IPX, NAT, SKIP |
链路层 | SLIP, PPP, ARP, RARP, L2F, L2TP, PPTP, FDDI, ISDN |
物理层 | EIA/TIA-232, EIA/TIA-449, X.21, HSSI, SONET, V.24, V.35 |
8 密码学攻击
攻击方法:
1. 分析攻击:关注算法本身的逻辑性
2. 实现攻击:利用系统实现中的弱点
3. 统计攻击:利用密码系统的统计弱点,例如无法生成随机数和浮点错误
4. 暴力攻击:彩虹表(预先计算机密码散列值),应对方法是加盐
5. 频率分析和仅密文攻击:只有加密后的密文
6. 已知明文:有同一消息的明文和密文
7. 选定密文:攻击者能够解密密文的选定部分,使用这部分发现密钥。
8. 选定明文:攻击者能够加密他们选择的明文,从而分析加密算法的密文输出。
9. 中间相遇攻击:同时加密和解密,来发现密钥对。
10. 中间人攻击
11. 重放攻击
12. 生日攻击