拡張出力関数(XOF )は、出力が任意に長くなる暗号学的ハッシュ関数の一種であり、暗号学的に安全な擬似乱数生成器として使用できます。[ 1 ]
特定のハッシュ構造であるスポンジ構造では、任意のスポンジハッシュが自然な XOF になります。スクイーズ操作を繰り返すことで XOF が得られます (固定サイズの結果を持つ通常のハッシュ関数は、固定ビット数を取得した後にスクイーズフェーズを停止することでスポンジメカニズムから得られます)。[ 2 ]
安全な XOF は、衝突、原像、および第 2 原像に対して耐性があります。技術的には、結果を固定長に切り詰めることで任意の XOF を暗号学的ハッシュに変換できますが、現実世界では、ハッシュと XOF はドメイン分離を使用して異なる方法で定義される傾向があります。[ 3 ] ) スポンジ構成 XOF の例には、 Keccakファミリーのアルゴリズム、SHAKE128、SHAKE256、および効率の高いバリアントKangarooTwelve があります。[ 1 ]
SkeinやRadioGatúnなど、スポンジ構造ではないXOFも存在する。
XOF はその性質上、関連する出力 (長い結果には短い結果が接頭辞として含まれる) を生成する可能性があります。そのため、鍵導出に KDF を使用すると、関連する出力の問題が発生する可能性があります。単純な例として、Triple DES鍵が XOF で生成され、実装に混乱があり、一部の操作が 3TDEA (3 × 56 = 168 ビット鍵) として実行され、一部が 2TDEA (2 × 56 = 112 ビット鍵) として実行される場合、暗号化結果を比較すると、攻撃の複雑さが 56 ビットに低下します。同様の問題は、NIST SP 800-108のハッシュをKDF で単純に置き換える場合にも発生する可能性があります。 [ 5 ]