問題タブ [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.

0 投票する
0 に答える
730 参照

c# - ユーザー資格情報を使用して (カスタム) ConfigurationSection を暗号化/復号化する (マシン固有ではない)

.NET 4.5 デスクトップ アプリケーション (wpf) を開発しています。App.config でデータをロード/編集できるカスタム セクションを正常に作成しました。ここで、このセクションを暗号化したいのですが、DPAPI を使用して暗号化することができました。

ただし、別のマシンでこの App.config を復号化しようとすると、同じユーザー (アクティブ ディレクトリ) で、これは失敗します。具体的なエラー メッセージは手元にありません。方法がわからない「use machine store」フラグによる失敗であることは明らかなので、まったく必要ないと思います。消す。

次のように、app.config に configProtectedData を追加してみました。

私は変わりました secInfo.ProtectionSection("DataProtectionConfigurationProvider");

secInfo.ProtectionSection("MyUserDataProtectionConfigurationProvider");

ただし、「'useMachineProtection' 属性は許可されていません」というインテリセンス エラーが発生します。App.config で、アプリケーションを起動すると System.Windows.Application.ApplicationInit() in System.Windows.Application..ctor() でTypeInitializationExceptionが発生します。カスタム ProtectionProvider でファイルを暗号化するには、コンソール コマンドを実行する必要があることを読みましたが、これらのチュートリアルはすべて ASP.NET に関するものであるため、これが私のニーズに合っているかどうかはわかりません。

私はちょっとここで立ち往生しています。この API は、いつ、どのように復号化するかを気にする必要がないため、ちょっとすっきりしています。セクションから値を読み取るだけで、残りは自動的に行われます。簡単に言えば、DPAPIユーザーストアで暗号化する方法、または不可能な場合:実装が簡単な代替手段は何ですか?

0 投票する
1 に答える
692 参照

c# - ProtectedMemory.Unprotect 出力ガベージ

認証トークン (英数字) を保存および回復するためのこのコードがあります。

そして、ほとんど問題なく動作しますが、ガベージが出る場合があります(多くのFDバイトと読み取り可能なバイトがいくつかあります)。これは再起動したときにのみ発生すると思われますが、再現するのに苦労しました。

これは意図した動作ですか?つまり、MemoryProtectionScope.SameLogon再起動時にデータが常に読み取れないということですか? 私は何か間違ったことをしていますか?

FromHexStringおよびメソッドは、ToHexString期待どおりの動作をします。

0 投票する
0 に答える
110 参照

c# - DirectoryEntry で使用するための DPAPI で保護されたデータの復号化 - データは攻撃に対して脆弱ですか?

DirectoryEntry クラスを使用して、LDAP でドメイン コントローラーにクエリを実行しています。このクエリのユーザー名とパスワードを、アプリケーションを実行しているマシンに保存する必要があります。これらを文字列に格納することは、大きなセキュリティ リスクになるため、現実的ではありません。

私は DPAPI を使用することに決めましたが、C# でのデータの暗号化/復号化には少し慣れていません。少なくとも私の理解によると、復号化されると、このデータは一時的に文字列変数に格納され、次に DirectoryEntry コンストラクターへの引数として使用される必要があります。私が間違っている場合は修正してください。

このユーザー名とパスワードは、LDAP クエリを作成するメソッドで使用するために復号化されると、攻撃に対して脆弱になりませんか? 具体的には、新しい DirectoryEntry オブジェクトの作成です。

クエリを実行するたびにユーザー名とパスワードを入力するようにアプリケーションに要求させることで、これを回避することもできますが、DirectoryEntry コンストラクターで使用するために文字列に格納する必要があります。

ユーザー名とパスワードを DirectoryEntry コンストラクターと組み合わせて再利用するには、このデータが攻撃に対して脆弱でメモリ内に表示されないようにするにはどうすればよいですか?

0 投票する
1 に答える
531 参照

c++ - Powershell SecureStringをC++プログラムに渡しますか?

コマンドラインで渡されるパスワードを受け取るネイティブプログラムがあります。そのパスワードはサーバー ログに表示されるため、コマンド ラインに入力する前に暗号化して難読化したいと考えています。次に、プログラムでそれを復号化し、以前と同じように使用します。アイデアは、powershell を使用してパスワードで SecureString を作成し、ConvertFrom-SecureString を使用して印刷可能なテキスト文字列にすることです。その文字列は、コマンド ラインでネイティブの C++ プログラムに渡されます。そこから、バイナリの暗号化された形式にデコードし、元のプレーン テキストのパスワードに復号化します。簡単でしょ?

わずかなドキュメントから、ConvertFrom-SecureString は Base64 エンコーディングを実行して、バイナリの SecureString を印刷可能なテキストにしないと思います。誰でもそれを確認できますか?ATL::Base64Decode() を使用してバイナリ バイトを復元します。これ、元の信号とデコードされた信号の最初の 20 バイトを比較するとうまくいくようです。

その後、SecureString バイトを復号化しようとしています。ここでも、SecureString 暗号化がマシン キー (またはユーザー セッション キー) を使用して行われていることを示唆するドキュメントがいくつかあります。これに基づいて、DPAPI CryptUnprotectData メソッドを使用して復号化しようとしています。ここでは、「(0x8007000d)データが無効です」というエラーが発生します。これはうまくいくように聞こえますか?もしそうなら、私がコースから外れている場所はありますか?

これが復号化方法です...