一、计算机与网络安全概念
1.1计算机安全核心目标
CIA即保密性(Confidentiality),完整性(Integrity),可用性(Availability)
在CIA的基础上还有:真实性,可追溯性
1.2密码学
1.2.1密码学五要素:①明文M②密文C③密钥K④加密算法E⑤解密算法D
1.2.2密码学分类
①密码分析学:没有密钥的情况下,攻击密文的过程
②密码编码学:保护信息在信道中的安全
密码分析学必须遵循 柯克霍夫准则:算法必须公开,对密钥进行保护
1.2.3密码分析学攻击方式
攻击类型 | 根据攻击者所拥有的资源 |
唯密文攻击 | 只截获了部分密文 |
已知明文攻击 | 截获了部分密文和其对应的明文 |
选择明文攻击 | 选择的明文能知道其对应的密文 |
选择密文攻击 | 选择的密文能知道其对应的明文 |
唯密文攻击是攻击力最强也是实现最难的
1.3安全攻击
安全攻击分为主动攻击和被动攻击
1.3.1主动攻击:是对数据进行修改或伪造,难以进行绝对预防
对于主动攻击,重点在于检测并恢复
有四种:①重放②伪装(破坏真实性)③消息修改(破坏完整性)④拒绝服务(破坏可用性)
1.3.2被动攻击:是对传输进行窃听和检测,目标是获得传输的信息,很难察觉
对于被动攻击,重点在于预防而非检测
有两种:①信息内容泄露 ②流量分析
1.4基本技术模块
所有的加密技术都要用到两个基本模块:代替和置换
代替:将明文字符替换成其他字符
置换:对明文字符的位置进行改变
1.5密码体制
密码体制可分为:①传统密码体制②现代密码体制
传统密码体制又可分为置换密码和代换密码。
现代密码体制主要包含对称密钥体制、非对称密钥体制和哈希函数
根据密钥来分类:①对称密钥体制(私钥密码体制)②非对称密钥体制(公钥密码体制)
二、代替密码
2.1单表代替密码
2.1.1移位密码
移位密码的原理和凯撒密码一样,凯撒密码就是一个特殊的移位密码
加密变换:C=(M+k)mod 26
解密变换:M=(C-k)mod 26
2.1.2基于密钥的单表代替密码
单表代替密码的表不再局限于字母表,而是可以由加密者自定的
2.1.3仿射密码
对于移位密码的改进,
加密变换:C=(aM + k)mod 26
解密变换:M=[a^(-1)(C - k)] mod 26
a^(-1)是a的乘法逆元
2.2多表代替密码
2.2.1playfair密码
A.编制密码表:①密钥去掉空格和重复字母②处理后的密钥与字母表对比,去掉字母表中重复的字母③按字母顺序从左到右从上到下填入5x5密码表中,其中字母I和J共一格
例如:密钥k:hello world,密钥处理后得:helowrd,可得密码表:
h | e | l | o | w |
r | d | a | b | c |
f | g | i/j | k | m |
n | p | q | s | t |
u | v | x | y | z |
B.整理明文,密文:明文或密文两个字母P1和P2组成一对(P1,P2)
若最后缺一个,可以加入一个约定好的字母
若P1=P2,则在P1和字母X组成对(P1,X),P2和后面的字母继续组合
C.加密规则:对照密码表,若
①P1和P2在同一行,密文对则选择P1和P2右边的字母来组成
②P1和P2在同一列,密文对则选择P1和P2下面的字母来组成
③不在同一行同一列,密文对则选择它们组成的矩形的其他两个对角字母组成,排列顺序按照P1和P2的顺序排,即先选P1这一行再选P2这一行
例如:明文ma对照密码表得到密文fi
D.解密规则:对照密码表,若
①P1和P2在同一行,明文对则选择P1和P2左边的字母来组成
②P1和P2在同一列,明文对则选择P1和P2上面的字母来组成
③不在同一行同一列,明文对则选择它们组成的矩形的其他两个对角字母组成,排列顺序按照P1和P2的顺序排
2.2.2Vigenere维吉尼亚密码
加密规则:密钥中的字母为行,明文中的字母为列,当密钥长度<明文长度时,密钥位循环即可,例:
2.2.3 Hill密码
希尔密码将m个连续的明文字母替换成m个密文字母
定义一个加密密钥K的m*m矩阵,然后明文前m个字母组成明文向量M
例:
三、置换密码
3.1栅栏技术
最简单的置换密码就是栅栏技术,就是把信息按对角线顺序写出明文
例如:明文:h e l l o
w o r l d 得到密文:hweolrllod
3.2列置换
加密规则:给出一组密钥(1,4,3)和(5,6),它代表的意思是
明文的第1列换到第4列,第4列换到第3列,第三列换到第1列;第5列和第6列置换位置
解密规则:进行逆置换即可,即第4列换到第1列,第1列换到第3列,第4列换到第4列
3.3周期置换
加密规则:将明文分为多个相同长度的分组,每个分组都根据一个密钥规则进行置换,
例如:若密钥k=(1,4,3,5,2)即第一个元素是分组的第一个字符,第二个元素是第四个字符,第三个元素是第三个字符,第四个元素是第五个字符,第五个元素是第二个字符
明文hello wrold,得到密文:hlloe wlodr
解密规则:进行逆置换即可
四、对称密码(私钥密码体制)
4.1对称密码体制
4.1.1分类
对称密码又分为分组密码和流密码两大类
分组密码:将明文分组作为整体加密,且通常得到与明文登场的密文,例如DES,AES
流密码:每次加密数据流的一位或者一字节
4.1.2分组密码设计思想
扩散:将明文的统计特性散步到密文中去,例如DES中的P置换
混淆:使密文和密钥之间的统计关系更加复杂,例如DES中的S盒代换
4.1.3 Feistel密码结构
现在使用的大多数对称分组加密算法都是基于Feistel分组密码结构的
Feistel密码结构由IBM的Horst Feistel首次提出,通过将明文分组分成左右两半部分
右半部分RE在F函数的作用下得到的结果与LE进行异或,其得到的结果作为新一轮的RE,而旧一轮的RE作为新一轮的LE,
如此经过n轮迭代处理后再重新合并组成密文分组
Feistel密码的加解密流程图如下:
其中的F函数不要求可逆,因为加密和解密用到的是同一个F函数
Feistel密码结构的参数和特征:
①分组长度:分组长度越长安全性越高,拥有更好的扩散性,但是会降低加解密的速度
②密钥长度:密钥越长同样安全性越高,拥有更好的抗穷举和混淆性,但是会降低加解密的速度
③迭代轮数:多轮加密可以取得很高的安全性,迭代轮数经常是16轮
④子密钥产生算法:子密钥产生越复杂,密码分析越困难
⑤轮函数F:轮函数越复杂,抗攻击能力越强
4.2 数据加密标准DES在·
DES属于对称密码算法中的分组密钥,运用了feistel密码结构
DES的每个分组长度为64位;密钥长度为64位,实际上只有56位,其余8位用来作为校验位
当n个64位明文数据块经过DES加密后,n组加密块串在一起就是密文
加密流程如下图:
4.2.1 密钥生成
56位密钥根据交换规则,生成16个48位的子密钥
4.2.2初始置换IP
初始置换就是按一定的规则,将64位二进制位进行重新排序,
如下图:表示将原始数据的第58位的数据放在第1位,将第50位的放在第2位
逆初始置换也是类似的
4.2.3轮函数F
DES的轮函数包括了E扩展,异或,S盒压缩,P盒置换,共进行了16轮轮函数操作
E扩展置换:将32位输入扩展为48位输出
异或:扩展后的48bit和密钥进行异或
S盒压缩:将48bit分为8块6bit数据,每6bit压缩位4bit,这样48位又压缩回32位
P盒置换:S盒的结果再经过P盒置换,至此,一次轮函数操作完毕
4.2.4 双重DES和三重DES的区别
双重DES的密钥是112位,三重DES的密钥是168位
双重DES的密钥空间增加了,但仍存在安全隐患
三重DES增加了密钥长度和加密次数,安全性大幅提升,但是计算量大,性能差
三重DES可以使用两个密钥进行三次加密,具体运算过程是 加密-解密-加密(EDE)
三重DES也可以使用三个密钥进行加密
4.4 高级数据加密标准AES
AES也是对称密码算法中的分组密码,也采用了Feistel密码结构,取代了DES成为更广泛的加密标准;
AES的处理单位是字节而非bit,
AES的明文分组长度只能为16字节(即128位)
AES的密钥长度可以为16字节,24字节,32字节(即128位,192位,256位)
AES的加密过程如下:
4.3.1 明文处理,初始变换
明文128位——16字节,按照规定的字节排列方式排列成为一个4x4矩阵:
变成矩阵后,与第0轮的密钥进行按字节异或的操作,得到初始矩阵
4.3.2 密钥扩展
密钥同上变换成4x4矩阵后,进行密钥扩展。
密钥扩展是以列为单位进行扩展的,设第i列的矩阵为W[i] (i>4)
①若i不是4的倍数
那么第i列的矩阵W[i]=W[i-4] XOR W[i-1]
例:W[7] = W[3] XOR W[6]
②若i是4的倍数
那么第i列的矩阵W[i]=W[i-4] XOR T(W[i-1])
T(W[i-1])是W[i-1]经过T函数处理得到的矩阵
T函数分为3部分组成:字循环、字节代换、轮常量异或
1)字循环:将1个字中的4个字节循环左移1个字节,对于列来说即循环上移
2)字节代换:对字循环的结果使用S盒进行字节代换。(同下文字节代换的操作一样)
3)轮常量异或:将第二步的结果同给定的轮常量Rcon[j]进行异或,j表示轮数
轮常量:
如此便可得到10轮密钥矩阵
4.3.3 循环运算
AES的轮函数包含了:
字节代换(SubBytes)行移位(ShiftRows)列混淆(MixColumns)轮密钥加(AddRoundKey)
AES总共进行10轮循环运算,但最终轮(即第10轮)循环运算中没有列混淆这一步
字节代换(SubBytes):
通过变换后的矩阵通过查询S盒,完成从一个字节到另一个字节的映射(即代换)。
行移位(ShiftRows):
即进行向左循环移位
第一行保持不变,第二行向左移动1个字节
第三行向左移动2个字节,第四行向左移动3个字节
列混合(MixColumns):
将输入的4x4矩阵 “左乘” 一个给定的4x4矩阵
左乘的乘法并非传统意义上的乘法,加法也变成了异或
左乘的实现有点复杂,希望掌握
左乘矩阵:
乘以02的元素:最高位为0则该元素整体左移一位,最高位为1则整体左移后异或上(00011011)
乘以03的元素:在乘以02的基础上,再异或元素自己本身
乘以01的元素:不产生变化
轮密钥加(AddRoundKey):
当前矩阵和第n轮的子密钥矩阵进行按字节的异或操作,得到新的矩阵
五、非对称密码(公钥密码体制)
非对称密码 要求有一对密钥对,包含公钥和密钥
使用公钥加密则用密钥解密,用密钥加密则用公钥加密
常见的非对称加密算法:RSA , ECC
RSA基于数论,是迄今为止最完善的公钥密码体制
5.1 RSA加密算法
①密钥的产生
(1) 选两个保密的大素数p和q
(2) 计算n = p * q
(3) 计算欧拉函数值 φ(n) = (p-1)*(q-1)
(4) 选择一个整数,满足与φ(n)互质(gcd(φ(n),e)=1),且1<e<φ(n)
(5) 计算乘法逆元d,它满足 (e*d) mod φ(n) =1,d可以用扩展欧几里得算法简单得到
(6)得到公钥(e,n) , 得到密钥(d,n)
②加密明文
C = M^e mod n
②解密密文
M = C^d mod n
RSA的安全性: `·······································
5.2 Diffie Hellman 密钥交换算法
DH也属于非对称密码,但它用于密钥交换
这是因为非对称密码加解密算法复杂,时间久,一般应用中,加解密数据用对称加密算法,密钥管理用非对称加密算法。但非对称加密用于密钥交换。
基本原理:
①双方选定一个素数q以及q的原根a
②双方分别产生一个私钥 XA 和 XB ,XA和XB都要小于q
③双方分别计算YA = a^XA mod q , YB = a^XB mod q,然后交换给对方
④双方计算共享密钥K = YB ^ XA mod q , K = YA^XB mod q
5.3 ElGamal 加密算法
ElGamal加密算法是一种离散对数的非对称加密算法,
公钥私钥的生成:
①用户共同选择一个素数q以及q的本原根a
②生成随机数X,要求1<X<q-1
③计算Y = a^X mod q
④得到私钥为X,公钥为{q , a , Y}
加密:
选择一个随机整数k,满足1<=k<=q-1
计算一次密钥K = Y^k mod q
M生成密文对(C1 , C2)
其中C1 = a^k mod q ; C2 = K*M mod q
解密:
①计算恢复密钥K = C1^X mod q
②计算K的乘法逆元K-1, 满足 (K-1 * K) mod q = 1
②得到明文M = (C2 * K-1)mod q
六、密钥管理和分发
6.1 密钥分发
任何密码系统的强度取决于密钥分发技术
对于双方A和B来说,密钥的分发能以以下方式得到:
①直接传递:A选择一个密钥后以物理的方式传递给B
②第三方传递:第三方选择密钥后物理的传递给A和B
③密钥更新:用旧密钥加密新密钥后发给对方
④可信第三方:第三方在一个安全的加密通道上传送密钥给A和B
密钥分发中心KDC通常作为这个第三方
6.2 公钥分发
公钥分发从本质上可以归结为以下几种方案:
①公开发布:直接在公开论坛等公开公钥
优点:简单简便
缺点:任何人都可以伪造公钥
②公开可访问目录:某可信组织负责公开目录的维护和分配
优点:比公开发布安全
缺点:目录管理员的私钥被攻破后,可以冒充任意一个已注册的通信方
③公钥授权:更严格的控制目录中的公钥分配
④公钥证书:证书包含公钥和公钥拥有者的标志,整个证书由可信第三方进行签名
典型的应用就如身份证
6.3 X509数字证书
证书的内容如下:
7、哈希函数
7.1 Hash函数
7.1.1概念
Hash函数H将数据M作为输入,产生一个固定长度的Hash值h
h=H(M)
Hash函数的首要目标就是保证数据的完整性,具有雪崩效应,即输入即使变化很小,产生的Hash值区别也很大。
7.1.2 特性
Hash函数的特性也就是这个Hash函数的设计要求:
①具有雪崩效应
②单向性:不能通过Hash值h来找到原数据块M
③抗弱碰撞性:两个不同的数据块,不能得到相同的Hash值
④抗强碰撞性:若存在H(x) = H(y) ,不能计算出x和y
7.1.3 Hash函数的应用
①Hash常被应用于消息认证中
②Hash函数可以通过计算文件的Hash值,用于入侵检测和病毒检测
③Hash函数可以用于构建随机函数,做伪随机数发生器
7.1.4 生日攻击
生日攻击利用概率论里面的生日悖论问题,通过寻找Hash函数中的碰撞,即找到两个不同的输入能产生相同的输出,就可以仿造Hash值进行攻击。
生日攻击表明了,哈希值过短的话,安全性很低,因此现代密码学通常采用更长的Hash值来抵抗攻击
7.2 MD5哈希算法
7.2.1 算法描述
MD5哈希算法的输入被分为512bit长的分组,输出128bit的消息摘要
MD5是由MD4演化而来的,它的主要步骤:
①首先会对输入消息进行填充,使它的长度为512的倍数减64,这64bit用做记录原始消息长度
②将消息分为512bit长的分组,每个分组可以表示为16个32bit长的字
③每个分组经过压缩函数HMD5的4轮处理,每论处理中又迭代16次
④最后一轮的处理产生的结果即为消息摘要
7.2.1 安全性
MD5算法的消息摘要(即Hash值)有128bit,但是已经被我国王小云科学团队找到了碰撞,安全性面临挑战
7.3 安全哈希算法SHA
7.3.1 算法描述
安全哈希算法SHA的输入也会被分为512bit长的分组,输出为160位bit的消息摘要
SHA是基于MD4算法的,基本结构一致,区别在于压缩函数的不同,和5轮的处理
7.3.2 与MD5比较
①SHA的迭代步数(80步)比 MD5的迭代步数(64步)多,缓冲区(160bit)比MD5的缓冲区(128bit)多,所以SHA的速度慢于MD5
②MD5使用小端存储,SHA使用大端存储
7.3.3 SHA现状
SHA体系不断完善,已经有了很多的进化版本
最基础的SHA-1 分组长度512,消息摘要160bit
现在最广泛使用的SHA-256 分组长度512,但消息摘要已有256bit,满足安全性需求
SHA-512的分组长度1024bit,消息摘要512bit
七、数字签名
数字签名可以提供难以实现的安全性,可以验证信息的来源和完整性
数字签名可以有效的防止第三方攻击
7.1 数字签名的定义与概念
数字签名通常基于非对称加密,使用私钥用于签名,公钥用于解密。
发送者通过用它自己的私钥进行加密某个信息比如消息摘要(即签名过程),接收者可以通过公钥解密这个信息得到正确内容(即验证过程),从而使接收者可以确认发送者的身份。
7.2 ElGamal签名方案
同ElGamal加密方案一样,用户通过如下步骤产生公钥私钥:
①选取素数q和它的原根a
②选取随机整数XA,要求1<XA<q-1
③得到私钥XA;公钥{q,a,XA}
为了对消息M进行签名,用户首先计算Hash值 m = H(M),且0<=m<=q-1
然后通过如下步骤产生数字签名:
①选择随机整数K,使得1<K<q-1且K与q-1互素
②S1=a^K mod q (S1即ElGamal加密中的C1)
③计算K-1 mod (q-1) 即 计算乘法逆元K-1
④计算S2=K-1(m-XA * S1) mod (q-1)
⑤得到签名对(S1,S2)
任何其他用户可以通过以下步骤验证签名:
①V1=a^m mod q
②V2 = (YA^S1 * S1^S2) mod q
③若V1 = V2 ,则签名是合法正确的
7.3 Schnorr数字签名方案
Schnorr数字签名方案也是基于离散对数的
八、消息认证码MAC
数字签名是一种认证技术,其中的一些方法可以来抵抗发送方否认攻击,而消息认证则是验证所收到的消息确实是来自真正的发送方,且是未被修改的消息,同时它还可以验证消息的顺序和及时性。
8.1 消息认证函数
产生认证符的消息认证函数可以分为以下3类:
①Hash函数:将消息计算得出Hash值后,以这个Hash值作为认证符
②消息加密:对整个消息加密后得到的密文作为认证符
③消息认证码MAC: 它是消息和密钥的函数,用来产生定长的值,该值作为认证符
8.2 MAC的安全性
MAC算法具有的安全性质应该有:
抗计算性:给定一个或多个<消息,MAC>对[ xi , MAC(K,xi)],对任何新的输入x!=xi,计算<消息,MAC>对[ xi , MAC(K,x)]在计算上是不可行的。
对MAC的攻击有两类:穷举攻击和密码分析。
对于给定的消息x,攻击者可以通过攻击密钥空间和攻击MAC值两种方法找出其MAC。
①攻击密钥空间:若攻击者能够确定MAC的密钥,那么他就能输入任何x并产生有效的MAC
②攻击MAC值:攻击者对消息的MAC进行对应明文,其代价为2^n,这种攻击不能离线进行
九、用户认证
用户认证是确定某个用户或应用的实际身份是否与其声称的身份一致。
认证用户身份大致有三个常用工具,也可以一起使用:
①知识因素(知道什么):例如询问密码、身份证号
②占有什么(拥有什么):例如检查身份证
③内在因素(用户的特征、行为等):例如生物密码
9.1 双向认证协议
双向认证协议能够使通信双方认证彼此身份并交换会话密钥;
密钥交换主要有两个问题:保密性和时效性
①保密性:为了阻止伪装和会话密钥泄露
②时效性:防止消息重放攻击
为了保证时效性,通常在认证交互的消息上附带一个时间戳,供双方判断时间是否正确,该方法要求双方的时钟是同步的。(该方法不能用于面向连接的应用)
或者采用‘挑战/应答’的方法,A想要和B通信,先给B发送临时交互号(进行询问),B收到消息并回复,且回复消息要包含正确的临时交互号。(该方法不适用于无连接型的应用)
9.2 单向认证协议
单向认证的优势在于不需要双方同时在线,典型应用例如电子邮件