問題タブ [aes-gcm]

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

java - AES-GCM 暗号文から署名を削除するにはどうすればよいですか?

文字列を暗号化し、暗号化された文字列がデータベースに既に存在するかどうかを確認する必要があります。

AES-GCM を使用すると、暗号化されていない同じデータが毎回異なる暗号化文字列になります。これにより、マッチングが役に立たなくなります。

Java を使用して署名付き暗号文から署名を削除し、照合できる暗号文を明らかにする方法はありますか?

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

c++ - GunZip を使用した AES/GCM、正しく解凍できない

EDIT質問をもう一度言い直して、バグを再現できる最小の実例を提供しました。

ファイルの暗号化に GCM を使用しようとしています。私の下線フレームワークは Qt です。アイデアはこれです:

  1. load sourceFile egajpg
  2. ファイルを GCM モードで PDATA として暗号化する
  3. ADATAストアのシングルバイトに(今のところ、実際のアプリケーションでは、これはIV、元のファイル名などの情報でより多くなります)
  4. 暗号化されたファイルに ADATA を追加する

  5. 暗号化されたファイルを読み込み、ADATA/PDATA/MAC を抽出する

  6. このデータを正しい順序で AuthenticatedDecryptionFilter にフィードし、復号化されたファイルが FileSink に保存されることを期待します

実際のアプリケーションでスレッド化の目的で isAlive をチェックする必要があるため、暗号化されていないファイルを通過し、ファイルを AuthenticatedEncryptionFilter に送り込むループが必要です。したがって、単純なパイプラインを使用できず、ループで手動でデータを処理する必要があります。

今問題に

以下のコードでハッシュ検証が失敗する (derypt で例外がスローされる)

間違った方法で情報をデクリプターに入力していると思われますが、公式の CryptoPP の例に従っています。

助けてください、ありがとう

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

c++ - AES-128-GCM から正しい出力を取得できません

次のテスト コードでは、理論的には 58e2fccefa7e3061367f1d57a4e7455a の NIST テスト スイートの結果が得られるはずですが、出力の 16 進ダンプでは代わりに 9eeaed13b5f591104e2cda197fb99eeaed13b5f591104e2cda197fb9 が生成されます。

これはnISTテストです:

(テストケース No. 1 http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-revised-spec.pdf )

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

c - GCM モードで AES を使用して BCryptEncrypt および BCryptDecrypt 呼び出しをチェーンする方法は?

Windows CNG API を使用すると、GCM モードで AES を使用して、認証を使用してデータの個々のブロックを暗号化および復号化できます。複数のバッファを連続して暗号化および復号化したいと考えています。

CNG のドキュメントによると、次のシナリオがサポートされています。

暗号化または復号化への入力が複数のバッファに分散している場合は、BCryptEncrypt 関数と BCryptDecrypt 関数への呼び出しを連鎖させる必要があります。連鎖は、dwFlags メンバーで BCRYPT_AUTH_MODE_IN_PROGRESS_FLAG フラグを設定することによって示されます。

私がそれを正しく理解していれば、これは、BCryptEncrypt複数のバッファーで順番に呼び出し、最後に結合されたバッファーの認証タグを取得できることを意味します。同様にBCryptDecrypt、実際の認証チェックを最後まで延期しながら、複数のバッファーで順番に呼び出すことができます。しかし、それを機能させることはできません。値dwFlagsが無視されているようです。を使用するたびに、 で定義されている と等しいBCRYPT_AUTH_MODE_IN_PROGRESS_FLAGの戻り値を取得します。0xc000a002STATUS_AUTH_TAG_MISMATCHntstatus.h

パラメータpbIVが in/out としてマークされていても、パラメータが指す要素は によってpbIV変更されませんBCryptEncrypt()。それは期待されていますか?ポインターが指す構造pbNonce内のフィールドも調べましたが、そのフィールドも変更されていません。また、「手動で」IV を進め、カウンター スキームに従ってコンテンツを自分で変更しようとしましたが、それも役に立ちませんでした。BCRYPT_AUTHENTICATED_CIPHER_MODE_INFOpPaddingInfo

BCryptEncryptand/orBCryptDecrypt関数を正常にチェーンするための正しい手順は何ですか?

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

xml - AES-GCM を使用した xmlsec

Cygwin 環境でhttps://www.aleksey.com/xmlsec/news.htmlから XMLSec の最新リリースをコンパイルしました。この例に従って、セッション キーとデジタル署名を使用して XML ファイルを暗号化します。http://users.dcc.uchile.cl/~pcamacho/tutorial/web/xmlsec/xmlsec.html#htoc9 CBC には重大なセキュリティ上の問題があるため、3DES の代わりに AES-128-GCM を使用して強化したいと考えています。 192-CBC。Session-Key-Template.xml を次のように変更してみました

