1
参考
《网络安全基础》
对称加密
一个对称加密方案由5部分组成
- 明文:原始数据
- 加密算法:对明文进行各种替换和转换
- 秘密密钥:是算法的输入,算法进行的具体替换和转换取决于这个密钥
- 密文:打乱的数据,取决于明文和密钥
- 解密算法:加密算法的反向执行,由密文的同一密钥产生明文
对称加密的安全使用有两个要求
- 一个强加密算法
- 只有发送发和接收方知道私钥
密码体制
密码体制一般从以下3个方面进行分类
- 明文转换成密文的操作类型
- 使用的密钥数
- 明文的处理方式
- 分组密码 一次处理一个分组
- 流密码 连续处理输入元素
Feistel 密码结构
所有对称分组加密算法都使用的一个结构
- 经过多轮处理
- 在左半部分采用替换
- 基于子密钥,对右半部边数据应用轮函数
- 接着两部分数据进行对换
对称分组加密
最常见的对称加密算法是分组加密,处理固定大小的明文分组,对每个明文
分组产生同样大小的密文分组
- 数据加密标准DES
- 三重数据加密标准3DES
- 高级加密标准AES
DES
参考 https://www.cnblogs.com/songwenlong/p/5944139.html
https://blog.csdn.net/z784561257/article/details/78174106
步骤包括IP置换、密钥置换、E扩展置换、S盒代替、P盒置换和末置换
简介
典型的DES以64位为分组对数据加密,加密和解密用的是同一个算法。密钥
长64位,密钥事实上是56位参与DES运算(第 8、16、24、32、40、48、56、
64位是校验位,使得每个密钥都有奇数个1),分组后的明文组和56位的
密钥按位替代或交换的方法形成密文组
IP置换
IP置换目的是将输入的64位数据块按位重新组合,并把输出分为L0、R0两部
分,每部分各长32位,置换规则如下表所示
表中的数字代表新数据中此位置的数据在原数据中的位置,即原数据块的第
58位放到新数据的第1位,第50位放到第2位,依此类推,第7位放到第64位
。置换后的数据分为L0和R0两部分,L0为新数据的左32位,R0 为新数据的
右32位。位数是从左边开始数的,即最0x0000 0080 0000 0002最左边的
位为1,最右边的位为64
密钥置换
不考虑每个字节的第8位,DES的密钥由64位减至56位,每个字节的第8位作
为奇偶校验位。产生的56位密钥由下表生成,(注意表中没有8,16,24,32,
40,48,56和64这8位):
在DES的每一轮中,从56位密钥产生出不同的48位子密钥,确定这些子密钥
的方式如下:
- 将56位的密钥分成两部分,每部分28位
- 根据轮数,这两部分分别循环左移1位或2位。一共移动16轮,在1,2,9,
16轮移动1位,其余轮移动2位。移动后,从56位中选出48位。这个过程中,
既置换了每位的顺序,又选择了子密钥,因此称为压缩置换。压缩置换规则
如下表(注意表中没有9,18,22,25,35,38,43和54这8位):1
2
3
414 17 11 24 1 5 3 28 15 6 21 10
23 19 12 4 26 8 16 7 27 20 13 2
41 52 31 37 47 55 30 40 51 45 33 48
44 49 39 56 34 53 46 42 50 36 29 32
E扩展置换
扩展置换目标是IP置换后获得的右半部分R0,将32位输入扩展为48位(分
为4位×8组)输出。扩展置换目的有两个:生成与密钥相同长度的数据以进
行异或运算。提供更长的结果,在后续的替代运算中可以进行压缩
表中的数字代表位,两列黄色数据是扩展的数据,可以看出,扩展的数据
是从相邻两组分别取靠近的一位,4位变为6位。靠近32位的位为1,靠近1
位的位为32。表中第二行的4取自上组中的末位,9取自下组中的首位,举
个例子,输入数据0x1081 1001,转换为二进制就是0001 0000 1000
0001B,按照上表扩展得下表
表中的黄色数据是从临近的上下组取得的,二进制为1000 1010 0001
0100 0000 0010 1000 1010 0000 0000 0000 0010B,转换为十六
进制0x8A14 028A 0002。扩展置换之后,右半部分数据R0变为48位,
与密钥置换得到的轮密钥进行异或
S盒代替
压缩后的密钥与扩展分组异或以后得到48位的数据,将这个数据送入S盒
,进行替代运算。替代由8个不同的S盒完成,每个S盒有6位输入4位输出
。48位输入分为8个6位的分组,一个分组对应一个S盒,对应的S盒对各
组进行代替操作
一个S盒就是一个4行16列的表,盒中的每一项都是一个4位的数。S盒的6
个输入确定了其对应的输出在哪一行哪一列,输入的高低两位做为行数H
,中间四位做为列数L,在S-BOX中查找第H行L列对应的数据(<32)。
例如,假设S盒8的输入为110011,第1位和第6位组合为11,对应于S盒8
的第3行,第2位到第5位为1001,对应于S盒8的第9列。S盒8的第3行第9
列的数字为12,因此用1100来代替110011。注意,S盒的行列计数都是
从0开始。代替过程产生8个4位的分组,组合在一起形成32位数据。S盒
代替时DES算法的关键步骤,所有的其他的运算都是线性的,易于分析
,而S盒是非线性的,相比于其他步骤,提供了更好安全性
P盒置换
盒代替运算的32位输出按照P盒进行置换。该置换把输入的每位映射到输
出位,任何一位不能被映射两次,也不能被略去,映射规则如下表
表中的数字代表原数据中此位置的数据在新数据中的位置,即原数据块
的第16位放到新数据的第1位,第7位放到第2位,依此类推,第25位放
到第32位。最后P盒置换的结果与最初的64位分组左半部分L0异或,然
后左、右半部分交换,接着开始另一轮
IP^-1末置换
末置换是初始置换的逆过程,DES最后一轮后,左、右两半部分并未进行
交换,而是两部分合并形成一个分组做为末置换的输入
3DES
使用3个密钥并执行3次DES算法,其组合过程依照加密-解密-加密的顺序
1 | C = EK3(DK2(EK1(P))) |
在一些互联网应用中已有采用如
- PGP(完美隐私,加密套件)
- S/MIME(多用途网际邮件扩充协议)
第二步使用解密没有密码方面的意义,唯一好处是让3DES的使用者能够
加密原来DES使用者加密的数据,3DES的有效密钥长度是168比特,允许
K1=K3,这样密钥长度就变为了112比特,穷举攻击没有可能
AES
分组大小为128比特,有128/192/256比特密钥,是一个迭代算法,但不
是feistel 密码
- 以4列(每列4字节)为分组进行处理
- 在一轮处理整个数据分组
加密过程
具有4列,每列4个字节的消息分组,密钥被扩展成为字节方阵,状态数组
经历9/11/13 轮:
- 字节替换 (在每个字节使用一个S-box)
- 行移位 (对行做简单的移位)
- 列混合 (对列的每个字节做替换)
- 轮密钥加(将当前分组与一部分扩展密钥简单地按位异或)
- 可以看作是交替异或密钥和扰乱消息字节
随机数
在密码学中,有很多算法需要使用随机数
- 防止重放的身份认证协议中使用的临时标签
- 会话密钥
- 公钥产生
- 一次一密的密钥流
流密码和RC4
连续处理输入元素,一次产生一个输出元素
流密码结构
一次加密一个字节的明文,密钥输入到一个伪随机字节生成器,产生一个
表面随机的8比特数据流,也称为密钥流,使用异味或操作与明文流结合
RC4算法
从一个数组开始:从0到255,使用密钥去彻底打乱排序,S形成了密码的
中间状态
分组密码工作模式
- ECB 电子密码本模式
- CBC 密码分组链接模式
- CFB 密码反馈模式
- CTR 计数器模式
公钥密码和消息认证
消息认证主要考虑:
- 保证消息的完整性
- 验证消息来源身份
- 消息来源不可否认性(调节纠纷)
三种类型的函数可以使用:
散列函数
消息加密
消息认证码 (MAC)
认证算法不需要可逆,MAC就是消息认证码
单向散列函数
将任意消息压缩成固定大小,用于检查消息的改变,保证数据完整性,不
需要密钥输入,消息和消息摘要一起传送
1 | h = H(M) |
安全散列函数(SHA)
以1024比特为分组处理消息,由80轮组成
- 更新一个512-比特缓冲
- 采用一个64-比特值 Wt (由现有的消息分组生成)
- 每一轮还使用附加常数,表示前80轮中的某一轮
消息验证码(HMAC)
1 | HMACK(M)= Hash[(K+ XOR opad) || Hash[(K+ XOR ipad) || M)] ] |
分组密码
基于密文的消息认证码
公钥密码原理
最常见公钥算法有RSA和Diffie-Hellman。公钥密码方案由六部分组成
- 明文:算法的输入,是可读的消息
- 加密算法: 对明文进行各种变换
- 公钥和私钥:算法的输入,一个用于加密一个用于解密
- 密文:算法的输出
- 解密算法:接收密文和匹配的秘钥
消息认证
是一种通过允许通信者验证所收消息是否可信的措施
消息认证码
一种认证技术利用私钥产生一小块数据,称之为消息认证码,将其附到消息上
RSA算法公钥密码算法
RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名。
RSA的安全基于大数分解的难度。其公钥和私钥是一对大素数(100到200位十
进制数或更大)的函数。从一个公钥和密文恢复出明文的难度,等价于分解两
个大素数之积(这是公认的数学难题)
- 素数 素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表
示为任何其它两个整数的乘积 - 互质数 公约数只有1的两个数,叫做互质数
- 模指数运算 模指数运算就是先做指数运算,取其结果再做模运算。如(5^3)
mod 7 = (125 mod 7) = 6
算法过程
- 选择一对不同的、足够大的素数p,q
- 计算n=p*q
- 计算f(n)=(p-1)*(q-1),同时对p, q严加保密,不让任何人知道
- 找一个与f(n)互质的数e作为公钥指数,且1<\e<\f(n)
- 计算私钥指数d,使得d满足(d*e) mod f(n) = 1
- 公钥KU=(e,n),私钥KR=(d,n)
- 加密时,先将明文变换成0至n-1的一个整数M。若明文较长,可先分割成适
当的组,然后再进行交换。设密文为C,则加密过程为:C=M^e mod n - 解密过程为:M=C^d mod n
安全
认证和授权的区别
- 认证 是验证您的身份的凭据(例如用户名/用户 ID 和密码),通过这个凭
据,系统得以知道你就是你,也就是说系统存在你这个用户。所以认证被称为身
份/用户验证 - 授权 发生在认证之后。授权它主要掌管我们访问系统的权限。比如有些特定资
源只能具有特定权限的人才能访问比如admin,有些对系统资源操作比如删除、添
加、更新只能特定人才具有
RBAC 模型
系统权限控制最常采用的访问控制模型就是RBAC 模型 。RBAC即基于角色的权限
访问控制。这是一种通过角色关联权限,角色同时又关联用户的授权的方式。
简单地说:一个用户可以拥有若干角色,每一个角色又可以被分配若干权限,这样
就构造成“用户-角色-权限” 的授权模型。在这种模型中,用户与角色、角色与权限
之间构成了多对多的关系。
在RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的
权限。这就极大地简化了权限的管理。