問題タブ [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.
java - AES-GCM 暗号文から署名を削除するにはどうすればよいですか?
文字列を暗号化し、暗号化された文字列がデータベースに既に存在するかどうかを確認する必要があります。
AES-GCM を使用すると、暗号化されていない同じデータが毎回異なる暗号化文字列になります。これにより、マッチングが役に立たなくなります。
Java を使用して署名付き暗号文から署名を削除し、照合できる暗号文を明らかにする方法はありますか?
c++ - GunZip を使用した AES/GCM、正しく解凍できない
EDIT質問をもう一度言い直して、バグを再現できる最小の実例を提供しました。
ファイルの暗号化に GCM を使用しようとしています。私の下線フレームワークは Qt です。アイデアはこれです:
- load sourceFile egajpg
- ファイルを GCM モードで PDATA として暗号化する
- ADATAストアのシングルバイトに(今のところ、実際のアプリケーションでは、これはIV、元のファイル名などの情報でより多くなります)
暗号化されたファイルに ADATA を追加する
暗号化されたファイルを読み込み、ADATA/PDATA/MAC を抽出する
- このデータを正しい順序で AuthenticatedDecryptionFilter にフィードし、復号化されたファイルが FileSink に保存されることを期待します
実際のアプリケーションでスレッド化の目的で isAlive をチェックする必要があるため、暗号化されていないファイルを通過し、ファイルを AuthenticatedEncryptionFilter に送り込むループが必要です。したがって、単純なパイプラインを使用できず、ループで手動でデータを処理する必要があります。
今問題に
以下のコードでハッシュ検証が失敗する (derypt で例外がスローされる)
間違った方法で情報をデクリプターに入力していると思われますが、公式の CryptoPP の例に従っています。
助けてください、ありがとう
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 )
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
の戻り値を取得します。0xc000a002
STATUS_AUTH_TAG_MISMATCH
ntstatus.h
パラメータpbIV
が in/out としてマークされていても、パラメータが指す要素は によってpbIV
変更されませんBCryptEncrypt()
。それは期待されていますか?ポインターが指す構造pbNonce
内のフィールドも調べましたが、そのフィールドも変更されていません。また、「手動で」IV を進め、カウンター スキームに従ってコンテンツを自分で変更しようとしましたが、それも役に立ちませんでした。BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO
pPaddingInfo
BCryptEncrypt
and/orBCryptDecrypt
関数を正常にチェーンするための正しい手順は何ですか?
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 を次のように変更してみました
しかし、これにより、アルゴリズムが見つからないというエラーが表示されます。コンソール出力は
誰かがこれを正しく設定する方法を知っていますか?
java - PKCS5Padding を AES/GCM モードにすることはできますか?
AES/GCM のパディング モードは何ですか? ECBモードではPKCS5Paddingになる可能性があるため、NoPaddingになる可能性があることを理解しました.GCMモードではどうですか? JCE インターフェイスでは、「アルゴリズム/モード/パディング」を提供する必要があります (リファレンス)。
したがって、次のコードを使用してインスタンスを取得しました。これは JDK で動作しますが、IBM SDK では失敗しました。
AES/GCM/PKCS5Padding をサポートするプロバイダーが見つかりません
パディングの実際のユースケースは何ですか?
encryption - GCM と OpenSSL を使用して復号化する前にデータを認証する
一部のデータを復号化するために AES-GCM を使用しています。追加の認証データ (AAD)、認証タグ、および実際の暗号化データがあります。
私ができる必要があるのは、実際に復号化する前に、AAD と暗号化されたデータを認証することです。
データが認証に失敗した場合、 OpenSSL の関数が 0 を返すことは知っていますEVP_DecryptFinal_ex
が、実際にデータを復号化せずにデータを検証する方法はないようです。
これを行う必要があるのは、暗号化されたデータが非常に大きくなる可能性があるためEVP_DecryptUpdate
です。ただし、これを行うと、本物かどうかわからないデータが提供されます。
私ができる必要があるのは、すべての AAD と暗号化されたデータを認証し、それを使用EVP_DecryptUpdate
して一度に部分的に復号化することです。すべてのデータを一度に復号化して認証することもできますが、これにより、回避したいアプリケーションに追加の計算時間が追加されます。
java - 「AES/GCM/NoPadding」の IV と認証タグはどのように処理されますか?
Java 8 で暗号化を使用しAES/GCM/NoPadding
ていますが、コードにセキュリティ上の欠陥があるかどうか疑問に思っています。テキストを暗号化および復号化するという点で、私のコードは機能しているようですが、いくつかの詳細は不明です。
私の主な質問はこれです:
その IV は、「特定のキーについて、IV を繰り返してはならない」という要件を満たしていますか。RFC 4106から?
また、関連する質問 (以下を参照) に対する回答や洞察をいただければ幸いですが、その最初の質問が私を最も悩ませています。これに答えるソースコードやドキュメントがどこにあるかわかりません。
おおよその完全なコードは次のとおりです。この投稿を書いているときにエラーが発生した場合はお詫び申し上げます。
ユーザーが私の秘密鍵を解読すると、ゲームオーバーになります。
より詳細な質問/関連する質問:
- cipher.getIV() によって返された IV は、この方法で安全に使用できますか?
- ガロア/カウンター モードで IV キーの組み合わせを再利用することによる大惨事を回避できますか?
- 複数のアプリケーションがこのコードを同時に実行していて、すべてが同じ src データからユーザーに暗号化されたメッセージを (おそらく同じミリ秒で) 表示している場合でも安全ですか?
- 返されたIVは何でできていますか? それはアトミックカウンターとランダムノイズですか?
cipher.getIV()
自分のカウンターを使用して、自分で IVを回避して構築する必要がありますか?- 私がOracle JDK 8 + JCE無制限強度拡張機能を使用していると仮定すると、ソースコード実装は
cipher.getIV()
どこかでオンラインで入手できますか?
その IV は常に 12 バイト長ですか?
認証タグは常に 16 バイト (128 ビット) の長さですか?
#2 と #3、およびパディングがない場合、暗号化されたメッセージは常に
12 + src.length + 16
バイト長になるということですか? (そして、正しい長さを知っている1つのバイト配列に安全に押しつぶすことができますか?)ユーザーが知っている一定の src データが与えられた場合、無制限の数の src データ暗号化をユーザーに表示しても安全ですか?
src データが毎回異なる場合 (例:
System.currentTimeMillis()
または乱数を含む)、無制限の数の src データ暗号化をユーザーに表示しても安全ですか?暗号化する前に src データを乱数でパディングすると効果がありますか? ランダムな 8 バイトが前後にあるとか、片端だけだとか。または、それはまったく役に立たないか、暗号化を悪化させますか?
(これらの質問はすべて私自身のコードの同じブロックに関するものであり、それらは互いに強く関連しており、同じ機能を実装するときに他の人が同じ一連の質問をする可能性がある/する必要があるため、質問を複数に分割するのは間違っていると感じましたStackOverflow のフォーマットにより適している場合は、個別に再投稿できます。お知らせください!)