問題タブ [mscapi]

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 に答える
2670 参照

c# - C# と同等の Crypto API 関数

以前、Application-A は C++ にあり、メッセージは C++ の crypto API 関数を使用して Application-B に送信する前に署名されていました。これは、 http://msdn.microsoft.com/en-us/library/で説明されている例とまったく同じです。 windows/desktop/aa382372%28v=vs.85%29.aspx .

このメッセージは、C++ の Crypto API 関数を使用して Application-B によって再度検証されました (上記の例では、署名済みのメッセージを検証する方法について再度説明しています)。

現在、古い C++ Application-A を C# に変換/移行しています。C# でP-Invoke を使用してメッセージに署名する方法を既に見つけました。署名されたメッセージが Application-B (C++ CryptVerifySignatureMessage を使用) によって検証されると、すべて正常に動作します。例はhttp://blogs.msdn.com/b/alejacma/archive/2008/02/21/how-to-sign-a-message-and-verify-a-message-signature-c.aspxにあります。 .

@CodeInChaosがコメントで述べたように、相互運用作業をフレームワークに任せたい (P-Invoke や BountyCastle のような他のサードパーティの実装を使用しない)。

それで、.netがメッセージに署名するためのAPIを提供しているかどうかを知りたいです(学習の観点からも)。

ノート:

私はすでに.Netが提供する暗号ラッパーAPI RSACryptoServiceProviderを試しました。

しかし、C++ の CryptSignMessage と C# の RSACryptoServiceProvider.SignData() メソッドの戻り値 (バイト配列) に大きな違いが見つかりました。

• CryptSignMessage: CryptSignMessage 関数は、指定されたコンテンツのハッシュを作成し、ハッシュに署名してから、元のメッセージ コンテンツと署名付きハッシュの両方をエンコードします。

• RSA.SignData: 指定されたハッシュ アルゴリズムを使用して、指定されたバイト配列のハッシュ値を計算し、結果のハッシュ値に署名します。

この違いにより、Application-B がメッセージを検証すると、「無効な署名」というエラーがスローされます。

したがって、.net が提供するこの RSACryptoServiceProvider タイプは使用できません。.NET API を使用して同じことを達成する他の方法はありますか? (.net API を使用する場合、出力バイト配列は、前述の PInvoke の例を使用する場合の出力のバイト配列と類似している必要があります) そのため、Application-B は問題なく動作します。

どんな助けでも大歓迎です。

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

java - JavaでUSBトークンからキーストアを取得する方法

SafeNet 5100 eToken には有効な証明書が既に含まれており、それを必要とする会社の Web アプリケーションにアクセスするために使用します (多要素認証)。

この Web サイトにアクセスするためのデスクトップ アプリケーションを作成しています。すでに Web サイトの証明書を に追加して、TrustStore証明書を に取得することができKeyStoreます。

私がこれまでに持っているものは次のとおりです。

このコードを実行すると、次のようになります。

そして、トークンの正しいパスワードを入力したときと間違ったパスワードを入力したときにこのエラーが発生するため、正しい方法でパスワードを渡すことは決してないと思います。

例外が発生するのはなぜですか?

- - - - - 更新しました - - - - -

PKCS11.dll ライブラリを指す次の情報を含む構成ファイルを作成しました。

そして、メイン関数に次を追加します。

そして今、私はこれをエラーとして取得しています:

また、 Keystore.getInstance を次のように変更しようとしました。

そして、私はこの別のエラーを受け取ります:

--------- 更新 2 (作業コード) ---------

私の最終的な作業コードは次のとおりです。

そして、実行構成でデバッグ引数を設定する必要があります。

または、.cfg ファイルでスロットを設定します。

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

c++ - Microsoft CryptoAPI を使用して CFB-128 を設定するには?

プロバイダー タイプのMS_ENH_RSA_AES_PROVプロバイダーを使用しています。暗号モードでブロック暗号アルゴリズムをPROV_RSA_AES選択しました。キー パラメータを 128に設定したいのですが、64 より大きい値を渡して呼び出すと、常に NTE_BAD_DATA (0x80090005L) が返されます。CALG_AES_128CRYPT_MODE_CFBKP_MODE_BITSCryptSetKeyParam()

CryptoAPI を使用して CFB-128 を設定するにはどうすればよいですか? ありがとう。

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

java - MSCAPI と IAIK を使用した InvalidKeyException

アプリケーションで Sun の MSCAPI プロバイダを使用して署名証明書を取得しています。署名者の秘密鍵は、sun.security.mscapi.RSAPrivateKey です。IAIK はこのクラスを認識していないようです (以下のエラーを参照)。私はなぜなのか理解していない。私の問題の解決策は何ですか?

前もって感謝します !

編集 :

これは私の「汚い」 classTest です:

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

c++ - C++ Microsoft CryptoAPI の AES/Rijndael

