web-dev-qa-db-ja.com

HKDFとキーストレッチ

すべての主要な派生関数は、何らかのプロセスを繰り返すことにより、主要な拡張フェーズを実行すると思いました。しかし、私はそのプロセスをHKDFで見ることができません。 HKDFは重要な強化を行いませんか?

入力としてパスフレーズがあり、たとえば、このパスフレーズから派生した1024バイトが必要な場合(暗号化用にいくつかのバイト、MAC用にいくつかのバイト)。あなたは何をお勧めします? PBKDF2に直接アクセスしますか?または、HKDFを何らかの方法で使用しますか?

9
James

[〜#〜] hkdf [〜#〜]鍵導出関数 です:対称鍵(バイトの束)を別の対称鍵に変換します。より長く(それが演習のポイントです)。

関数slowを作成するために複数の内部反復を行うことは、入力キーが本質的に低いエントロピーである場合に意味のある防御メカニズムです。 passwordの場合(これは避けられない生物学的事実です:ランダムに見えるデータの記憶媒体として、人間の脳は吸います)。パスワードからキーを導出することは、単純に別のキーからキーを導出するよりも複雑なタスクです。 HKDFは「パスワード」ビットを処理するふりをしません。そのためには PBKDF2 が必要です。これはパスワードベース( "PB"の部分)であり、HMACも使用します。今回は構成可能な(場合によっては膨大な)反復数を使用します。

HKDFは一部の暗号化プロトコルのビルディングブロックであり、直接使用するものではありません。

14
Thomas Pornin