メインコンテンツまでスキップ

3. Overview (概要)

3. Overview (概要)

公開鍵暗号の多くのアプリケーションでは、ユーザーのセキュリティは最終的に1つ以上の秘密テキスト値またはパスワードに依存しています。しかし、パスワードは従来の暗号システムの鍵として直接適用できないため、パスワードを使用して暗号操作を実行するには、パスワードの何らかの処理が必要です。さらに、パスワードは比較的小さな空間から選択されることが多いため、その処理において検索攻撃に対する防御に特別な注意が必要です。

Morris と Thompson [MORRIS] によってパスワードテーブルの保護のために説明された、パスワードベース暗号への一般的なアプローチは、パスワードとソルト (salt) を組み合わせて鍵を生成することです。ソルトは、パスワードから導出された大きな鍵のセットへのインデックスと見なすことができ、秘密に保つ必要はありません。攻撃者が可能なパスワードのテーブル (いわゆる「辞書攻撃」) を構築することは可能かもしれませんが、可能な鍵のテーブルを構築することは困難です。なぜなら、各パスワードに対して多くの可能な鍵が存在するためです。したがって、攻撃者は各ソルトに対して個別にパスワードを検索することに制限されます。

パスワードベース暗号への別のアプローチは、比較的コストの高い鍵導出技術を構築することで、全数探索のコストを増加させることです。これを行う1つの方法は、鍵導出技術に反復回数 (iteration count) を含めることです。これは、鍵を導出する基礎となる関数を何回反復するかを示します。適度な回数の反復 (たとえば、1000回) は、正当な当事者が鍵を計算する際の負担にはならない可能性が高いですが、攻撃者にとっては大きな負担となります。

ソルトと反復回数は、PKCS #5 v2.0 におけるパスワードベース暗号化の基礎を形成しており、ここでも様々な暗号操作のために採用されています。したがって、ここで定義されるパスワードベース鍵導出は、パスワード、ソルト、および反復回数の関数であり、後者の2つの量は秘密に保つ必要はありません。

パスワードベース鍵導出関数から、パスワードベース暗号化およびメッセージ認証スキームを定義することは簡単です。PKCS #5 v2.0 と同様に、ここでのパスワードベース暗号化スキームは、基礎となる従来の暗号化スキームに基づいており、従来のスキームの鍵はパスワードから導出されます。同様に、パスワードベースメッセージ認証スキームは、基礎となる従来のスキームに基づいています。この2層アプローチにより、パスワードベース技術は、それらが基づく基礎技術の観点でモジュール化されます。

パスワードベース鍵導出関数は、ここで定義される暗号化およびメッセージ認証スキーム以外のアプリケーションを見つけることが期待されます。たとえば、鍵導出関数の単一のアプリケーションで鍵のセットを導出し、関数の個別のアプリケーションで各鍵を導出するのではなく、鍵導出関数の出力の部分文字列としてセット内の鍵を取得することができます。このアプローチは、セッション指向プロトコルにおける鍵確立の一部として採用される可能性があります。別のアプリケーションはパスワードチェックで、鍵導出関数の出力が (ソルトと反復回数とともに) パスワードの後続検証の目的で保存されます。

本文書全体を通じて、パスワードは任意の長さのオクテット文字列と見なされ、その解釈はテキスト文字列として指定されていません。しかし、相互運用性の観点から、アプリケーションは何らかの共通のテキストエンコーディング規則に従うことが推奨されます。ASCII と UTF-8 [RFC3629] は2つの可能性です (ASCII は UTF-8 のサブセットです)。

パスワードの選択は本文書の範囲外ですが、考慮に入れる価値のあるガイドライン [NISTSP63] が発行されています。