我试图帮助别人发现他们的代码是如何被黑的。
他们在区块链中使用了一个随机数生成器,如下所示:
uint256 random = uint256(
keccak256(
abi.encodePacked(
block.difficulty,
block.timestamp,
msg.sender
)
)
) % 100;
if (random >= 90) {
//get1;
} else {
//get2;
}得到介于1到100之间的随机数。有人能够“猜测”何时提交一笔交易,总能得到2.有人告诉我,这可能是分叉的链条,但我仍然不知道如何。这是在雪崩链上,其中块是随机时间,所以有两个问题:
你是怎么猜到雪崩上未来街区的block.timestamp的?我可以非常接近地尝试(以过去10个街区的平均水平)来猜测前面的1到2个街区将会是什么,但只有大约70%的时间。
他说:更重要的是,要做到这一点,如何才能在特定的块上完成事务?我试过加注汽油等,但没能瞄准一个街区。
我目前正在使用python web3进行测试(在主链上,而不是分叉),但是任何语言(甚至理论)都是朝着正确的方向迈出的一步。
谢谢
发布于 2022-03-29 10:38:15
这些类型的攻击(“猜测”一个特定的伪随机数)通常来自矿工(PoW)和验证器(PoS)。
当矿工/验证器发布一个块时,它们包含一个任意的block.timestamp值。只要时间戳在预期的范围内(大于上一个块时间戳,并围绕预期的新块时间),网络就会接受它。
它们还可以将任意事务(由他们持有私钥的地址签名)放到发布的同一块上。这个事务甚至不需要经过内存池。
https://stackoverflow.com/questions/71655507
复制相似问题