one passwordで暗号化して保存したいファイルが最大10,000個あります。
これは一般的に間違っていますか?
単一のパスワード/派生キーで十分ですか、または
これは一般的に間違っていますか?
実装に2つの問題があります。
IVの代わりにランダムプレフィックスを使用
これは技術的には実行できますが、推奨または推奨されていません。詳細については、 this を参照してください。ファイルごとにランダムなIVを生成し、暗号文と一緒に(プレフィックスまたはサフィックスとして)保存します。
派生キーを暗号化キーとして直接使用します。
パスワードが変更された場合は、すべてのファイルを再度復号化して暗号化する必要があります。これを解決するには、すべてのファイルの暗号化に使用される単一のランダム暗号化キーを生成する必要があります。次に、このキーをユーザーパスワードから派生したマスターキーで暗号化し、別のファイルに保存します。パスワードが変更された場合(したがってマスターキー)、暗号化キーを含むファイルのみを復号化および暗号化します。同様のスキーマを使用するよく知られた実装の例については、 [〜#〜] dpapi [〜#〜] とそれがキーを処理する方法を見てください。
単一のパスワード/派生キーで十分ですか、または
- ファイルごとに新しいキーを取得する必要がありますか(時間がかかるのではないかと心配しています)?
- 大量のファイル(たとえば、100ごと)の新しいキーを取得する必要がありますか?
これは、何に対して防御しているかによって異なります。上記の私のコメントを考慮すると、ユーザーパスワードから各暗号化キーを導出するのではなく、強力なCSPRNGからランダムに生成します。ファイルごとに新しいランダム暗号化キーがある場合は、暗号化キー暗号化されたマスターキーと暗号文およびIVを保存する必要があります。ファイル暗号化キーが侵害された場合、その1つのファイルのみが侵害されます。単一の暗号化キーがマスターキー(ブルートフォース?)を損なうことなく侵害される可能性があるかどうかを考える必要があります。このシナリオが起こりそうにない場合、またはそれに対して防御しないことを選択した場合は、すべてのファイルに単一の暗号化キーを使用できます。
すべてのファイルに単一のキーを使用するときに考慮すべきもう1つのことは、キーを変更する必要がある前に、単一のキーで暗号化されたデータの大きさです。この質問への回答については、 this および this を参照してください。