攻撃の基本的な考え方は正しいですか?間違っている場合は、残りの投稿を無視してください!
主に。あなたがそれを説明する方法、あなたは確かに状態を得るでしょう|ϕ⟩が、あなたはなりませんユニタリ変換を実行できるようにI−|ϕ⟩⟨ϕ|。しかし、ステップ3で、あなたがオン状態グローバーを実行したとき|ϕ⟩、あなたが実際に適用する必要がI−|ϕ⟩⟨ϕ|Groverのアルゴリズムの一部として。その理由は以下の通りである:通常、グローバーアルゴリズムとして提示された検索値x∈{0,1}n述語Pを満たす。この場合、Groverのアルゴリズムはまず状態を|ϕ⟩:=∑x∈{0,1}n2−n/2|x⟩初期化します。φ ⟩ := Σ のx ∈ { 0 、1 } N 2 - 、N / 2 | X ⟩。そして、そのメインループの間に、それはフリップオペレータの適用I−|ϕ⟩⟨ϕ|。この演算子は、次の場合に簡単に作成できます|ϕ⟩=∑x∈{0,1}n2−n/2|x⟩、それは通常、アルゴリズムの要件として言及されていません。しかしながら、代わりの検索x∈{0,1}n、あなたが検索できx∈XいくつかのセットのためのX。(結局のところ、長さnのビット文字列について特別なことは何もありません。)次に、グローバーの説明を変更する必要があります。初期状態は|になります|ϕ⟩=∑x∈X2−|X|/2|x⟩、私たちは適用する必要がありI−|ϕ⟩⟨ϕ|メインループ中。多くのセットX(たとえば、N法とする数値)の場合、構築はかなり簡単です|ϕ⟩とI−|ϕ⟩⟨ϕ|。ただし、一般的なケースでは、どちらかを構築することが難しい場合があります。アルゴリズムの説明では、同様の状況があります。つまり、X={x:H(x)=c}固定c。しかし、そのセットX場合、構築する方法はありません|ϕ⟩またはI−|ϕ⟩⟨ϕ|。これが、アルゴリズムが機能しない理由です(ただし、それでも正しい考えが得られます)。代わりに、あなたが引用する論文では、両方|ϕ⟩とI−|ϕ⟩⟨ϕ|この目的のためだけに構築された特別な神託によって提供されます。これらのオラクルを使用して、状態でGroversアルゴリズムを実行できます|ϕ⟩。
重ねてどのように多くの要素があります|ϕ⟩
我々は一定にコミットした後にc?
これは、選択したパラメーターによって異なります。Mがドメインのサイズであり、NがHの範囲のサイズである場合、おおよそM/Nを期待します。物事が興味深いものにするために、あなたは選ぶべきM » Nを(少なくとも重ね合わせで指数関数的に多くの要素が存在することになるように、2 | M |すべてのメッセージが可能であるように)。ただし、これについて不思議に思っているのは、Groverを機能させるには要素の数を少なくする必要があると考えているためだと思います。そうではありません。以下を参照してください。MNHM≫N2|m|
グローバー検索の速度-これが主な問題であり、彼らのトリックが実際にどのように機能するのかわかりません。すべてのuを検索する必要があるため、計算の複雑さは、ハッシュ関数の特定の出力の事前イメージを推測するのと同じではないでしょうか。この場合、利点はどこですか?
ここに誤解があるようです。この回答の冒頭で、グローバーのアルゴリズムについての私の説明を思い出してください。グローバー検索いくつかx∈Xいくつかの述語満たし、P。私たちの場合、Xはcのすべての事前画像のセットであるため、巨大(M/N要素)になる可能性がありc。しかし、それは問題ではありません。リコール元のグローバーは、上で動作することを{0,1}n、我々はいくつか探しているとしても巨大であるが、限り迅速に動作しているx∈{0,1}n、いくつかの一般的な性質を有していますP。例えば、我々はグローバーを使用して検索する場合x∈{0,1}n満足することがこと33∣x(述語P)、我々は多く存在することを有しxさんが満たすことP、すべての33x満たすこと!そして、ランタイムは √のようなものになります33−−√。だから、一般的なルールとして、述語場合Pすべてのために満足しているiの番目の要素Xその後、グローバーのアルゴリズム、そのための検索x∈Xを満たすことPほどかかりi√歩みます。ここでは、Xセットやサイズは関係ありません。(長い我々が構築物と方法を持っている限り|ϕ⟩とI−|ϕ⟩⟨ϕ|このセットのためのX今、あなたが記述の設定で、。)X={x:H(x)=c}。そしてPと言っ述語であるxで始まるm′。この場合、Groverのアルゴリズムの実行時間を分析するために、Xについては気にしませんX、しかし、要素がP満たす頻度を知る必要があります。それは簡単です:すべて2|m′|-番目の要素はします。したがって、GroverのランタイムはO(2|m′|−−−−√)。これはm′が長い場合に問題になりますが、m′がたとえば少しだけの場合は問題なく機能します。たとえば、ハッシュ関数を使用して1ビットメッセージにコミットする場合、m′任意の値へのコミットメントを開くことができます。
m′が長い例が必要な場合は、構造を変更する必要があります。基本的には、個々にすべてをコミットし、コミットメントを連結します。次に、前述の方法を使用して各コミットメントを解除でき、アルゴリズムを実行する必要があります|m′|回。