問題タブ [cryptoapi]
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# - XML 文字列から DSA キーをインポートすると、1 人のユーザーが失敗します。許可?インストールが壊れていますか?KSPが悪い?
私のソフトウェアを使用しているときに、ユーザーが最近奇妙なエラーを報告しました。DSA 署名を使用してライセンスを確認しています。ソフトウェアが署名を検証するために公開鍵をインポートすると、DSA プロバイダーのFromXmlStringメソッドは、 「 Key not valid for use in specified state.」という説明とともにCryptographicExceptionをスローします。
System.Security.Cryptography.Utils.CreateProvHandle から呼び出された _OpenCSP メソッドが NTE_BAD_KEY_STATE (0x8009000b) を返すように見えます。誰かがこのエラーを私に報告したのはこれが初めてであり、そのコードは何年も変更されていません.
これの考えられる原因は何ですか? マスクされたアクセス許可エラーですか? CAPI のインストールが壊れていますか? .net の信頼/権限設定によってブロックされていますか? キーストレージプロバイダーによって保存されたジャンク、または cryptoapi に予期しないものを返す KSP はありますか?
エラーコード/説明/などをグーグルで調べましたが、何が原因であるかについての本当の答えに出くわしませんでした...
失敗したコードの分離バージョンは次のとおりです: http://forum.huagati.com/getattachment.ashx?fileid=78
...そして、影響を受けるユーザーのマシンでは次のように返されます。
更新:同じマシンで .net fx 2.0 を実行すると同じコードが正常に動作しますが、.net fx 4.0 では失敗します。
更新 2: DSA プロバイダーは、%APPDATA%\Microsoft\Crypto\DSS\[SID] に保存されているキーを探してから、既存のキーで初期化しているようです。このメカニズムと競合する可能性はありますか? その鍵ストレージがどのように動作するか、および文字列から公開鍵をロードするときにヒットするのはなぜですか?
c# - .NETでATLベースのデータ復号化を再現できない:最初の4バイトが間違っている
これはC++コードです:
バイトの配列を「ABC-DEF-2\ZXCVBNMHOHUH、2020100」のような文字列に正常にデコードします。
そして、これは私が書き込もうとしている対応する.NETコードです。
その出力文字列は「몶뛛跬DEF-2\ZXCVBNMHOHUH、2020100」です。したがって、最初の4文字は正しくデコードされません。ソルトを変更すると、これらの文字が異なります。
C ++コードにはソルトがないので、試してみる価値があるとは思えません。しかし、すべての単純なものも機能しません。
誰か助けてもらえますか?
windows-server-2003 - CryptoAPI-異なるバージョンのWindows間でのキーのエクスポート/インポート
Win 2003 32ビットではPRIVATEKEYBLOB
、CryptExportKey
呼び出しを使用してaを正常にエクスポートしました(dwFlags = 0)。次に、64ビットの実行可能ファイルを使用してWin Server 2008 64ビットにキーblobをインポートしようとすると、の呼び出しはでCryptImportKey
失敗しNTE_BAD_DATA
ます。
どちらの場合も、暗号プロバイダーはへの呼び出しで初期化されます
CryptAcquireContext(&hProv、szContainer、NULL、PROV_RSA_AES、CRYPT_MACHINE_KEYSET)
エクスポート/インポートするパスワードが一致します。CryptDeriveKey
公開鍵は、プレーンテキストの表現が同一であるパスワードのmd5ハッシュに基づいています。公開鍵が2つのシステムで等しくなるかどうかはわかりません。
さまざまな種類のシステム(Win200332ビットとWin200864ビット)が予想される障害の原因ですか。これを機能させる方法はありますか?
c++ - Windows XP と Vista/7 での MS Crypto API の動作
XP、Vista、および Windows 7 で PEM 形式 (以下のコードに含まれるサンプル) からインポートされた公開キーを取得する方法を理解しようとしています。サンプル コードは、XP と Windows Vista/7 の両方でキーをインポートしますが、インポートしません。同じ方法。
Windows XP では、暗号化プロバイダーの名前に文字列"(Prototype)"が必要であり、CryptImportPublicKeyInfo への呼び出しを渡すことができます。
Windows 7 では、"(Prototype)"プロバイダーが存在しているように見えますが、CryptImportPublicKeyInfo の呼び出しをサポートしていないため、混乱を招きます。
これらのオペレーティング システム間で正しい実装はどのように見えるでしょうか? XP を検出して"(Prototype)"を付けて名前を要求する必要がありますか? 他のオペレーティング システムではそれを付けずに要求しますか? 一部の XP システムではまだ失敗する可能性はありますか?
または、この紛らわしい動作を検出し、必要な呼び出しをサポートする暗号化プロバイダーを選択する方法はありますか?
Windows 7 での出力:
Windows XP での出力:
その出力を生成する C++ ソース コード: (crypt32.lib が必要)
java - キーストアのロード時にポップアップを防止する方法
こんにちは、この質問の当然の結果として、パスワードを要求するか、証明書を挿入するように要求するダイアログが表示されないようにする方法を知っているかどうかを尋ねたいと思いました。
現在、Windowsキーストアを使用して、リーダーと証明書の両方を含むUSBトークンに保存されている証明書を取得する必要があるシステムを構築しています。元の質問とは異なり、キーストアをロードするときに問題は発生しませんが、キーストアにアクセスするときに問題が発生します。キーストアに証明書が 1 つしかない場合は問題ありません。適切なタイミングで適切なパスワード ポップアップが表示されます。ただし、2 番目の USB キーがシステムに挿入され、後で削除された場合、エントリはキーストアに残り、それ以降、キーストア内の情報にアクセスしようとするたびに、キーを挿入するためのポップアップが表示されます。これは、キーが現在コンピューターに接続されていないストア内のすべての証明書に対して発生します。
これらの証明書を必要とする私たちが接続しているシステムでは、複数の暗号化操作を実行する必要があり、これらのポップアップが毎回表示されるのは、控えめに言ってもかなり面倒です.
windows - Windowsサービスに関連付けられている個人証明書ストアにマシン証明書をインポートするにはどうすればよいですか?
こちらのMSDNフォーラムから質問を再投稿しています。
この問題は、Windowsサービスに関連付けられている個人証明書ストアに証明書をインポートすることに関係しています。
私のマシンの名前はil-mark-lapです(マシンはこの名前でping可能です)。
プロセス:
1.自己署名認証局の証明書があります。NCCAと呼びましょう。その秘密鍵は別のマシンに存在します。dev-profilerで参照してみましょう。
2. il-mark-lapマシン証明書は、dev-profilerで作成され、il-mark-lapのLocalComputer\My証明書ストアにインポートされます。認証局(NCCA)をLocalComputer \ Root証明書ストアに移動する必要があることに注意してください。ただし、移動方法がわからないため、export-delete-importシーケンスを使用します。
3. il-mark-lapマシン証明書は、LocalComputer \My証明書ストアからMSMQ\My証明書ストア(メッセージキューサービスの個人証明書ストア)にコピーされます。繰り返しになりますが、コピー方法がわからないため、エクスポートとインポートのシーケンスを使用します。
ImportPfxIntoSrvCertStoreは、指定されたPFXを指定されたサービス(私の場合はMSMQ)の個人証明書ストアにインポートするためにC++で記述されたプログラムです。
すべてのエラー処理を省略して、関連するC++コードは次のとおりです。
CSafeXXXHandle
およびクラスを無視しCSafeMapViewOfFile
ます。これらは単純なハンドル/バッファーホルダーであり、デストラクタでそれぞれのハンドル/バッファーを解放します(「リソース取得は初期化です」デザインパターン)。
とにかく、PFXImportCertStore
APIは「エンコードまたはデコード操作中にエラーが発生しました」というメッセージで失敗します。APIを呼び出すと、PFXIsPFXBlob
FALSEが返されます。
コードの先頭にあるLocalsデバッガービューは次のとおりです。
したがって、すべてのパラメータが正しいようです。
何が悪いのかわかりません。インポートされるPFXファイルは、MMCコンソールを使用して問題なくインポートされるため、完全に正しいものです。
ちなみに、私はこの記事にある例に基づいてコードを作成しました-http://www.codeguru.com/Cpp/IN/internet/security/article.php/c6211
編集
マシン証明書をLocalComputer\MyからMSMQ\Myにコピーするには、非対話型の手順が必要であることを強調したいと思います。
c - OpenSSL API を使用して Windows CryptoAPI CryptDeriveKey を実装する
AES-128 を使用して特定のデータを暗号化/復号化するための CryptoAPI コードと、SHA-256 を使用してパスワードから派生したキーがあります。
OpenSSL と同等の実装を作成して、それでデータを暗号化し、CryptoAPI で復号化し、その逆を行うにはどうすればよいですか?
EVP_aes_128_cbc() および EVP_sha256() で EVP_BytesToKey を使用しようとしても、「そのまま」は機能しませんでした。(「機能しない」とは、つまり、CryptoAPI で生成された暗号化データを復号化できないことを意味します。これは、OpenSSL の暗号化データを復号化するために機能します)。
任意のアイデアまたは良い参考文献はありますか?
前もって感謝します。
Windows CryptoAPI コードは次のとおりです。
c++ - Window C / C ++CryptoAPIの例とヒント
この質問をしているのは、Windows C / C ++ Crypto APIの使用を開始するための簡単でわかりやすいガイドラインについて、msdnドキュメントやその他の不透明なソースを1日の大半を費やしてきたためです。
私が見たいのは、いくつかのサンプルコード、典型的なインクルードパス、リンクガイドラインなど、本当に役立つものです。私はこれが不正確な質問であることを知っていますが、不正確な答えはまったくない方が良いと思います。
私は自分のわずかな発見でボールを転がします...
macos - Microsoft CryptoAPI を Mac OS に移植する
Microsoft CryptoAPI を使用する Windows アプリケーション (Visual Studio を使用) があります。ここで、WinApp によって暗号化されたデータを読み取り、WinApp によって復号化される Mac OS X 上のデータを暗号化できる Mac OS X アプリケーションを開発する必要があります。このような方法で初期化された WinApp の暗号化/説明:
また、暗号化/説明には以下が使用されます。
私が理解しているように、MD5 ハッシュと RC4 エンコード/デコードを実装するライブラリを見つける必要があります。そのようなライブラリがいくつかあるようです。例: matrixSSL、OpenSSL。しかし、目的のためにライブラリを使用することは明らかではありません (特に、セキュリティ/暗号化 API に慣れていないことを考慮すると)。誰かが特定の暗号化ライブラリを推奨できますか? 私のタスクのコード例はありますか?
添加:
主な問題は、Microsoft のバージョンと互換性のある ::CryptDeriveKey のポータブル アナログが必要なことです (つまり、同じキーを生成します)。誰かそのようなものを知っていますか?または、::CryptDeriveKey によって鍵を作成するアルゴリズムですか?
c++ - WindowsCryptoAPIとOpenSSLx509形式間の変換
CryptoAPIを介してWindowsのスマートカードから抽出したCERT_CONTEXT構造体があります。この構造を、OpenSSLと整合性のあるDERエンコードされたバイト配列に変換する必要があります。私がこれまでに得た最も近い一致は、X509_ASN_ENCODINGとCERT_INFO構造を入力として受け取るX509_CERT_TO_BE_SIGNED修飾子を使用するCryptEncodeObjectを介したものです。
問題は、 OpenSSLi2d_X509関数によって生成された出力と一致しないことです。2048ビットのx509証明書を入力として使用すると、OpenSSLは1789バイトのエンコードされた出力を生成し、WindowsCryptoAPIは1638バイトのエンコードされた出力を生成します。
私が見ることができる唯一のオプションは、 CERT_CONTEXT構造体からの値を使用してその場でX509証明書を作成し、結果のオブジェクトをi2d_X509関数で直接エンコードすることです。これに関する唯一の問題は、スマートカードから秘密鍵を抽出できないことです。そのため、x509証明書作成ルーチンで問題が発生する可能性があります。
誰かがこれらの問題についての洞察/アドバイス/ヒントを提供することができれば、私は大いに義務づけられるでしょう。