信息安全三要素CIA( 二 )


公开密钥/私有密钥
与对称密匙不同,公开密匙/私有密匙使用相互关联的一对算法对数据进行加密和解密,从加密的密钥无法推导出解密的密钥 。
常见密钥算法:RSA
用公钥KP对明文加密可表示为:EKP(M)=C
用相应的私钥KS对密文解密可表示为:DKS?=M
按照明文和密文处理方式分类 分组密码体系 序列密码体系
按照加密算法是否变化分类
固定算法密码体系
变化算法密码体系
第三章 对称密钥加密 分类 流密码加密:
也称序列密码,它是每次加密(或者解密)一位或者一个字节
加密/解密运算只是简单的模二加运算
密码的强度主要靠密钥流的随机性
伪随机数,在计算伪随机数时,假如使用的开始值不变的话,那么伪随机数的数序也不变
分组密码加密:
也称为块密码,它是将信息分成一块(组),每次操作(如加密和解密)是针对一组而言
流密码
流密码又称为序列密码( )
原理:明文流与密钥流按顺序逐比特进行异或运算,从而产生密文流 。
A5/1算法
GSM蜂窝电话网络
硬件实现
密钥流的生成
64位密钥填充到其中
新的一位密钥流=x18 ⊕ y21 ⊕ z22
m=多数(x8, y10 ,z10 ),x移位寄存器进行移位
m=x8 , temp=x18⊕x17⊕x16⊕x13
for(int i=18; i>0; i--){x(i)=x(i-1);}x[0]=temp;
同理,y和z
。。。直至密钥流长度和明文长度相同
RC4算法
支持可变的密钥长度
软件实现
初始化
/*伪代码Fori=0to255S[i]=iK[i]=key[i mod N]Nextij=0Fori=0to255j=(j+s[i]+k[i])mod 256Swap(s[i],s[j])Nextii=j=0*/
密钥字节流
/*伪代码i=(i+1)mod 256j=(j+s[i])mod 256Swap (s[i],s[j])t= (s[i]+s[j])mod 256Keystreambyte=s[t]*/
分组密码加密 函数
令 F 为轮函数;
令K1,K2,……,Kn 分别为第1,2,……,n 轮的子密钥 。
加密过程:
将明文信息均分位两块 P=(L0 ,R0)
每一轮,进行如下运算
Li = Ri-1 ,Ri =Li-1 ⊕ F(Ri-1 , Ki)
第i轮得到的结果即为(Li, Ri )
解密过程:
Ri-1 =Li ,Li-1 =Ri ⊕F(Li ,Ki)
影响结构的因素有: 块的大小:64/128密钥的大小:65/128循环次数(轮次数):16子密钥的生成算法:复杂轮函数的复杂度:复杂 DES
大佬写得不错——>
56位密钥加密64位明文,最后输出64位密文
包括两大部分:加密,子密钥的产生
F产生的32位输出和L 进行异或得到新一轮的R
如此反复进行16轮即可
还有点小瑕疵,每一轮的K不一样呢
子密钥的产生
子密钥是由它的初始密钥产生的,从前,密钥接收时还是64位,除去(8*8)最后一列8位用来奇偶校验,还剩56位,按照下表顺序重新排列
PC-1表为:
57,49,41,33,25,17,09
01,58,50,42,34,26,18
10,02,59,51,43,35,27
19,11,03,60,52,44,36
63,55,47,39,31,23,15
07,62,54,46,38,30,22
14,06,61,53,45,37,29
21,13,05,28,20,12,04
提取其中的6列48位作为子密钥K0
继续寻找K1前四行位C0,后四行位D0
每轮移动移动位数表如下:
轮数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
位数 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1
根据上表,得到
49,41,33,25,17,09,01
58,50,42,34,26,18,10
02,59,51,43,35,27,19
11,03,60,52,44,36,57
55,47,39,31,23,15,07
62,54,46,38,30,22,14
06,61,53,45,37,29,21
13,05,28,20,12,04,63
选择6列作为K1
16轮迭代完成,在进行逆初始置换,一切ok