Microsoft CryptoAPI (CryptDeriveKey、BCrypt[...] 関数、CryptAcquireContext など) を使用して、次の暗号化コード (VB.NET 4.0) を同等の C++ コードに変換するにはどうすればよいですか? (Microsoft CryptoAPI を使用した AES について説明している記事は、インターネット上で 1 つも見つかりませんでした...)

そして復号化するもの:

(注: 私は既に SHA-512 メソッドに関する C++ コードを持っているので、気にしないでください。)

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

c++ - WinCrypt/CryptoAPI を使用して OpenPGP ベースの RSA 署名を検証する

OpenPGP パケットを解析するコードがありne公開鍵パケットとs署名パケットをバイト配列として持っています。

署名を検証するために、最初に初期化します(の代わりにCryptAcquireContext試しました)PROV_RSA_FULLPROV_RSA_AES

次にハッシュを作成します

を使用して入力しCryptHashDataます。これはこれまでのところ、を使用した公開鍵の解析とインポートと同様に機能しますCryptImportKey

CryptVerifySignatureGetLastError()へのデコードに失敗しますINVALID_SIGNATURE

https://www.rfc-editor.org/rfc/rfc4880#section-5.2.2で読ん

それは必要ですか、それともによって自動的に行われCryptVerifySignatureますか? そうでない場合、それを行う方法は?

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

security - MSCAPI : CNG およびセキュリティ記述子

Windows API は、オブジェクトにセキュリティ記述子を設定する方法を提供します (たとえば、アクセス制御リストの設定を許可します)。

キー ストレージ プロバイダー(KSP)によってホストされる暗号化キーのセキュリティ記述子NCryptSetPropertyは、 (および適切なフラグとパラメーターのセット)を使用して評価できます。

ただし、Cryptography Provider Development Kit (CPDK)では、セキュリティ記述子の必須サポートは必要ありません(また、ユーザー アカウントが作成されない専用サーバーでは、アクセス制御リストを設定しても実際には役に立たない場合があります)。

すべてにもかかわらず、KSP によるセキュリティ記述子のサポートが一部の Microsoft アプリケーションで期待されているかどうかを誰かが知っていますか? (たとえば、Active Directory 証明書サービスなど)

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

iis-7.5 - Windows Server 2008 R2 の Web サービスで Microsoft CryptoAPI が機能しない

暗号化に Microsoft Crypto API を使用する Web サービスがあります。Windows Server 2003 では Web サービスとして正常に動作します。移動先の Windows Server 2008 R2 では Web サービスとして動作しませんが、サーバーでは同じコードが動作します。通常の Windows アプリケーション (つまり、Web サービスではない)。

これを機能させるために変更する必要がある、ある種のセキュリティ設定またはそのようなものはありますか? Windows Server のバージョン間で何かが明らかに変更されています。これは、IIS で実行される 32 ビットの Web サービスです。

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

windows - MS-CAPI CSP のテスト、WinDbb カーネル デバッグでも署名が失敗する

Win 7 で新しい CSP をテストしようとしています。カーネル デバッグを許可するようにブート構成を設定し、WndDbgfile:kernel debug を実行して選択し、ローカルに設定します。新しい CSP で signtool を使用しようとすると、依然として署名エラー チェックが発生します。環境は次のとおりです。


カーネル デバッガーの存在がテスト CSP の署名チェックを妨げない理由について何か考えはありますか? そのセットアップはリモート デバッグ環境でのみ機能しますか?

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

java - Java セキュリティ - MSCAPI プロバイダー: USB トークンのみから証明書を取得する方法

アプレットで Sun の MSCAPI プロバイダを使用することができました。

私のアプレットは、単に Windows 証明書ストアから証明書を一覧表示し、ユーザーが好みの証明書を選択できるようにすることで、ユーザーが自分のトランザクションに署名できるようにします。

ユーザーが USB トークン/スマート カードなしで署名できないようにしたいと考えています。つまり、秘密鍵が USB トークン/スマート カードに保存されていない場合、アプレットは証明書を表示/リストするべきではありません。

私はこのような証明書を取得します (try catch ブロックを削除しました):

私はこのように署名を管理します (try catch ブロックを削除しました):

証明書が USB トークンからのものかどうかを区別する方法が見つかりませんでした。Certificate オブジェクトと PrivateKey オブジェクトの両方を確認しましたが、役に立つ属性が見つかりませんでした。

MSCAPI でこれを行う方法について何か提案はありますか? またはMSCAPIの代替案として何か提案はありますか?

(私が PKCS11 を使用しない/使用できない理由は、世界中で複数のブランドのトークンをサポートする必要があるためです。要件は、アプレットが各トークンの内部に PKCS11 dll パスのリストを保持してはならないということです。dll の取得サーバー側からのパスも受け付けませんので、PKCS11 は使えません。間違っていたら訂正してください。)