2

(これが重複した投稿である場合は、元の投稿を参照するか、何を検索すればよいか教えてください。何も見つかりませんでした。ありがとうございます!)

したがって、暗号化されたがデータベース行に保存されています。データベース行の列値を取得し、それらをクラス インスタンスに格納したいと考えています。クラスで DECRYPTEDのパブリック プロパティを作成しても安全ですか?

public class *DataRow*
{
    public string *DataElement* { get; set; }
    public string *Value_Decrypted* { get; set; }
}

外部プロセスは何らかの方法でパブリック プロパティにアクセスできますか? メモリ ハッキングから保護するために、SecureString (またはその他のもの) を使用する必要がありますか? .NET の DataProtection はこの問題に役立ちますか?

これを処理する方法についての実用的なガイド/ウォークスルーはどこかにありますか (コーディングのオーバーヘッドがあまりないことを願っています)。

これらは非常に基本的な質問のように感じます (恥ずかしい)。これらの懸念についての話を聞いたことがありますが、検索しても何も見つかりませんでした。何を検索すればよいかわかりませんでした (この投稿のタイトルにあるもの以外)。

いつものように、どの方向でも大歓迎です。

ありがとうございました!


編集:

回答ありがとうございます。パスワードは悪い例でした-パスワードを解読することは賢明ではなく、通常は不要であることを理解しています。私の質問は、復号化する必要があるデータを処理する方法に関連して、より一般的だと思います。パスワードの代わりに暗号化/復号化された値を参照するように例を更新しました。

一般的な監視プログラムを作成しており、アクセス値、パス、およびコマンドをデータベースに保存する必要があります。インフラストラクチャなどの露出を最小限に抑えるために、これらの値を暗号化するのが最善だと思います.

コンセンサスは、復号化された値を任意の形式、プロパティ、またはその他で保存することは悪い考えであるようです。

暗号化された値のみを保存し、必要なたびに SecureString を使用して復号化することを考えています。

ありがとうございました!

4

3 に答える 3

2

通常、パスワードの復号化は必要ありません。ユーザーが自分でパスワードを選択できるようにすると、非倫理的ですらあります。

そうは言っても、一方向の暗号化を使用する必要があります。それ以外の場合は SecureString。このコンテキストでは、すべてのパブリック メンバーとプライベート メンバーが安全でないと考えてください。

一方向暗号化の場合、いくつかの基本: パスワードを暗号化します。データベースに格納します。パスワードを確認したい場合は、入力したデータを暗号化し、データベース内の暗号化された値と一致するかどうかを確認します。通常、暗号化にはランダムなソルト値がシードされます。

塩による暗号化については、このリンクを確認してください: https://stackoverflow.com/a/2138588/2416958

于 2014-05-27T22:24:38.823 に答える
1

ベスト プラクティスは、一方向の暗号化方式を使用してパスワードをスクランブルすることです。これにより、元のデータが第三者に公開されるのを防ぎ、パスワードの所有者のみが検証できます。

パスワード フィールドに使用する修飾子 (プライベート、保護) に関係なく、その値は盗まれる可能性があります。

于 2014-05-27T22:17:37.063 に答える
0

ステファンが言ったように、パスワードを解読し、解読したバージョンを任意の期間どこかに保存することは決して良い考えではありません. それは安全ではなく、時には非倫理的です。ユーザーのパスワードを解読することさえできないはずです。ユーザーがパスワードにキーを入力すると、そのパスワードが復号化された形式で表示されるのはこれが最後になります。攻撃者がパターンを見つけて暗号化方法を見つける可能性があるため、暗号化されたパスワードがネットワークを介してサーバーから送り返されることは望ましくありません。そのため、ユーザーがログインを試みるたびに、ログイン試行を取得して内部で暗号化し、暗号化されたバージョンと照合します。

クラスのフィールドへの Public/Private アクセス修飾子は、セキュリティを目的としたものではありませんでした。それらは、設計目的でカプセル化とデータ隠蔽のために存在します (例として、プライベート フィールドはリフレクションを通じて常にアクセスできます)。

于 2014-05-27T22:30:38.733 に答える