0x00 前言
讲加密基础设施前,会介绍一下密码学基础,不过需要先声明一下的是我仅仅是能理解并应用。所以如果文中笔误,还请读者及时指出。如果只需要关注加密基础设施建设的一些经验,可直接跳至第二节——0x02.
0x01 密码学基础
以下章节中的密码学基础部分的知识主要总结自《图解密码技术》读书笔记,本节图片系原文所载。有个朋友说这个是神书,我觉得大可不必,不过确切是本好书,因为能够帮助数学基础不是很好的读者快速了解密码学基础。
1. 受到的部分威胁和对应的密码技术
2. 基本的密码技术与常识
基本密码技术分为六部分:对称密码(Symmetric Cryptography),非对称密码(Asymmetric Cryptography),单向散列函数,消息认证码,数字签名,伪随机数生成器。
大部分密钥技术中都需要密钥,这里面有个值得参考的观点是————密钥与明文是等价的 (即如果明文价值100w,那密钥也就值100w。)
以下是各种不同的密钥:
- 对称密码的密钥与公钥密码的密钥
- 消息认证码的密钥与数字签名的密钥
- 用于确保机密性的密钥与用于认证的密钥
- 会话密钥与主密钥
- 用于加密内容的密钥与用于加密密钥的密钥
- 基于口令的密码(Password Based Encryption)
3. 对称密码
对称密码可以分为两类:序列密码和分组密码。如其名,序列密码单独加密每个位,分组密码加密明文分组。 分组密码(Block Cipher)每次只能处理特定长度的一块(Block),下面主要介绍分组密码。
对称密码的加解密主要依赖是比特的异或计算, 假设明文是010101,密钥是111111, 那么异或得到的密文就是101010, 翻过来密文进行解密时候同密钥进行异或就可以得到010101
1 | 0 XOR 0 = 0 |
3.1 DES与3DES
DES全称是Data Encryption Standard, 1977年被FIPS采用,基本结构为Feistel网络/结构。目前不应被用于现有或新的加密用途。
Feistel网络中,加密和解密可以用完全相同的结构实现,加密的各个步骤被称为轮,轮数可以任意增加。
DES就是一种16轮循环的Feistel网络。 即每次输入输出后左右侧对调,然后使用新的子密钥通过轮函数进行异或。
下面是一个三轮的Feistel网络。记住DES是16轮的。
而3DES就是将DES重复3次得到的。
不过可以发现3DES加密过程是加密-解密(这一步是为了能够向下兼容)-加密,如果DES密钥1,2,3相同那么其实3DES就和DES是一样的。 如果1,2,3完全使用不同的密钥就叫DES-3DES,如果1,3相同,2不同就是DES-EDE2。
3DES目前暂时允许使用,但不应用于新用途。
3.2 AES
全称是Advanced Encryption Standard,由NIST选拔作为FIPS标准。我最开始的时候以为AES是一种,其实AES是由一系列算法选拔得到的。1997年开始募集(15个算法中5个入围),2000年选定分组密码Rijndael(by比利时密码学家Joan Daemen & Vincent Rijmen)。
Rijndael也是由多个轮构成,不过用的是SPN结构,不再是Feistel网络。主要分为SubBytes(16字节分组进行处理,获得一张拥有256个值的替换表S-Box), ShiftRows(以4字节为单位的行进行某种规则向左平移,每一行平移的字节数不同), MixColumns(对1个4字节值进行比特运算), AddRoundKey(将MixColumns的输出与轮密钥进行异或)。完成从SubBytes->AddRoundKey算是1轮,Rijndael结构需要重复10-14轮,解密时顺序相反,方向相反即可。AddRoundKey -> InvMixColumns -> InvShiftRows -> InvSubBytes
3.3 填充模式的优劣对比
分组意味着能处理特定长度的,针对任意长度的就要对分组密码进行迭代,迭代的方式成为模式。
OFB模式与CTR模式的对比
CFB模式与OFB模式的对比
4. 非对称密码
又称为公钥密码(Public-Key Cryptography), 主要是依托于人类目前尚无法快速求解离散对数的原理。
4.1 RSA
4.1.1 RSA的加密和解密
4.1.2 签名与验签
一般有两种形式,一种是直接对消息签名,另一种是对消息的散列值进行签名。
4.2 ECC
全称为Elliptic Curve Cryptography 椭圆曲线密码。
主要包含三个方面:
- 基于椭圆曲线的公钥密码
- 基于椭圆曲线的数字签名
- 基于椭圆曲线的密钥交换
4.2.1 DH交换
4.3 应用与攻击方式:
应用:
- 公钥证书
- SSL/TLS
攻击方式:
- 中间人攻击
- 对单向散列函数的攻击
- 利用数字签名攻击公钥密码
- 潜在伪造
4.4 混合密码系统
简单来说就是用非对称密码保护对称密钥,用对称密钥进行对数据的加解密。
加密
解密
5. 单向散列函数
英文名 One-way hash function,又称作消息摘要函数(Message digest function)、哈希函数、杂凑函数。
输入成为消息(message)也成为原像(Message digest), 输出为散列值(hash value)也成为消息摘要(Message digest)或者指纹(fingerprint)
能够辨别出是否被篡改,但无法识别伪装。
特性:
- 根据任意长度的消息计算出固定长度的散列值
- 能够快速计算出固定长度的散列值
- 消息不同散列值不同(抗碰撞性)
- 具备单向性
应用:
- 检测软件是否篡改
- 基于口令的加密
- 消息认证码
- 数字签名
- 伪随机数生成器
- 一次性口令
常见的单向散列函数:
- MD4、 MD5
- SHA-1、SHA-256、SHA-384、SHA-512
- RIPEMD-160
- SHA-3
6. 消息验证码
英文名 Message Authentication Code, 输入为任意长度的消息和一个发送者与接收者之间共享的密钥,输出为固定长度的数据,即MAC值。
能够辨别篡改和伪装,但无法解决对第三方证明,以及防止否认
6.1 实现方法
- 使用单向散列函数实现
使用SHA1、SHA-224、SHA-256、SHA-384、SHA-512所构造的HMAC分别称为HMAC-SHA1、HMAC-SHA-224、HMAC-SHA-256、HMAC-SHA-384、HMAC-SHA-512 - 使用分组密码实现
- 其他方法(流密码,公钥密码)
6.2 应用与攻击方式
应用:
- SWIFT (参考电子支付基础的一些分享资料)
- IPsec
- SSL/TLS
攻击方式:
- 重放攻击
- 密钥推测攻击
7. 伪随机数生成
很多地方都会用到随机数,生成密钥,密钥对,初始化向量,Nonce,盐。但是软件是没有办法生成真正的随机数的,软件生成的都是伪随机数。
生成伪随机数有以下几种方法:
- 杂乱的方法
- 线性同余法
- 单向散列函数法
- 密码法
- ANSI X9.17
8. PGP
略,可参考,PGP: Pretty Good Privacy - Garfinkel Simson
9. 关于密码系统的信息安全常识
- 不要使用保密的密码算法
- 使用低强度的密码比不进行任何加密更危险
- 任何密码总有一天都会被破解
- 一次性密码本理论上是无法破译的,但实际过程因为面临密钥配送问题,保存问题,重用问题,同步问题,生成问题而没有得到使用。
- 盐主要是防御字典攻击的
0x02 加密基础设施
这里先介绍常规做基础设施需要的特性有哪些,然后针对每一种不同的不同的设施稍作补充。 图是临时画的,包含了去做一套加密基础设施涉及到的不同方面。下面我会简单介绍图中的几块。
(绘制by作者)
Integration(Application/System)
- Logging Management
- Monitoring Management
- Identify Management
- Access Management
- etc…
Optimization (Tech/Operation/…)
- Workflow & Pipeline
- Support Template
- HW/SW Performance
- Scenario
- etc …
Customer Service (Application/User/…)
- Support Service
- Self Service
在知道在做某些Solution时需要考虑到的点后,我们看下加密基础设施的大概Scope是什么样的(绘制by作者):
以PKI进行举例(之前曾经总结过一篇关于CA/RA文章, 以及另一篇关于HSM的), 在确定了建设PKI的方案后,对逻辑架构和物理架构进行设计,同时包含了与其他系统/服务(日志,监控,权限,加密机等)的整合,在系统进行部署并提供服务后。继续建设整合服务,例如提供Support template, Customer Service,以及提供一定的SDK让其他系统/应用进行调用。不同功能的CA产生的不同证书提供给不同的应用或用户,其中提供给员工用于访问内部系统的证书是不是可以通过MDM工具推送到员工的Laptop,以及LB上的用于提供TLS服务的证书,以及所有需要根证书的地方等等。尽量优化日常运营中繁复的工作。
同样的针对HSM,KMS或者说Secret Management之类的也是类似的做法。
0x03 总结
纸上得来终觉浅,绝知此事要躬行。
0x04 参考资料
- 离散对数为什么是难题
- SM2国密算法/椭圆曲线密码学ECC之数学原理
- 图解密码技术
- 应用密码学
- 深入浅出密码学
- 商用密码应用安全性评估白皮书
- PGP: Pretty Good Privacy - Garfinkel Simson