ハードコア述語
From Wikipedia, the free encyclopedia
暗号理論において、一方向性関数 f に関するハードコア述語(ハードコアじゅつご、Hard-core predicate)とは、x からは簡単に計算出来るが f(x) から計算するのは難しい述語 b のことである。より正確には、x をランダムに選んだとき f(x) から b(x) を 1/2 以上の有意な確率で計算できる確率的多項式時間アルゴリズムが存在しないとき、b を f のハードコア述語と呼ぶ。ハードコア関数も同様にして定義される(ただし弱いものと強いものがある)。
ハードコア述語は、関数 f を逆算するときに「一番難しいところ」を捉えた概念である。
一方向性関数は逆算するのが難しい。しかし像 f(x) から原像 x の部分的な情報 c を得ることについては何も言及していない。例えば、RSA関数は一方向性関数だと予想されているが、原像のヤコビ記号は像から簡単に求められる。
一般的なハードコア述語
一対一関数がハードコア述語を持つならば、一方向性関数であることは自明である。ゴールドライヒ (en:Oded Goldreich) とレビン (Levin) は1989年に任意の一方向性関数を変形した一方向性関数が、ハードコア関数を持つことを示した。 今、f を一方向性関数だとする。関数 g を
と定義する(は連結を表す)。ただし、r の長さは x の長さと同じであるとする。xj を x の j ビットとし、rj を r の j ビットとする。 このとき、
は g のハードコア述語である。ここで、 をベクトル空間 上の標準的な内積とすると、である。f(x) から g(x, r) を 1/2 以上に無視できない確率で計算できるアルゴリズムが存在するならば、x そのものを効率よく求めることができる。同様の構成により、 ビットの出力を持つハードコア関数を構成することができる。
特定の関数に対するハードコア述語
ハードコア述語の応用
任意の一方向性置換から暗号学的擬似乱数を構成することがハードコア述語によって可能となる。もし b が f のハードコア述語ならば、s をランダムな種とし、
が疑似乱数になる。この手法を用いて構成された擬似乱数発生器として、Blum-Blum-Shubが挙げられる。Blum-Blum-Shub擬似乱数発生器では、、 b(x)=xの最下位ビットを用いている。
また、落とし戸付き一方向性置換のハードコア述語は、IND-CPA安全な公開鍵暗号方式を構成することにも使える。落とし戸付き一方向性置換を f、ハードコア述語を b とする。平文を に対して、乱数 r を用いて
という暗号方式がそれである。
ある述語 b がハードコア述語であることを示す帰着は、符号のリスト復号アルゴリズムになっていることも多い。例えば、ゴールドライヒとレビンの帰着はアダマール符号 (または特殊なリード・マラー符号)のリスト復号アルゴリズムになっている。