問題タブ [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.
string - 安全な文字列の連結
PowerShell で安全な文字列を変数および安全でない文字列と連結することは可能ですか?
スタンドアロン環境 (ドメインなし) でローカル管理者パスワードに使用される公式があります。その数式の一部をファイルに安全に保存し、それを取得して通常の文字列に変換し、それを別のオブジェクトおよび別の文字列と連結してパスワードを形成したいと考えています。
私の意図は、作成中のワークフローで数式をプレーン テキストで公開することではありません。私が行方不明になっている別の方法はありますか?各パスワードを個別に簡単に保存するにはマシンが多すぎます。
c# - メモリから C# 文字列をクリアする
セキュリティ上の理由から、C# 文字列のメモリ コンテンツをクリアしようとしています。クラスは認識してSecureString
いますが、残念ながら自分のアプリケーションではSecureString
代わりに使用できません。String
クリアする必要がある文字列は、実行時に動的に作成されます (たとえば、文字列リテラルをクリアしようとしていません)。
私が見つけたほとんどの検索結果は、基本的に a の内容をクリアすることString
は不可能であり (文字列は不変であるため)、SecureString
使用する必要があると述べています。
したがって、以下の独自の解決策 (安全でないコードを使用) を考え出しました。テストでは解決策が機能することが示されていますが、解決策に何か問題があるかどうかはまだわかりませんか? より良いものはありますか?
編集: GC に関するコメントが呼び出される前に文字列を移動するためclearString
: 次のスニペットはどうですか?
c# - ディスクに永続化する場合、SecureString を暗号化する必要がありますか?
C# コンソール アプリの場合、アプリケーション設定でパスワードを保持する必要がありますが、typeSystem.Security.SecureString
の設定を作成すると、設定自体がプレーンテキストの構成ファイルから削除されます。もう生の値を見ることができないので、保存時にデータがまだ暗号化されているかどうかを検証できません。
文字列を単純に暗号化するSecureString
のに最適な方法ですか、それとも使用する必要がありますか?ProtectedData
SecureString
--編集-- aを永続化できることを検証するために使用したテスト コードを次に示します。
c++ - Powershell SecureStringをC++プログラムに渡しますか?
コマンドラインで渡されるパスワードを受け取るネイティブプログラムがあります。そのパスワードはサーバー ログに表示されるため、コマンド ラインに入力する前に暗号化して難読化したいと考えています。次に、プログラムでそれを復号化し、以前と同じように使用します。アイデアは、powershell を使用してパスワードで SecureString を作成し、ConvertFrom-SecureString を使用して印刷可能なテキスト文字列にすることです。その文字列は、コマンド ラインでネイティブの C++ プログラムに渡されます。そこから、バイナリの暗号化された形式にデコードし、元のプレーン テキストのパスワードに復号化します。簡単でしょ?
わずかなドキュメントから、ConvertFrom-SecureString は Base64 エンコーディングを実行して、バイナリの SecureString を印刷可能なテキストにしないと思います。誰でもそれを確認できますか?ATL::Base64Decode() を使用してバイナリ バイトを復元します。これは、元の信号とデコードされた信号の最初の 20 バイトを比較するとうまくいくようです。
その後、SecureString バイトを復号化しようとしています。ここでも、SecureString 暗号化がマシン キー (またはユーザー セッション キー) を使用して行われていることを示唆するドキュメントがいくつかあります。これに基づいて、DPAPI CryptUnprotectData メソッドを使用して復号化しようとしています。ここでは、「(0x8007000d)データが無効です」というエラーが発生します。これはうまくいくように聞こえますか?もしそうなら、私がコースから外れている場所はありますか?
これが復号化方法です...
vb.net - Securestring との混同
少し太っているといいのですが。マシンのローカル管理者アカウントのユーザー名とパスワードがハードコードされたプログラムを作成する必要があります (通常のユーザーがプリンシパルコンテキストで validatecredentials を呼び出せるようにするため)
これは明らかに悪い考えなので、セキュアストリングを調べていました。
ただし、データを安全な文字列に変換するには、それを通常の文字列として渡す必要はありません (これは不変であるため、最初のセキュリティ リスクが生じます)。
どこが間違っていますか?
c# - 暗号化された標準文字列をセキュア文字列に安全に変換する
「convertfrom-securestring」を介してpowershellで作成され、ファイルに保存された暗号化された標準文字列があります。後で、この暗号化された文字列を C# アプリで (同じユーザー ID で同じマシン上で) 読み取りました。この暗号化された文字列を securestring オブジェクトに変換したいと考えています。PowerShell では、「convertto-securestring」を使用してこれを行うことができます。c#でこれを安全に行うにはどうすればよいですか?
私はこの回答 ( ConvertTo-SecureString を使用するにはどうすればよいですか)を認識していますが、暗号化された文字列が既知のキーで作成されていることを前提としています。これは、暗号化された文字列がキーなしで作成された場合とは異なります (したがって、それが構築されたユーザー ID とマシンに関連付けられています)。
上記の質問のコメントでは、キーが提供されない場合に Windows Data Protection API (DPAPI) が使用されることを示す Microsoft のドキュメントが引用されていることにも注意してください。この記事 ( https://msdn.microsoft.com/en-us/library/ms229741(v=vs.110).aspx ) は DPAPI の使用方法を示していますが、残念ながら Microsoft の記事で指定されている方法で使用すると、その結果、文字列オブジェクト内で文字列がクリアテキストになるため (処分に対して制御することはできません)、示されている方法でそれを使用することは安全ではありません。
実際、これは事実上、これ ( PowerShell で暗号化された C# で文字列を復号化する方法) とConvertTo-SecureString を使用するにはどうすればよいかの質問の組み合わせです。
記録のために、このコードは機能しますが、復号化された文字列をバイト配列と文字配列に保存する際の問題が何であるかはわかりません。
上記のコードは安全だと思いますが、パスワードが byte-arraydecrypted
と char-arrayの平文であるという短い瞬間を除いてchars
、少なくともパスワードがぶらぶらしないように、これらをできるだけ早くゼロにしますがルーチンを終了した後のメモリ内。これは、 Oguz secureString.AppendChar
Ozgu が以下で指摘したようにsecureString
、文字列を内部で復号化してから再暗号化する必要があることを意味します。これは安全に行われていると推測できます。誰かが上記のコードのセキュリティの問題についてコメントできますか?
編集: 以下のコードは への複数回の呼び出しを回避しますがsecureString.AppendChar
、「安全でない」として実行する必要があることに注意してください。
以下のIndigoのコメントのリンクは、これがWindows上の.NETフレームワークでのみ安全であることを明確にしていることにも注意してください。
c# - 安全な方法で SecureString を SecureString に追加する方法
複数の を追加するにはどうすればよいSecureString
ですか?
できないから
SecureString.AppendChar(Char) を使用する場合
、ソルトを安全でない文字配列に変換する必要がありますが、これは避けたいものです。