しかし、これにより、アルゴリズムが見つからないというエラーが表示されます。コンソール出力は

誰かがこれを正しく設定する方法を知っていますか?

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

java - PKCS5Padding を AES/GCM モードにすることはできますか?

AES/GCM のパディング モードは何ですか? ECBモードではPKCS5Paddingになる可能性があるため、NoPaddingになる可能性があることを理解しました.GCMモードではどうですか? JCE インターフェイスでは、「アルゴリズム/モード/パディング」を提供する必要があります (リファレンス)。

したがって、次のコードを使用してインスタンスを取得しました。これは JDK で動作しますが、IBM SDK では失敗しました。

AES/GCM/PKCS5Padding をサポートするプロバイダーが見つかりません

パディングの実際のユースケースは何ですか?

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

encryption - GCM と OpenSSL を使用して復号化する前にデータを認証する

一部のデータを復号化するために AES-GCM を使用しています。追加の認証データ (AAD)、認証タグ、および実際の暗号化データがあります。

私ができる必要があるのは、実際に復号化する前に、AAD と暗号化されたデータを認証することです。

データが認証に失敗した場合、 OpenSSL の関数が 0 を返すことは知っていますEVP_DecryptFinal_exが、実際にデータを復号化せずにデータを検証する方法はないようです。

これを行う必要があるのは、暗号化されたデータが非常に大きくなる可能性があるためEVP_DecryptUpdateです。ただし、これを行うと、本物かどうかわからないデータが提供されます。

私ができる必要があるのは、すべての AAD と暗号化されたデータを認証し、それを使用EVP_DecryptUpdateして一度に部分的に復号化することです。すべてのデータを一度に復号化して認証することもできますが、これにより、回避したいアプリケーションに追加の計算時間が追加されます。

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

java - 「AES/GCM/NoPadding」の IV と認証タグはどのように処理されますか?

Java 8 で暗号化を使用しAES/GCM/NoPaddingていますが、コードにセキュリティ上の欠陥があるかどうか疑問に思っています。テキストを暗号化および復号化するという点で、私のコードは機能しているようですが、いくつかの詳細は不明です。

私の主な質問はこれです:

その IV は、「特定のキーについて、IV を繰り返してはならない」という要件を満たしていますか。RFC 4106から?

また、関連する質問 (以下を参照) に対する回答や洞察をいただければ幸いですが、その最初の質問が私を最も悩ませています。これに答えるソースコードやドキュメントがどこにあるかわかりません。


おおよその完全なコードは次のとおりです。この投稿を書いているときにエラーが発生した場合はお詫び申し上げます。

ユーザーが私の秘密鍵を解読すると、ゲームオーバーになります。


より詳細な質問/関連する質問:

  1. cipher.getIV() によって返された IV は、この方法で安全に使用できますか?
  • ガロア/カウンター モードで IV キーの組み合わせを再利用することによる大惨事を回避できますか?
  • 複数のアプリケーションがこのコードを同時に実行していて、すべてが同じ src データからユーザーに暗号化されたメッセージを (おそらく同じミリ秒で) 表示している場合でも安全ですか?
  • 返されたIVは何でできていますか? それはアトミックカウンターとランダムノイズですか?
  • cipher.getIV()自分のカウンターを使用して、自分で IVを回避して構築する必要がありますか?
  • 私がOracle JDK 8 + JCE無制限強度拡張機能を使用していると仮定すると、ソースコード実装はcipher.getIV()どこかでオンラインで入手できますか?
  1. その IV は常に 12 バイト長ですか?

  2. 認証タグは常に 16 バイト (128 ビット) の長さですか?

  3. #2 と #3、およびパディングがない場合、暗号化されたメッセージは常に12 + src.length + 16バイト長になるということですか? (そして、正しい長さを知っている1つのバイト配列に安全に押しつぶすことができますか?)

  4. ユーザーが知っている一定の src データが与えられた場合、無制限の数の src データ暗号化をユーザーに表示しても安全ですか?

  5. src データが毎回異なる場合 (例:System.currentTimeMillis()または乱数を含む)、無制限の数の src データ暗号化をユーザーに表示しても安全ですか?

  6. 暗号化する前に src データを乱数でパディングすると効果がありますか? ランダムな 8 バイトが前後にあるとか、片端だけだとか。または、それはまったく役に立たないか、暗号化を悪化させますか?

(これらの質問はすべて私自身のコードの同じブロックに関するものであり、それらは互いに強く関連しており、同じ機能を実装するときに他の人が同じ一連の質問をする可能性がある/する必要があるため、質問を複数に分割するのは間違っていると感じましたStackOverflow のフォーマットにより適している場合は、個別に再投稿できます。お知らせください!)