<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/rss/stylesheet/" type="text/xsl"?>
<rss xmlns:content='http://purl.org/rss/1.0/modules/content/' xmlns:taxo='http://purl.org/rss/1.0/modules/taxonomy/' xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:itunes='http://www.itunes.com/dtds/podcast-1.0.dtd' xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0" xmlns:dc='http://purl.org/dc/elements/1.1/' xmlns:atom='http://www.w3.org/2005/Atom' xmlns:podbridge='http://www.podbridge.com/podbridge-ad.dtd' version='2.0'>
<channel>
  <title>苏迟但到的主页</title>
  <language>zh-cn</language>
  <generator>microfeed.org</generator>
  <itunes:type>episodic</itunes:type>
  <itunes:explicit>false</itunes:explicit>
  <atom:link rel="self" href="https://kexohproject.pages.dev/rss/" type="application/rss+xml"/>
  <link>https://kexohproject.pages.dev</link>
  <description>
    <![CDATA[<p>你好，欢迎访问个人主页！</p><p>擅长密码学，安全分析，数字水印等技术。</p><p>你可以联系我通过:findmykexin@gmail.com或者知乎私信。</p><p>我的知乎链接：<a href="https://www.zhihu.com/people/su-chi-dan-dao" rel="noopener noreferrer" target="_blank">苏迟但到 - 知乎 (zhihu.com)</a></p><p>我的github链接：<a href="https://github.com/kexinoh" rel="noopener noreferrer" target="_blank">kexinoh</a></p>]]>
  </description>
  <itunes:author>苏迟但到</itunes:author>
  <itunes:image href="https://kexohcdn.gptapi.cyou/kexohproject/production/images/channel-2e54d141ee195646ca12a9d16507a908.jpg"/>
  <image>
    <title>苏迟但到的主页</title>
    <url>https://kexohcdn.gptapi.cyou/kexohproject/production/images/channel-2e54d141ee195646ca12a9d16507a908.jpg</url>
    <link>https://kexohproject.pages.dev</link>
  </image>
  <copyright>©2024</copyright>
  <itunes:category text="Education">
    <itunes:category text="Language Learning"/>
  </itunes:category>
  <itunes:category text="Technology"/>
  <item>
    <title>王小云老师破解MD5算法到底是怎么回事啊，有没有人给我们这些外行科普下？</title>
    <guid>44Jgp-uEUnY</guid>
    <pubDate>Sat, 06 Apr 2024 15:47:00 GMT</pubDate>
    <itunes:explicit>false</itunes:explicit>
    <description>
      <![CDATA[<p data-pid="TJfMcs_d">本人在两年前系统学过密码分析的相关内容，当时的确是懂了，不过现在已经有些忘记了，如果有误可以在评论区指出。</p><p data-pid="83VElDSC">我们要首先脱去所有的hash函数的外壳，在不考虑特殊构造的hash的情况下，hash函数本质是一个布尔方程组。</p><p data-pid="ZSw8mf-0">这句话什么意思呢?我们定义如下的式子就叫做 苏迟但到hash 吧。</p><p data-pid="TyTrBEX7"><img src="https://www.zhihu.com/equation?tex=%5Cbegin%7Balign%2A%7D+Output_0+%26%3D+x_0+x_1++%2B+x_1+x_2+%2B+x_1+%5Cmod+2%5C%5C+Output_1+%26%3D+x_1++%2B+x_1+x_2+x_0+%2B+x_2%5Cmod+2+%5C%5C+Output_2+%26%3D+x_2+x_1+%2B+x_1++%2B+x_2+%5Cmod+2+%5Cend%7Balign%2A%7D" alt="\begin{align*} Output_0 &amp;= x_0 x_1  + x_1 x_2 + x_1 \mod 2\\ Output_1 &amp;= x_1  + x_1 x_2 x_0 + x_2\mod 2 \\ Output_2 &amp;= x_2 x_1 + x_1  + x_2 \mod 2 \end{align*}" eeimg="1"/> </p><p data-pid="HUjGerYJ">我们假设 <img src="https://www.zhihu.com/equation?tex=x_i" alt="x_i" eeimg="1"/> 是代表第i项输入, <img src="https://www.zhihu.com/equation?tex=output_i" alt="output_i" eeimg="1"/> 是代表第i项输出。</p><p data-pid="BQgsMo_x">hash函数的本质就是定义了若干个这个式子。</p><p data-pid="8mgtx21h">当然现实生活中的式子都特别长，长到里面的项数可能是2^80的级别。</p><p data-pid="2dFzb8EP"><b>1.为什么可以做到那么长？</b></p><p data-pid="NR_4fton">这是由于hash函数的迭代性质产生的。你可以重新看上面的公式，在第二轮的时候output又会变成x重新输入，那么代入第一轮的式子是不是就变得非常长，相当于乘上了一个原有的系数项的数量。</p><p data-pid="R07-I49N"><b>2.王小云想要破解什么？</b></p><p data-pid="7e-RAmOE">王小云想要构造出一个碰撞对，换句话说就是实现在不同的输入但是相同的输出。</p><p data-pid="430ftblc"><b>3.在原来我们碰撞一个hash对需要多少的计算量?</b></p><p data-pid="k44DoVUo">我们不考虑某个具体hash函数的性质，假设它的输出是随机的，长度为n，它的输出空间是 <img src="https://www.zhihu.com/equation?tex=2%5En" alt="2^n" eeimg="1"/> 。那么大概<b>平均</b>需要遍历 <img src="https://www.zhihu.com/equation?tex=%5Csqrt%7B2%5En%7D" alt="\sqrt{2^n}" eeimg="1"/> 才能找到一个碰撞对。在这里就是 <img src="https://www.zhihu.com/equation?tex=%5Csqrt%7B2%5E3%7D" alt="\sqrt{2^3}" eeimg="1"/> .</p><p data-pid="6Zb3wPFy">有几点要声明：1.n要足够大的情况下，才符合这个近似公式。</p><p data-pid="wRuZ9WDL">2.平均是指多次实验之后求平均值，在某一次你可能第一次就抽中了一个碰撞对，也可能你遍历完所有空间才抽中。这是一个期望值。</p><p data-pid="587WRAWw"><b>4.差分是什么？</b></p><p data-pid="DedE5AY7">输入差分是指存在一对输入 <img src="https://www.zhihu.com/equation?tex=%5CDelta%28x_0x_1x_2%2Cx_0%27x_1%27x_2%27%29%3D%28m_0m_1m_2%29" alt="\Delta(x_0x_1x_2,x_0&#39;x_1&#39;x_2&#39;)=(m_0m_1m_2)" eeimg="1"/> </p><p data-pid="PT89UWLh">而这里的 <img src="https://www.zhihu.com/equation?tex=m_i%3Dx_i%5Coplus+x_i%27" alt="m_i=x_i\oplus x_i&#39;" eeimg="1"/> 。</p><p data-pid="eZhv5RVs">我们在这里要引入一个知识，就是mod2下的加法和异或等价。也就是上式子可以写作 <img src="https://www.zhihu.com/equation?tex=m_i%3Dx_i%2Bx_i%27+%5Cmod+2" alt="m_i=x_i+x_i&#39; \mod 2" eeimg="1"/> 。</p><p data-pid="rcUt3h49">在后文我会省略mod2，同时加法和异或混用，你可以均看作加法即可(我主要是为了节约括号）。</p><p data-pid="z8mzZAlk">我们会保持着m不变，而改变x的值，当然x&#39;也会随之改变。</p><p data-pid="n43H7qxa">输出差分是指 <img src="https://www.zhihu.com/equation?tex=%5CDelta%28O%2CO%27%29%3DO%5Coplus+O%27" alt="\Delta(O,O&#39;)=O\oplus O&#39;" eeimg="1"/> </p><p data-pid="7muwXGYw">注意，当m全部为0的时候，那么这个差分是平凡的差分，因为输出的值肯定相等，那么输出也全是0，所以我们不考虑这种情况。</p><p data-pid="ev5gM532"><b>5.魔力的一刻来了。</b></p><p data-pid="mO7dXKCg">现在我们只关注output2.</p><p data-pid="cYV6laWL"><img src="https://www.zhihu.com/equation?tex=Output_2+%3D+x_2+x_1+%2B+x_1++%2B+x_2+%5Cmod+2+" alt="Output_2 = x_2 x_1 + x_1  + x_2 \mod 2 " eeimg="1"/> </p><p data-pid="mLku2rbv"><img src="https://www.zhihu.com/equation?tex=%5CDelta+O_2%3DO_2%5Coplus+O_2%27%3D%28+x_1x_2+%2B+x_1++%2B+x_2+%29%5Coplus%28+x%27_1x%27_2+%2B+x%27_1++%2B+x%27_2%29%5C%5C+%3Dx_1x_2%5Coplus+x%27_1x%27_2%2Bx_1%5Coplus+x%27_1%2Bx_2%5Coplus+x%27_2%5C%5C+%3Dx_1x_2%5Coplus+x%27_1x%27_2%2Bm_1%2Bm_2" alt="\Delta O_2=O_2\oplus O_2&#39;=( x_1x_2 + x_1  + x_2 )\oplus( x&#39;_1x&#39;_2 + x&#39;_1  + x&#39;_2)\\ =x_1x_2\oplus x&#39;_1x&#39;_2+x_1\oplus x&#39;_1+x_2\oplus x&#39;_2\\ =x_1x_2\oplus x&#39;_1x&#39;_2+m_1+m_2" eeimg="1"/> </p><p data-pid="eXWUD1Og">现在我们发现输出的差分值可以被表示为 <img src="https://www.zhihu.com/equation?tex=x_1x_2%5Coplus+x%27_1x%27_2%2Bm_1%2Bm_2" alt="x_1x_2\oplus x&#39;_1x&#39;_2+m_1+m_2" eeimg="1"/> 。</p><p data-pid="Rn_pBea6">而 <img src="https://www.zhihu.com/equation?tex=x_1x_2%5Coplus+x%27_1x%27_2" alt="x_1x_2\oplus x&#39;_1x&#39;_2" eeimg="1"/> 有一个性质就是当 <img src="https://www.zhihu.com/equation?tex=x_1%3Dx%27_2+%5C%26+x%27_1%3Dx_2" alt="x_1=x&#39;_2 \&amp; x&#39;_1=x_2" eeimg="1"/> 的时候就等于0。</p><p data-pid="pxPst0xE">6.当我们设定了一个输入差分值为(0,1,1)。</p><p data-pid="y4Rts65Z">我们惊奇的发现，在保持着这个差分的前提下，最后的一个输出值总是保持着0。</p><p data-pid="Op_hG3YW"><b>7.恭喜你.</b></p><p data-pid="XD3vezCU">你从密码学的角度成功破解了 苏迟但到hash 。</p><p data-pid="qnmgqFdW">你成功发现了它的不均匀性，使得它不再是一个完美的hash函数。</p><p data-pid="Qd-08nuc">因为我们保持这个输入差分的情况下，前面两个比特位的输出空间只有2*2，那么碰撞复杂度只需要根据生日攻击原理，对输出空间进行开根号，也就是 <img src="https://www.zhihu.com/equation?tex=%5Csqrt%7B2%5E2%7D%3D2" alt="\sqrt{2^2}=2" eeimg="1"/> 。</p><p data-pid="114O8suV">但是这一步还不能够破解。</p><p data-pid="87vSdBwj"><b>8.遍历</b>，我们需要将 <img src="https://www.zhihu.com/equation?tex=x_0x_1x_2" alt="x_0x_1x_2" eeimg="1"/> 从000遍历到111，当然我们也要同步计算 <img src="https://www.zhihu.com/equation?tex=x%27_0x%27_1x%27_2" alt="x&#39;_0x&#39;_1x&#39;_2" eeimg="1"/> 。</p><p data-pid="lqaklCk_">那么你就可以成功找到一个碰撞对。</p><hr/><p data-pid="Bcl80OX1">在实际情况中，对于某一个输入差分对的输出差分是一个概率分布。</p><p data-pid="RPawLqFT">我们可以通过数学分析也可以通过遍历来实现对这个概率分布求解。当这个偏差足够大的时候就可以为破解提供条件。</p><hr/><p data-pid="Fg-qwlNX">对于多轮而言，这个偏差就是乘积形式存在，所以当轮次过多的时候它就被搅拌的足够均匀了，那么差分攻击的威力就没有那么强了。</p><p></p>]]>
    </description>
    <itunes:title>New Article Title for iTunes</itunes:title>
  </item>
</channel>
</rss>