Можно ли было бы передавать большие файлы, используя только систему контрольных сумм, а затем восстанавливать исходный файл с помощью вычислений?
Скажите, что вы передаете контрольную сумму MD5 файла и размер файла. Создавая «виртуальный файл» и вычисляя его контрольную сумму, пробуя каждую битовую комбинацию, вы должны в конечном итоге «добраться» до исходного файла. Но по дороге вы также получите множество «коллизий», в которых контрольная сумма также совпадает.
Таким образом, мы меняем первый байт исходного файла на некоторое указанное значение, снова вычисляем контрольную сумму и отправляем это тоже. Если мы сделаем такую же замену в виртуальном файле, мы сможем проверить каждое «столкновение», чтобы увидеть, совпадает ли оно по-прежнему. Это должно немного сузить его, и мы можем сделать это несколько раз.
Конечно, вычислительная мощность для этого была бы огромной. Но возможно ли это теоретически, и сколько контрольных сумм вам потребуется для передачи чего-либо (скажем, 1 МБ)? Или, может быть, объем данных, необходимых для передачи контрольных сумм почти такого же размера, как файл, делает его бессмысленным?