信息安全特性
- 完整性
- 保密性
- 可用性
- 不可否认性
- 可控性
密码学三大阶段
1949 年以前:密码学还不是科学,而是艺术 1949-1975:密码学成为科学 1976 年以后:密码学新方向-公钥密码学
古典密码学
1949 年以前:密码学还不是科学,而是艺术
主要特点: 数据的安全基于算法的保密
典型代表:
- 单表替换密码(凯撒密码)
特点: 原文替换成密文,原文和密文使用同一张表
破解: 较易被频率分析法破解
频率分析法:
在任何一种书面语言中,不同的字母或字母组合出现的频率各不相同。
通过分析字母或字母组合在文本中出现的频率,分析出密文和原文的对应关系。
- 多表替换密码
特点: 原文替换成密文,有多张表将原文和密文进行对比替换
破解: 较易被已知明文破解
近代密码学
1949-1975:密码学成为科学
主要特点: 数据的安全基于密钥的保密而不是算法的保密
典型代表: Enigma 机
Enigma 机是一种多表替换的加密实践
现代密码学
1976 年以后:密码学新方向-公钥密码学
主要特点: 公钥密码使得发送端和接收端无密钥传输的保密通信成为可能
典型代表: AES 加密 RAS 加密
进制与计量
进制
- 2 进制
- 10 进制
- 16 进制
计量
- bit (位)最小的数据单位
- Byte (字节)存储空间的最小单位
- 1 Byte = 8 bit
- 1 KB = 1024 Byte
加解密基础操作
替换
按照规则替换明文信息
移位
调整字符排列顺序
编码
- ASCII 编码
- Base64 编码
- Base58 编码
Base64 编码
小写字母 a-z、大写字母 A-Z、数字 0-9、符号"+"、"/"一共 64 个字符的字符集 (以及"=",用于填充空字符) 任何符号都可以转换成这个字符集中的字符
编码流程:
- 每字节占 8bit;以每 3 字节为一组,总计 24bit;将其转为 4 组 6bit
- 转为 4 组 6bit 后,每组高位补 0,转为 4 组 8bit
- 每组高位补 0 后,仍不够 8bit 的组,在低位补 0,转为 4 组 8bit
- 转为 4 组 8bit 后,每组可编码成 Base64 中的字符
- 注:若不够 3 字节,在转为 4 组 6bit 过程中,例如只够 2 组 6bit,则只对这 2 组 6bit 补 0 成 8bit,余下 2 组 6bit 为空白,使用"="填充
Base58 编码
在 Base64 编码的字符集上,剔除掉容易混淆的字符,形成 Base58 的字符集 去除字符 0(零)、O(大写字母 O)、I(大写字母 i)、l(小写字母 L)以及"+"和"/"符号 任何符号都可以转换成这个字符集中的字符
编码流程:
- 将字符串的每个字节换算成 ASCII(0-255)
- 将 256 进制的数字转换成 10 进制数字
- 将 10 进制数字转换成 58 进制数字
- 将 58 进制数字的每个数字编码成 Base58 中的字符
对称加密算法
特点: 使用同一个密钥进行加密和解密
优点: 加解密速度快,密文是紧凑的,安全
缺点: 密钥分发,密钥存储和密钥管理。 缺乏对数字签名/不可否认的支持。
典型代表: DES/3DES AES RC 算法(RC2/RC4/RC5)
DES 算法
DES 是一种分组加密算法 DES 密钥是固定的 56bit,不安全 DES 以块模式对 64bit 的密文进行加密操作
DES 的密钥长度是 64 比特,也就是 8 个字节。但是 DES 每隔 7 比特会设置一个错误校验位,所以真正的密钥长度是 56 比特。
因为 DES 的密钥长度是 64 比特,他每次只能将长度为 64 比特的原文进行加密,如果原文长于 64 比特的话,需要多次分组进行加密,这 64 比特的单位也叫做分组。
加密流程:
- 输入 64bit 明文数据
- 初始替换
- 在密钥控制下 16 轮迭代
- 交换左右 32bit
- 初始逆替换
- 输出 64bit 密文数据
加密模式:
- ECB 模式
电子密码本模式
特点: 明文分组后,每组信息都被相同密钥加密 优点: 加密速度快,可以并行加密 缺点: 每组相同明文得到相同密文,容易被统计学破解部分或者全部密文
- CBC 模式
加密块链模式
特点: 通过初始随机向量,将明文分组后的信息,依次加密; 每组加密后的结果,作为下一组加密的初始随机向量; 优点: 因使用随机向量加密,每组得到的密文是不同的 缺点: 加密速度较慢,不可并行加密
3DES 算法
将 DES 算法密钥长度放大 3 倍,达到 168 位 暴力破解几乎不可实现 底层基于 DES 算法 安全,但增加延时,语音视频不适用
AES 算法
使用 128bit/192bit/256bit 的密钥块(能以 32bit 扩展) 3DES 的替代加密技术,软硬件运行效率高,可用于无线/语音视频加密
RC 算法
- RC2 算法
密钥长度可变 RC2 运算速度比 DES 快 RC2 是否比 DES 安全取决于所使用的密钥长度
- RC4 算法
密钥长度可变 流模式加密算法,面向 bit 操作 算法基于随机置换 RC4 应用范围广(https/WEP/WPA)
- RC5 算法
分组长度、密钥长度、迭代次数都可以变化 面向字结构,便于软件和硬件快速实现 数据相倚旋转技术
非对称加密算法
特点: 有一对密钥,分为公钥和私钥; 私钥需要安全保存,公钥可以公开; 私钥可以推导出公钥,公钥不可推导私钥; 一个密钥用于加密,需要用另一个密钥解密; 加密速度慢,密文非紧凑;
典型应用: 加解密数据:公钥加密数据,私钥解密数据; 数字签名:发送方使用私钥签署报文进行签名,接收方使用公钥验证签名; 密钥交换:双方协商会话密钥;
典型代表: Diffie-Hellman RSA ECC DSA
| 算法 | 加密解密 | 数字签名 | 密钥交换 |
|---|---|---|---|
| RSA | 支持 | 支持 | 支持 |
| DH 算法 | 不支持 | 不支持 | 支持 |
| DSA | 不支持 | 支持 | 不支持 |
Diffie-Hellman 密钥交换算法
解决对称加密系统中密钥的发布问题 不需要使用较高代价即可对私钥达成共识 安全性来源于很难计算出很大的离散对数 在现代密钥管理中提供其他算法的密钥管理
加密流程:
Alice 和 Bob 双方约定 2 个大整数 n 和 g,其中 1<g<n,这两个整数无需保密
Alice 随机选择一个大整数 x(保密),并计算 X=g^x mod n
Bob 随机选择一个大整数 y(保密),并计算 Y=g^y mod n
Alice 把 X 发送给 Bob,Bob 把 Y 发送给 Alice
Alice 计算 K=Y^x mod n
Bob 计算 K=X^y mod n
K 即是共享的密钥
监听者在网络上只能监听到 X 和 Y,但无法通过 X,Y 计算出 x 和 y,因此,无法计算出 K= g^xy mod n
RSA 算法
安全性基于大素数因子分解的困难性 RSA 比用软件实现的 DES 慢 100 倍 RSA 比用硬件实现的 DES 慢 1000 倍 RSA 主要功能:加密、数字签名和密钥交换(加密散列、密钥)
ECC 椭圆曲线加密算法
原理:给定椭圆曲线上的两点 A 和 B,如 A=kB,要找到整数 K 非常困难 密钥更小:ECC 密钥 160 位与 RSA 密钥 1024 位具有相同安全性 广泛应用于数字货币(比特币)
摘要算法
摘要算法又称哈希算法、散列算法
可以对任意一组输入数据进行计算,得到一个固定长度的输出摘要
主要特性: 不可逆性:无法通过已知的 Hash 值推导出明文 无碰撞性:很难找到两段内容不同的明文,使得它们的 Hash 值一致 雪崩效应:原始输入信息轻微修改,产生的 Hash 值有很大不同
主要分类: MD(Message Digest):消息摘要算法 SHA(Secure Hash Algorithm):安全散列算法
典型代表: MD5 SHA1 SHA256 SHA512
破解方式: 彩虹表攻击 彩虹表的核心原理就是组合了暴力法和查表法,比对彩虹表产生的 Hash 和原文的 Hash 是否一致,通过一致的 Hash 值找到原文;
解决方式: 哈希算法+盐 使得彩虹表攻击失效
应用场景: 密码保存 完整性校验 数字签名
MD5
-
填充数据 对输入信息进行填充,使其位长对 512 求余的结果为 448 此时数据长度为 N 个 512bit + 448bit
-
补充长度信息 用 64 位数据来记录填充前信息长度,把长度信息数据补充在最后 此时数据长度为 M 个 512bit
-
初始化标准幻数 四个标准幻数均为 8 个 16 进制数据组合,每个 16 进制数据为 4bit,每个标准幻数占 32bit A: 01 23 45 67 (16 进制) B: 89 ab cd ef (16 进制) C: fe dc ba 98 (16 进制) D: 76 54 32 10 (16 进制)
-
分组运算 数据以每 512bit 为一组;每组再分为 16 个子分组,每个子分组 32bit; 每个子分组结合标准幻数做 4 次运算,16 个子分组总计 64 次运算,直到本组 512bit 数据全部运算完; 运算后会得到一个新的标准幻数;
-
结果累加 上一个 512bit 分组的标准幻数入参,和运算之后的结果,进行相加; 作为下一个 512bit 分组的标准幻数参数; 然后继续运算,直到所有 512bit 分组全部完成计算; 最后运算得到的 4 个标准幻数结果,即 MD5 值
-
MD5 值长度 每个标准幻数为 8 个 16 进制数据组成,每个 16 进制数据为 4bit,每个标准幻数占 32bit; 四个标准幻数总计 128bit; 当展示为 16 进制时,可以展示为 32 个 16 进制数,因此有 32 个字符; 展示为 16 个字符的 MD5 值,是截取了 32 个字符居中的 16 个字符;
HMAC
HMAC = Hash 算法 + Key(Message Authentication Code 消息验证码)
HMAC 过程:
- 客户端发送认证请求
- 服务端将 Key 发送给客户端
- 客户端将认证信息+Key 做 Hash 算法,把 HMAC 结果发回给服务端;
- 服务端把客户端存到服务器的认证信息+Key 做 Hash 算法,然后与客户端的 HMAC 结果对比;
- 两者一致,则客户端认证成功
PBKDF2
PBKDF2(Password-Based Key Derivation Function)是一个用来导出密钥的函数,常用于生成加密的密码
PBKDF2 过程:
- 定义一个哈希算法,例如 HMAC-SHA256
- 传入明文密码
- 传入盐值
- 传入循环计算次数
- 传入期望的密钥长度
- 通过传入的哈希算法,将明文密码+盐值,循环重复运算,计算出密钥
如果哈希算法输出的结果比期望得到的密钥长度要短,则要通过拼接多个结果以满足密钥的长度
数字签名
数字签名作用: 认证签署人身份 确定消息的不可抵赖性 保障消息的完整性
数字签名过程:
- 发送方对明文加密,使用接收方公钥加密,得到原文密文;
- 发送方对明文进行摘要算法(哈希算法),得到数字摘要;
- 发送方对数字摘要加密,使用发送方私钥加密,作为发送方的签名;
- 发送方将原文密文和发送方签名发送给接收方;
- 接收方将原文密文解密,使用接收方私钥解密,得到原文明文;
- 接收方将明文进行摘要算法(哈希算法),得到明文的数字摘要;
- 接收方将发送方签名解密,使用发送方公钥解密,得到签名的数字摘要;
- 接收方将明文数字摘要和签名数字摘要对比,相同则数据没有篡改;
数字证书与 CA
虽然数字签名能保证信息的完整性,不被篡改; 但如果公钥不是真实的发送方的公钥;而是被仿冒者替换成了自己的公钥; 则通信数据被仿冒者拦截,使用了仿冒者的公钥和私钥加解密;即中间人攻击;
为了避免中间人攻击,需要确认公钥是真实的发送方的公钥,而不是被其他人仿冒; 因此需要数字证书对发送方的公钥和身份做认证;
数字证书颁发过程:
- 用户产生了自己的密钥对,并将公共密钥及部分个人身份信息传送给一家认证中心(CA)。
- 认证中心在核实身份后,将执行一些必要的步骤,以确信请求确实由用户发送而来。
- 认证中心将发给用户一个数字证书,该证书内附了用户和他的密钥等信息,同时还附有对认证中心公共密钥加以确认的数字证书。
- 当用户想证明其公开密钥的合法性时,就可以提供这一数字证书。
数字证书内容(X.509 标准):
- 证书的版本信息
- 证书的序列号,每个证书都有一个唯一的证书序列号
- 证书所使用的签名算法
- 证书的发行机构名称,命名规则一般采用 X.500 格式
- 证书的有效期,通用的证书一般采用 UTC 时间格式
- 证书所有人的名称,命名规则一般采用 X.500 格式
- 证书所有人的公开密钥
- 证书发行者对证书的签名
对称加密与非对称加密结合
加解密流程:
- 发送方对明文进行摘要算法,生成数字摘要;
- 发送方对数字摘要进行加密,使用发送方私钥加密,生成发送方签名;
- 发送方打包信息(明文+发送方签名+发送方公钥),将打包信息加密,使用对称密钥加密,生成打包信息密文;
- 发送方将对称密钥加密,使用接收方公钥加密,得到对称密钥密文;
- 发送方将数字信封(打包信息密文+对称密钥密文)发送给接收方;
- 接收方把对称密钥密文解密,使用接收方私钥解密,得到对称秘钥;
- 接收方把打包信息密文解密,使用对称密钥解密,得到打包信息(明文+发送方签名+发送方公钥);
- 接收方把明文进行摘要算法,生成数字摘要 1;
- 接收方把发送方签名解密,使用发送方公钥解密,得到数字摘要 2;
- 接收方判断数字摘要 1 是否与数字摘要 2 相同,相同则数据没有篡改,且数据是发送方发送;
参考资料: www.bilibili.com/video/BV1tz… www.bilibili.com/video/BV1vq… zhuanlan.zhihu.com/p/339477329 www.jianshu.com/p/d8af38e09… www.cnblogs.com/xiaxveliang… blog.csdn.net/xy010902100… www.cnblogs.com/wfy680/p/14… blog.csdn.net/weixin_3408…