完整性和认证性
完整性和认证性
密码学Hash函数
Hash函数H将可变长度的数据块M作为输入,产生固定长度的Hash值 h = H(M)。一个“好”的Hash函数具有以下的特点:
对于大的输入集合使用该函数,产生的输出结果均匀地分布且看起来随机。即Hash函数的首要目标是保证数据完整性,对于M任何一位或者几位的改变,都将极大可能改变其Hash码。
-
Hash函数的特性:
- 对预先制定的Hash值找到对应的数据块(单向性)
- 找到两个不同的数据块对应相同的Hash值(抗碰撞性)
Hash函数的操作过程:
填充长度信息能够提高攻击者修改信息而保持Hash值不变的难度
密码学Hash函数的应用
-
消息认证
- 确保收到的数据确实和发送时的一样(即没有修改、插入、删除和重放)
- 确保发送方声称的身份是真实有效的
- 当Hash函数用于提供消息认证功能是,Hash函数值通常称为消息摘要
发送者根据待发送的消息使用该函数计算一组Hash值,然后将Hash值和消息一起发送过去。接收者收到后对于消息执行同样的Hash计算,并将结果与收到的Hash值进行对比。如果不匹配,则接收者推断出消息遭受了篡改。
数字签名
在进行数字签名过程中使用用户的私钥加密消息的Hash值,其他任何知道该用户公钥的人都能够通过数字签名来验证消息的完整性。-
其他应用
- 用于产生单向口令文件
- 入侵检测和病毒检测
- 用于构建随机函数(PRF)或用作伪随机发生器
安全散列算法SHA
- 定义:
SHA是一种数据加密算法,该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。散列函数值可以说时对明文的一种“指纹”或是“摘要”所以对散列值的数字签名就可以视为对此明文的数字签名。 - 设计安全散列算法需要考虑的点有:
- 在计算上,如果给定一个散列值,就不可能找到一个前像,也不可能找到一个冲突。
- 大多数哈希算法是面向软件的,并在通用计算机中实现,因此哈希算法必须充分利用处理器的大小
-
SHA-512逻辑
- 步骤1:附加填充位
填充消息使其长度≡896(mod 1024)。填充由一个1 和后续的0组成。 - 步骤2:附加长度
在填充后的消息后附加128位的块,将其视为无符号整数,它包含前消息的长度。
前两步的结果是产生了一个长度为1024整数倍的消息,以便分组。
- 步骤3:初始化Hash缓冲区
Hash函数中间结果和最终结果保存在512位的缓冲区,缓冲区由8个64位的寄存器(a、b、c、d、e、f、g、h)表示,并将这些寄存器初始化为下列64位的整数(十六进制),每个寄存器内容获取的方式是:取前8个素数(2、3、5、7、11、13、17、19)取平方根,取小数部分的前64位。 - 步骤4:以1024位分组(128个字节)为单位处理消息并输出结果
步骤5:输出
总结SHA-512的运算如下:
H0 = IV
Hi = Hi-1+F(Hi-1,Mi)
MD = HN
IV是第三步中定义的abcdefgh缓冲区的初始值
Hi是第i个消息分组处理的最后一轮的输出
N为消息(包括填充和长度域)中的分组数
MD表示最后的消息摘要值
F表示轮函数
+为模264位加轮函数每一轮操作如下图
- 操作特点:
1)适合计算机的数学运算操作
2)消息越长, Hash时间越长 - 安全性分析:
若找到冲突,则会对其安全性造成威胁
- 步骤1:附加填充位
身份认证(Authentication)
- 身份认证的三个点:
- 验证接收到的消息没有被修改
- 确认被指控的发件人是真实的发件人
- 验证消息的及时性
-
传统密码学的身份认证(Authentication with Conventional Encryption)
-
Alice → Ek(m) → Bob
1)如果任何有限的字符字符串都是可能的消息。在这种情况下,消息完全没有冗余。那么它不提供发送方和消息的身份验证
2)如果有些有限的字符串不是消息。在这种情况下,消息具有冗余。例如,自然语言。那么它在一定程度上提供了发送方和消息的身份验证
-
Alice → Ek(m) → Bob
-
认证性和机密性(Authentication with Confidentiality)
-
Alice → Ek[m||h(m)] → Bob
在一定程度提供了的发送方和消息的身份验证,以及保密性
但是考虑到可能存在Hash碰撞的问题,我们还要对其进行进一步优化:
-
Alice → Ek2 [m||hk1 (m)] → Bob
Bob在解密数据后按照相同的过程验证发送方和消息
它提供了一定程度的发送者和消息的身份验证,以及保密性 -
Alice → Ek2 (m)||hk1 [Ek2 (m)] → Bob
Bob按照类似的过程验证发送方和消息
-
Alice → Ek[m||h(m)] → Bob
认证性无机密性(Authentication without Confidentiality)
Alice −→ m||Ek[h(m)] −→ Bob
当接收到数据c时,Bob将c分割为c1||c2,其中c2的长度与Ek相同[h(m)]。然后Bob比较h(c1)和Dk(c2)
它对发送者和消息都提供了一定程度的认证,但对消息没有保密认证+不可否认性+机密性(Authentication + Nonrepudiation + Confidentiality)
Alice → Ek (m|| DkdA[h(m)]) → Bob
Bob类似地验证发送者、消息和签名
提供了一定程度的认证、不可否认性和保密性