Комментарии 20
На старом Sony Ericsson было очень интересное приложение для хранения pin-кодов, которое (предположительно) как раз FPE и использовало. Для входа в приложение нужно было ввести мастер-код, но если его ввести неправильно, то вам всё равно покажут сохранённые коды, но неправильные, которые выглядят как правильные. Таким образом угадать правильный мастер-код довольно сложно. Более того, так можно использовать несколько разных мастер-кодов, для каждого из которых будет свой набор корректно отображаемых сохранённых кодов, известный только вам.
Разве описанный префиксный шифр не сводится к простому подстановочному шифру? Тогда он должен быть уязвим к частотному анализу (на примере карт — в номере карты есть номер банка и номер платёжной системы, которые могут быть известны).
Нет, там перестановка на всех числах, а не для отдельных цифр.
Можете пояснить тогда? Мне казалось, что частотный анализ применим именно в случае, когда производится подстановка отдельных цифр. А если рассматривать всё число целиком, то не очень понятно, что частотный анализ может дать вообще.
Насколько я понял, индексы в данной модели соответствуют номерам карт.
Возможно, я не совсем правильно понимаю алгоритм (а алгоритма расшифровки вообще не нашёл, даже в java-коде).
Но, если каждой цифре соответствует другая цифра (судя по строкам F(0) = 3; F(1) = 1; F(2) = 2; F(3) = 0, это так), то, зная платёжную систему (допустим, VISA, код 4) и номер банка (допустим, 12345) и видя шифротекст 9812 9448 1239 7064, мы делаем вывод о соответствии 4=9; 1=8; 3=1;4=2; 5=4, и можем подставить это в шифротекст: 4123 4551 23X4 XXX5, где X — цифра из {0,6,7,8,9}. Зная дополнительно последние 4 цифры карты (допустим, 7895), в данном примере мы можем сузить множество вариантов открытого текста до 4123 4551 23Y4 7895, где Y из {0,6}. Ещё у нас есть контрольная цифра, что добавит немного информации.
Это пример вырожденного варианта частотного анализа (с частотой 100% для соответствий 4=9; 1=8 ...).
А если вдруг окажется, что PIN, CVC защищены тем же ключом и шифром, что и номер карты, то на деле они не так уж и защищены.
Приведенный пример — для множества из четырёх элементов. Безусловно, можно взять цифры в качестве элементов и тогда качество шифрования будет на нуле. Но обычно подразумевается, что элементом является само число и тогда количество элементов в примере с картами равно 10^16 (или 10^15, если без контрольной суммы), но в этом случае предложенный метод будет, мягко говоря, неприменим из-за необходимости выполнять 10^16 операций шифрования.
Format preserving encryption или как правильно шифровать номера кредиток