一方向性関数のソースを表示
←
一方向性関数
ナビゲーションに移動
検索に移動
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループに属する利用者のみが実行できます:
登録利用者
。
このページのソースの閲覧やコピーができます。
'''一方向性関数'''(いちほうこうせいかんすう、{{lang-en-short|one-way function}})とは、関数値は容易に計算できるが[[逆関数]]の計算は非常に困難である[[関数 (数学)|関数]]を指す。 以下では、<!--特に断りがなければ、-->単に「[[多項式時間]]アルゴリズム」と書いた場合は「平均多項式時間[[乱択アルゴリズム|確率アルゴリズム]]」を指す。 == 厳密な定義 == <math>{\mathbb N}</math> で自然数の集合を表す。 Σ = {0, 1} とし、<math>\Sigma^* = \cup_{k\in{\mathbb N}}\Sigma^k</math>とする。 関数 <math>f : \Sigma^* \to \Sigma^*</math> が以下を満たす時、関数 <math>f</math> は'''一方向性関数'''であるという: # <math>f</math> は[[多項式時間]]で計算可能。すなわちある多項式時間アルゴリズム ''C'' があって ''C''(''x'') = ''f''(''x'') # 任意の多項式時間アルゴリズム ''A'' に対し、ある [[無視可能函数]] <math>\nu</math> と、ある <math>k_0 \in {\mathbb N}</math> が存在して、全ての ''k'' > ''k''<sub>''0''</sub> に対し、 #:<math>Pr\left[x \gets_R \Sigma^k, y \gets f\left(x\right),x' \gets A\left(1^k, y\right) : y=f\left(x'\right)\right] \le \nu\left(l\right) .</math> == 一方向性関数の存在性 == 現在のところ、一方向性関数の存在性は証明されていない(一方向性関数の存在性が示せれば、[[P≠NP予想|P≠NP]] が系として従う)。 しかし、一方向性関数の候補となる関数はいくつか知られている。 一方向性関数が存在すると証明が与えられたわけではないものの、 暗号理論では一方向性関数の存在性を仮定して議論を進める。 == 一方向性関数族 == ''I'' を Σ<sup>*</sup> の部分集合とし、 ''D'' = {''D''<sub>''n''</sub>}<sub>''n'' ∈ ''I''</sub>、''R'' ={''R''<sub>''n''</sub>}<sub>''n'' ∈ ''I''</sub> を Σ<sup>*</sup> の 部分集合の族とする。 ''G''<sub>1</sub>、''G''<sub>2</sub> を多項式時間アルゴリズムとし、 ''F'' = {''f''<sub>''k''</sub>: ''D''<sub>''k''</sub> → ''R''<sub>''k''</sub>} を関数の族とする。 組 (''D'', ''R'', ''G''<sub>1</sub>, ''G''<sub>2</sub>, ''F'') が以下を満たすとき、(''D'', ''R'', ''G''<sub>1</sub>, ''G''<sub>2</sub>, ''F'') を'''一方向性関数族'''という: # ''G''<sub>1</sub> は 1<sup>''k''</sup> を入力すると ''n'' ∈ ''I''∩Σ<sup>''k''</sup> を出力するアルゴリズム。 # ''G''<sub>2</sub> は ''n'' ∈ ''I'' を入力すると ''x'' ∈ ''D''<sub>''n''</sub> を出力するアルゴリズム。 # ある多項式時間アルゴリズム ''C'' があって ''C''(''x'', ''n'') = ''f''<sub>''n''</sub>(''x'')。 # 任意の多項式時間アルゴリズム ''A'' に対し、ある negligible な関数 ν とある ''k''<sub>0</sub> ∈ <math>{\mathbb N}</math> が存在して、全ての ''k'' > ''k''<sub>0</sub> に対し、Pr[''x'' ← ''A''(''n'', ''y'') | ''n'' ← ''G''<sub>1</sub>(1<sup>''k''</sup>), ''x'' ← ''G''<sub>2</sub>(''n''), ''y'' ← ''f''(''x'')] < ν(''l'')。 一方向性関数が存在する事は一方向性関数族が存在する事の必要十分条件である事が知られている。 ==弱一方向性関数== 関数 ''f'': Σ<sup>*</sup> → Σ<sup>*</sup> が以下を満たす時、関数 ''f'' は'''弱一方向性関数'''であるという: # ''f'' は[[多項式時間]]で計算可能。 # ある多項式 ''P'' が存在し、任意の多項式時間アルゴリズム ''A'' に対し、ある ''k''<sub>0</sub> が存在し、全ての ''k'' > ''k''<sub>0</sub>に対し、Pr[''z''≠''f''(''x'') | ''x'' ←<sub>''R''</sub> Σ<sup>''k''</sup>, ''y'' ← ''f''(''x''), ''z'' ← ''A''(1<sup>''k''</sup>, ''y'')] > 1/''P''(''k'')。 '''定理''' 一方向性関数が存在する必要十分条件は弱一方向性関数が存在する事である。 '''証明の概略'''(⇒)自明。 (⇐)''f'' を弱一方向性関数とする。''g'' を ''g''(''x''<sub>1</sub> || … || ''x''<sub>''N''</sub>) = ''f''(''x''<sub>1</sub>) || … || ''f''(''x''<sub>''N''</sub>) と定義する。ただしここで「||」はビット列の連接、''N'' = 2''kP''(''k'')。(''P'' は弱一方向性関数の定義の条件 2 にあるもの)。 この時 ''g''<sup>-1</sup> を求めるには、''f''<sup> -1</sup> を ''N'' 回計算しなければならない。 どのようなアルゴリズムを用いても ''f''<sup> -1</sup> を計算するには 1/''P''(''k'') ステップかかるので、''f''<sup> -1</sup> を ''N'' 回計算するのは多項式時間ではできない。 ==非一様一方向性関数== 関数 ''f'': Σ<sup>*</sup> → Σ<sup>*</sup> が以下を満たす時、関数 ''f'' は''' 非一様一方向性関数'''であるという: # ''f'' は[[多項式時間]]で計算可能。 # 任意の多項式時間サイズの回路族 ''A'' = {''A''<sub>''k''</sub>} に対し、ある[[無視可能函数]] ν が存在して、Pr[''x'' ← ''A''<sub>''k''</sub>(''y'') | ''x'' ←<sub>''R''</sub> Σ<sup>''k''</sup>, ''y'' ← ''f''(''x'')] < ν(''l'')。 多項式時間アルゴリズムは多項式時間サイズの回路族で表す事ができるので、非一様一方向性関数は必ず一方向性関数である。しかし逆はよく分かっていない。 ==一方向性関数の候補== 集合 {(''p'', ''q'') ∈ <math>{\mathbb N}</math><sup>2</sup> | ''p'', ''q'' は素数で、''p'' のビット数 = ''q'' のビット数} から自然数の集合 <math>{\mathbb N}</math>への写像 (''p'', ''q'') <math>\mapsto</math> ''pq'' は一方向性関数であると予想されている。 == 必要十分条件 == 以下は全て同値である。 # 一方向性関数が存在する # 弱一方向性関数が存在する # 一方向性関数族が存在する # [[暗号論的擬似乱数生成器]]が存在する # [[擬似ランダム関数]]の族が存在する。 # [[電子署名]]方式が存在する。 == 関連項目 == * [[暗号学的ハッシュ関数]] * [[素因数分解]] * [[離散対数]] {{DEFAULTSORT:いちほうこうせいかんすう}} [[Category:暗号技術]] [[カテゴリ:暗号プリミティブ]] [[Category:関数]] [[Category:数学に関する記事]] [[カテゴリ:計算機科学の未解決問題]]
このページで使用されているテンプレート:
テンプレート:Lang-en-short
(
ソースを閲覧
)
一方向性関数
に戻る。
ナビゲーション メニュー
個人用ツール
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
ソースを閲覧
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
特別ページ
ツール
リンク元
関連ページの更新状況
ページ情報