网络安全实践
密码学概述
- 通信中的参与者
- 发送者(Alice,爱丽丝):在双方交互中合法的信息发送实体。
- 接受者(Bob,鲍勃):在双方交互中合法的信息接受实体。
- 分析者(Eve,伊夫):破坏接受和发送双方正常安全通信的其他实体。
- 明文和密文
- 明文,又称消息(plaintext,message):尚未隐藏或未被加密的信息,用P或M表示。明文的集合称为明文信息空间,用SP表示。
- 密文(ciphertext):被加密(encryption)后的消息称为密文,用C表示。所有的密文构成密文信息空间,用SC表示。
- 密钥:
- 被用于明文到密文的转换。
- 由一些特殊的函数完成,控制这些函数的参数称为密钥(key),用K表示。
- 一般是由用户事先选定的较短的字符或数字序列。
- 密钥空间
- 所有的密钥集合构成,用SK表示。
- 一般情况下密钥长度越大,密文越安全,但是加密速度越慢。
- 密钥量
- 密钥空间中不相同密钥的个数称为密钥体制的密钥量。衡量密码体制安全性的一个重要指标。
- 常见攻击形式:
- 穷举攻击法
- 穷举攻击,亦称“暴力破解”。对密码进行逐个推算,直到找出真正的密码为止的一种攻击方式。
- 应用
- 弱口令,压缩包密码破解
- 频度分析
- 通过对各个字母、字母组合进行频度分析,利用统计信息推断和预测密码
- 穷举攻击法
- 常见编码
- 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的组,每组分别在密钥的控制下变换成等长的输出数字(简称密文数字)序列,主要应用在网络包交换加密过程中。
- 流密码(stream cipher):
- 对称加密的两大不足
- 密钥传输问题:
- 加密者如何把密钥安全的传递给解密者,就成了对称加密面临的关键问题
- 实际中一般都是客户端向服务端请求对称加密的密钥,而且密钥还得用非对称加密加密后再传输。
- 密钥管理问题:
- 随着密钥数量的增多,密钥的管理问题会逐渐显现出来。
- 不可能所有用户都用同一个密钥加密解密,一旦密钥泄漏,就相当于泄露了所有用户的信息。
- 为每一个用户单独的生成一个密钥管理代价会非常大。
- 密钥传输问题:
- RSA算法(非对称加密)
- 密文=明文^E mod N
- 明文=密文^D mod N
- 具体百度
- 安全性
- RSA的安全性就是源自没办法轻易的对大整数“因式分解”
- 实际应用中,RSA密钥一般是1024位(安全),重要场合则为2048位(极其安全)。