問題タブ [securestring]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - C# SecureString の質問
セキュリティを構成せずに SecureString の値を取得する方法はありますか? たとえば、次のコードでは、PtrToStringBSTR を実行するとすぐに、文字列が不変であり、ガベージ コレクションが文字列に対して非決定論的であるため、文字列は安全ではなくなります。
アンマネージ BSTR 文字列の char[] または byte[] を取得する方法があるとしたら? これは、ガベージ コレクションがより予測しやすいことを意味しますか (文字列ではなく char[] または byte[] を使用するため)。この仮定は正しいですか? もしそうなら、どのように char[] または byte[] を取得しますか?
c# - SQL接続にsecurestringを使用する
SecureStringを使用して、データベースの接続文字列を保持したいと思います。しかし、SqlConnectionオブジェクトのConnectionStringプロパティをsecurestringの値に設定するとすぐに、アプリケーションのメモリを読み取ることができる他のアプリケーションから確実に表示されるようになりますか?
私は次のことを前提としています。a)
管理対象メモリの外部でSqlConnectionオブジェクトをインスタンス化できないb)管理対象メモリ内の任意の文字列をHawkeye
などのアプリケーションで読み取ることができる
c# - SecureString の使用
これをワンライナーに単純化できますか? secureString が適切に初期化される限り、自由に完全に書き直してください。
c# - パスワードをプログラムコードに安全に保存しますか?
私のアプリケーションは、RijndaelManagedクラスを使用してデータを暗号化します。この暗号化の一部として、パスワードがロードされたSecureStringオブジェクトを使用します。このオブジェクトは、バイト配列に変換され、実行時にRajindaelManagedオブジェクトのキーにロードされます。
私が持っている質問は、このSecureStringのストレージです。ユーザーが入力したパスワードは実行時に入力でき、SecureStringオブジェクトに「安全に」ロードできますが、ユーザーが入力したパスワードが指定されていない場合は、デフォルトで何かを設定する必要があります。
したがって、最終的には、質問は次のようになります。
アプリケーションを実行するたびにSecureStringオブジェクトにロードする既知の文字列またはバイト配列が必要な場合、どうすればよいですか?「暗号化された」データは最終的に別のアプリケーションによって復号化されるため、ユーザーが入力したパスワードが指定されていない場合でも、あるアプリから別のアプリに移動するときにデータを暗号化する必要があります。これは、他のアプリがパスワードを適切に復号化できないため、デフォルトのパスワードをランダムにすることができないことを意味します。
私が考えている解決策の1つは、単一のパスフレーズのみを吐き出すdllを作成し、そのパスフレーズを使用して、実行時にいくつかの異なるハッシュ/再編成関数を実行してから、最終的にsecureStringオブジェクトにフィードすることです。これは十分に安全ですか?
わかりやすくするために編集*:暗号化されたデータは、マシン間でファイルを介して渡されます。常にパスワードが設定されているZipファイルと考えてください。ユーザーが直接何も入力しない場合は、デフォルトのファイルが想定されます。
.net - クレジット カード番号に SecureString を使用する
System.Security.SecureString クラスを使用して、処理中にクレジット カード番号をメモリに保持することを検討しています。クレジットカード番号を保持するためにSecureStringクラスを使用した人はいますか、それとも通常のSystem.Stringクラスを使用している人がほとんどですか?
.net - .net でパスワード文字列を管理するにはどうすればよいですか?
SecureString クラスがあることは知っていますが、ほとんどのシナリオではあまり役に立たないと思います。
たとえば、クライアント/サーバー システムがあるとします。サーバーは私が作成したアプリケーションを必要としません。統合認証のない SQL Server でさえありえます。ユーザーがクライアント アプリのフォームにパスワードを入力すると、パスワードはクリア テキストでメモリに保存されるため、SecureString を使用して読み取ることはできますが、そうする意味がわかりません。確かに、攻撃面を減らすことはできますが、それほど多くはありません... たとえ私がそうしたとしても、ユーザーが「OK」を押したときに、プレーンテキスト文字列からハッシュを計算する必要があるだけであっても、プレーンテキスト文字列を生成する必要があります。
それで、GCがメモリを再利用することを決定するまで、パスワード文字列が浮かび上がるのを避ける方法はありますか? それでも、再び使用する前に記憶は消去されますか?
c# - ASP.NET で SecureString を使用する利点はありますか?
私の理解が正しければ、これはプレーン テキストをメモリから除外するためのものであり、アプリはメモリ、ガベージ ヒープ、またはディスクにページングされたメモリに対する難解な攻撃から保護されます。SecureString にはアンマネージド バイトが供給され、一度に 1 つのアンマネージド バイトが消費されます。その後、文字列はメモリから消去されます。(私が離れていたら私を訂正してください!)
ASP.NET では、シークレットは Web フォームで収集され、HTTPS でポストバックされます。しかしその後、Request オブジェクトはフォームからのすべての要求値を名前と値のペアに変換し、それらをコレクション (Request["TxtPassword"] など) に入れます。そのため、文字列を取得する前であっても、メモリに安全に書き込まれていません。さらに悪いことに、コントロールを使用していた場合、セキュリティで保護されていない表現では、TextBox のプロパティにより多くのマネージド文字列が含まれます。
この SecureString を使用して何かを行うには、管理されていない文字列を受け取る API が必要です。そのため、格納された proc パラメータなどにセキュア文字列を使用することはできないようです。
私はこれを間違っていますか、それとも SecureString を使用して、保護されていない文字列のコピーをマネージド メモリにリークしないようにするのはばかげたことですか?
OAuth または Windows 認証への切り替えはオプションではありません。
c# - C#-2つのSecureStringを比較して同等かどうか
2つのPasswordBoxを備えたWPFアプリケーションがあります。1つはパスワード用で、もう1つは確認のために2回目に入力するパスワード用です。PasswordBox.SecurePassword
パスワードの取得に使用したかったSecureString
のですが、パスワードを受け入れる前に、2つのPasswordBoxの内容を比較して、同等であることを確認できる必要があります。ただし、2つの同一のSecureStringは等しいとは見なされません。
PasswordBoxesのプロパティを比較すると、プレーンテキストのパスワードを読んでいるという理由Password
だけでアクセスのポイントが失われると考えていました。セキュリティSecurePassword
を犠牲にすることなく2つのパスワードを比較するにはどうすればよいですか?
編集:この質問に基づいて、「Marshalクラスを使用してSecureStringをANSI、Unicode、またはBSTRに変換する」に関するこのブログ投稿をチェックしています。それらを比較できるかもしれません。
c# - C# - RSACryptoServiceProvider バイト配列ではなく SecureString に復号化する
現在、バイト配列から変換された文字列を返すメソッドがあります。
代わりに を返すようにこのメソッドを更新しようとしていますが、 の戻り値をからにSecureString
変換するのに問題があります。私は次のことを試しました:RSACryptoServiceProvider.Decrypt
byte[]
SecureString
ただし、この SecureString equality testerを使用すると、結果は元の暗号化されていないテキストから構築されたものSecureString
と等しくありませんでした。SecureString
私の Encrypt メソッドと Decrypt メソッドは、以前はstring
どこでも使用していたときに機能し、SecureString
等価コードもテストしたので、ここでの問題は に変換しようとしている方法にあると確信していbyte[]
ますSecureString
。RSA 暗号化を使用するために取るべき別のルートはありSecureString
ますか?
編集:SecureString
バイト配列を通常の文字列に変換してから、その文字列を aに詰め込みたくありませんでしたSecureString
. Decrypt
ただし、返されるのも悪いので、byte[]
そのバイト配列をに詰め込もうとしていSecureString
ますか? 私の推測では、 ifDecrypt
が a を返す場合byte[]
、それは機密情報を安全に渡す方法なので、データの 1 つの安全な表現を別の安全な表現に変換しても問題ないようです。
c# - WPF アプリケーションと C# ライブラリからメモリ内の機密データを追跡する
私は、いくつかの C# ライブラリと、それらを使用し、プレーンテキストの文字列パスワードを に置き換える WPF アプリケーションを試してみましたSecureString
。私が制御できない他のライブラリ/ Web サービスと対話するために、いくつかの場所で通常の文字列に変換する必要がありますがSecureString
、その量を最小限に抑えたいと考えています。また、正しく行う方法については、この記事に従おうとしています。コードからメモリ内に浮かんでいる文字列を監視する簡単な方法はありますか? いわば、機密データがメモリ内のプレーンテキストにあるという点で、コードにいくつの弱点があるかを知りたいです。