Кто-нибудь может мне помочь со следующей проблемой?
Я хочу найти некоторые значения a i , b jai,bj (mod NN ), где i = 1 , 2 , … , K , j = 1 , 2 , … , Ki=1,2,…,K,j=1,2,…,K (например, К = 6K=6 ), учитывая список значений К 2K2 которые соответствуют различиям a i - b j( модN )ai−bj(modN) (например, N = 251N=251 ), не зная конкретного соответствующего отношения. Поскольку значения a i , b j( модN )ai,bj(modN) не определены однозначно с учетом различий a i - b j( модN )ai−bj(modN) , мы ищем любое допустимое присвоение значений.
Определенно, попытка каждой перестановки чисел К 2K2 в списке (всего К 2 !K2! Возможных случаев), а затем решение модульных уравнений с a i , b jai,bj в качестве переменных невозможно.
Фактически эта проблема возникает в статье о криптоанализе в ранней версии схемы подписи NTRU ( http://eprint.iacr.org/2001/005 ). Однако автор написал только одно предложение «Простой алгоритм возврата находит одно решение…» (в разделе 3.3), и поэтому кто-нибудь может дать больше объяснений? Более того, автор также упомянул, что «каждый круговой сдвиг { ( ( a i + M )модификацияN , ( b i + M )модификацияN } K i = 1{((ai+M)modN,(bi+M)modN}Ki=1 или обмен ( { ( N - 1 - b i , N - 1 - a i ) } K i = 1 )({(N−1−bi,N−1−ai)}Ki=1) приводит к тому же шаблону a i - b jмодификацияNai−bjmodN ”, и полезно ли это утверждение?
Ответы:
Вот предложение для и . Нам дан список . Начните с принятия одного из них без потери общности . Без ограничения общности , и мы получим значение . Теперь возьмите другой и надеемся, что он имеет форму (это происходит с вероятностью ), и выведите .K = 6 N = 251 a i - b jK=6 N=251 ( модН ) 1 - б 1 б 1 = 0 1 2 - б 1 5 / 35 = 1 / 7 2ai−bj(modN) a1−b1 b1=0 a1 a2−b1 5/35=1/7 a2
На этом этапе мы знаем . Наша следующая цель - найти для . Для каждого кандидата , если тогда также должны быть в списке. Если , то вероятность того, что также присутствует в списке, составляет примерно . Так что если мы найдем кандидата для которого также есть в списке, то, вероятно, . Таким образом, мы можем восстановить с некоторой уверенностью.a 1 , a 2 , b 1 a 1 - b j j ≠ 1 a i - b j i = 1 ( a i - b j ) + ( a 2 - a 1 ) = a 2 - b j i ≠ 1 ( a i - b j ) + ( a 2 - aa1,a2,b1 a1−bj j≠1 ai−bj i=1 (ai−bj)+(a2−a1)=a2−bj i≠1 1 ) 33 / 251(ai−bj)+(a2−a1) 33/251 я - б J ( я - Ь J ) + ( 2 - 1 ) я = 1 б 2ai−bj (ai−bj)+(a2−a1) i=1 b2
На этом этапе мы знаем . Таким же образом, как мы восстановили , мы можем восстановить с достаточной уверенностью. Затем мы можем восстановить путем поиска кандидата для которого и оба находятся в списке. Потому что у нас есть еще с, наша вероятность отказа идет значительно вниз. Продолжаем и находим .a 1 , a 2 , b 1 , b 2 b 2 a 3 b 3 a i - b j ( a i - b j ) + ( a 2 - a 1 ) ( a i - b j ) + ( a 3 - a 1 ) а б 3 , а 4 , б 4a1,a2,b1,b2 b2 a3 b3 ai−bj (ai−bj)+(a2−a1) (ai−bj)+(a3−a1) a ,a5,b6,a6,b6b3,a4,b4,a5,b6,a6,b6
В любой точке этого алгоритма мы могли догадаться, что что-то не так, и это в конечном итоге приведет к противоречию (скажем, в какой-то момент нет подходящего кандидата ). Затем мы возвращаемся назад и пробуем другую возможность; если мы исчерпали все возможности, мы снова вернемся назад и попробуем другую возможность (для другой стадии алгоритма); и так далее.ai−bjai−bj
Это хорошее упражнение для программирования этого алгоритма - это, вероятно, единственный способ понять, как правильно осуществить возврат. Это также единственный способ определить, работает ли этот алгоритм на практике.
источник
Обновление : приведенное ниже описание относится к другой задаче (в которой у вас есть все попарные расстояния в наборе, а не попарные расстояния между двумя различными наборами). Я все равно оставлю это, так как это тесно связано.
Эта проблема называется проблемой кольцевой дороги и является частным случаем общей проблемы вложения тора. Это также тесно связано с проблемой магистрали, в которой различия расстояний являются абсолютными (не по модулю некоторого числа).dd
Неизвестно, допускает ли проблема с кольцевым прохождением многовременный алгоритм. Существуют различные псевдополийные алгоритмы для смежных вопросов. Лучшая ссылка (увы, старая) - статья Лемке, Шиены и Смита .
источник
Вот наблюдение, которое, я думаю, дает вам точку опоры, возможно, достаточную для решения проблемы.
Предположим, у нас есть четыре различия: , , , которые возникают как парные различия между двумя 's и двумя ' s. Назовите это квартет различий. Обратите внимание, что у нас нетривиальные отношения:a1−b1a1−b1 a1−b2a1−b2 a2−b1a2−b1 a2−b2a2−b2 aa bb
(a1−b1)−(a1−b2)=(a2−b1)−(a2−b2)(modN).
Вы можете попытаться использовать это отношение для выявления потенциальных квартетов из списка . Например, выберите четыре различия из списка; если они не удовлетворяют вышеуказанным отношениям, то они определенно не возникают из структуры квартета; если они удовлетворяют отношения, они могут возникнуть из квартета.K2K2
Есть много способов взять вещи отсюда, но я подозреваю, что этого будет достаточно.
Я особенно подозреваю, что для вашего примера настройки параметров проблема будет довольно простой, потому что вышеописанный тест для распознавания квартета, вероятно, не будет иметь слишком много ложных срабатываний. Наш из всех способов выбора 4 отличий из списка, будет квартета (которые будут удовлетворять соотношению), а остальные являются не квартетами (которые удовлетворяют связь с вероятностью , эвристически). Поэтому мы ожидаем увидеть примерно ложных срабатываний, то есть 4 кортежа, которые проходят тест, даже если они не являются квартетами. Для ваших параметров это означает, что у нас есть 225 квартетов и(K24)(K24) (K2)2(K2)2 1/N1/N ((K24)−(K2)2)/N((K24)−(K2)2)/N (58905−225)/251≈234(58905−225)/251≈234 другие ложные срабатывания; так что около половины 4-х кортежей, прошедших тест, на самом деле являются квартетами. Это означает, что приведенный выше тест является довольно хорошим способом распознавания квартетов. Как только вы сможете распознать квартеты, вы действительно сможете отправиться в город, чтобы восстановить структуру списка различий.
источник
Вот другой подход, основанный на итеративном поиске чисел, которые не могут появляться среди . Назовем множество Чрезмерно аппроксимацию «S , если мы знаем , что . Точно так же, является overapproximation из «ы , если мы знаем , что . Очевидно, что чем меньше , тем более полезно это по-приближение, и то же самое относится и к . Мой подход основан на итеративном уточнении этих чрезмерных аппроксимаций, т.е. итеративном уменьшении размера этих множеств (поскольку мы исключаем все больше и больше значений как невозможных).{ a 1 , … , a 6 } A a { a 1 , … , a 6 } ⊆ A B b { b 1 , … , b 6 } ⊆ B A B{a1,…,a6} A a {a1,…,a6}⊆A B b {b1,…,b6}⊆B A B
Ядром этого подхода является метод уточнения : с учетом чрезмерного приближения для 's и чрезмерного приближения для ' s найти новое избыточное приближение для ', такое, что . В частности, обычно будет меньше, чем , так что это позволяет уточнить чрезмерное приближение для .A a B b A ∗ a A ∗ ⊊ A A ∗ A aA a B b A∗ a A∗⊊A A∗ A a
С помощью симметрии, по существу, тот же трюк позволит нам уточнить наше чрезмерное приближение для : s: с учетом избыточного приближения для и s и чрезмерного приближения для , это создаст новое -приближение для .b A a B b B ∗ bb A a B b B∗ b
Итак, позвольте мне рассказать вам, как сделать уточнение, тогда я соберу все вместе, чтобы получить полный алгоритм для этой проблемы. В дальнейшем пусть обозначает множество множеств разностей, т. ; мы сосредоточимся на поиске дорабатываться приближения , учитывая .D D = { a i - b j : 1 ≤ i , j ≤ 6 } A ∗ A , BD D={ai−bj:1≤i,j≤6} A∗ A,B
Как рассчитать уточнение. Рассмотрим одну разность . Рассмотрим множество . Основываясь на наших знаниях о том, что является чрезмерным приближением , мы знаем, что хотя бы один элемент из должен быть элементом . Таким образом, мы можем рассматривать каждый из элементов в , как «предложение» для ряда , чтобы возможно включить в . Итак, давайте рассмотрим все различия и, для каждого, определим, какие числа «предложены» .d ∈ D d + B = { d + y : y ∈ B } B b d + B { a 1 , … , a 6 } d + B A d ∈ D dd∈D d+B={d+y:y∈B} B b d+B {a1,…,a6} d+B A d∈D d
Теперь я собираюсь заметить, что число обязательно будет предложено как минимум 6 раз во время этого процесса. Почему? Поскольку различие в , и когда мы его обработаем, будет одним из предложенных чисел (поскольку мы гарантируем, что , обязательно включает ). Точно так же разница появляется где-то в , и это заставит быть предложенным снова. Таким образом, мы видим, что правильное значение будет предложено как минимум 6 раз. То же самое верно для иa 1 a 1 - b 1 D a 1 b 1 ∈ B ( a 1 - b 1 ) + B a 1 a 1 - b 2 D a 1 a 1 a 2 a 3a1 a1−b1 D a1 b1∈B (a1−b1)+B a1 a1−b2 D a1 a1 a2 a3 , и так далее.
Итак, пусть будет набором чисел , которые были предложены как минимум 6 раз. Это, безусловно, является чрезмерным приближением , согласно приведенным выше комментариям.A ∗ a ∗ aA∗ a∗ a
В качестве оптимизации, мы можем отфильтровать все предложения, которые не присутствуют в сразу: другими словами, мы можем рассматривать разность как предполагающее все значения . Это гарантирует , что мы будем иметь . Мы надеемся, что строго меньше, чем ; никаких гарантий, но если все пойдет хорошо, возможно, так и будет.A d ( d + B ) ∩ A A ∗ ⊆ A A ∗ AA d (d+B)∩A A∗⊆A A∗ A
Собирая это вместе, алгоритм для уточнения для получения выглядит следующим образом:A , B A ∗A,B A∗
Пусть . Это множество предложений.S = ∪ d ∈ D ( d + B ) ∩ AS=∪d∈D(d+B)∩A
Подсчитайте , сколько раз появляется каждое значение . Пусть множество значений , которые появляются по крайней мере 6 раз в . (Это может быть осуществлено эффективно путем создания массива из 251 первоначально, первоначально все равен нуля, и каждый раз , когда число предполагается, вы увеличиваете , в конце концов вы несетесь через ищем элементы , которые имеют значение 6 или больше)S A ∗ S a s a [ s ] aS A∗ S a s a[s] a
Подобный метод может быть построен, чтобы уточнить A , B, чтобы получить B ∗ . Вы в основном обратные вещи выше и флип некоторые признаки: например, вместо D + B , вы смотрите на - г + A .A,B B∗ d+B −d+A
Как вычислить начальное чрезмерное приближение. Чтобы получить наше начальное чрезмерное приближение, одна идея состоит в том, чтобы предположить (wlog), что b 1 = 0 . Отсюда следует, что каждое значение a i должно появляться где-то среди D , поэтому список различий D можно использовать в качестве нашего начального чрезмерного приближения для a 's. К сожалению, это не дает нам очень полезного чрезмерного приближения для b .b1=0 ai D D a b
Лучший подход состоит в том, чтобы дополнительно угадать значение одного из а . Другими словами, мы предполагаем (wlog), что b 1 = 0 , и используем A = D в качестве нашего начального чрезмерного приближения a 's. Тогда мы угадать, один из этих 36 значений действительно один из через -х, скажем , на 1 . Это дает нам чрезмерное приближение B = a 1 - D для b . Мы используем это начальное чрезмерное приближение A , Ba b1=0 A=D a a a1 B=a1−D b A,B затем итеративно уточняйте его до сходимости и проверяйте, верен ли результат. Повторим до 36 раз, с 36 различных догадок в 1 (в среднем 6 догадок должно быть достаточно) , пока мы не находим тот , который работает.a1
Полный алгоритм. Теперь у нас может быть полный алгоритм для вычисления a 1 , … , a 6 , b 1 , … , b 6 . По сути, мы выводим начальное избыточное приближение для A и B , а затем итеративно уточняем.a1,…,a6,b1,…,b6 A B
Сделайте предположение: для каждого z ∈ D предположим, что a 1 = z . Сделайте следующее:z∈D a1=z
Начальное течение приближения: Определить A = D и B = г - D .A=D B=z−D
Итеративное уточнение: неоднократно применять следующее до сходимости:
Проверьте успешность: если каждый из наборов A , B имеет размер 6, проверьте, являются ли они допустимым решением проблемы. Если они есть, остановись. Если нет, продолжайте цикл по значениям-кандидатам z .A,B z
Анализ. Будет ли это работать? Сойдет ли он в конечном итоге на A = { a 1 , … , a 6 } и B = { b 1 , … , b 6 } , или застрянет, не решив полностью проблему? Лучший способ выяснить это, вероятно, проверить это. Однако, по вашим параметрам, да, я ожидаю, что это будет эффективно.A={a1,…,a6} B={b1,…,b6}
Если мы используем метод # 1, пока | A | , | Б | не слишком велики, эвристически я ожидаю, что размеры наборов будут монотонно уменьшаться. Рассмотрим выводе A * из A , B . Каждое различие d предполагает | Б | ценности; один из них правильный, а другой | Б | - 1 можно рассматривать (эвристически) как случайные числа. Если x - это число, которое не появляется среди a , то какова вероятность того, что оно выдержит фильтрацию и будет добавлено к A|A|,|B| A∗ ∗ ? Ну, мы ожидаембудет предложено о ( | B | - 1 ) × 36 / 251 раз в общей сложности (в среднем, со стандартным отклонением около квадратного корня из этого). Если | Б | ≤ 36 , вероятность того, что неправильный x переживет фильтрацию, должна составлять примерно p = 0,4 или около того (используя нормальное приближение для бинома с коррекцией непрерывности). (Вероятность меньше, если | B | меньше; например, для | B | =30 , я ожидаю, что p ≈ 0,25 .) Я ожидаю, что размер A ∗ будет примерно равен p ( | A | - 6 ) + 6 , что строго улучшит чрезмерное приближение, поскольку оно строго меньше | A | , Например, если | A | = | Б | = 36 , то исходя из этой эвристики я ожидаю | A ∗ | ≈ 18 , что является большим улучшением по сравнению с | A |,
Поэтому я прогнозирую, что время бега будет очень быстрым. Я ожидаю, что для сходимости будет достаточно 3-5 итераций уточнения, и, вероятно, достаточно около 6 предположений при z . Каждая операция уточнения включает, возможно, несколько тысяч операций чтения / записи в память, и мы делаем это, возможно, 20-30 раз. Итак, я ожидаю, что это будет очень быстро для указанных вами параметров. Тем не менее, единственный способ узнать наверняка - это попробовать и посмотреть, хорошо это работает или нет.
источник