作为参考,该算法基本上是SHA-256d:
$ $ \ mathit {成功}:= \ operatorname {SHA256}(\ operatorname {SHA256}(\ mathit {IV} \ mathbin \ Vert \ mathit {nonce}))<\ mathit {target} $$
然后将得到的256位散列解释为单个256位数字(以2为底)。如果此数字小于给定的$ \ mathit {target} $数字,则会找到有效的随机数。 ($ \ mathit {IV} $可以认为是恒定的。)
目前,强行通过所有可能的$ nonce $ s都是寻找价值的唯一可行方法。满足上述等式,并且考虑到哈希函数的双重应用,这似乎是一个合理的假设。
但是,可以通过(第一个)仅查看第二个来简化问题哈希函数的应用:
$$ \ mathit {success}:= \ operatorname {SHA256}(X)<\ mathit {target} $$
我不是知道正确的术语(如果有的话),所以我会说这是一个“部分原像”问题。输出的约束条件不是它等于给定值,而是小于给定值。换句话说,并且再次得到简化:约束是输出的前n个数字(位)为0,其中n可能相对较低,例如32,这与n = 256时的完全原像攻击相反。 />
“ SAT解决-蛮力比特币挖掘的一种替代方法”似乎描述了解决该问题的逻辑方法:将哈希函数转换为布尔函数,然后在给定输出的(相对弱)约束的情况下进行转换哈希函数和已知输入$ X $的一部分,执行回溯以从输出约束中推导出对输入的约束。
在有关缩减版本的SHA-256的高阶差分密码分析的论文中,证明了人们可能能够预测回合$ r $之后从回合$之后的内部状态到达的函数内部状态的一部分。 rd $(对于$ d \ in {[2,r [} $]),具有特定概率$ p \ leq 1 $,但没有实际计算将$ r-d + 1 $到$ r $进行舍入。
现在,考虑到上述关于输出的前导0的约束,我在过去的几天中一直试图找出是否存在一种概率方法,该方法可以估算出从回合$ rd $的结果。
当然,对于这种比特币情况,哈希函数不需要被视为黑盒或预言,因为完整的输入是已知的,因此完整的也是
如果存在这样的估计值$ r = 64 $和$ d \ gg 1 $,则可以通过计算得到内部状态比$ d $次哈希函数有效,它可能会允许通过哈希函数的第二个应用程序使用快捷方式。
请注意,估计不一定要非常准确,概率也不一定必须很高才能使用。也不需要在任何一个方向上都保证估算的安全性;完全可以这样找到所有解决方案(随机数)是可以接受的。
有人知道这样的概率方法可以对某些SHA256轮进行正向估计吗?
实际上有什么意义吗? (例如,对于一个输出位,估计产生的收益$ p = 0.501 $从降低计算复杂性的意义上来说可能并不重要。)
编辑:
为说明我的想法背后的基本原理,让我们以统计的方式看一下基本运算的(差异):
a)XOR
对于单项的XOR运算$ A $和$ B $位
$$ \ mathit {result}:= A \ oplus B $$
情况很简单:如果不进行实际计算,我们可以事先告知结果将是$ B $的倒数。 A = 1 $和$ B $,而$ A = 0 $的概率为1。这对于任意长度的二进制数$ A $和$ B $同样成立。
b)加法
这一点更有趣,因为我们的概率为1或更少。
再次,对于单比特运算$ A + B $,结果与XOR情况相同,相等的可能性为1。
但是,当$ A $和$ B $是长度为$ n> 1 $的二进制数时,结果是不同的。基本上,结果是,对于较大的$ A $,结果中的一个/所有比特从$ B $倒置的概率更高;
极值:$$ A = 0 \暗示p = 0,\ quad A = 1111 \ dots111 \暗示p = 1 $$
加:$$ 0
XOR和加法运算是可交换的,因此$ A $和$ B $可以自由交换,甚至可以部分交换。
我想像这样的观点可以被利用来进行如下语句:
“如果在计算中的某个时刻$ t $,我们获得某个状态变量$ A $的值,该值大于某个阈值$ X $,并且[关于$ B $的某些陈述]完整哈希函数的肯定结果的$ p $大于/低于$ p $,我们继续/中止当前计算。“
#1 楼
利用当前的SHA-2哈希算法中的任何弱点,都无法简化比特币挖掘算法。问题很多。从SHA-256的角度来看,没有适用于完整哈希函数的(部分)原像搜索算法。更糟糕的是,穿透较少回合的攻击具有巨大的复杂性。实际上,没有针对任何版本的SHA-256进行过任何实际的(部分)原像攻击,共有超过20轮(总共64轮)。
从比特币的角度来看,情况是甚至更糟。回想一下,SHA-256将其输入分割为512位块,然后将其迭代地馈送到内部压缩函数,而内部压缩函数的反作用是前映像攻击的核心问题。比特币中散列的是640位长的块头,它需要两次调用压缩函数(每次调用消耗512位),外加SHA-256的调用。压缩函数的第二次调用给攻击者几乎没有自由,攻击者控制512位消息块中的不到128位。结果,即使将SHA-256减少了三倍,它也有可能承受比特币设置中的攻击,而不是完整版。
比特币矿工仍然通过预先计算512位来进行一些优化。块头,因此是压缩函数的第一次调用,但是接下来的步骤不能进行太多优化。
评论
$ \ begingroup $
谢谢您的回答。但是,我不认为该过程无法简化。我特别对算法的正向概率方法感兴趣,这种方法不一定与打破压缩函数“向后”相同。不幸的是,鉴于硬件(ASIC)的演进所带来的速度增长远超过“巧妙”利用该算法所能实现的速度,我对此的研究似乎不再有用。即使可以将工作量减少50%,ASIC也会在短时间内轻松地胜过这种情况。
$ \ endgroup $
– JimmyB
13-10-30在16:35
$ \ begingroup $
@HannoBinder“算法的前向概率方法,不一定与打破压缩函数“向后”相同。”-我相信这两件事实际上是等效的。如果您知道某组消息产生指定范围内的摘要的概率高于正常概率,并且您具有该范围内的摘要,那么查找散列为那个摘要。这意味着您已“向后破坏了压缩功能”并成功进行了预映像攻击。
$ \ endgroup $
– JBentley
2014-02-17 15:42
$ \ begingroup $
@JBentley这样看来,您的论点听起来很有效。但是,我想说这取决于“蛮力”的定义。如果您可以在散列函数中概率地“跳过”一些d轮,这并不意味着您可以排除一组输入消息,而不必对每个输入消息进行r-d轮。因此,“比蛮力强”:是的,可能就所需的计算步骤而言;不,就所需的(部分)哈希函数的应用数量而言。
$ \ endgroup $
– JimmyB
2014年2月19日下午13:55
$ \ begingroup $
@Hanno“如果有人那么容易做到的话”。那不是技术进步的方式...
$ \ endgroup $
– Gianluca Ghettini
17年12月19日在13:56
$ \ begingroup $
@AlbertHendriks是的,它仍然有效(截至2019年)。与密码分析的某些进步不同,前映像攻击往往发展得非常缓慢。而且我相信Wikipedia总结了针对SHA-2的最佳攻击。
$ \ endgroup $
–森林
19年6月24日在4:47
#2 楼
“如果这对SHA-256有效(在目前发布的最佳攻击中,初始结构仅限于四轮攻击),那么我们就不会对散列标准进行完整的原像攻击几轮了。”
“我们导出了一个将内部状态连接几轮的功能方程组。然后,我们证明了它等效于微分系统,因此状态的完整结构可以由一个结构构成。这些结构是两组内部状态,每个状态与另一组中的所有状态都有关系。“
来自Bicliques的原像:对Skein-512和SHA-2家族论文的攻击。<br />
发现这种概率前映像攻击的赏金很高:每10分钟12.5 BTC = 125000 USD
您会认为有人利用ASIC挖矿来利用部分前映像攻击相对于网络其余部分的优势
评论
$ \ begingroup $
当您挖空块时会发生什么?在这种情况下,coinbase tx的哈希成为块标题的Merkle根。一个矿工可能正在利用部分漏洞
$ \ endgroup $
–gegemos
19年6月23日在14:59
评论
您是否看到过此jheusser.github.io/2013/02/03/satcoin.html?它充满了示例和基准。结论:SAT前映像攻击并不比强行强行攻击要好。是的,我已经看过(并链接到我的问题:))该网站。而且我发现“纯” SAT方法并没有太大收获。我只是还在想,如果通过概率/启发式方法简化(例如SAT方法)是否没有捷径可寻。 -我想我需要查阅那些涉及差示c。分析的论文;他们可能会更清楚地表明,我相信通过概率/启发式方法可以减少SHA的复杂性。
SHA是否会通过随机性测试?
据说,减少到30发时就可以了。这可能是一个合理的方法。如果它失败了,例如有重大概率的15个回合,那可能会导致我正在考虑的方式中可能的捷径,从而将计算减少到例如49个回合+一个概率估计。
在Swenson的现代密码分析(第7章)或Stamp&Low的应用密码分析中查找“差异密码分析”。差分密码分析是概率性的。不过,我认为没有人能够设计出一种差分密码分析方法来查找SHA-256前映像。