软考密码学(一)

更多文章请访问个人博客/备用链接;

概念

基本目标

  • 保密性
  • 完整性
  • 可用性

关于密码学的保密性,常用的保密技术包括:

  • 防侦收
  • 防辐射
  • 数据加密
  • 物理保密

针对密码学的攻击

  • 穷举攻击

  • 数学分析攻击

  • 基于物理的攻击

  • 仅知密文攻击

  • 已知明文攻击

  • 选择明文攻击 CPA

  • 选择密文攻击 CCA

我国的密码

做到好多相关题目,经常分不清,因此专门整理一下

SM4

2006年公布的用于无线局域网的SM4密码算法

是一个分组密码,数据分组长度128bits,密钥长度128bits

加密和密钥拓展均有32轮

加密解密算法结构相同,只是轮密钥顺序不同

ZUC

ZUC即祖冲之算法

用于移动通信3GPP的加密和验证

是一个同步流密码

整体结构分为三层:

  • 上层为定义在素域 G F ( 2 31 − 1 ) GF(2^{31}-1) GF(2311)上的先行反馈移位寄存器
  • 中层为比特重组
  • 下层为非线性函数F

其本质上是一种非线性序列产生器

SM3

SM3是2010年国家发布的安全杂凑算法

每一组也是512bit

SM2

SM2是国家2010年发布的椭圆曲线公钥密码算法,商用密码体系中用来替代RSA

古典密码

  • 置换密码
  • 代替密码
  • 代数密码

以上三个类型的典型例子是:凯撒密码、维吉尼亚密码、Vernam密码

针对古典密码的破译,常用方法为:穷举分析、统计分析

Vernam密码就是简单的用密钥异或明文得到密文

当密钥长度与明文长度相等时,Vernam密码是理论上无法破译

(与之相对的概念为计算上无法破译)

分组密码

DES

Len(Key)=64 bits
Len(M)=64 bits
Len(C)=64 bits

def DES(M,Key):
	(L0,R0)=IP(M)
	//IP
	K=SubKeyGen(Key)
	// K=16*56 bits
	//子密钥生成
	
	for i=0 to 16:
		Li=Ri-1
		Ri=Li xor f(Ri-1,Ki)
	
	swap(L16,R16)
	//16轮后左右部分要交换
	C=RIP(L16,R16)
	//逆IP置换
	return C

def SubKeyGen(Key):
	K0=switch_choose1(Key)
	// K0 = 56 bits
	// (C0,D0) = K0
	//选择置换一
	//目的是用64位的Key生成56位的K0
	
	for i=0 to 16:
		Ci+1=MovLeft(Ci)
		Di+1=MoveLeft(Di)
		Ki+1=Switch_Choose2(Ci+1,Di+1)
		//选择置换二
		//两个28位组合成一个56位的子密钥K
	return K
	
def f(R,K):
	// R is 32 bits
	// K is 56 bits
	result=E(R)
	//选择运算,输入32位,输出48位
	result=xor(result,K)
	result = S(result)
	//S盒运算
	//48位分成6*8
	//每一个6位 拆成1+4+1
	//对于每个S盒 输入6位输出4位
	
	result = P(result)
	//置换运算,作用是扩散混淆
	return result
	

DES的安全问题:

  • 密钥太短 2 56 2^{56} 256对于现在的计算力不是太难,可以穷举
  • 存在弱密钥

DES中存在一些密钥K,使得子密钥k1=k2=....=k16

注意:对于抗穷举攻击,2DES的效果与DES是一样的,只能使用3DES

2DES在穷举时的复杂度是 2 56 × 2 2^{56} \times 2 256×2

设已知明文M和密文C

穷举 2 56 2^{56} 256个密钥,保存其对M加密的结果以及对C解密的结果

只需要遍历数据库找到两者的交集即可

AES

AES主要由轮函数构成,即S盒变换、行移位和列混淆、圈密钥加组成

Round(State,RoundKey){
	ByteSub(State);
	//S盒
	ShiftRow(State);
	MixColumn(State);
	AddRoundKey(State,RoundKey);
}

AES不是对合运算,因此解密与加密不是同样的结构

解密的算法应该是将轮函数的逆运算

分组密码工作模式

ECB 电码本模式

直接分组加密,最简单

PCB 明密文链接模式

C i = E ( M i ⊕ M i − 1 ⊕ C i − 1 , K ) C_i=E(M_i \oplus M_{i-1} \oplus C_{i-1},K) Ci=E(MiMi1Ci1,K)

CBC 密文链接模式

C i = E ( M i ⊕ C i − 1 , K ) C_i = E(M_i \oplus C_{i-1},K) Ci=E(MiCi1,K)

CFB 密文反馈模式

分组密码作为一个系列密码产生器使用

需要一个寄存器R的初始状态 I 0 I_0 I0,和一个密钥K

K加密R后输出低s位,与明文异或后反馈给右移的R

OFB 输出反馈模式

这个也是将分组密码作为一个系列密码产生器使用

需要一个寄存器R的初始状态 I 0 I_0 I0,和一个密钥K

用K将R加密,最右侧的s位作为序列密码密钥输出

这个结果也是R左移后空缺的内容

CTR 计数器模式

加密过程:
O i = E ( T i , K ) C i = M i ⊕ O i O_i=E(T_i,K)\\ C_i=M_i \oplus O_i Oi=E(Ti,K)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值