发布时间:2025-08-31 14:43:47 点击量:
HASH GAME - Online Skill Game GET 300
1、第8章Hash函数 Hash函数定义 数据安全机密性完整性认证性密码技术主要保证数据的机密性Hash函数能保证数据的完整性和认证性 Hash函数定义 Hash函数常用来构造数据的短 指纹 消息的发送者使用所有的消息产生一个附件也就是短 指纹 并将该短 指纹 与消息一起传输给接收者 即使数据存储在不安全的地方 接收者重新计算数据的指纹 并验证指纹是否改变 就能够检测数据的完整性 这是因为一旦数据在中途被破坏 或改变 短指纹就不再正确 Hash函数定义 Hash函数定义 Hash函数是一个将任意长度的消息 message 映射成固定长度消息的函数 Hash函数是一个函数 它以一个变长的报文作为输入
2、 并产生一个定长的散列码 有时也称为报文摘要 作为函数的输出 Hash函数 hashfunction 或称为哈希函数 散列函数 对于任何消息x 将h x 称为x的Hash值 散列值 消息摘要 messagedigest Hash函数作用 Hash函数最主要的作用于是用于鉴别 鉴别在网络安全中起到举足轻重的地位 鉴别的目的有以下两个 第一 验证信息的发送者是真正的 而不是冒充的 同时发信息者也不能抵赖 此为信源识别 第二 验证信息完整性 在传递或存储过程中未被篡改 重放或延迟等 8 1Hash函数的性质 Hash函数的碰撞 collision 设x x 是两个不同的消息 如果h x h x 则称
4、数在现代密码学中起着重要的作用 主要用于对数据完整性和消息认证压缩性 任意长度的数据 算出的摘要长度都固定 容易计算 从原数据容易算出摘要 抗修改性 对原数据进行任何改动 哪怕只修改1个字节 所得到的摘要都有很大区别 弱抗碰撞 已知原数据和其摘要 想找到一个具有相同摘要的数据 即伪造数据 在计算上是困难的 强抗碰撞 想找到两个不同的数据 使它们具有相同的摘要 在计算上是困难的 Hash函数的安全性 对Hash函数的攻击是指寻找一对碰撞消息的过程与传统密码体制的攻击方式相比 对散列函数的攻击方法主要有两种 穷举攻击 它可以用于任何类型的散列函数的攻击 最典型的方式就是所谓的 生日攻击 采用生日攻
5、击的攻击者将产生许多明文消息 然后计算这些明文消息的指纹 摘要 进行比较 利用散列函数的代数结构 攻击其函数的弱性质 通常的有中间相遇攻击 修正分组攻击和差分分析攻击等 生日悖论 birthdayparadox 生日问题 假设每个人的生日是等概率的 每年有365天 在k个人中至少有两个人的生日相同的概率大于1 2 问k最小应是多少 k人生日都不同的概率是 有P 365 23 0 5073 即在23个人中 至少有两个人生日相同的概率大于0 5 这个数字比人们直观猜测的结果小得多 因而称为生日悖论 生日攻击法生日悖论原理可以用于构造对Hash函数的攻击设Hash函数值有n个比特 m是线、造的假消息 分别把消息m和M表示成r和R个变形的消息 消息与其变形消息具有不同的形式 但有相同的含义 将消息表示成变形消息的方法很多 例如增加空格 使用缩写 使用意义相同的单词 去掉不必要的单词等 Hash函数的安全性 Hash函数的安全性 生日攻击法分别把消息m和M表示成r和R个变形的消息 生日攻击法计算真消息m的变形与假消息M的变形发生碰撞的概率由于n比特长的散列值共有2n个 所以对于给定m的变形mi和M的变形Mj mi与Mj不碰撞的概率是1 1 2n 由于M共有R个变形 所以M的全部变形都不与mi碰撞的概率是 Hash函数的安全性 因为消息m共有r个变形 因此m的变形与M的变形都不碰撞的
7、概率是 m的变形与M的变形发生碰撞的概率是 生日攻击法 当r R 2n 2时 P n 1 e 1 0 63 对于Hash值长度为64比特的Hash函数 生日攻击的时间复杂度约为232 所以是不安全的 为了抵抗生日攻击 建议Hash值长度至少为128比特 Hash函数的安全性 8 2基于分组密码的Hash函数 8 3hash函数MD4 MD4是麻省理工学院教授RonaldRivest于1990年设计的一种信息摘要算法 它是一种用来测试信息完整性的密码散列函数的实行 其摘要长度为128位 这个算法影响了后来的算法如MD5 SHA家族和RIPEMD等 MD5算法是1991年发布的一项数字签名加密算法
8、 它当时解决了MD4算法的安全性缺陷 成为应用非常广泛的一种算法 8 3hash函数MD4 MD4算法的输入可以是任意长度的消息x 对输入消息按512位的分组为单位进行处理 输出128位的散列值MD x 整个算法分为五个步骤 步骤1 增加填充位步骤2 附加消息长度值步骤3 初始化MD缓冲区步骤4 以512位的分组 16个字 为单位处理消息步骤5 输出 消息的预处理步骤 设x是一个消息 用二进制表示 首先由x生成一个数组 是长度为32比特 bit 的 0 1 序列 M由x生成 d 447 x mod512 令l为的二进制表示 l的长度为64比特 bit 如果l的长度不足64比特 bit 则在l的
9、左端添0补足 M 这里 x 表示x的长度 表示序列的联接 譬如x y表示将序列y排在序列x的右端 步骤1 增加填充位在消息x右边增加若干比特 使其长度与448模512同余 也就是说 填充后的消息长度比512的某个倍数少64位 即使消息本身已经满足上述长度要求 仍然需要进行填充 例如 若消息长为448 则仍需要填充512位使其长度为960位 填充位数在1到512之间 填充比特的第一位是1 其它均为0 步骤2 附加消息长度值 用64位表示原始消息x的长度 并将其附加在步骤1所得结果之后 若填充前消息长度大于等于264 则使用其64位 填充方法是把64比特的长度分成两个32比特的字 低32比特字先填
13、89ABCDEF 字C FEDCBA98 字D 76543210 步骤4 以512位的分组 16个字 为单位处理消息MD4是迭代Hash函数 其压缩函数为 步骤4是MD4算法的主循环 它以512比特作为分组 重复应用压缩函数HMD4 从消息Y的第一个分组Y0开始 依次对每16个分组Yi进行压缩 直至最后分组N 16 1 然后输出消息x的Hash值 可见 MD4的循环次数等于消息Y中512比特分组的数目L 步骤5 输出依次对消息的L个512比特的分组进行处理 第L个分组处理后的输出值即是消息x的散列值MD x 8 3Hash函数MD4 MD4算法如下 设A B C D是四个32位的寄存器 其初值
15、0 发布修改版于1995年发布 FIPS180 1 通常称之为SHA 1 该标准称为安全Hash函数 RFC3174也给出了SHA 1 它基本上是复制FIPS180 1的内容 但增加了C代码实现 SHA 1算法的输入是长度小于264的任意消息x 输出160位的散列值 8 4安全Hash算法SHA SHA 1处理消息的过程与MD4类似 对输入消息按512位的分组为单位进行处理 整个算法分为五个步骤步骤1 增加填充位在消息右边增加若干比特 使其长度与448模512同余 即使消息本身已经满足上述长度要求 仍然需要进行填充 填充位数在1到512之间 填充比特的第一位是 1 其它均为 0 8 4安全Ha
16、sh算法SHA 步骤2 附加消息长度值用64位表示原始消息x的长度 并将其附加在步骤1所得结果之后 步骤1与步骤2一起称为消息的预处理经预处理后 原消息长度变为512的倍数 设原消息x经预处理后变为消息M M0M1 MN 1 其中Mi i 0 1 N 1 是32比特 在后面的步骤中 将对512比特的分组进行处理 8 4安全Hash算法SHA 步骤3 初始化缓冲区SHA 1算法的中间结果和最终结果保存在160位的缓冲区里 缓冲区用5个32位的寄存器表示 5个缓冲区记为A B C D E 其初始值为下列32位整数 16进制表示 A 67452301 B EFCDAB89 C 98BADCFE D
17、10325476 E C3D2E1F0 其中 前4个初始值与MD5的初始值相同 SHA 1以大端格式存储缓冲区的值 即字的最高有效字节存于低地址字节位置 因此 上述初始值存储为 十六进制 字A 67452301 字B EFCDAB89 字C 98BADCFE 字D 10325476 字E C3D2E1F0 8 4安全Hash算法SHA 步骤4 以512位的分组 16个字 为单位处理消息SHA 1是迭代Hash函数 其压缩函数为 步骤4是SHA 1算法的主循环 它以512比特作为分组 重复应用压缩函数HSHA 从消息的第一个分组开始 依次对每个分组进行压缩 直至最后分组 然后输出消息x的Hash
18、值 SHA 1循环次数等于消息中512比特分组的数目L SHA 1的压缩函数HSHA 由四轮处理组成加法是模232相加 SHA 1的压缩函数HSHA 压缩函数HSHA的四轮处理过程的算法结构相同 每一轮要对缓冲区ABCDE进行20次迭代 每次迭代的运算形式为 TEMP A 5 ft B C D E X k KtE DD CC B 30B AA TEMP SHA 1的压缩函数HSHA 基本逻辑函数f每一轮使用一个基本逻辑函数f 每个基本逻辑函数的输入是三个32位的字 输出是一个32位的字 它执行位逻辑运算 即输出的第n位是其三个输入第n位的函数 SHA 1的压缩函数HSHA 字组Xtt 0 t
21、穷举攻击方法产生两个具有相同散列值的消息MD5需要的代价为264数量级SHA 1需要的代价为280数量级抗密码分析的能力MD5算法抗密码分析的能力较弱SHA 1算法抗密码分析的能力似乎并不弱 SHA 1和MD5的比较 速度SHA 1执行的速度比MD5的速度慢得多简洁性SHA 1和MD5两种算法都易于描述和实现 不需要使用大的程序和置换表数据的存储方式MD5使用little endian方式 SHA 1使用big endian方式 这两种方式没有本质的差异 ThankYou 所使用的函数为 所使用的常数 用十六进制表示 为 Round1为对k 0至19执行 所使用的函数为 所使用的常数 用十六进制表示 为 Round2为对k 20至39执行 所使用的函数为 所使用的常数 用十六进制表示 为 Round3为对k 40至59执行 所使用的函数为 所使用的常数 用十六进制表示 为 Round4为对k 60至79执行