Аноним

Квантовый алгоритм для решения задачи поиска коллизий: различия между версиями

Материал из WEGA
Строка 21: Строка 21:
'''Collision (F, k)'''
'''Collision (F, k)'''


1. Выбрать произвольное подмножество K С X мощности k. Построить таблицу L размера k, каждый элемент которой содержит отдельную пару (x, F(x)), x 2 K.
1. Выбрать произвольное подмножество <math>K \subseteq X</math> мощности k. Построить таблицу L размера k, каждый элемент которой содержит отдельную пару (x, F(x)), <math>x \in K</math>.


2. Отсортировать L в соответствии со второй записью в каждом элементе L.
2. Отсортировать L в соответствии со второй записью в каждом элементе L.


3. Проверить, содержит ли L коллизию – то есть существуют ли отдельные элементы (X0;F(X0));(X1;F(X1)) 2 L, для которых F(X0) = F(x1). Если да, перейти к шагу 6.
3. Проверить, содержит ли L коллизию – то есть существуют ли отдельные элементы <math>(x_0,F(x_0)),(x_1, F(x_1)) \in L</math>, для которых <math>F(x_0) = F(x_1)</math>. Если да, перейти к шагу 6.


4. Вычислить x1 = Grover(H; 1), где H:X!f0;1g обозначает функцию, определяемую следующим образом: H(x) = 1 тогда и только тогда, когда существует X0 2 K так, что (x0; F(x)) 2 L, но x =6x0.  (Заметим, что x0 является уникальным, если таковой существует, поскольку мы уже проверили, что в L нет коллизий).
4. Вычислить <math>x_1 = Grover(H, 1)</math>, где <math>H: X \to \{ 0, 1 \}</math> обозначает функцию, определяемую следующим образом: H(x) = 1 тогда и только тогда, когда существует <math>x_0 \in K</math>, такой, что <math>(x_0; F(x)) \in L</math>, но <math>x \ne x_0</math>.  (Заметим, что если <math>x_0</math> существует, то он является уникальным, поскольку мы уже проверили, что в L нет коллизий).


5. Find(x0;F(x1)) 2 L.
5. Find(x0;F(x1)) 2 L.
4446

правок