問題タブ [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.
windows - MS CryptoAPI を使用して証明書を保存/復元すると、添付された秘密鍵が無効になる
Windows Crypto API を使用してユーザー証明書を保存および復元するプログラムを作成しました。私はそれが正常に機能しているという印象を受けましたが、証明書が復元された後、証明書に添付された秘密鍵が無効であるとユーザーから苦情が寄せられました。
以下を使用して証明書を保存していました。
そして後で:
CERT_STORE_SAVE_AS_STORE フラグは、秘密鍵を含めて証明書全体をシリアル化する必要があることを意味する必要があることを理解しています。MSDNが次のように述べていることに注意してください。
「CERT_KEY_CONTEXT_PROP_ID プロパティと、関連する CERT_KEY_PROV_HANDLE_PROP_ID および CERT_KEY_SPEC_PROP_ID の値は、シリアル化されたストアに保存されません。」
..告白しますが、よくわかりません。
証明書を復元するときは、CertFindCertificateInStore() を使用して、証明書が既に存在するかどうかを確認し、存在しない場合にのみ確認します。
証明書を元に戻すには...私の質問は、秘密鍵が保存されないのはなぜですか? 何か不足していますか?
java - JavaでBouncyCastleを使用してDHパラメータを正しくエンコードするには?
「openssl dhparam -out dh1024.pem 1024」コマンドの出力を Java でプログラム的に再現しようとしています。コード スニペットは次のとおりです。
したがって、基本的には、P、G、および L パラメータの値をバイト配列「pgl」に連結し、BC の PEMWriter クラスを使用してファイルに保存しています。しかし、openssl 経由で使用しようとすると、次のエラーが発生します。
/etc/openvpn/easy-rsa/keys/dh1024.pem から DH パラメーターを読み込めません: エラー:0D07207B:asn1 エンコード ルーチン:ASN1_get_object:ヘッダーが長すぎます: エラー:0D068066:asn1 エンコード ルーチン:ASN1_CHECK_TLEN:オブジェクト ヘッダーが正しくありません: エラー: 0D07803A:asn1 エンコード ルーチン:ASN1_ITEM_EX_D2I:ネストされた asn1 エラー:エラー:0906700D:PEM ルーチン:PEM_ASN1_read_bio:ASN1 lib
....これにより、DHパラメーターを間違ってエンコードしていると思われますが、これをエンコードする正しい方法がどこにも見つかりません。誰でもこれで私を助けることができますか?私は何日も城壁に頭をぶつけてきましたが、役に立ちません....助けてください:(
c++ - クライアントとサーバー間の暗号化と復号化に Crypto Api を使用する正しい方法は何ですか?
多くの頭痛の種と人々が停止するようアドバイスした後、私は最終的にサーバー/クライアント アプリをこの API で動作させ、必要なキー、つまりセッションと Exchange を作成することができました。
公開鍵をクライアントに送信すると、鍵が正常にインポートされ、その鍵を使用してメッセージも暗号化されますが、サーバーに戻すと; セッションキーを使用してメッセージを復号化しますが、メッセージはガベージとして返されます (うーん.. 秘密キーが必要です!)。これは、暗号化されたメッセージを rpc 経由で返す方法が原因である可能性がありますが、何か別のものであることがわかります。理想的には、私が現在取得している情報はかなり混乱しているため、これらすべてのキーを使用して何をすべきかについての明確でわかりやすい説明が必要です。
メッセージを暗号化し、復号化のために返すことができるように、交換公開鍵をクライアントに渡しますか?
または:
クライアントのセッション キーをサーバーの公開キーで実際に暗号化し、それを返す必要がありますか? (これは私には正しく聞こえませんが、私はすべての耳です!!!)
コメントを残して別の API に移動するか、MSDN から貼り付けをコピーしてください (私は既にすべて読んでいます)。私はCrypto APIを使用していますが、サーバーがクライアントに渡す必要があるキーと、クライアントが何をして何を返すべきかについて明確な説明が必要なだけで、最終的に先に進むことができます...
encryption - Windows CryptoAPI から Linux libmcrypt への復号化の移植に関する問題
プログラムを Windows から Linux に移植しようとしています。Windows プログラムは Window CryptoAPI を使用し、Linux は libmcrypt を使用しています。
Windows コードは次のとおりです。
プログラムが実行されると、次のように返されます。
Q&D Linux バージョンは次のようになります。
プログラムが実行されると、次のように返されます。
両方のプログラムが同じデータを使用していることを確認しました。
- CryptDeriveKey は、
07,f1,e2,ea,d4,c8,79,74,03,a6
(CryptExportKey に従って) キーを作成します。これは、Linux で生成された md5 の最初の 10 バイトと同じです (要求された 80 ビット キーに一致するように短縮します)。 - どちらもアルゴリズムでソルトを使用していません (または少なくともそのように報告していません)
- どちらも {0,0,0,0,0,0,0,0} の 8 バイト IV を使用しています
- どちらもRC2アルゴリズムを使用しています
- どちらもCBCモードを使用しています
彼らが異なるデータを返す理由がわかりません。どんな援助でも大歓迎です。
.net - System.Security.Cryptographyを使用したWin32CryptoAPI呼び出しのC#への変換
製品のdllの1つを削除し、それを純粋なC#のものに置き換えるという割り当てが与えられました。古いDLLは、Win32ネイティブCryptoAPIへの呼び出しをラップする.NET2.0マネージC++(C ++ \ CLI)です。新しいDLLは、同じ名前とメソッドを持つ新しいオブジェクトを公開する必要がありますが、C#(.NET 4.0)で作成する必要があります。もちろん、新しいDLLは古いDLLと同じ方法で暗号化(および復号化)する必要があります。そうしないと、DBやファイルなどの永続ストレージに保存されているすべての暗号化パスワードが解決されません。
これは、ネイティブ(Win32)API呼び出しの(擬似)コードです(入力は常にUnicodeでエンコードされていることに注意してください)。
今、私は.NET APIによって公開された新しい暗号オブジェクトでC#(System.Security.Cryptography名前空間)を使用して同じプロシージャを作成しようとしています。
ここで私は厄介な問題に直面しています-暗号化された配列(結果の暗号化されたバッファ)は両方の方法を使用して同じではありません!各配列の最初の8バイト(64ビット)は同一ですが、次のバイトは同一ではありません。これにより、短い文字列(最大3文字)は両方の方法を使用して同じように暗号化されますが、長い文字列は異なる暗号化データになります。
2つの方法を強制的に同等にするにはどうすればよいですか?つまり、出力が同じになるように同じ方法で暗号化および復号化するには?ここで何が欠けていますか?.NET APIとネイティブ(Win32)APIの間でデフォルト値\動作に変更はありますか?(Win32 Crypto APIのデフォルトの3DES暗号モードはEBCであると思いますが、C#を使用するデフォルトはCBCです。間違っている場合は修正してください)。
ありがとう!
オムリ
security - PFXImportCertStore-問題-cryptoapi
を使用して、サードパーティのCA発行のPFX証明書をインポートしましたPFXImportCertStore
。インポートが成功すると、同じ呼び出しによってデフォルトPCERT_KEY_PROV_INFO_PROP_ID
で次の値に設定されます。PFXImportCertStore
なぜではなくキータイプ
dwKeySpec
として認識されるのですか?AT_KEYEXCHANGE
AT_SIGNATURE
pwszProvName
Microsoft Base Cryptographic Provider v1.0に設定されているのはなぜですか?そもそも証明書はデジタル署名のためにのみ発行されました。ただし、キー使用法フィールドは、証明書がデジタル署名、否認防止、キー暗号化、データ暗号化(f0)に使用できることを示しています。強化されたキーの使用法は、クライアント認証と安全な電子メールを示していますか?CAは証明書を正しく発行しましたか?証明書の前面には次のメッセージ(下のスクリーンショット)が表示されます。これは、この証明書がデジタル歌唱用に発行されたものではないことを疑わせるものですか?私は正しく考えていますか?
4.これらの問題のため、を使用してデータに署名することができませんCryptSignMessage
。内部呼び出しは、署名用の秘密鍵へのコンテキストの取得に失敗します。この問題を回避する方法についての提案はありますか?生成した自己署名PFX証明書で署名できます。SHA256が必要なため、秘密鍵を新しいコンテナにエクスポートして、プロパティをに設定しAT_SIGNATURE
、cspプロバイダーのタイプをに設定できると思いますか。PROV_RSA_AES
XPsp3を使用しています。
ありがとう
windows-ce - Win CE でのファイル システム フィルタと CryptoAPI の問題
私は過去 2 週間、ファイル システム フィルターに取り組んでおり、興味深い問題に遭遇しました。基本的に、Platform Builder で OS の起動時に実行されるアプリでエンコード/デコードの実装を構築し、それが機能することを確認してデバッグを行いました。このアプリは正常に動作し、コンテキストの取得、キーの生成、暗号化/復号化を問題なく実行できます。
filesys dll の読み込みで同じことを実行しようとすると (これは、私の理解ではファイル システム フィルターが読み込まれる時点です)、ファイル システム フィルターで使用できる CSP サービスがないように見えます。CryptAcquireContext が NTE_BAD_KEYSET で失敗するか、既定のプロバイダーを使用しようとすると、NTE_PROV_TYPE_NOT_DEF で失敗します。
欲求不満で、その時点で利用可能なすべてのプロバイダーを列挙するコードをいくつか書きましたが、filesysがロードされたときに何もないことが判明し、誰かが役立つ経験やアイデアを持っているかどうか疑問に思いました. 私は正式にアイデアを使い果たしました。
乾杯バーナード
cryptography - CryptoAPI を使用して p7b 証明書から公開鍵を抽出する方法
p7b 証明書ストアがあります。で開きます
証明書チェーンの検証を行いますが、リーフ証明書から公開鍵を抽出する必要があるまで問題ありません。電話する
しかし、ASN1 bad tag エラーを返します。
だから私は次のコードを試します:
正常に動作しますが、それでも公開鍵を抽出する方法がわかりません。
助言がありますか?
c++ - VS2010 - CryptoAPI の構造変更 - v7.0A 対 v6.0A - WinCrypt.h
ではC:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinCrypt.h
、 の定義は次のとおりCERT_CHAIN_ENGINE_CONFIG
です。
XP sp3 マシンで Visual Studio 2010 を使用しています。この場合、上記の構造の次の 2 つのメンバーがグレー表示されることが予想されます。しかし、これは起こっていません、
NTDDI_VERSION
in-turn はsdkddkver.h
次のように定義されており、私の場合はXP SP3マシンであるため、_WIN32_WINNT
どういうわけか間違った値を取ります。NTDDI_WIN7
問題の構造の上記の 2 つのメンバーはCERT_CHAIN_ENGINE_CONFIG
存在しませんが 、2010 年のビジュアル スタジオ プロジェクトは、構造が競合しているためC:\Program Files\Microsoft SDKs\Windows\v6.0A\Include\WinCrypt.h
、ヘッダー ファイルと lib ファイルを自動的に取得します。C:\Program Files\Microsoft SDKs\Windows\v7.0A\Include\WinCrypt.h
parameter is incorrect
この問題を克服する方法を教えてください。
Visual Studio 2010 SP1 をインストールする必要がありますか?
Web で、構造を初期化すると問題が解決するという1 つの参照が見つかりましたが、問題の 2 つのパラメーターはグレー表示されず、ビルド中に取り込まれるため、解決しません。
更新1:
私のプロジェクトの設定:
$(VCInstalDir) - >C:\Program Files\Microsoft Visual Studio 10.0\VC
$(WindowsSdkDir) ->C:\Program Files\Microsoft SDKs\Windows\v7.0A
$(FrameworkSdkDir) ->C:\Program Files\Microsoft SDKs\Windows\v7.0A
ライブラリファイルの設定、
更新 2: 私のプリプロセッサの定義は
%(PreprocessorDefinitions) は次のように値を継承しました
ありがとう
java - アプレット内でMSCAPIを使用してキーストアをロードするにはどうすればよいですか?
ユーザーが個人証明書を使用してドキュメントに署名できるアプレットがあります。アプレットはすでに署名されていますが、キーストアを読み込もうとすると、sunMSCAPIに関連するアクセス拒否エラーが発生します。これは、次のコード行が原因で発生しています。
アプレットの署名について私が理解していることから、署名プロセスの後にジャンプする必要のある追加の手順はありません(ポリシーファイルの編集など)。すべてのアプレット機能を次のようにラップしてみました。
しかし、それは役に立ちませんでした。私は根付いて、さまざまなフォーラムで、sunMSCAPIはJDK6でのみ利用可能であるというコメントを見つけました...私が持っているものです。アイデアが足りなくなったので、助けていただければ幸いです。
潜在的な支援として、アクセス拒否エラーのスタックトレースを次に示します。