哈希游戏现代密码学-Hash函数
哈希游戏作为一种新兴的区块链应用,它巧妙地结合了加密技术与娱乐,为玩家提供了全新的体验。万达哈希平台凭借其独特的彩票玩法和创新的哈希算法,公平公正-方便快捷!万达哈希,哈希游戏平台,哈希娱乐,哈希游戏
由于n比特长的散列值共有 所以对于给定m的变形 的变形m 由于 比特长的散列值共有2n个,所以对于给定 的变形 i 比特长的散列值共有 的变形M 不碰撞的概率是1-1/2n。由于 共有 由于M共有 和M的变形 j,mi与Mj不碰撞的概率是 的变形 R个变形,所以 的全部变形都不与 i碰撞的概率是: 个变形, 的全部变形都不与m 个变形 所以M的全部变形都不与 碰撞的概率是:
对Hash函数的攻击是指寻找一对碰撞消息的过程 函数的攻击是指寻找一对碰撞消息的过程 生日悖论( 生日悖论(birthday paradox) )
生日问题:假设每个人的生日是等概率的,每年有 生日问题:假设每个人的生日是等概率的,每年有365天, 天 个人中至少有两个人的生日相同的概率大于1/2, 在k个人中至少有两个人的生日相同的概率大于 ,问k最小 个人中至少有两个人的生日相同的概率大于 最小 应是多少? 应是多少? k人生日都不同的概率是: 人生日都不同的概率是: 人生日都不同的概率是 1 2 k −1 1 − 1 − ...1 − . 365 365 365
称为一个Hash函数(hash function),或称为哈希函 函数( ),或称为哈希函 将h称为一个 函数 ), 称为x的 数、散列函数。对于任何消息x ,将h(x)称为 的Hash值、 散列函数。对于任何消息 称为 值 散列值、消息摘要( 散列值、消息摘要(message digest)。 )。
个人中, 有P(365,23)=0.5073。即在 个人中,至少有两个人生日相 。即在23个人中 同的概率大于0.5,这个数字比人们直观猜测的结果小得多, 同的概率大于 ,这个数字比人们直观猜测的结果小得多, 因而称为生日悖论。 因而称为生日悖论。
生日攻击法 分别把消息m和 表示成 表示成r和 个 分别把消息 和M表示成 和R个变形的消息
生日攻击法 计算真消息m的变形与假消息 的变形与假消息M的变形发生碰撞的概率 计算真消息 的变形与假消息 的变形发生碰撞的概率
计算消息x的散列值 计算消息 的散列值h(x)的步骤 的散列值 的步骤 预处理: 用一个公开算法在消息x右方添加若干比特 右方添加若干比特, 预处理 用一个公开算法在消息 右方添加若干比特, 得到比特串y, 的长度为t的倍数 得到比特串 ,使 得y的长度为 的倍数。即有 的长度为 的倍数。 y= x pad(x) = y1 y 2 … yr , 其中 称为填充函数 其中 yi=t (i =1, 2,…, r),pad(x)称为填充函数。典型的 , 称为填充函数。 填充函数是先添加x长度 x的值,再添加若干比特(例 填充函数是先添加 长度 的值,再添加若干比特( 长度 的值 如0)。 )。 迭代过程: 是一个长度为m的初始比特串 迭代过程 设H0=IV是一个长度为 的初始比特串, 是一个长度为 的初始比特串, 重复使用压缩函数f, 重复使用压缩函数 ,依次计算 Hi= f (Hi−1 yi) (i =1, 2,…, r). − 输出变换: 是一个公开函数, 输出变换 设g: {0,1}m→{0,1}t是一个公开函数,令 h(x)=g(Hr).
因为消息m共有 个变形 因此m的变形与 的变形与M的变形都不碰撞的概 因为消息 共有r个变形,因此 的变形与 的变形都不碰撞的概 共有 个变形, 率是: 率是:
m的变形与 的变形发生碰撞的概率是: 的变形与M的变形发生碰撞的概率是 的变形与 的变形发生碰撞的概率是:
用上述方法构造的Hash函数称为迭代 函数称为迭代Hash函数。大多数 函数。 用上述方法构造的 函数称为迭代 函数 实用Hash函数都是迭代 函数都是迭代Hash函数 实用 函数都是迭代 函数 在预处理阶段,必须保证变换x→y是单射。因为如果预 在预处理阶段,必须保证变换 → 是单射。 是单射 处理变换x→ 不是单射 则存在x≠ 使得 不是单射, 使得y=y’,从而 处理变换 →y不是单射,则存在 ≠x’使得 , h(x)=h(x’),即能够找到 的碰撞。 的碰撞。 ,即能够找到h的碰撞 对于任意无碰撞的压缩函数, 对于任意无碰撞的压缩函数,都可以使用迭代技术构造 一个无碰撞的Hash函数。 函数。 一个无碰撞的 函数
为了抵抗生日攻击,建议 值长度至少为128 比特 比特. 为了抵抗生日攻击,建议Hash值长度至少为 值长度至少为
Hash函数的碰撞(collision) 函数的碰撞( 函数的碰撞 ) 设x、x’是两个不同的消息,如果 h(x)=h(x’) 则称x和x’是Hash函数h的一个(对)碰撞.
Hash函数的分类 函数的分类 单向Hash函数(one−way) 函数( − 单向 函数 ) 给定一个Hash值y,如果寻找一个消息 ,使得 给定一个 值 ,如果寻找一个消息x,使得y=h (x) 是计算上不可行的,则称h是单向 是单向Hash函数 函数. 是计算上不可行的,则称 是单向 函数 弱抗碰撞Hash函数(weakly collision−free) 函数( 弱抗碰撞 函数 − ) 任给一个消息x,如果寻找另一个不同的消息x’, 任给一个消息 ,如果寻找另一个不同的消息 ,使 是计算上不可行的, 得h(x) =h(x’)是计算上不可行的,则称 是弱抗碰撞 是计算上不可行的 则称h是弱抗碰撞 Hash函数 函数. 函数 强抗碰撞Hash函数 (strongly collision−free) 强抗碰撞 函数 − ) 如果寻找两个不同的消息x和 ,使得h(x)=h(x’)是计 如果寻找两个不同的消息 和x’,使得 是计 算上不可行的,则称h是强抗碰撞 是强抗碰撞Hash函数 函数. 算上不可行的,则称 是强抗碰撞 函数
生日攻击法 值长度为64比 当r=R=2n/2时,P(n)=1−e−1≈0.63。对于 − 。对于Hash值长度为 比 值长度为 特的Hash函数,生日攻击的时间复杂度约为 32,所以是 函数, 特的 函数 生日攻击的时间复杂度约为2 不安全的。 不安全的。
Hash函数定义:Hash函数是一个将任意长度的消息 函数定义: 函数是一个将任意长度的消息 函数定义 (message)映射成固定长度消息的函数。 )映射成固定长度消息的函数。
是一个长度为L 设x是一个长度为 是一个长度为 的比特串。 的比特串。重复应 用压缩函数f, 用压缩函数 ,对消 进行多次压缩, 息x进行多次压缩, 进行多次压缩 最后得到x的散列值 最后得到 的散列值
安全Hash函数 应具有以下性质: 函数h应具有以下性质 安全 函数 应具有以下性质: 对任意的消息x,计算h(x)是容易的; 是容易的; 对任意的消息 ,计算 是容易的 h是单向的; 是单向的; 是单向的 h是弱抗碰撞的,或是强抗碰撞的。 是弱抗碰撞的, 是弱抗碰撞的 或是强抗碰撞的。
抗碰撞性是最难满足的。 抗碰撞性是最难满足的。2004年,山东大学密码学家王小 年 云对流行的散列算法MD4 MD5 HAVAL-128和RIPEMN 云对流行的散列算法 和 找到了许多碰撞的例子。 给出了如何生成X.509证 找到了许多碰撞的例子。Lenstra给出了如何生成 给出了如何生成 证 书的例子,它们的散列值相同。这就意味着, 书的例子,它们的散列值相同。这就意味着,在一个证书 上有效的数字签名在另一个证书上同样有效, 上有效的数字签名在另一个证书上同样有效,因此不可能 确定到底哪一个是由认证授权机构合法签署的。 确定到底哪一个是由认证授权机构合法签署的。 2005年,王小云预测找到 年 王小云预测找到SHA-1的碰撞的计算复杂度大 的碰撞的计算复杂度大 概是2 这比生日攻击的平均计算量2 要好得多。 概是 68,这比生日攻击的平均计算量 80要好得多。她在 60轮的 轮的SHA-1简化版本中找到了碰撞。 简化版本中找到了碰撞。 轮的 简化版本中找到了碰撞 这些结果表明,使用当前流行的散列函数前要再三考虑, 这些结果表明,使用当前流行的散列函数前要再三考虑, 有必要替换掉这些算法。 有必要替换掉这些算法。
生日攻击法 生日悖论原理可以用于构造对Hash函数的攻击 生日悖论原理可以用于构造对 函数的攻击 函数值有n个比特 是真消息, 是伪造的假消息 是伪造的假消息, 设Hash函数值有 个比特,m是真消息,M是伪造的假消息, 函数值有 个比特, 是真消息 分别把消息m和 表示成 表示成r和 个变形的消息。 分别把消息 和M表示成 和R个变形的消息。消息与其变形 消息具有不同的形式,但有相同的含义。 消息具有不同的形式,但有相同的含义。将消息表示成变 形消息的方法很多,例如增加空格、使用缩写、 形消息的方法很多,例如增加空格、使用缩写、使用意义 相同的单词、去掉不必要的单词等。 相同的单词、去掉不必要的单词等。
数据安全 机密性 完整性 认证性 密码技术主要保证数据的机密性 Hash函数能保证数据的完整性和认证性 函数能保证数据的完整性和认证性
Hash函数的作用 函数的作用 1 用于加密,如RAS-OAEP 用于加密, 2 用于数字签名。因为数字签名的长度至少要和签名 用于数字签名。 的文件一样长, 的文件一样长,对文件的散列值而不是整个文件签名 要有效得多。 要有效得多。 3 检查数据的完整性。数据完整性有两种基本的场景。 检查数据的完整性。数据完整性有两种基本的场景。 第一种场景是数据正在传输给另一个人, 第一种场景是数据正在传输给另一个人,有噪声的通 信信道向数据引入了错误。 信信道向数据引入了错误。第二种场景是观察者在接 收者接收到数据之前重新安排了传输方式。 收者接收到数据之前重新安排了传输方式。两ຫໍສະໝຸດ Baidu场景 数据都遭到了破坏。 中,数据都遭到了破坏。