SecureStringはC#アプリケーションで実用的ですか?
ここで私の仮定が間違っている場合は、遠慮なく訂正してください。しかし、私が尋ねている理由を説明させてください。 MSDNから取得SecureString: 秘密にしておくべきテキストを表します。テキストは使用時にプライバシー保護のために暗号化され、不要になるとコンピューターのメモリから削除されます。 私はそれがでパスワードやその他の個人情報保管するための完全な意味を成し、これを取得SecureStringオーバーをSystem.String、あなたはどのように制御することができますので、それは実際にメモリに格納されている場合、理由System.String: 両方が不変であり、不要になった場合、ガベージコレクションをプログラムでスケジュールすることはできません。つまり、インスタンスは作成後は読み取り専用であり、インスタンスがコンピューターのメモリから削除される時期を予測することはできません。したがって、Stringオブジェクトにパスワード、クレジットカード番号、個人データなどの機密情報が含まれている場合、アプリケーションがコンピューターのメモリからデータを削除できないため、使用後に情報が漏洩する可能性があります。 ただし、GUIアプリケーション(たとえば、sshクライアント)の場合、SecureString はから構築する必要があり System.Stringます。すべてのテキストコントロールは、基礎となるデータ型として文字列を使用します。 つまり、これは、ユーザーがキーを押すたびに、そこにあった古い文字列は破棄され、パスワードマスクを使用していても、テキストボックス内の値を表す新しい文字列が作成されることを意味します。また、これらの値のいずれがメモリから破棄されるか、または破棄されるかどうかを制御することはできません。 次に、サーバーにログインします。何だと思う?認証のために接続を介して文字列を渡す必要があります。それではSecureString、System.String...に変換してみましょう。ガベージコレクションを強制的に実行する(またはバッファに0を書き込む)方法がないヒープ上に文字列があります。 私のポイントはある:あなたが何をすべきかに関係なく、線に沿ってどこか、SecureStringされに行くに変換するSystem.String(ガベージコレクションの任意の保証なし)いくつかの点で、ヒープ上の最低が存在でそれをしますつまり、。 私のポイントではありません:ssh接続への文字列の送信を回避する方法、またはコントロールに文字列を格納させる(カスタムコントロールを作成する)方法を回避する方法があるかどうか。この質問では、「ssh接続」を「ログインフォーム」、「登録フォーム」、「お支払いフォーム」、「食品-あなたがフィード-あなたの子犬-しかし、あなたの子供でないフォーム」に置き換えることができます。等 それでは、SecureString実際に使用することが実際に役立つのはどの時点ですか? System.Stringオブジェクトの使用を完全に根絶するために、余分な開発時間を費やす価値はありますか? 全体のポイントであるSecureString、単に時間の量削減するSystem.Stringヒープ上では、(物理的なスワップファイルに移動し、そのリスクを低減しますか)? 攻撃者は、すでにヒープ検査のための手段を持っている場合、その後、彼は最も可能性のいずれか(A)は、既にキーストロークを読むための手段を有している、または(B)、すでに物理的にマシンを持っている ...だからが使用してしまうSecureStringになってから彼を防ぐためにとにかくデータ? これは単に「あいまいさによるセキュリティ」ですか。 質問を厚くしすぎていると申し訳ありませんが、好奇心が私をより良くしました。私の質問の一部またはすべてに遠慮なく答えてください(または私の仮定が完全に間違っていることを教えてください)。:)