ハードコア述語

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