一方向性関数

一方向性関数（いちほうこうせいかんすう、）とは、関数値は容易に計算できるが逆関数の計算は非常に困難である関数を指す。「トラップドア関数」という別称がある。

　暗号理論などで用いられる概念である。素因数分解問題の困難性を用いたものが代表的。

以下では、単に「多項式時間アルゴリズム」と書いた場合は「平均多項式時間確率アルゴリズム」を指す。

厳密な定義 
 で自然数の集合を表す。
Σ = {0, 1} とし、とする。

関数  が以下を満たす時、関数  は一方向性関数であるという：

  は多項式時間で計算可能。すなわちある多項式時間アルゴリズム C があって C(x) = f(x)
 任意の多項式時間アルゴリズム A に対し、ある 無視可能函数  と、ある  が存在して、全ての k > k0 に対し、

一方向性関数の存在性 

現在のところ、一方向性関数の存在性は証明されていない。
（一方向性関数の存在性が示せれば、P≠NP が系として従う）。
しかし、一方向性関数の候補となる関数はいくつか知られている。
一方向性関数が存在すると証明が与えられたわけではないものの、
暗号理論では一方向性関数の存在性を仮定して議論を進める。

一方向性関数族 
I を Σ* の部分集合とし、

D = {Dn}n ∈ I、R ={Rn}n ∈ I を Σ* の

部分集合の族とする。
G1、G2 を多項式時間アルゴリズムとし、
F = {fk: Dk → Rk} を関数の族とする。
組 (D, R, G1, G2, F) が以下を満たすとき、(D, R, G1, G2, F) を一方向性関数族という：
 G1 は 1k を入力すると n ∈ I∩Σk を出力するアルゴリズム。
 G2 は n ∈ I を入力すると x ∈ Dn を出力するアルゴリズム。
 ある多項式時間アルゴリズム C があって C(x, n) = fn(x)。
 任意の多項式時間アルゴリズム A に対し、ある negligible な関数 ν とある k0 ∈  が存在して、全ての k > k0 に対し、Pr[x ← A(n, y) | n ← G1(1k), x ← G2(n), y ← f(x)] < ν(l)。

一方向性関数が存在する事は一方向性関数族が存在する事の必要十分条件である事が知られている。

弱一方向性関数
関数 f: Σ* → Σ* が以下を満たす時、関数 f は弱一方向性関数であるという：

 f は多項式時間で計算可能。
 ある多項式 P が存在し、任意の多項式時間アルゴリズム A に対し、ある k0 が存在し、全ての k > k0に対し、Pr[z≠f(x) | x ←R Σk, y ← f(x), z ← A(1k, y)] > 1/P(k)。

定理　一方向性関数が存在する必要十分条件は弱一方向性関数が存在する事である。

証明の概略（⇒）自明。

（⇐）f を弱一方向性関数とする。g を g(x1 || … || xN) = f(x1) || … || f(xN) と定義する。ただしここで「||」はビット列の連接、N = 2kP(k)。（P は弱一方向性関数の定義の条件 2 にあるもの）。
この時 g-1 を求めるには、f -1 を N 回計算しなければならない。

どのようなアルゴリズムを用いても f -1 を計算するには 1/P(k) ステップかかるので、f -1 を N 回計算するのは多項式時間ではできない。

非一様一方向性関数
関数 f: Σ* → Σ* が以下を満たす時、関数 f は 非一様一方向性関数であるという：

 f は多項式時間で計算可能。
 任意の多項式時間サイズの回路族 A = {Ak} に対し、ある無視可能函数 ν が存在して、Pr[x ← Ak(y) |  x ←R Σk, y ← f(x)] < ν(l)。

多項式時間アルゴリズムは多項式時間サイズの回路族で表す事ができるので、非一様一方向性関数は必ず一方向性関数である。しかし逆はよく分かっていない。

一方向性関数の候補

集合 {(p, q) ∈ 2 | p, q は素数で、p のビット数 = q のビット数} から自然数の集合 への写像 (p, q)  pq は一方向性関数であると予想されている。

必要十分条件 

以下は全て同値である。
 一方向性関数が存在する
 弱一方向性関数が存在する
 一方向性関数族が存在する
 暗号論的擬似乱数生成器が存在する
 擬似ランダム関数の族が存在する。
 電子署名方式が存在する。

関連項目 
 暗号学的ハッシュ関数
 素因数分解
 離散対数

暗号技術
関数
数学に関する記事