問題タブ [dpapi]
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.
windows - あるプロセスが管理者権限なしで別のプロセスにコードを挿入することは可能ですか?
DPAPIのCryptProtectMemory
APIを使用すると、CRYPTPROTECTMEMORY_SAME_PROCESS
フラグを渡すことができます。これにより、他のプロセスがメモリを復号化できなくなります。これを回避する1つの方法は、、、を使用OpenProcess
してWriteProcessMemory
、CreateRemoteThread
ターゲットプロセスにコードを挿入し、それを呼び出すことCryptUnprotectMemory
です。これにより、メモリが復号化され、他のプロセスにリークされます。
両方のプロセスがWindowsVista以降で同じ制限付き特権ユーザー(つまり、管理者ではない)のコンテキストで実行されていると仮定すると、これはまだ可能ですか?プロセスACLに関係なく、限られたユーザーに対してプロセスメモリの書き込み操作が拒否されたという印象を受けましたが、間違っている可能性があります。
encryption - AesCryptoServiceProvider の rgbKey を保護するには?
ユーザー/パスワードとその他のデータを保持するテーブルがあります。各レコードのパスワード フィールドは暗号化する必要があります。暗号化に AesCryptoServiceProvider を使用することにし、手動で rgbKey を 1 回作成しました。次に、すべてのユーザー パスワードを暗号化し、パスワード フィールドが rgbKey で暗号化されたテーブルにレコードを挿入しました。
ロード バランサーの背後に複数のサーバーがあり、各サーバーはこれらのレコードを読み取り、パスワード フィールドの値を復号化する必要があります。最初に、base64StringFormat の rgbKey を dll(API) に配置しました。同様に、すべてのサーバーがこの API を使用し、暗号化された値を復号化できます。
ただし、rgbKey を dll ファイルに保持するのは非常に安全ではありません。キーを DPAPI に保持するかどうかについて話し合いました。復号化時に、任意のサーバーで、DPAPI からキーを取得し、暗号化された値を正常に復号化します。
現在のユーザーモードのサーバーで一度だけ保護されたキーを生成し、それを共通のdllに保存できると思いました。共通のdllを使用する各サーバーは、この保護されたキー(byte[])を同じユーザーでDPAPIに与えると、保護されていないキーの値を取得できます。ただし、保護されているマシンでのみ機能し、他のマシンでは「指定された状態での使用に対してキーが無効です」というエラーが発生します。
私の質問は、永続的な rgbKey を保護して、すべてのマシンからアクセスできるようにするにはどうすればよいですか? 以下の同様のテスト コンソール アプリケーションを見てください。私のアプローチの何が問題なのですか?
テスト コンソール アプリケーションのサンプル コードを示します。
まず、ローカル マシンで PDPAPI() 関数を実行します。
次に、上記の実行から取得した UDPAPI() 関数の base64ProtectedData 値をハードコーディングして追加し、ソリューションを再構築します。
ローカル マシンで UDPAPI() 関数を実行すると、データの保護が正常に解除されますが、コンソール アプリケーションを他のサーバーに移行し、ネットワーク ユーザーでそのサーバーにログインすると、コンソール アプリケーションで「Key not valid for指定された状態で使用してください。」
c# - 暗号化のための一意のソルトとして使用されるすべての C# アプリケーションで、どのような情報を見つけることができますか?
Web アプリケーション、Windows サービス、wcf レイヤーなど、暗号化の一意のソルトとして使用できるすべての C# アプリケーションで、どのような情報を見つけることができますか?
System.Security.Cryptography.ProtectedData.Protect()
(DPAPI) メソッドとメソッドを使用して、構成ファイルに保存されている機密データを簡単に暗号化できるライブラリを作成したいと考えていますSystem.Security.Cryptography.ProtectedData.Unprotect()
。
ライブラリは、値を使用しているアプリケーションの外部で構成値を暗号化および復号化できる、私が作成している別のアプリケーションでも使用されます。ソースは常に利用可能である必要があります。
ソルトは、別のアプリケーションに手動で入力できるほど単純でなければなりません (たとえば、GUID を識別するのは困難です)。
System.Reflection.Assembly.GetEntryAssembly()
それが私が作成しているこのライブラリを呼び出すアプリケーション/サービスのアセンブリである場合、そこに何かを使用できます。最初の考えは、「ソルトを、暗号化されたデータが保存されている構成ファイル名にする...」でしたが、Web サイトの場合、構成ファイルは常に「web.config」です。
他の考えを歓迎します。
アップデート...
「GetExecutingAssembly()」...「GetEntryAssembly()」とどう違うのですか?
c# - ProtectedData が使用する暗号化アルゴリズムはどれですか?
パスワードの暗号化に使用したいProtectedData
.
私が知る限り、これはCryptProtectData
.
MSDN は、ユーザーの資格情報に基づく暗号化について漠然としたことしか述べておらず、ユーザーがローミング プロファイルを持っていない場合、通常は同じマシンで復号化を行う必要があると述べています。
どの暗号化アルゴリズムを使用していますか?
この暗号化がパスワードの保存に適しているかどうかを示す分析はありますか?
ローカル パスワード ストレージを実装するには、他にどのような方法がありますか?
windows - Windows ログオンからの DPAPI の使用
Windowsログオン段階で、一部のユーザーの下でフラグCryptProtectData()
付きのDPAPIを使用して保護されたデータを読み取り、保護を解除したいと思います。CRYPTPROTECT_LOCAL_MACHINE
それとも、実運用系のユーザーでログオンして初めて可能ですか?