Key derivation function

提供: tezos-wiki
移動先: 案内検索

cryptographyでは、キー導出関数 'KDF' )は、マスターなどの秘密の値から1つ以上の[[key(暗号)|秘密鍵]キー、パスワードパスフレーズのいずれかを入力します。 KDFは、キーをより長いキーに引き伸ばしたり、Diffie-Hellmanキー交換の結果であるグループ要素を[[アドバンスト]で使用する対称キーに変換するなど、必要な形式のキーを取得するために使用できます暗号化標準| AES]]を参照してください。鍵付き暗号ハッシュ関数は、鍵の導出に使用される擬似乱数関数の一般的な例です。

KDFの使用[編集]

  • 共通の秘密値から1つ以上のキーを派生させる非秘密のパラメータ(「キーの多様化」とも呼ばれます)と併せて使用します。そのような使用は、派生キーを取得した攻撃者が、入力秘密値または他の派生キーのいずれかに関する有用な情報を学習するのを防ぐ可能性がある。また、KDFは、導出された鍵が、いくつかの特定の暗号化システムで「弱い鍵」を避けるなど、他の望ましい特性を持つことを保証するためにも使用できます。
  • KDFの最も一般的な使用方法は、passwdファイルまたはshadow passwordで使用される[[暗号化ハッシュ関数#パスワード検証|パスワード検証]ファイル。 KDFは、もともとこの目的のために設計されていないにもかかわらず、「パスワードハッシュ関数」に望まれる特性を有する。秘密でないパラメータは、この文脈では「」と呼ばれる。

:2013年に[パスワードハッシング競争]が発表され、パスワードハッシングのための新しい標準アルゴリズムが選択されました。 2015年7月20日、競技は終了し、[Argon2]が最終優勝者として発表されました。 Catena、Lyra2、Makwa、yescryptの4つのアルゴリズムが特別な認識を受けました。

  • マルチパーティ[key-agreement protocol]のコンポーネントとして。このようなキー導出関数の例としては、 IEEE Std 1363-2000で定義されているKDF1ANSI X9.42の同様の関数があります。
  • 秘密のパスワードやパスフレーズから鍵を引き出す。
  • 提供されている長さと異なる長さのキーを導出する:この目的のために設計されたKDFの一例はHKDFです。
  • キーストレッチとキーの強化。

キーストレッチとキー強化[編集]

キー導出関数は、通常、暗号鍵として直接使用される望ましい特性を持たない秘密パスワードまたはパスフレーズから鍵を導き出すアプリケーションでも使用されます。そのようなアプリケーションでは、一般に、パスワードまたはパスフレーズの入力値に対してブルートフォース攻撃または辞書攻撃を挫折させるように、キーの導出機能を意図的に遅くすることが推奨されています。

このような使用は、派生したキーがどこにあるか、キーの導出関数、元のキーかパスワードか、暗号として機能する乱数、サブ関数の[反復回数]を参照します。派生キーは、元のキーまたはパスワードの代わりにシステムのキーとして使用されます。 saltの値と反復回数(固定されていない場合)は、ハッシュされたパスワードとともに格納されるか、暗号化されたメッセージとともに平文として送信されます。

ブルートフォース攻撃の難易度は反復回数とともに増加します。実際の反復回数の制限は、ユーザーがコンピュータへのログインや復号化されたメッセージを見る際に知覚可能な遅延を許容したくないということです。 saltの使用は、攻撃者が派生キーの辞書を事前に計算するのを防ぎます。これにより、攻撃者と正当なユーザーの両方が強制的に塩価のブルートフォース検索を実行します。キーストレッチを導入した論文では、この以前の手法を引用し、別の名前を意図的に選択しましたが、キーストレッチを指す用語として「キー強化」が使用されていることは間違いありません。

歴史[編集]

[[マニュアルページ(UNIX)|マニュアルページ]の後に、意図的に遅い(キーストレッチ)パスワードベースのキー導出関数が「 crypt」(または「crypt(3) )、1978年に[Robert Morris(cryptographer)| Robert Morris]によって発明されました。ユーザーのパスワードの最初の8文字をキーとして定数(ゼロ)を暗号化し、変更された DES暗号化アルゴリズム(リアルタイムコンピュータクロックから読み取った12ビットの数値を使用して計算を混乱させる)。結果として得られる64ビットの数字は、11個の印字可能な文字としてエンコードされ、Unixパスワードファイルに格納されます。それは大きな進歩でしたが、PDP-11時代からプロセッサスピードが増したため、暗号化が可能であり、ストレージの進歩により12ビットの塩が不十分になりました。 crypt関数の設計では、ユーザーのパスワードも8文字に制限されているため、キースペースが制限され、強力な[パスフレーズ]は不可能になります。


このような[[PBKDF2](RFC 2898で指定された)、例えば[[SHA-2]、より塩(例えば64ビット以上)と高い反復として、暗号ハッシュを使用するような最新のパスワードベースのキー導出関数、数(数十または数十万)。

NISTは、少なくとも128ビットのランダム塩と、SHAシリーズやAES(MD5は承認されていません)などのNIST認可の暗号機能を必要とします。ハイスループットは汎用ハッシュ関数では望ましい特性ですが、ブルートフォースクラッキングに対する防御が主な関心事であるパスワードセキュリティアプリケーションでは、逆のことが当てはまります。良好なアルゴリズムのみだけでなく、上の計算コストの一定量を強制されないので、ブルートフォースクラッキングのためのそのようなGPUは、FPGAの、さらにはASICのような超並列ハードウェアの成長使用は、適切なアルゴリズムの選択はさらに重要になりましたこのようなタスクのための最新の大規模並列プラットフォームのコスト/パフォーマンスの利点にも抵抗します。さまざまなアルゴリズムが、bcryptscrypt、そして最近ではarg2(PHCコンテストの優勝者)を含むこの目的のために特別に設計されています。攻撃者がおよそ3,600万個のパスワードハッシュを盗んだ大規模なAshley Madison data breachは、パスワードを確保する際のアルゴリズム選択の重要性を示しています。 bcryptのはハッシュを保護するために用いたが、損なわれたデータ内のアカウントのかなりの部分が、汎用[MD5]アルゴリズムに基づくパスワードハッシュを含んでいた(高価で時間のかかるクラッキング大規模なブルートフォースを行います)これにより、1100万を超えるパスワードが数週間でクラックされる可能性がありました。

2017年6月には、NISTは、と述べて、自分のデジタル認証ガイドラインの新しいリビジョン、NIST SP 800-63B-3を発行しました:検証者は、オフライン攻撃に耐性のある形で[すなわちパスワード]記憶の秘密を保存するものと」記憶の秘密がされなければなりません入力は、パスワードのハッシュを生成して塩漬けし、適切な一方向鍵導出関数を使用してハッシュ。鍵導出関数は、パスワード、塩、およびコスト要因を取る。彼らの目的は、取得した攻撃者が裁判を推測各パスワードを作ることです高価なパスワードハッシュファイルなので、推測される攻撃のコストは高くなるか、または高くなります。 "塩は少なくとも32ビットの長さでなければならず、保存されたハッシュ間の塩分の衝突を最小限に抑えるために任意に選択されるべきです"。

ソース[編集]

http://wikipedia.org/