問題タブ [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.
c# - DiffieHellman (ECDiffieHellmanCng クラス) で使用するために証明書キーを CngKey クラスにロードします。
これは .NET / C# に関連しています。PFX または PKCS#12 ファイル内に証明書 + 秘密鍵 (P521 ECC 1) があるとします。この証明書とその秘密キーを Windows 証明書ストアにロードしました (PFX をダブルクリックするか、実行しますcertutil -f -p myPfxPassword -importPFX MY SomeEcCert.pfx
)。証明書に互換性がある場合 (p521 曲線など)、CNG 証明書/キーとして自動的にインストールされることに注意してください。
では、秘密鍵を CngKey にロードして、ECDiffieHellmanCng
クラス内で使用できるようにするにはどうすればよいでしょうか? X509 (CNG) 証明書を読み込んで、簿記のためにシリアル番号、発行者、共通名などを読みたいと思います。
c# - Windows Phone ANID から C# での ANID2 への変換?
Windows Phone 7 には、ANID と呼ばれる匿名ユーザー ID プロパティがありました。Windows Phone 8 ではこれが ANID2 に置き換えられました。違いは、ANID2 がアプリの発行者 ID に依存することです。
MSDNの次のコード サンプルが示すように、ANID を ANID2 に変換することができます。必要なのは元の WP7 ANID とパブリッシャー ID (guid) だけです。問題は、例が C++ であることです。私はそれをC#に移植しようとしてきましたが、成功しませんでした。
アルゴリズム自体は非常に簡単です。
問題は、結果が一致しないことです。2 つのアプリ (WP7 と WP8) を作成し、同じデバイスで実行してから、パブリッシャー GUID を使用して WP7 アプリから ANID を変換することで、C++ が正しく動作することを確認しました。C++ では、変換された ANID2 とデバイスからの ANID2 が一致します。C# では、変換された ANID2 は別のものです。
C# コードは単純です。
C++ 版では CNG (Cryptography API: Next Generation) と呼ばれるものを使用します。それからのいくつかのコードは次のとおりです。
その後、「pUniqueId」はカスタムビルド関数を使用して Base64 に変換されます。
どんな助けでも大歓迎です。
更新: Visual Studio は、anidBytes (C#) と pAnidId (C++) (これはバイトに変換された ANID 文字列) の両方の長さが 44 であることを報告します。 これは、C# デバッガーがバイト配列を報告する方法です。
C++ デバッガーは次のとおりです。
私は C++ を知らないので、これら 2 つが同一かどうかはわかりません。それらはそうですが、C++ にはそれぞれの後にこれらの '\0' 文字があり、それで問題ないかどうかわかりません。どちらの場合も長さは 44 と報告されているので、そうだと思います。
もう 1 つのバイト配列比較は、publisherGuid (C#) と pPublisherId (C++) (GUID としての発行者 ID) です。私は彼らが再び一致すると思います。C#:
C++:
値が暗号化された後に出力を見ると、違いがわかります。
C# では、次のコードから出力を取得します。
バイト配列は次のようになります。
C++ コードで、pUniqueId (BCryptFinishHash の結果) を確認すると、次のようになります。
どちらの場合も長さは同じように見えますが、結果は異なります。
C# で、エンコーディング タイプを UTF8 から Unicode に変更すると、anidBytes バイト配列は次のように変更されます。
したがって、C++ デバッガーが示すものと同じです。結果も変わりますが、それでも C++ とは異なります。新しい C# の結果は次のとおりです。
これは C++ からの正しい結果です。
c++ - CNG crypto API を Windows XP で動作させますか?
Microsoft Cryptography API: Next Generationを Windows XP で動作させる方法はありますか?
c# - ECDiffieHellmanCng の秘密鍵をエクスポートする方法
ECDiffieHellmanCngオブジェクトの新しいインスタンスからキーをエクスポートしようとしているので、後で同じキーを使用してそのインスタンスを作成できます。しかし、エクスポートしようとするとエラーが発生します。
「要求された操作はサポートされていません」というメッセージでExportメソッドを呼び出すと、CryptographicException が発生します。Export メソッドの定義を見ると、 SecuritySafeCriticalAttributeで飾られているため、この属性が実際に例外をスローしているのではないかと疑っています。この例外の原因は何ですか? 後で同じ ECDiffieHellmanCng オブジェクトのインスタンスを作成できるように、キーを保存するにはどうすればよいですか?
winapi - CNG (Cryptography Next Generation) プロバイダーが Win7 の通常のユーザー アカウントで動作しない
CSPDK の CNG プロバイダーの例を使用して、独自の CNG ハッシュ プロバイダーを実装しました。しかし、PKCS7 (Signed Message) WinApi 関数 CNG プロバイダーを使用したときに表示されたように、機能しません。CryptMsgOpenToEncode 関数は 0xC0000005 エラーを報告します。これは、プロバイダーがまったくない場合にも表示されます。管理者アカウントの下では、すべて正常に動作します。CNG Hash Provider の MicroSoft の例を直接使用すると、同じエラーが報告されます。また、管理者権限のないユーザー アカウントでプロバイダーをインストールしようとすると、BCryptRegisterProvider 関数から 0xC0000022 エラーが発生します。また、UAC (ユーザー アクセス制御) が有効になっている場合、プロバイダーは機能しません。
ユーザー アカウントで機能させるために、CNG プロバイダーをインストールする正しい方法 (管理者の下で実行できます) は何ですか?
linux - BCryptSignHash 出力署名について
ECDSAアルゴリズムでBCryptSignHashを使用して、Windowsでハッシュ値に署名しました。出力署名バッファの長さは 64 バイトです。また、ハッシュに署名したBCryptGenerateKeyPair関数 (BCRYPT_ECDSA_P256_ALGORITHM アルゴリズム) を使用して公開鍵と秘密鍵のブロブを生成しました。
Linux でこの鍵ペアを使用して、この署名を検証する必要があります。リンクを使用して、生成された公開鍵と秘密鍵のペアを解読できます。 "そして、Linux でも同じものを使用できます。
生成される 64 バイトの署名は、理想的には署名ペア (r,s) ( http://en.wikipedia.org/wiki/Elliptic_Curve_DSA ) である必要があります。
Linux で署名ブロブの内容を (r,s) ペアにマップして検証できるように、生成された 64 バイトの署名を理解する方法はありますか?
または、Linux で生成された署名を検証する簡単な方法はありますか?
ありがとう
.net - Windows 証明書ストアから CngKey への ECC ベースの証明書のインポート
およびで使用するために、ECC ベースX509Certificate2
のから に公開/秘密鍵を取得するにはどうすればよいですか?CngKey
ECDsaCng
ECDiffieHellmanCng
現在、署名/暗号化に RSA 2048 ビット キー ペアを使用しています。X509Store
これを行うには、エクスポート不可としてマークされた秘密鍵を使用して、証明書が安全に保存されている場所から証明書を取得します。現在の実装を ECDSA と ECDH を使用するように変換して、同等のセキュリティのためにより小さいキー サイズを使用できるようにしたいと考えています。
openssl を使用して ECC 証明書を正常に生成しました。
openssl ecparam -out private.pem -name prime256v1 -genkey
openssl req -new -key private.pem -x509 -nodes -days 365 -out public.cer
openssl pkcs12 -export -in public.cer -inkey private.pem -out export.pfx
上記で生成された証明書を証明書ストアに正常にインストールしました。拇印でそれらを取得できますが、秘密鍵と公開鍵の暗号化プロバイダーは「アルゴリズムがサポートされていません」という例外をスローします。代わりに、使用ECDsaCng
しECDiffieHellmanCng
て署名/暗号化することになっていることを理解しています。しかし、これらは を扱いCngKey
ます。
秘密鍵をエクスポート可能にする必要があるため、Bouncy Castle はオプションではありません。
CLR SecurityCngKey
はペアを返しますGetCngPrivateKey
が、CLRSecurity によって返されるキーは ECDH キーであるため、ECDsa では使用できません。X509Certificate2
さらに、CLR セキュリティでは、署名の検証のために公開キーだけを取得する方法がありません (署名者の秘密キーを持っていないか、必要としない場合)。
何か案は?私は機知に富んでいます...どんな助けでも大歓迎です。
ssl - CNG を使用して SSL (TLS) に新しい暗号スイートを追加する
私が知る限り、Windows Vista CNG (Cryptography Next Generation) 以降、個人ユーザーは新しい独自の暗号アルゴリズムを追加できます。これにより、独自のコード化されたメッセージが作成されます (たとえば、http://technet.microsoft.com/からの情報によると)。 en-us/library/cc730763(v=ws.10).aspx )。
しかし、CNG SDK は、SSL に新しい暗号スイートを追加できるかどうかについてコメントしていません。IE (Internet Explorer) が「https」を介したセキュリティ接続に新しいアルゴリズムを使用できる可能性はありますか? CNGではどのような方法が可能ですか? ssl(tls) に新しい chiper スイートを追加したり、ssl(tls) の新しいプロバイダーを作成したりするには、支援が必要です。
助けてくれてありがとう。