0

ユーザー名とパスワードを構成ファイル内にローカルに保存する winforms アプリケーションを作成しているため、アプリケーションを使用している人は、アプリケーションがサポートするさまざまなサービスにログインするたびに資格情報を再入力する必要がありません。パスワードを解読できることが絶対に必要なので、ProtectedData と Protect および Unprotect メソッドを使用してパスワードを安全に保存することにしました。これにより、データを保護する責任を Windows とエンド ユーザーに任せることが容易になり、キーなどについて心配する必要がなくなりました。

ここで、インストール間で設定を移動する機能をユーザーに提供したいと考えています。この好例は、多数の異なるアカウント設定のバックアップを保持したい場合や、別のコンピューターに移動したい場合です。

私はそれを次のようなものにしました:

  1. ユーザーが「アカウントのエクスポート」ボタンをクリックする
  2. アプリケーションは、保護解除を使用して保存された設定を復号化します
  3. アプリケーションは設定をプレーンテキストの「バックアップ」に書き込み、それがインポートされて新しいアカウントで再暗号化されます。

このすべては、ステップ #3 まで素晴らしい音です。ステップ 3 は、パスワードをプレーンテキストで配置するため、気になります。このようなシナリオでの資格情報のインポート/エクスポートのベスト プラクティスはありますか?それとも、エクスポートされたファイルを保護することをユーザーの責任にすることは「問題ない」と見なされますか? 私には、ユーザーが自分の Windows アカウントを適切に保護していると仮定すると、これは想定しても問題ないように思えます。設定ファイルのインポート/エクスポートを許可しないという考えを蹴散らしましたが、これは大きな不便のようです. 同様に、誰かが非常に多くのアカウントを保存しているため、手動で再入力するのに10年足らずかかるという、非常にまれなエッジケースに向けて構築することもできます.

そのようなことを経験したことがある人が、これに関するベストプラクティス/アドバイスを提供してくれるなら、本当に感謝しています. 私は、資格情報を保存することのすべての複雑さに対処しなければならないことにかなり慣れていません。

4

1 に答える 1

1

キーのローカル ストレージは、十分な時間とスペースがあれば危険にさらされる可能性があります。

ドメイン内の複数のコンピューター間で同様のデータ保護を行うために DPAPI を使用していたとき、残された唯一の方法は、現在の場所です。機密データの保護を解除してプレーン テキストにします。それらを別のコンピューターにコピーしてから、DPAPI を使用してデータを保護します。これは見栄えがよくなかったので、データをまとめてエクスポートするオプションを破棄しました。また、機密データを安全な方法でエクスポートできる別の暗号化スキームを提供しました。

これはあなたの質問に対する答えではないかもしれませんが、暗号化されたデータをエクスポートする場合、DPAPI を使用すると、自分が持っているもの以外に選択の余地はありません。それは設計によるものです。

推奨される方法は、対称アルゴリズム (Rijndael など) を使用してデータを暗号化することです。非対称アルゴリズムを使用して対称アルゴリズムのキーを暗号化します。後で、非対称アルゴリズムの公開鍵と秘密鍵のペアと、暗号化された対称アルゴリズムの鍵を lccally 保存します。それらを別のコンピューターにエクスポートします。非対称アルゴリズムの秘密鍵を使用して、暗号化された対称アルゴリズムの鍵を復号化します。次に、対称キーを使用して、エクスポートされたデータを復号化します。

物事を大まかに言えば、エクスポートするときは次のようになります。

  1. RijndaelManagedを使用して元のデータを暗号化します。
  2. RijndaelManaged で使用されるキーをRsaCryptoServiceProviderで暗号化して保護します。
  3. RSA 公開鍵と秘密鍵のペアを永続化する場合は、必ずCspParametersを使用してください。
  4. ToXmlStringを使用して、RSA 公開/秘密キー ペアを XML ファイルにエクスポートします。
  5. 手順 2 で暗号化した鍵、手順 4 で作成した RSA 鍵ペア、元の暗号化データを別のコンピューターにコピーします。
  6. FromXmlStringを使用して、XML 文字列から RSA 公開/秘密キー ペアをインポートします。Xml ファイル コンテナーの公開鍵と秘密鍵のペアを消去します。
  7. 新しいコンピューターで秘密 (および公開) キーを使用できるようになったので、それを使用して RijndaelManaged のキーを復号化します。
  8. RijndaelManaged のキーを取得したら、それを使用して元のデータを復号化します。

これでシナリオは十分です。通常の資格情報の保存に DPAPI を使用することはトレードオフです。ユーザーが資格情報を別のコンピューターにエクスポートする必要がある場合は、上記の手順 1 から 8 に従ってください。

資格情報をローカルに保存することはお勧めできませんが、ユーザー エクスペリエンスの観点から、暗号化の複雑さを増す以外に選択肢はありません。

エントロピー値でもある DPAPI を使用する場合は、必ずユーザー レベル/マシン レベルの保護を構成してください。

于 2012-09-06T18:32:12.897 に答える