問題タブ [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++ - 復号化関数が暗号文を復号化するのではなく、さらにスクランブルするのはなぜですか?
見つかったファイルを暗号化し、後で CryptDecrypt 関数を使用して復号化できるこのプログラムを作成しました。関数は成功しますが、ファイルを復号化してプレーン テキストに戻す代わりに、ファイルがさらに暗号化されたように見えます。
CryptEncrypt 関数と CryptDecrypt 関数の両方を配置したので、私が間違っていることをより少なく見ることができます。もう 1 つ、MFC や ATL を使用せずに Win32 API を使用しています。
windows - MS CSP:AT_SIGNATUREとRSA_KEY_SIGN(およびAT_KEYEXCHANGEとCALG_RSA_KEYX)の違い
会社が販売しているスマートカード用のCSPライブラリ(CryptoAPI用)を作成しています。
秘密鍵のAT_SIGNATURE鍵タイプとCALG_RSA_SIGNアルゴリズムの違いについて質問があります(AT_KEYEXCHANGEとCALG_RSA_KEYXについても同じです)。
MSDNサイトに何が書かれているのかは知っていますが、CPGenKey()関数の呼び出しでCALG_RSA ...アルゴリズムのいずれかが指定されている場合、CSPDLLはどのように具体的に機能する必要がありますか?つまり、セッションRSA秘密鍵を生成する必要がありますか、それとも鍵を生成してカードに保存する必要がありますか?または、CPAcquireContext()呼び出し(CRYPT_VERIFY_CONTEXTなど)で指定されたフラグに依存し、AT_SIGNATUREを「署名のデフォルトアルゴリズム」として定義する必要があります。これは、カードの場合はRSAですか。
ありがとう
smartcard - サードパーティの CSP を使用して、cryptoApi または CAPICOM から特定の ADPU 機能にアクセスする
過去 2 か月間、成功していませんでしたが、ここで質問する時が来たと思います。
私はスマート カードを持っていて、クライアントから CSPを受け取りました。実行できる (および実行方法を知っている) APDU コマンドを説明するドキュメントがあります。
名前、住所、写真などの小さなファイル (データ) をカードに保存する必要があります。後で証明書を保存します。
ドキュメントでは、後で安全なメッセージングを使用してカード上のファイルにアクセスするには、外部認証を行う必要があることを読みました。相互認証アルゴリズムのどこかにエラーがあります (MAC、DES、TRIPPLE DES などを計算する必要があり、それを機能させるために何週間も試みました...) 相互認証を必要とする機能を除いて、カードですべてを行う方法を知っています認証。
CSP が提供する機能を調べたところ、外部認証が見当たりません。非 APDU レベルの外部認証を見た唯一の場所は、CardAuthenticateEx のような関数が表示される「Windows スマート カード ミニドライバー仕様」でした。しかし、それらを呼び出す方法がわかりません(どのdllにあるのか)。これらの関数を CSP に含める必要がありますか?
私がCSPを持っているときにAPDUコマンドで低レベルになるのは間違ったアプローチですか? 代わりに CryptoAPI または CAPICOM を使用する必要がありますか? もしそうなら、ファイルに書き込む関数がない(または見つからない)場合、外部認証してファイルを使用するにはどうすればよいですか。(繰り返しますが、これらの機能はすべて「Windows スマート カード ミニドライバー仕様」にあります。
certificate - makecertに秘密鍵をファイル(暗号ストアではない)に出力させるにはどうすればよいですか?
アプリケーション内で使用するためのキーペアを生成したいのですが、mmcから手動でエクスポートするのは面倒です。
コマンドラインパラメータを使用するにはどうすればよいですか、またはハードドライブに常駐し、後で配布するのに適したプライベート証明書を作成することはできますか?
linux-kernel - Linuxカーネル2.6でCryptoAPIを使用する方法
私はしばらくの間探していましたが、syscallの作成/カーネルランドでLinuxに付属するCryptoAPIを使用する方法に関する十分なドキュメント/例の近くを見つけられませんでした。
誰かが良い情報源を知っているなら、私に知らせてください、私はカーネル空間内でのみSHA1/MD5とBlowfish/AESを行う方法を知りたいです。
cryptography - Windows CAPIのCryptVerifySignatureで使用するために、ネイティブコードのXMLまたはモジュラス/指数からRSA公開鍵をインポートするにはどうすればよいですか?
C#では、次のいずれかの方法で公開鍵に対してハッシュを検証できます。
知っておく必要があるのは、受信RSA公開鍵を指定して、CAPIを使用して同じことを実行する方法です。
公開鍵を暗号化プロバイダーのコンテキストにインポートする方法を理解することを除いて、ハッシュを検証するために必要なほとんどのCAPI関数があります。
ありがとう!
encryption - 暗号化 API キーを作成する最良の方法
アプリケーションにアクセス キーを提供したいオープン API があります。受信情報は、ユーザー ID、リソース ID、および更新する値になります。リソースごとに 1 つの API キーが必要です。
できれば、提供されたデータのみを使用して、いかなる種類のデータベースに対してもチェックせずに、着信要求の信頼性を検証できるようにしたいと考えています (非常にシンプルで非常に高速です!)
md5 を使用してリソース ID、ユーザー ID、およびソルトから API キーを生成すると、次のようになります...
私の質問は、私がどれほど妄想的であるべきかということです。上記のような単純な古い md5 で十分でしょうか? 別のオプションは、openssl を使用して pem に対してキーを生成し、結果を md5 して簡潔に保つことです。
アイデアや代替手段でさえ、感謝して受け取りました!
ありがとう
winapi - 実行可能ファイルの Authenticode 署名の検証中にメモリ リークが発生しますか?
WinVerifyTrustを使用して、からのループで呼び出される次の関数を使用して、一部の Windows 実行可能ファイルの有効性を検証しています_tmain
。
ただし、ループごとにメモリが増加し続け、メモリ リークの確実な兆候です。
の理解に問題がありますか、API
それともWinVerifyTrust
関数が実際にリークしていますか? これをシステムでテストしていWindows XP Professional SP3
ます。
編集:
からの出力を次に示しますumdh
。
関数が漏れているように思えCRYPT32
ます...または何かが欠けています。
EDIT2
以下は、数千回のループに対するメモリの進化です。
cryptography - Windows CryptoAPI:CALG_SHA_256とMYキーストアの秘密鍵を使用したCryptSignHash
次のopensslコマンドと互換性のあるCryptoAPIを使用して、Windows(XP SP3からですが、現在Windows 7でテスト中)でデジタル署名を生成しようとしています。
署名には、Windowsの「MY」キーストアの秘密鍵を使用したいと思います。
次のCryptoAPI関数(簡潔にするためにパラメーターを省略)を使用して、SHA1ダイジェストアルゴリズムを使用してファイルに署名することができました。
生成された署名は、「openssl dgst -sha1 -verify」と互換性があります(バイト順序が逆になると)。
私の問題は、CALG_SHA_256をCryptCreateHashで使用しようとすると、エラー80090008(NTE_BAD_ALGID)で失敗することです。を調べてみると、デフォルトのプロバイダーではなく、特定のプロバイダー( PROV_RSA_AES )を使用する必要があることがわかりました。プロバイダーハンドルがあるので、CryptAcquireCertificatePrivateKeyをCryptGetUserKeyに置き換える必要もあります。そこで、プログラムを次のように変更しました。
残念ながら、これは期待どおりに機能しませんでした。CryptGetUserKeyがエラー8009000D(NTE_NO_KEY)で失敗しました。CryptGetUserKey呼び出しを削除すると、プログラムはCryptSignHashまで実行され、エラー80090016(NTE_BAD_KEYSET)で失敗します。キーセットを使用してSHA1ダイジェストに署名できたので、キーセットが存在し、正常に機能することはわかっています。
CertFindCertificateInStoreから取得した証明書コンテキストからの情報を使用してコンテキストを再度取得しようとしました。CryptGetUserKey呼び出しを成功させることが最善でしたが、CryptSignHashは常に同じエラーで失敗しました。
私が使用しようとしている秘密鍵は2048ビット長ですが、SHA1ダイジェストで機能するため、問題になるとは思われません。私は途方に暮れているので、どんな提案でも大歓迎です!
.net - .Net RNGCryptoServiceProvider クラスと Win32 CryptGenRandom() 関数の比較
.Net で作成された新しいアプリケーションがあります。VB6 で記述され、C++ DLL を使用する、(当面の間) 維持する必要があるアプリケーションのレガシー バージョンもあります。特定の C++ ネイティブ DLL は、P/Invoke を介して新しい .Net アプリケーションで引き続き使用および共有する必要があります。
レガシ アプリは現在、乱数ジェネレーターを利用していますが、Win32 API を通じて利用可能な CryptGenRandom() 関数を使用するように置き換えられます。新しい .Net アプリにも同じニーズがあり、RNGCryptoServiceProvider クラスを利用できます。
質問: 内部では、.Net RNGCryptoServiceProvider クラスは Win32 CryptGenRandom() 関数を利用していますか? もしそうなら、これに関して利用可能なドキュメントのリンクに興味があります。