問題タブ [cng]

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 投票する
1 に答える
2770 参照

asp.net - キーは指定された状態での使用には無効です

一部の機密データの暗号化にはCNGを使用しています。標準として、DB権限を持つSQLユーザーを使用する代わりに、SQL統合セキュリティを実装します。これを実装するために、アプリケーションのプールIDを、適切なDBアクセス許可が付与されているのと同じActiveDirectoryIDとして定義します。

問題は、AppPoolがローカルシステムで実行されている場合、CNGキーストアからキーを作成および取得できますが、そのIDをActive Directoryユーザーに変更すると、「指定された状態で使用するにはキーが無効です」というメッセージが表示され始めます。 CNGストアからキーを取得しようとしています。これが私たちの観察のいくつかです:

  • ユーザーレベルでCNGを実装するには、マシンキーの代わりにユーザーレベルのCNGキーを作成できる必要があります。これが完了し、ユーザーレベルのキーが正常に作成されました。UserProfileで確認できます-C:\ Users \ ADusername \ AppData \ Roaming \ Microsoft \ Crypto \ Keys

    • プール設定で「LoadUserProfile=True」を設定しました。
    • ADユーザーに%windows%\ Microsoft.Net \ Framework \Asp.NetTempファイルへの読み取り/変更権限も付与しました

引き続きこのエラーが発生します。どんな助けでも大歓迎です。

0 投票する
3 に答える
3023 参照

rsa - Windows での CryptoAPI Next Generation (CNG) を使用した RSA 暗号化/復号化のバグ?

以前に CNG を使用して生成されたハードコーディングされた RSA キー ペアを使用して、データを暗号化および復号化するコードを作成しました。これは単純なプログラムで、ランダムな入力データを生成し、それを公開鍵で暗号化し、秘密鍵を使用して結果の暗号化されたバッファーを復号化します。入力、中間、出力のすべての段階を出力して、復号化された平文が元の入力平文と同じかどうかを比較し、全体の暗号化と復号化を 10 回繰り返します。

ただし、暗号化と復号化に問題がない場合もあれば、復号化された平文が入力平文とまったく一致しない場合もあります。このようなバグのあるケースは完全にランダムで恣意的なものであり、これらのバグにパターンはないようです。

これは CNG の RSA 実装のバグですか、それとも私のやり方が間違っているのでしょうか?

コードは次のとおりです。


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

windows - WindowsCNGECDHシークレットアグリーメント構造

ECDHシークレットアグリーメントの構造を調べて数日を過ごしましたが、成功しませんでした。MSDNで、NCryptSecretAgreement関数が、秘密の合意値を表すハンドルを受け取るNCRYPT_SECRET_HANDLE変数へのポインターを設定していることがわかりました。私はWinAPIにまったく慣れていないので、ドキュメントを読む以外に何もできません。

WindowsベースのデスクトップアプリとWebアプリの間でキーを交換する必要があります。私が知る必要があるのは、CNGのKDFが秘密合意値をどのように正確に使用するか(私の場合はハッシュ)です。SHA-256アルゴリズムをKDFとして使用し、秘密合意のXとYをハッシュしようとしていますが、結果がCNGで計算されたものと一致しません。何か案は?

ありがとうございました。

0 投票する
3 に答える
5339 参照

c# - .NETでCNG(またはAES-NI対応の命令セット)を使用するにはどうすればよいですか?

私は現在、AESを使用してc#でテキストの大量の暗号化/復号化を実行しています。

純粋なソフトウェアシステムでは、復号化する必要のある多くのデータセットに対して、かなりの時間、プロセッサにかなりの打撃を与える可能性があります。IntelがAES-NI命令セットを発表し、AMDも同様のものを発表したことを私は知っています。

私は.NET4.0を使用していますが、Windows CNGフレームワークがこれらの命令セットを使用していることは知っていますがAesManaged、.NETの世界では同じようには見えません。

.NET3.5からWindowsCNGへのゲートウェイを作成する素晴らしいプロジェクト「CLRSecurity」がありますが、それは1年間維持されておらず、(可能であれば)死にかけているプロジェクトに飛びつきたくありません。

.NET 4にはCNGProviderクラスがありますが、AES用にそれから機能する復号化をまとめるのに十分なドキュメントがないようです。

誰かが、c#から直接ap / invokeを実行することなく、事前に作成されたクラスを使用して、純粋な.NET環境でAES-NIを実装する方法について正しい方向に私を向けることができるトピックの経験がありますか?(それが維持されている限り、それを実行するラッパークラスがあれば問題ありません)。

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

.net - .Net、XmlDSigEx: X509Certificate2 の公開鍵を使用した CngKey.import

