type
status
date
slug
summary
tags
category
icon
password
认证
主要目的:
- 实体认证(发送者非冒充
- 消息认证(消息完整性
保密和认证是信息系统安全的两个方面,但它们是两个不同属性的问题,认证不能自动提供保密性,而保密性也不能自然提供认证功能
有三类产生认证符的函数
- 消息加密 以整个消息的密文为认证符号;
- 消息认证码(MAC) 消息、密钥的公开函数,产生一个定长值作为认证符;
- 哈希函数(哈希函数) 一个将任意长度的消息映射为定长的哈希(hash)值的公开函数,以hash值作为认证符;
认证函数-消息加密提供验证
常规加密
通过解密来判断消息是否来自A
常规加密使用A和B共享密钥K,需要信息中存在结构和冗余来进行认证。
提供保密,一定程度的认证(K为AB共享密钥,仅来自A),不提供签名
消息加密认证
- 发送方用接收方的公钥加密消息,接收方用私钥解密(与对称密钥加密原理相同,需要某种特定消息结构).该方案提供保密(仅B可解密),不提供认证,不提供签名.
- 发送方先用自己的密钥加密以提供认证,然后使用接收方公钥加密提供保密性.缺点是效率不高.该方案提供保密,认证,签名.
- 通过二者的混合来实现保密+认证+签名
消息认证码MAC
认证码(MAC,也称密码检验和)
对选定消息,使用一个密钥,产生一个短小的定长数据分组,称认证码,并将它附加在消息中,提供认证功能. (MAC = Ck(M) ,其中M是可变长的消息, K是共享密钥,Ck(M)是定长的认证码.)
应用认证码,如果只有收发方知道密钥,同时收到的MAC与计算得出的MAC匹配:
确认消息未被更改;
确信消息来自所谓的发送者;
如果消息包含序号,可确信该序号的正确性;
*某些应用不关心消息的保密而只关心消息的真实性,加密解密的工作量大;同时认证函数和保密函数分离提供结构上的灵活,可以延长消息的保护期限。
*基于DES的消息鉴别码
将M分组,使用CBC生成
哈希(散列)函数
- 哈希函数是将任意长度的消息映射成一个较短的定长输出消息的函数.
- 如下形式: h = H(M), M是变长的消息,h是定长的哈希值.
- 哈希函数的目的是为文件、消息或其它的分组数据产生“数字指纹”(缩微图).
MAC更像密码,hash更像指纹
改变文件与改变hash码一样简单,但是形成hash码的函数是保密的,以此实现加密效果
A->B: Ek(M || EKRa( H(M) ) ) - 可以提供签名,鉴别和保密
哈希函数的需求
H能用于任何大小的数据分组;
H产生定长输出;
对任意给定的x, H(x)要相对易于计算,使得软硬件实现都实际可行;
对任意给定的码h, 寻求x使得H(x)=h在计算上是不可行的(单向性);
任意给定分组x, 寻求不等于x的y, 使得H(y)= H(x)在计算上不可行(弱抗碰撞性);
寻求对任何的(x,y)对使得H(x)=H(y)在计算上不可行(强抗碰撞性);
简单hash算法
md5 sha1
- 简单的哈希函数(异或方式) 每个分组按比特异或: Ci = bi1xbi2 x…... xbim 其中, Ci是第i个比特的哈希码, m是输入的n比特分组数; bij是第j分组的第i比特;
等效于简单的奇偶校验
- 改进简单hash
先将n比特的哈希值设置为0;如下方式依次处理数据分组,将当前的哈希值循环左移一位,将数据分组与哈希值异或形成新的哈希值.
Merkle算法
杂凑函数,通过压缩和迭代实现抗碰撞
MD5 - Message Digest
符合Merkle-Damgard结构,输入任意长度报文,输出128比特的摘要
输入分组长度为512比特,输出128比特的摘要
- 步骤1:添加填充位(一个1 和若干个0)。在消息的最后添加适当的填充位使得数据位的长度满足length = 448 mod 512。例如,如果报文是448比特,则填充512比特形成960比特的报文。填充比特首位为1,其余位全0。 填充完后,信息的长度就为N*512+448(bit)
- 步骤2:添加长度。原始消息长度(二进制位的个数),用64位表示。如果长度超过2^64位,则仅取最低64位,即mod 2^64。448+64=512
- 步骤3:初始化MD缓存。使用一个128比特缓存存放杂凑的中间和最后结果。缓存表示为4个32比特的缓存器(A,B,C,D)
初始化格式:小数在前的格式存储,即字的低位字节放在高地址字节上
如A=67452301 存储为A: 01 23 45 67
- 步骤4:处理512比特(16个字)报文分组。核心是一个包含4个循环的压缩函数f。4个循环结构相似,但每次使用的原始逻辑函数不同,分别记为F,G,H,I。
- 输入:当前处理的512分组(Yq)和128比特缓存值ABCD(即上一次迭代的输出CVq)。
- 循环:使用表T[1…64]的1/4,该表由正弦函数给出,即T[i]=232×|sin(i)|的整数部分。X[k]代表M[q×16+k]=第q个长度为512比特报文分组中的第k个32比特字,且在循环中的取法要经过函数,每个循环包括16步操作
- 输出:第4次循环输出加到第1次循环的输入上产生CVq+1。相加是缓存中4个字分别与CVq中对应的4个字以模2^32相加。
- 这里描述了上述一套流程,按照md算法生成一个CVq
F(X,Y,Z)=(X & Y) | ((~X) & Z);
G(X,Y,Z)=(X & Z) | (Y & (~Z));
H(X,Y,Z)=X ^ Y ^ Z;
I(X,Y,Z)=Y ^ (X | (~Z));
(?)
- 步骤5:
- 输出:所有L个512比特的分组处理完成后,第L个阶段的输出作为报文的128比特摘要。
SHA-1
输入:最大长度为264位的消息;
输出:160位消息摘要;
处理:输入以512位数据块为单位处理;
- 步骤1:添加填充位(一个1 和若干个0)。在消息的最后添加适当的填充位使得数据位的长度满足length = 448 mod 512。
- 步骤2:添加长度。一个64位块,表示原始消息长度,64位无符号整数。
- 步骤3:初始化MD缓冲区。一个160位MD缓冲区用以保存中间和最终哈希函数的结果。它可以表示为5个32位的寄存器(A,B,C,D,E)。
前四个与MD5相同,但存储为高端字节存储方式,即字的低位字节放在低地址字节上.
- 步骤4:以512位数据块为单位处理消息。四轮,每轮20步。 四个基本逻辑函数:f1,f2,f3,f4
Kt代表额外常数,Wi是输入报文导出的比特字
Wt的定义;由512比特报文分组导出32比特字, Wt的前16个字直接取自当前分组中的16个字,余下的字定义为
Wt=S1(Wt- 16 XOR Wt-14 XOR Wt-8 XOR Wt-3)
这里会有考题
- 步骤5:输出。全部L个512位数据块处理完毕后,输出160位消息摘要。
- Author:faii
- URL:https://www.faii.top/article/d3a7ddd8-67d5-4d53-8ff7-7c9a5605ac20
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts