Рейтинг:3

Крекинг $f(x) = Cx \oplus Dx$

флаг in

Программа, которую я перепроектировал, использует $f(x) = Cx \oplus Dx$ куда С = 0x20ef138e415 и Д = 0xd3eafc3af14600 как хэш-функция. Учитывая массив байтов, хеш получается путем многократного применения $f$ к текущему хэшу xor следующего байта.

Java-код:

    общественное статическое длинное f (длинное x) {
        возврат (0x20ef138e415L * х) ^ (0xd3eafc3af14600L * х);
    }

    общедоступный статический длинный хеш (байт [] байты) {
        длинный хэш = 0;

        для (байт b: байты) {
            хеш = f(хеш ^ ((b & 0xff) + 1));
        }

        вернуть f(хэш);
    }

Есть ли простой способ генерировать хеш-коллизии?

Meir Maor avatar
флаг in
Нет необходимости выполнять криптоанализ, это имеет 64-битное состояние, и поэтому поиск коллизий тривиален с ~ 2 ^ 32 операциями. Думать трудно, найти коллизии в этом легко.
Meir Maor avatar
флаг in
На самом деле я пытался сделать это для удовольствия и потерпел неудачу, но моя неудача привела к этому вопросу: https://crypto.stackexchange.com/questions/92280/many-near-collisions-but-no-full-collision (Мои комментарии все еще стоит, не должно быть сложно найти коллизии в любом 64-битном хеше, я просто не смог, тем не менее).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.