Havrosh, можно тысячу раз соль подмешивать, но в программе может быть скрытый жучок,
где суперслучайный суперзасоленный итоговый преобразованный ключ сдвигается вправо на
192 бит, потом влево на 192 бит, и младшие 192 бит будут всегда нулевыми, останутся только
старшие 64 бит де-факто. И это еще самый примитивный способ непрямого упрощения ключа,
тот кто хорошо знает asm, может гораздо более хитрые и запутанные баги вставлять, вплоть
до применения особых свойств полей Галуа GF(2^m) и колец многочленов, заданных над ними,
и даже имея исходных код (не говоря уж про дизассемблированный), не догадаешься о жучке.
Как вариант, берем 256-битный ключ, выделяем старшие 64-бита, и рассматриваем их как
коэффициенты многочлена a(x) = a[63] * x^63 + ... + a[1] * x + a[0], заданного над простым
полем GF(2). Умножаем алгебраически многочлен a(x) на одночлен b(x) = x^192, и затем
вычисляем остаток многочлена-произведения по модулю некоторого известного мне и
тем, кому надо, многочлена 192-й степени g(x) = x^192 + g[191] * x^191 + ... + g[1] * x + g[0].
Получается остаток r(x) = r[191] * x^191 + ... + r[1] * x + r[0]. Эти коэффициенты заносим
в младшие 192 бита ключа. Таким образом, младшие 192 бита будут алгебраически зави-
симы от старших 64 битов и однозначно определяться ими, и тот кто знает мой g(x), ему
достаточно подбирать только 64 бита, остальные 192 бита он быстро и легко вычисляет.
Последний раз редактировалось Paul Kellerman; 21.12.2014 в 20:39.
|