暗号理論において、擬似乱数関数族( PRFと略記)とは、効率的に計算可能な関数の集合であり、以下の方法でランダムオラクルを模倣します。すなわち、効率的なアルゴリズムでは、PRF族からランダムに選択された関数とランダムオラクル(出力が完全にランダムに固定されている関数)を(有意な利点をもって)区別することはできません。擬似乱数関数は、暗号プリミティブ、特に安全な暗号化方式の構築において不可欠なツールです。
擬似乱数関数は、擬似乱数発生器(PRG)と混同してはならない。PRGの保証は、入力がランダムに選択された場合、単一の出力がランダムに見えるということである。一方、PRFの保証は、対応する入力がどのように選択されたかに関わらず、関数がPRFファミリーからランダムに抽出された限り、すべての出力がランダムに見えるということである。
擬似乱数関数ファミリーは、例えばGoldreich、Goldwasser、Micaliによって与えられた「GGM」構成を使用して、任意の擬似乱数生成器から構築できます。[ 1 ]実際には、擬似乱数関数が必要なほとんどの場面でブロック暗号が使用されますが、ブロック暗号は一般に擬似乱数関数ファミリーを構成するものではありません。AES などのブロック暗号は、限られた数の入力と鍵サイズに対してのみ定義されているためです。[ 2 ]
PRFは、効率的(つまり多項式時間で計算可能)で決定論的な関数であり、2つの異なる集合(定義域と値域)をマッピングし、真の乱数関数のように見える。
本来、真の乱数関数は、一様分布に従う乱数エントリで満たされたルックアップテーブルで構成されるはずです。しかし実際には、擬似乱数関数(PRF)は、定義域内の入力文字列と隠された乱数シードを与えられ、同じ入力文字列とシードで複数回実行され、常に同じ値を返します。とはいえ、任意の入力文字列が与えられた場合、シードが一様分布から取得されていれば、出力はランダムに見えます。
PRF(擬似乱数関数)は、その挙動が真の乱数関数と区別できない場合に優れているとみなされます。したがって、真の乱数関数またはPRFのいずれかから出力が得られた場合、その出力が真の乱数関数によって生成されたものかPRFによって生成されたものかを正しく判定する効率的な方法は存在しないはずです。
擬似乱数関数は入力を受け取ります、 どこはクリーネ星です。入力サイズはどちらも出力サイズインデックスサイズのみに依存する。
関数群、
以下の条件が満たされる場合、擬似乱数である。
OPRF (Oblivious pseudorandom function)では、PRFに関与する2つの当事者から情報が隠蔽されます。[ 4 ]つまり、アリスが秘密の値を暗号的にハッシュ化し、そのハッシュを暗号的にブラインド化してボブに送信するメッセージを作成し、ボブが秘密の値を混ぜて結果をアリスに返し、アリスがそれをアンブラインド化して最終出力を取得する場合、ボブはアリスの秘密の値も最終出力も見ることができず、アリスもボブの秘密の入力を見ることはできませんが、アリスは2つの入力のPRFである最終出力、つまりアリスの秘密とボブの秘密のPRFを見ることができます。[ 5 ]これにより、信頼できない当事者間でも機密性の高い暗号情報のトランザクションを安全に行うことができます。
OPRFは、パスワード認証鍵合意のいくつかの実装で使用されています。[ 5 ]
Microsoft Edgeのパスワードモニター機能では OPRF が使用されています。[ 6 ]
PRFは以下のように使用できます。[ 7 ]