密码学概述
- 通信中的参与者
- 发送者(Alice,爱丽丝):在双方交互中合法的信息发送实体。
- 接受者(Bob,鲍勃):在双方交互中合法的信息接受实体。
- 分析者(Eve,伊夫):破坏接受和发送双方正常安全通信的其他实体。
- 常见攻击形式:
- 穷举攻击法
- 穷举攻击,亦称“暴力破解”。对密码进行逐个推算,直到找出真正的密码为止的一种攻击方式。
- 应用
- 频度分析
- 通过对各个字母、字母组合进行频度分析,利用统计信息推断和预测密码
- 常见编码
- Unicode \u+4位16进制数
- ASCII
- Base64 将任意二进制数据映射为ASCII
- Base32
- 摩斯电码
- 栅栏密码
- 将明文交替分入N组,然后将每组的字母从左到右连接起来
- CTFisfun => CFsu Tifn => CFsuTifn
- 古典密码学
- 古典密码体制的核心思想:
- 古典密码学的代表密码体制:
- 频度分析
- E的概率大约为0.12
- T, A, O, I, N, S, H, R的概率为0.06-0.09
- D, L的概率大约为0.04
- C, U, M, W, F, G, Y, P, B的概率为0.015-0.023
- V, K, J, X, Q, Z的概率小于0.01
- 常见的两字母组合
- TH, HE, IN, ER, AN, RE, DE, ON, ES, ST, EN, AT, TO, NT, HA, ND, OU, EA, NG, AS, OR, TI, IS, ET, IT, AR, TE, SE, HI, OF
- 常见的三字母组合
- THE, ING, AND, HER, ERE, ENT, THA, NTH, WAS, ETH, FOR, DTH
- 现代密码
- 数据的安全基于密钥,算法公开
- Hash函数(散列函数)
- 优点:
- 散列函数对于源数据的更改具有极高的敏感性——雪崩效应,即使是1bit的更改都会对最终的散列值造成很大的改变。
- 散列函数逆向计算的难度远大于正向计算的难度,具有较高的安全性。
- 缺点:
- Hash函数实质是一种压缩映射(多对一映射),散列值的空间(密文空间)远小于输入的空间(明文空间),不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。(单向算法)
- MD算法(MD5)
- AES算法
- 对称加密,加密和解密使用同一个密钥
- 对称加密的优点
- 加密计算量小、速度快,适合对大量数据进行加密的场景。
- 对称加密的两种常见的应用场景
- 流密码(stream cipher):
- 加密和解密双方使用相同伪随机加密数据流作为密钥,明文数据每次与密钥数据流顺次对应加密,得到密文数据流,主要应用在对链路的实时加密中
- 分组密码(block cipher):
- 将明文数字序列,划分成长度为n的组,每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列,主要应用在网络包交换加密过程中。
- 对称加密的两大不足
- 密钥传输问题:
- 加密者如何把密钥安全的传递给解密者,就成了对称加密面临的关键问题
- 实际中一般都是客户端向服务端请求对称加密的密钥,而且密钥还得用非对称加密加密后再传输。
- 密钥管理问题:
- 随着密钥数量的增多,密钥的管理问题会逐渐显现出来。
- 不可能所有用户都用同一个密钥加密解密,一旦密钥泄漏,就相当于泄露了所有用户的信息。
- 为每一个用户单独的生成一个密钥管理代价会非常大。
- RSA算法(非对称加密)
- 密文=明文^E mod N
- 明文=密文^D mod N
- 具体百度
- 安全性
- RSA的安全性就是源自没办法轻易的对大整数“因式分解”
- 实际应用中,RSA密钥一般是1024位(安全),重要场合则为2048位(极其安全)。