問題タブ [evp-cipher]
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 - C で OpenSSL を使用する場合の EVP_CIPHER_CTX_new() でのセグメンテーション違反
私は C 言語の OpenSSL ライブラリの初心者ですが、パス フレーズを入力として使用し、パス フレーズからソルト、IV、およびキーを生成しながら、ライブラリを使用して暗号化するコードに取り組んでいました。これは私が今まで試したことです:
これを試してみましたが、セグメンテーション違反が発生し続けました。デバッグしようとしたところ、EVP_CIPHER_CTX_new() がそれを悪用していたことがわかりました。私は今、それをデバッグしようとして頭がいっぱいで、本当に助けていただければ幸いです。
前もって感謝します。
c - EVP と OpenSSL の使用、C でのコーディング
OpenSSL と EVP に関する多くの質問を見てきましたが、明確な回答はあまり多くありませんでしたが、ここに質問を投稿して、より良いフィードバックを期待しています。
私に渡された資料は、署名付きファイル「symmetrickey.bin」、RSA鍵セット「privatekey_A.pem」、「publickey_A.pem」、および他のユーザーの公開鍵「publickey_B.pem」です。
私がする必要があるのは:
- 署名を解除
symmetrickey.bin
してテキスト ファイルに保存します。 - たとえば、AES などのアルゴリズム
message.txt
を使用して暗号化します。symmetrickey.txt
- で暗号化されたメッセージに
privatekey_A.pem
署名し、ファイルに書き込みますcipher.bin
。 - その後、署名を解除して署名を検証する必要があり
cipher.bin
ます。 - 次に、対称キーでメッセージを復号化し、別のファイルに書き込みます。
私が抱えている問題は、OpenSSL EVP ライブラリの実装方法を理解することです。API ページは、各関数の値がどこから来るかについてあまり明確ではありません。たとえば、EVP_OpenInit()
どこで「ekl」ek
の長さを取得していますか? ek
「prvi」は秘密鍵ですか?そして、どのようにタイプを知ることができますか?これらは私が与えられていないものです。
私は多くの実装を見てきましたが、ほとんどが私の質問に答えていないか、何が起こっているのか、値がどこから来ているのかについての説明がほとんどまたはまったくないクレイジーなコードを提供しています. 最後の手段としてここに投稿します...
c - OpenSSL EVP API コリジョンフリー vs. 一方向プロパティ MAC
私は、C の OpenSSL EVP ライブラリを使用して、衝突のない MAC に対するブルート フォース攻撃と一方向プロパティ MAC を比較する必要がある課題に取り組んでいます。明確にするために、私は何も探していません割り当てのヘルプ、EVP の実装のみ。
指定された入力文字列のハッシュを作成する次のコードを作成しました。
これは、ハッシュを作成するために必要に応じて正確に機能します。一方向と衝突なしのプロパティを設定するにはどうすればよいですか? ドキュメントで具体的なものを見つけることができなかったので、この点について明確にする必要があります。
c - AES-128/CBC 使用時の EVP_DecryptFinal_ex での断続的な復号化の失敗
ここにある EVP ライブラリを使用しています: https://www.openssl.org/docs/manmaster/crypto/EVP_EncryptInit.html
これが私の2つの暗号化関数と復号化関数です。
AES 128 CBC を使用して文字列を暗号化しようとしています。
文字列は通常、次の形式ですword1 word2 word3
問題は、復号化の最終関数が一部の文字列では機能するが、他の文字列では機能しないことです。
暗号化される前の文字列が のようなものであるcat dog cow
場合、復号化は機能します。
しかし、 のようなbat dog cow
場合、特に関数で復号化に失敗しEVP_DecryptFinal_ex()
ます。
一部の文字列では、復号化は常にEVP_DecryptFinal_ex()
関数で失敗します。1 を返しません。
何が問題なのですか?おそらくパディング?私はそれを理解できないようです。
c - AES-128/CBC 使用時の EVP_DecryptFinal_ex でのセグメンテーション違反
これは私の前の質問の続きです: AES-128/CBC を使用すると、EVP_DecryptFinal_ex で断続的な復号化に失敗します。
C OpenSSL EVP ライブラリを使用して暗号化と復号化を試みています。上記の質問に対する回答を受け取った後、それに応じてコードを更新しました。
この変数:
int len = outlen1 + outlen2;
暗号化関数で暗号化されたバイト数を格納します。次に、その変数を復号化関数に渡します (以下のコードには、この変数の受け渡しは示されていません)。この関数は、実際のバイト数と思われるものを使用します。
ただし、一部の入力文字列では、関数でセグメンテーション違反が発生しEVP_DecryptFinal_ex()
ます。
暗号化/復号化されたバイト数またはパディングに明らかに問題があります。私はそれが何であるかを知りません。
ノート:
最終的な復号化が特定の文字列の復号化に失敗するという以前の問題を修正することができました。これらの文字列は問題なく復号化できます。ただし、他のいくつかのストリングも同じ問題に直面していますが、今回はセグメント障害が発生しています。
c++ - openssl EVP_cleanup の呼び出しを無視すると、重大な欠陥やメモリ リークが発生しますか?
私のアプリケーションには奇妙な状況があります。OpenSSL で EVP メソッドを使用してダイジェストを計算し、暗号化を実行しています。最後に、CryptoProvider クラス (アプリケーションへのメイン ゲートウェイ) のデストラクタでEVP_cleanup()を実行しています。OpenSSL状態からすべてのアルゴリズムなどをアンロードします。
ただし、これにより、クライアントが別の目的で OpenSSL を使用している場合、アプリケーション外で OpenSSL をシームレスに使用することができなくなります。それは彼らの仕事もきれいにします。
今、私はこれらの選択肢を残されています:
EVP_cleanup() を無視します。これにより、漏れやその他の結果が生じますか?
アプリケーションのクリーンアップ用に静的 API をセットアップします。これは、クライアントがアプリケーションの有効期間の終わりに向かって呼び出さなければならないものです。
クライアントがライフタイムの終わりに EVP_cleanup を呼び出すことを信頼してください。
ここで何をすると思いますか?
c++ - C++ EVP_EncriptUpdate 書き換えスタック?
私はこのコードを持っています
出力は
EVP 更新関数を「コメント オフ」すると、ループは 702000 回の反復すべてを通過します。間違いはどこですか?EVP が何らかの形でバッファの後ろに移動し、スタック データが破損する可能性はありますか?