問題タブ [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 に答える
904 参照

encryption - DPAPI を使用して暗号化された値を復号化する

暗号化された値を使用して復号化しようとしましたasp_regiis.exe

このコマンドを実行すると:

このエラーがあります:

構成セクションを復号化しています...

プロバイダー 'DataProtectionConfigurationProvider' を使用して復号化できませんでした。プロバイダーからのエラー メッセージ:

これの何が問題なのですか?復号化された値を見つける必要があります。お知らせ下さい。

0 投票する
2 に答える
1665 参照

c# - .NET DPAPI および AES 暗号化: センス チェック

現在取り組んでいる Web サイト用の新しい暗号化システムを作成しようとしています。可能であれば、開始する前に誰かにセンスチェックしてもらうことができるかどうかを確認したかったのです!

更新: 元の質問でより明確になっているはずです。後でデータを読み戻せるようにするために、一部のユーザー データを暗号化する必要があります。また、ログイン時にユーザーを確認するために、ユーザーのパスワードまたはパスワードのハッシュも保存する必要があります。

計画は次のとおりです。

  1. マスター キー: DPAPI キー セッター アプリケーションを作成して、テキスト ベースのマスター キーを取得し、DPAPI を介して暗号化し、暗号化された出力をサーバー上のテキスト ファイルに保存します。これは、サイトを新しいサーバーに移動するたびに実行する 1 回限りのタスクです。マスター キーは、AES 暗号化を実行するために使用されます。

  2. 新規ユーザー登録時:

    2.1. パスワードデータ/パスワードデータのハッシュを保存します。

    2.2. マスター キー ファイルをロードし、DPAPI を使用してキーを復号化します。復号化されたマスター キーと、各ユーザー データの新しいランダム IV を使用して、AES で暗号化された文字列を作成します。暗号化された文字列の前に対応するランダムな IV を付けて、暗号化された各文字列を保存し、データベースの varchar 列に挿入します。

  3. ユーザーのログイン時:

    3.1. パスワード ハッシュを照合してユーザーを検証します。

    3.2. 暗号化されたユーザー データ フィールドごとに、コンテンツを IV と暗号化されたデータの 2 つの部分に分割します。DPAPI からマスター キーと IV を取得し、データを復号化して画面に表示します。

それはどのように聞こえますか?上記に明らかな欠陥はありますか?

私は過去にこの種のものに Enterprise Library Security を使用していたので (これは .NET コアでは使用できなくなりました!)、これに慣れていないので、どんな助けも大歓迎です!

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

c# - X509Certificate コンストラクターが特定のユーザーに対して実行するのに 6 秒以上かかる

TLS/SSL を使用して通信する C#、.NET4.5.2 クライアント/サーバー システムを開発しました。証明書はファイルからロードされます。「MakeCert」ユーティリティを使用して証明書ファイルを作成し、.pvk および .cer ファイルを作成してから、「pvk2pfx」ユーティリティを使用してそれらを .pfx に結合しました。

証明書を使用するには、X509Certificate2 コンストラクターとオーバーロードを使用して証明書を読み込み、ファイル パスとパスワードを文字列として渡します。

時間が経つにつれて、証明書の読み込みが非常に遅くなったことに気付きました。それらを遅くした「イベント」があったのか、それとも徐々にだったのかはわかりませんが、PFX ファイルをロードするのに最大で約 6 秒かかります。CER ファイルのロードは問題なく、約 0.1 秒かかります。

Windows 8.1 を実行していますが、問題はラップトップでのユーザー ログインのみです。

問題を検証するために、次のテストアプリを作成しました。

何人かの同僚に、自分の PC でプログラムを実行するように依頼しました。また、VM 内で実行してから、自分のラップトップで新しいユーザーをセットアップしてみました。すべての場合で約 0.1 秒で実行されましたが、通常のユーザー ログインでは 6 秒を超えて実行されました。

最初は証明書で「Reset()」を呼び出していなかったので、一時ファイルのどこかに問題があるのではないかと考え、procmon を使用して何が起こっているのかを調べました。次のディレクトリにいくつかの一時ファイルが作成されていることを確認しました (ただし、Reset() を呼び出さなくても、アプリケーションが終了すると整理されます)。

念のため、このディレクトリ内のファイルを削除しようとしましたが、違いはありません。

procmon を使用すると、証明書の読み込み中にファイル/レジストリ アクティビティに 2 つのギャップがあり、読み込みが高速なシステムでは発生しないことがわかります。最初は「dpapi.dll」を使用しようとした直後です。2 番目は、次の「C:\Extend\$UsnJrnl:$J:$DATA」への読み取りの後です。DPAPI.dll は、Windows データ保護のインターフェイスです。後者のファイルは、ファイルの変更を記録する NTFS の USN ジャーナルです。私はどちらの専門家でもなく、どちらが関連しているかどうかもわかりません!

次に、API Monitor http://www.rohitab.com/apimonitorを使用してシステム コールを観察してみました。繰り返しますが、私は専門家ではありませんが、一時停止の直前に何が起こっていたのかを調べました. そこには、関連するかどうかわからないことがたくさんあります。問題に集中するのに役立つコメントを歓迎します。

2 秒のギャップの前の最後の呼び出しは、次の呼び出しスタックを持つ memcpy です。

より高い潜在的に興味深い行は次のようです。

コールスタックを追跡するのは難しいと思いますが、これらは最終的に CryptQueryObject という関数から来ていると思います。

関連する可能性がある次の記事を見つけましたが、Windows8.1 ではありません。念のため %windir%\Temp フォルダーを削除しましたが、効果もありませんでした。

https://support.microsoft.com/en-gb/kb/931908

遅延が CryptQueryObject からの ActiveDirectory 呼び出しに関係している可能性があることを示唆する記事をどこかで見つけたのを覚えていますが、リンクが見つかりません。

私は本当に探しています:

  1. 証明書の読み込みに 6 秒かからないようにユーザー ログインを修正する方法
  2. 自分のコードが正常であることを確認して、システムを使用している他の人に再発しないようにする方法

助けてくれてありがとう。

0 投票する
2 に答える
632 参照

c# - さまざまなユーザーからの DPAPI ProtectData

私は次のようにDPAPIを使用しProtectDataています:

temp が次のようになったとします。

このコードを .exe ファイルと WebService (IIS) から実行したいと考えています。
問題は、exe からコードを実行している場合、現在のユーザーがMyDomain/Administrator、WebService からコードを実行している場合、現在のユーザーがIIS APPPOOL/MyApp.

この問題を解決するにはどうすればよいですか? 次のように .exe ファイルから実行しようとしてWebServiceいます。

しかし、何らかの理由で機能しませんでした(iisアプリケーションに完全にアクセスできます)。 とにかく、これがこの場合の正しい解決策だとは思いません。

注:セキュリティ上の理由から、変更できませんDataProtectionScope.LocalMachineDataProtectionScope.CurrentUser

0 投票する
4 に答える
975 参照

windows-server-2012-r2 - DPAPI NG - NCryptProtectSecret が NTE_ENCRYPTION_FAILURE を返す

DPAPI-NG を使用してデータを暗号化しようとしていますが、NCryptProtectSecretの実行に失敗し、次のように返されます。

0x80090034 (NTE_ENCRYPTION_FAILURE)

ローカル ユーザー SID でNCryptCreateProtectionDescriptorを作成しました。

次に、記述子のこのインスタンスをNCryptProtectSecretの入力として使用しますが、機能しません。

次の保護記述子を使用する場合:

すべて問題ないように見えますが、ユーザーまたはグループの SID では機能しません。Windows Server 2012R2 および Windows Server 2016 でこれをテストしました。

何か案が?

コードサンプルは次のとおりです。