問題タブ [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.
.net - SecureString の保存
私が取り組んでいるプログラムに対する機能要求の 1 つは、ユーザーが入力した資格情報のリストを保存して、それらを共有できるようにすることです。この要求に影響を与えた特定のユース ケースは、不安定な WAN によって接続されたかなり優れた LAN で構成された大規模な企業ネットワークで私たちのプログラムを使用することでした。WAN がダウンしたときにプログラムを打ち負かす代わりに、厳重に保護された管理者資格情報を含む「構成」ファイルを送信し、各 LAN で実行し、結果を圧縮して電子メールで送信するというアイデアでした。戻る。
うん。
私の最初の本能は、この要求を嘲笑することです-パスワードを保存しますか? 本当?確かに、会社のネットワーク部門は、彼らが持っているWAN製品を試して販売することを望んでいます-しかし、私が資格情報を使用するクラスの1つがSecureStringを取ることができることがわかりました.人々の労力を節約する方法。それは私に疑問に思いました:
暗号化された SecureString を保存して、機密データをファイルに保存し、別の場所で開くことはできますか?
スタックオーバーフロー、どう思いますか?
c# - C#: ユーザーにパスワードを要求し、パスワードは SecureString に格納されます
私が現在顧客向けに開発している小さなアプリケーションでは、ユーザーに Windows ログインのユーザー名、パスワード、ドメインを尋ね、System.Diagnostics.Process.Startでそれらを使用してアプリケーションを起動する必要があります。
入力したパスワードをマスクする UseSystemPasswordChar のテキストボックスがあります。
System.Diagnostics.Process.Startにパスワードを入力するにはSystem.Security.SecureStringが必要です。
入力したテキストを1文字ずつではなく安全な文字列に変換するにはどうすればよいですか? または、入力したテキストを SecureString として返すパスワードをユーザーに要求するためのより良いウィンドウ コントロールはありますか?
.net - 安全な文字列を使用して安全に保つ
そのため、.NET フレームワークは、文字列を安全な方法で格納するためのSecureStringクラスを提供します。しかし、情報を読み取って操作するには、標準の文字列に戻す必要があります。この実装例を参照してください。
ポインターを使用した例からわかるように、暗号化されていない文字列を返します。文字列の「安全でない」インスタンスを管理するにはどうすればよいでしょうか? 一度設定した値を操作する最も安全な方法は何ですか?
編集
この質問の目的は、SecureStrings を使用してから値を操作するときに潜在的な攻撃の可能性を減らす方法について説明することでした。「重複」リンクに関する「理由」ではありません。
c# - アンマネージ Unicode 文字列から SecureString を作成する
CryptUnprotectData Windows API 関数と .net SecureString を可能な限り最善の方法で結び付けたいと考えています。CryptUnprotectData は、バイト配列とバイト長で構成される DATA_BLOB 構造を返します。私のプログラムでは、これは Unicode UTF-16 文字列になります。SecureString には、char* と長さのパラメーターを受け取るコンストラクターがあるため、次のようなことができるようにしたいと考えています。
これは機能しますが、UTF-16 が可変長であることを除けば、長さの引数として何を使用すればよいかわかりません。上記の例では 2 バイト文字 (BMP) を想定していますが、他のプレーンでは最大 4 バイトになる可能性があります。バイト配列内の UTF-16 文字の数を知る必要があります。値をメモリ内にコピーせずにこれを行う最善の方法は何ですか (それによってセキュリティが損なわれます)。できるだけ早くバイト配列をゼロにして解放する予定です。
.net - セキュリティで保護された文字列型を構築する際の考慮事項
.Net フレームワークで既存の SecureString 型を拡張するために、SecureStringV2と呼ぶセキュアな文字列型の構築を開始しました。この新しい型は、いくつかの基本的な機能 (等しいかどうかのチェック、比較など) を既存の型に追加しますが、型の使用後にメモリからすべてを消去する SecureString 型によって提供されるセキュリティを維持します。Marshal クラスとハッシュ アルゴリズムを使用して、これらの機能を実現する予定です。これを正しく行う方法についての指針をいただければ幸いです。これを実装するという私の考えに何か問題があると思いますか? ありがとうございました :)
更新:これは、ライブラリのコア クラスに関して、これまでのところ私のアイデアが私を導いているところです。見て、あなたの考えを教えてください。
}
c# - .NET リモート アプリケーションで System.Security.SecureString を使用していますか?
クライアントがストア固有の情報を検索して Web サーバーにログインするリモーティング アプリケーションを開発しています。プロパティを System.Security.SecureString として格納するクラスにユーザー名とパスワードを設定します。次に、ログイン資格情報を含むクラスをサーバー オブジェクトに渡して、それを使用して Web ホストに接続し、情報を取得して返します。サーバーメソッドを呼び出すと、次のエラーが発生します。
ecureStrings を含むクラスはシリアル化可能としてマークされており、これは SecureString プロパティを追加するまで開発中に機能していました。これを機能させるために何かする必要がありますか、それとも SecureString を String に変更する必要がありますか?c# - SecureStringを読み取り専用に初期化する方法
コードで使用するCONSTである、安全な変数を作成したいと思います。System.Security.SecureStringの使用を検討しましたが、ユーザーにこのパスワードを知られたくないので、それがチケットである可能性があります。唯一の問題はそれを初期化することです。ほとんどの場合、SecureStringはユーザーのキーを押すことで「設定」するのが最適のようです。これは欲しくない。私が出くわした1つのオプションは次のようになります。
唯一の問題は、char配列't'、'e'、's'、't'が、コンパイル後もメモリに一緒にパックされている可能性があることです。コンパイル時の前にSecureStringの値を一定の値に設定し、その値をスクランブルするための良い方法はありますか?
vb.net - VB .NET から SecureString 値を安全に取得することは可能ですか?
私は常に SecureString が少し奇妙だと感じていましたが、それに関する問題のほとんどは、私が理解できないセキュリティの問題によるものだと思っていました。今日、私は座ってそれについて独学することに決めましたが、致命的な障害のように見えるものにぶつかりました.
私が想定しているシナリオは、「ユーザーがテキスト ボックスにパスワードを入力し、そのパスワードがハッシュされ、保存されているハッシュと比較される」というものです。最初は、テキスト ボックスに文字列が含まれているのではないかと心配していましたが、SecureString をストアとして使用するカスタム テキスト ボックスを展開できることに気付きました。涼しい。「そのパスワードがハッシュ化されて比較されている...」という部分が私を悩ませています。
VB .NET の問題に対する私の最初のハックは単純で間違っていました。
これは、パスワードを通常の文字列に詰め込むだけであり、そもそも SecureString を使用する目的を無効にします。だから私は検索を続け、ブログ記事を見つけましたこれにより、C# で問題がうまく解決されます。文字列は BSTR に作成され、ピン留めされた文字列にコピーされ、使用後に BSTR とピン留めされた文字列の両方がゼロになります。安全でない文字列がメモリ内にある時間を最小限に抑えるため、これははるかに優れたアイデアのように思えます。ただし、VB .NET でこれを実現する方法はないようです。C# は安全でないコード機能を使用してポインター操作を行っていますが、VB .NET はこれを行うことができません。Marhsall.Copy() を見てみましたが、配列向けのようです。オブジェクトと BSTR の IntPtr 変数を文字列にキャストしようと考えましたが、それでも新しい文字列を作成する String.Replace() のようなメソッドを使用する必要がありました。
VB .NET からこれを行うことはまったくできませんか、それとも何か不足していますか?
編集 AMissico の回答をわずかな留保で受け入れます。Marshal.ReadByte() メソッドは、アンマネージ メモリからバイトをコピーし、アンマネージ メモリにバイトを作成します。これにより、攻撃者がパスワードの個々の文字を見つける可能性がわずかに生じます。これは、文字列全体を見つける可能性よりもはるかに低いと思いますが、私が参照した (明らかに機能していない) 記事の C# では、安全でないコードを使用してこれをうまく回避できました。考えられるプロセスは、GCHandle を使用して文字列をメモリに固定し、安全でないコードを使用して .NET 文字列の不変性を回避することでした。VB .NET では不可能に思える巧妙なトリック。C# コード自体に戻ってみます。
c# - 文字列をSecureStringに変換する
に変換する方法String
はSecureString
?