Hash 有没有办法缩小CRC哈希的搜索空间以识别原始消息?

Hash 有没有办法缩小CRC哈希的搜索空间以识别原始消息?,hash,collision-detection,collision,crc,Hash,Collision Detection,Collision,Crc,我正在寻找一种有效的方法,在给定任意散列值和已知消息大小的情况下,减少CRC散列的可能消息集。使用蛮力计算所有可能的碰撞对于较大的消息长度是不可行的。假设散列长度至少比messageLength小100倍(messageLength为100K,散列大小为1K) 例如: List<byte[]> ComputeCollisions(byte[] hash, int messageLength){ var collisions = new List<byte[]>();

我正在寻找一种有效的方法,在给定任意散列值和已知消息大小的情况下,减少CRC散列的可能消息集。使用蛮力计算所有可能的碰撞对于较大的消息长度是不可行的。假设散列长度至少比messageLength小100倍(messageLength为100K,散列大小为1K)

例如:

List<byte[]> ComputeCollisions(byte[] hash, int messageLength){
  var collisions = new List<byte[]>();
  //do some magic
  return collisions;
}
列出计算冲突(字节[]散列,int messageLength){
var collisions=新列表();
//施点魔法
返回碰撞;
}

考虑到CRC散列函数的工作原理是多么简单,我倾向于相信有某种方法可以做到这一点,类似于向后解压缩,我就是不知道如何做到这一点。要进一步减少搜索空间,知道第一个或最后一个XOR应用程序是否有帮助?

请查看。您可以使用它来修改消息以获得所需的CRC。

对于给定的一组欺骗参数(CRC、消息长度、位位置),是否有一个算法来预测使用欺骗找到冲突的可能性?它仅取决于提供的候选位位置的数量。(假设消息至少与CRC一样长。)“重要的是,提供的比特位置不只是供spoof修改的最小集合。对于k位CRC,对于k个随机选择的位置的最小集合,没有解的概率为71%。然而,随着更多地点的增加,这种可能性迅速下降。k+1随机位置为42%,k+2为23%,k+3为12%,并且每增加一个位置,其继续下降约两倍。对于k+10随机选择的位置,没有解决方案的概率为0.1%。有趣的是,对于从8到64的k,这些概率与CRC的长度无关。“这些百分比背后的方程式是什么?它还说“…与CRC的长度无关,对于从8到64的k。”“.64呢?@Silicomancer正确,spoof不直接支持不同的重新输入和重新输出。但是,您可以简单地手动反转所需的CRC位以获得相同的效果。(在Greg Cook目录中的102个CRC定义中,有一个具有不同的refin和refout参数。)