ハードコア関数の誤解(その二)
前回のポストの続きです.
前回紹介したGoldreich-Levinのハードコア関数はハードコア述語,つまり出力長が1ビットでした.ハードコア述語はある意味で1ビット分の擬似乱数を与えることになっています.しかし,たくさんのハードコアビットを同時に得られる方が都合が良いことが多々あります.この場合,Goldreich-Levinのハードコア述語を応用して,より長い擬似乱数列を得ることが可能です.
一番単純な方法は,個の独立な付加的乱数と用意して,とするものです.このは一方向性関数に対するハードコア関数であることが示せます.
この場合にはビット長のハードコア関数の出力を得るために,種値であるビット乱数以外にビットの乱数が必要となります.なお,はまで取ること,つまり出力長はビットまで伸ばすことが可能です.
できれば付加的に必要な乱数の量を減らした方が擬似乱数生成の観点からも嬉しいわけですが,GoldreichとLevinによって付加的乱数の量が少なくて済むハードコア関数のもっと賢い以下の構成方法が提案されています.
ここで,はビットで,各はのビット目から連続したビットです.証明はかなり複雑になりますが,ならばハードコアであることが示せます.(証明はGoldreichの教科書に載っています.)
前の構成方法だとビットの乱数が必要だったところをこの構成方法だとビットまで減らすことができます.
次回に続きます.