软考密码学(一)

本文介绍了密码学的基本概念和目标,包括保密性、完整性和可用性。重点讲解了我国的密码标准,如SM4、ZUC和SM3算法,并概述了古典密码、分组密码(如DES和AES)、序列密码、Hash函数(如SHA)以及公钥密码体制,如RSA、ElGamal和ECC。文章强调了各种密码模式的工作原理,以及在实际应用中需要注意的安全问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

概念

基本目标

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

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

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

针对密码学的攻击

  • 穷举攻击

  • 数学分析攻击

  • 基于物理的攻击

  • 仅知密文攻击

  • 已知明文攻击

  • 选择明文攻击 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(T

### 网络工程师的学习资料与备指南 #### 了解试特点 网络工程师每年举行两次试,相较于其他科目提供了更多的机会给生。这项认证仅受到广泛欢迎,而且对于希望从事信息技术领域工作的个人来说具有重要价值[^1]。 #### 初步学习阶段 建议花费大约三周的时间通读官方指定教材,以建立对各个知识点的基础理解。由于该职位涉及多个方面的技能——包括但限于网络配置、安全措施以及项目管理等——初次接触这些概念可能会遇到定挑战。特别是那些未曾深入研究过的主题,比如计算机硬件结构、密码学原理或是综合布线标准等,在初期可能显得较为复杂[^2]。 #### 实践练习环节 完成理论部分之后,应立即着手解决实际问题来检验所学到的知识。通过模拟测试可以更好地评估自己的掌握程度;即使刚开始成绩理想也无需气馁,持续努力会带来进步。例如,有经验者提到最初尝试做整套试题时仅能获得约30分的成绩,但这并妨碍最终成功通过核。 #### 获取权威资源支持 为了更高效地准备这场重要的职业资格测评,可以从以下几个方面入手搜集优质参资料: - **官方网站**:中国计算机技术职业资格网提供最新的政策解读、大纲说明及历年真题下载服务; - **在线课程平台**:诸如慕课网(MOOC)或网易云课堂上开设了少针对此项目的培训讲座视频可供选择; - **社区论坛交流群组**:加入像51CTO这样的专业技术讨论区域能够及时获取同行们的宝贵意见和心得分享[^3]。 ```python # Python代码示例用于展示如何利用pandas库分析往年试卷数据(假设存在) import pandas as pd def analyze_exam_data(file_path): df = pd.read_csv(file_path) print(df.describe()) analyze_exam_data('past_exams.csv') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值