ハッシュ関数に対する量子攻撃


8

質問の行は、PDF版のペーパー「 古典的証明システムに対する量子攻撃-量子巻き戻しの難易度(Ambainis et al。、2014)」のセクション4のピックワントリックに触発されています。スライドはこちらから入手できます。私はそこでの議論を完全には守っていないので、何か重要なことを逃したかもしれませんが、ここにそれらのトリックの私の解釈があります。

古典ハッシュ関数を検討xH(x)それを見つけることは計算が困難である衝突耐性ある。すなわちH(x)=H(x)xx。このハッシュ関数を使用してメッセージのコミットメントをエンコードしたいと思います。つまり、私はいくつかのメッセージ取るm、いくつかランダムに連結私はコミットメント生成するように、端部に。私のコミットメントを証明するように求められたとき、c = H(m '\ Vert u')であるような別のペア(m '、u')を見つけることができませんuc=H(mu)(m,u)c=H(mu)ハッシュの衝突のない性質のため。私の唯一の選択肢は、(m,u)へのコミットメントを開くことです。

さて、ハッシュ関数の量子回路でこのプロトコルを攻撃します。

  1. すべての可能な入力xiを重ね合わせ、この状態でハッシュ関数をクエリして、状態|ψ=i|xi|H(xi)を取得します。

  2. 2番目のレジスターを測定して、ランダムなコミットメントを取得します。測定では、一部のiについてランダムにc=H(xi)を選択します。最初のレジスタは、\ vert \ phi \ rangle = \ sum_j \ vert x_j \ rangleを持ち、\ forall j、c = H(x_j)となります。i|ϕ=j|xjj,c=H(xj)

  3. 相手から与えられたへのコミットメントを開きたいと思います。最初のレジスタでGroverの検索を使用して、の状態から、特別なプロパティを満たすを見つけます。特に、特別なプロパティは、最初のビットはです。つまり、を検索します。mxsol|ϕ=j|xj|m|xsolmxsol=mu

以前に投稿されたスライド(スライド8)とその用語を使用すると、2つのセットと交点から値を見つけることが効率的です。ここで、はすべてののセットで、あり、はすべてののセットで、最初のビットは正確にです。xSPSxH(x)=cPx|m|xm

この攻撃に関する私の質問は次のとおりです。

  1. 攻撃の基本的な考え方は正しいですか?間違っている場合は、残りの投稿を無視してください!

  2. 特定のコミットした後、重ね合わせにいくつの要素がありますか?任意のメッセージへのコミットメントを開くことができるように、(ハッシュ関数の範囲のサイズ)要素が必要なようです。しかし、これは大きすぎます。|ϕcO(N)

  3. グローバー検索の速度-これは前のポイントに関連しています-は別のものです。このような大きな重ね合わせを検索する計算の複雑さは、すべてのを検索する必要があるため、ハッシュ関数の特定の出力のプレイメージを推測するのと同じではないでしょうか。この場合、利点はどこですか?|ϕu

私は数学的証明よりも直感を探しているので、どんな助けも大歓迎です!

回答:


1

攻撃の基本的な考え方は正しいですか?間違っている場合は、残りの投稿を無視してください!

主に。あなたがそれを説明する方法、あなたは確かに状態を得るでしょう|ϕが、あなたはなりませんユニタリ変換を実行できるようにI|ϕϕ|。しかし、ステップ3で、あなたがオン状態グローバーを実行したとき|ϕ、あなたが実際に適用する必要がI|ϕϕ|Groverのアルゴリズムの一部として。その理由は以下の通りである:通常、グローバーアルゴリズムとして提示された検索値x{0,1}n述語Pを満たす。この場合、Groverのアルゴリズムはまず状態を|ϕ:=x{0,1}n2n/2|x初期化しますφ = Σ のx { 0 1 } N 2 - 、N / 2 | X 。そして、そのメインループの間に、それはフリップオペレータの適用I|ϕϕ|。この演算子は、次の場合に簡単に作成できます|ϕ=x{0,1}n2n/2|x、それは通常、アルゴリズムの要件として言及されていません。しかしながら、代わりの検索x{0,1}n、あなたが検索できxXいくつかのセットのためのX。(結局のところ、長さnのビット文字について特別なことは何もありません。)次に、グローバーの説明を変更する必要があります。初期状態は|になります|ϕ=xX2|X|/2|x、私たちは適用する必要がありI|ϕϕ|メインループ中。多くのセットX(たとえば、N法とする数値)の場合、構築はかなり簡単です|ϕI|ϕϕ|。ただし、一般的なケースでは、どちらかを構築することが難しい場合があります。アルゴリズムの説明では、同様の状況があります。つまり、X={x:H(x)=c}固定c。しかし、そのセットX場合、構築する方法はありません|ϕまたはI|ϕϕ|。これが、アルゴリズムが機能しない理由です(ただし、それでも正しい考えが得られます)。代わりに、あなたが引用する論文では、両方|ϕI|ϕϕ|この目的のためだけに構築された特別な神託によって提供されます。これらのオラクルを使用して、状態でGroversアルゴリズムを実行できます|ϕ

重ねてどのように多くの要素があります|ϕ 我々は一定にコミットした後にc

これは、選択したパラメーターによって異なります。Mがドメインのサイズであり、NHの範囲のサイズである場合、おおよそM/Nを期待します。物事が興味深いものにするために、あなたは選ぶべきM » Nを(少なくとも重ね合わせで指数関数的に多くの要素が存在することになるように、2 | M |すべてのメッセージが可能であるように)。ただし、これについて不思議に思っているのは、Groverを機能させるには要素の数を少なくする必要があると考えているためだと思います。そうではありません。以下を参照してください。MNHMN2|m|

グローバー検索の速度-これが主な問題であり、彼らのトリックが実際にどのように機能するのかわかりません。すべてのuを検索する必要があるため、計算の複雑さは、ハッシュ関数の特定の出力の事前イメージを推測するのと同じではないでしょうか。この場合、利点はどこですか?

ここに誤解があるようです。この回答の冒頭で、グローバーのアルゴリズムについての私の説明を思い出してください。グローバー検索いくつかxXいくつかの述語満たし、P。私たちの場合、Xcのすべての事前画像のセットであるため、巨大(M/N要素)になる可能性がありc。しかし、それは問題ではありません。リコール元のグローバーは、上で動作することを{0,1}n、我々はいくつか探しているとしても巨大であるが、限り迅速に動作しているx{0,1}n、いくつかの一般的な性質を有していますP。例えば、我々はグローバーを使用して検索する場合x{0,1}n満足することがこと33x(述語P)、我々は多く存在することを有しxさんが満たすことP、すべての33x満たすこと!そして、ランタイムは √のようなものになります33。だから、一般的なルールとして、述語場合Pすべてのために満足しているiの番目の要素Xその後、グローバーのアルゴリズム、そのための検索xXを満たすこと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|回。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.