鍵導出関数
秘密の値から、適切な長さと形の鍵を作り出す関数。ただしどのKDFを選ぶかは、元の秘密がどれだけ強いかで決まる。
KDF(鍵導出関数)は秘密の値を受け取り、1つ以上の鍵素材を出力する。種類は大きく2系統に分かれ、解く問題は正反対だ。この2つを取り違えるのは、暗号の典型的な失敗のひとつである。
一方は、パスワードのようにエントロピーの低い入力から出発する。総当たりを防ぐため、わざと遅く、メモリも大量に使うように作られており、PBKDF2、bcrypt、scrypt、Argon2がこれにあたる。もう一方は、Diffie-Hellman鍵交換の出力のように、すでにエントロピーの高い素材から出発し、偏りをならして必要な長さに伸ばすだけでよい。これがHKDFの役目で、まず抽出し、次に拡張する。パスワードにHKDFを使っても、攻撃者の負担はまったく増えない。