web-dev-qa-db-ja.com

ログインを確認し、PBKDF2で暗号化する

PBKDF2を使用してAES-128の構成ファイルを暗号化する暗号化キーを生成するデスクトップアプリケーションを作成しています。構成ファイルには、プログラムのデータを暗号化するために使用されている暗号ランダムキーが含まれています。ユーザーは、インストール時に提供されたそのキーをすでに入力しています。暗号ランダムキーを一度入力すると、覚えやすいパスワードを使用できるようになるという考え方です。ここまでは順調ですね。

したがって、ユーザーがプログラムをロードするときに、パスワードを入力します。パスワードを使用してPBKDF2キーを再生成し、構成ファイルを復号化しました。

ここで、ユーザーが正しいパスワードを入力したことを簡単に確認するにはどうすればよいですか?もちろん、間違ったパスワードを入力した場合、データの復号化は機能しません。しかし、プログラムを読み込ませずに、ユーザーが解読エラーメッセージボックスを表示するのではなく、すぐにパスワードを拒否したいと思います。

TrueCryptが既知の定数である文字列 "TRUE"を暗号化し、パスワードベースのキーが "TRUE"を同じ暗号文に暗号化することを確認しました。暗号化されたデータを検証するためのHMAC-SHAハッシュの生成についても読みました。ただし、MACに同じキーを使用したり、データを暗号化したりする必要はありません。このため、TrueCryptの方法が好きです(塩とIVの2つのセットを追跡する必要はありません)。攻撃者がプログラムをロードできるかどうかは気にしません。データを読み取ることはできません。ユーザーが間違ったパスワードを入力してプログラムが安全でないと思ってほしくありません。

これを行う正しい方法は何ですか?

10
John

TrueCryptのメカニズムは、おそらくここでの最良のオプションです。単一のブロックのみを復号化した後、パスワードが正しいかどうかを確認できます。追加のセキュリティに関する考慮事項は必要ありません。

追加のハッシュと検証を導入すると、これらのアルゴリズムの弱点に対して脆弱になります。この場合、暗号のセキュリティのみに依存しており、データの保護にも依存しています。 AES-128が壊れている場合、「テスト」が有効であると誤って識別されることは、あなたの心配の最小です!

1
Polynomial