ECDsa アルゴリズムで署名された XML 署名を検証しようとしています。私は XmlDSigEx ライブラリに基づいて作業を行っていますが、これは自分のニーズに合わせて少し変更する必要があります。私の現在の問題は、証明書から公開鍵を取得し、それを CngKey として使用することに関連しています。私が使用した:

「パラメーターが正しくありません」とスローされます。公開鍵の形式が鍵として渡されると予想される情報が見つかりませんでした。X509Certificate に保存されている公開鍵をCngKeyに渡すにはどうすればよいですか?

ティア、アロイス

PS: BouncyCastle を使用して公開鍵を抽出することを検討しました。BCしてみた

としても

キーを CngKey に渡す。ただし、同じエラーが発生します。

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

random - 乱数と Microsoft CNG

Microsoft CNG API を使用して、暗号化用の安全な乱数を生成する必要があります。

この API を使用してすべての数値を生成する必要がありますか?それとも別のランダム ジェネレーターのシード値を取得するだけですか?

どんな助けでも大歓迎です!ありがとう。

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

encryption - Microsoft CNG BCryptEncrypt が暗号文 == 平文を返す

対称暗号化のために CNG の AES に AES-OFB ラッパーを実装しようとしています。

理解できない問題が発生しました... AES アルゴリズム ハンドル (BCRYPT_AES_ALGORITHM) を作成し、AES キーをインポートしました。次に、平文/暗号文の XOR で使用する 16 バイトのキーストリームを生成しようとします。このメカニズムを初めて実行すると、keyStreamPtr はランダムなバイト ストリームから別のストリームに変更されますが、これを 3 回目に行うと (キーストリームの 16 バイトの 3 番目のセット)、同じ出力が得られ始め、それが永久に発生します。

誰もこのようなものを見たことがありますか?なぜ AES は、入力された平文と完全に同一の暗号文を返すのでしょうか? 繰り返しますが、これは AES-OFB 実装のためのものです...おそらく私は何か間違ったことをしていますか?

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

.net - Windows CNG カスタム キー ストレージ プロバイダー

独自のキー BLOB 形式などを使用して CNG にカスタム キー ストレージ プロバイダーを登録する方法は? 私が本当にやりたいことは、.NET でカスタム CNG キー BLOB 形式を処理する機能を提供することです。サードパーティの KSP を追加する方法を提供する CNG ドキュメントを読みましたが、それを行う方法のサンプルやチュートリアルは見つかりませんでした。

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

windows - XPまたはWindows7マシンでビルドしているかどうかを、VS2008のコンパイル時に検出するにはどうすればよいですか?

CNG(Bcrypt.dll)コードを含むアプリケーションがあります。Windows 7でアプリをビルドし、bcrypt機能をコンパイルして実行できるようにしたいのですが、Windows XPマシンでビルドしている場合は(コンパイル時に)「スキップ」したい(「スキップ」を印刷したい)暗号化」など、XPでコンパイルした場合)。

コンパイル時に、自分のマシンがWindows 7かXPかを確認して、適切なコードをコンパイルする方法はありますか?これに基づいてビルドターゲット/makefile/プロジェクトファイルを変更したくない(/ Dはしたくない)、これをビルドする人は誰でもビルドするだけで、コンピューターがサポートするものは何でも生成されます...

これは可能ですか?

ありがとう!

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

windows - winapi の bcrypt.h は実際に bcrypt ハッシュをサポートしていますか?

これは奇妙な質問のように聞こえるかもしれませんし、実際にこれを尋ねなければならないのは少し奇妙に感じbcryptますが、Vista で追加されたルーチンについて MSDN のドキュメントを数時間調べた後、ほぼ次の結論に達しました。実際の bcrypt サポートはありません!

ウィキペディアによると:

bcrypt は、パスワードの適応型暗号化ハッシュ関数です... Blowfish 暗号に基づいています... レインボー テーブル攻撃から保護するためにソルトを組み込むことに加えて、bcrypt は適応型ハッシュです。ハッシュとソルトに対する特定のブルートフォース検索攻撃に。

ただし、MSDN のドキュメントから、「bcrypt」ライブラリは、実際には暗号化とハッシュのための汎用インターフェイスであるようです。BCryptOpenAlgorithmProvider 関数を介して「アルゴリズム プロバイダー」へのハンドルを取得する必要があります。この関数には、いくつかの組み込みアルゴリズムから選択できます。しかし、「フグ」という単語はリストのどこにも表示されません。

それで、私は何かを逃していますか?私はこれを間違って読んでいますか?それとも、Windows の「bcrypt」ライブラリは実際には bcrypt をまったくサポートしていないのでしょうか?