在对一个修改过的区块链算法进行攻击的实现过程中,需要一个特殊的哈希算法,该算法是完美的,即无冲突的。 虽然速度不是重点,但算法以及随之而来的冲突必须能够使用商用硬件在可接受的时间内计算出来。 因此,需要一个短哈希,其基础是少量位。
此外,对于攻击向量来说,输入数据的突变仅在有限的、明确定义的范围内发生。 再加上哈希应该可以部分计算以进行攻击,这就是出发点。
此实现将 CollisionHash 方法作为参考实现1,并使用 PearsonHash (底层算法)。 或者,可以使用另一种完美的 8 位哈希算法。
这里展示了两个字节 (UInt8, UInt8) 的可能突变,以及长度为两个字节 (UInt8, UInt8) 的完美 CollisionHash 算法的实现。
哈希由两部分组成。 第一部分是底层算法的哈希,作为一个字节 (UInt8)。 第二部分包括计算所有按顺序排列的哈希冲突,使得此顺序成为位置,作为哈希的第二部分。
由于这是一个针对特定起始位置的完美哈希,因此哈希的第二部分始终在一个字节 (UInt8) 的值范围内。
哈希算法的实现是用 Swift 编写的,但这仅仅是因为我目前在桌面实现领域更喜欢 Swift。
git clone https://github.com/bastie/CollisionHash.git .
cd CollisionHash
swift build
swift test
swift run -c release
源代码可以在 https://github.com/bastie/CollisionHash 找到。
MIT 许可证
版权所有 (c) 2023 Sebastian Ritter
特此授予任何人免费获得本软件及相关文档文件(“软件”)副本的权利,以处理本软件,不受限制,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售本软件的副本的权利,并允许向其提供本软件的人员进行以下操作
上述版权声明和本许可声明应包含在本软件的所有副本或实质性部分中。
本软件按“原样”提供,不提供任何形式的明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性的保证。 在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他方面,因本软件或本软件的使用或其他处理而产生、导致或与之相关的任何索赔、损害或其他责任负责。
1 即使是这个实现,对于目标任务来说仍然需要大量时间,所以我正在切换到基于 Nibbles (UInt4) 的实现。 然而,对于参考实现来说,这种基于 Byte (UInt8) 的变体达到了它的目的。