問題タブ [aes]

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 投票する
4 に答える
3660 参照

encryption - どのブロック暗号モードを使用しますか? CFBは十分ですか?

AES を使用して任意の長さのデータを暗号化したいのですが、どのブロック暗号モードを使用すればよいか迷っています。http://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.htmlでは、CTR モードで AES を推奨しています。Ruby on Rails プラグインを作成していますが、残念ながら OpenSSL (Ruby には標準バインディングがあります) は CTR をサポートしていません。サードパーティの暗号化ライブラリをインストールする必要なく、誰でもすぐにコードを使用できるようにしたいので、今のところ CFB を使用しています。CFBは受け入れられますか? CTR や他のモードと比べてどうですか (安全でないことがわかっている ECB を除く)?

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

c# - AES暗号化用にbyte[]を16バイトの倍数にパディング

私は現在、byte []とそれを設定するための配置をとる関数[C#]を持っていますが、暗号化中に時々エラーがスローされます。

関数に問題がある人はいますか?AES暗号化中にコンテンツサイズが無効であるというエラーが表示されます。これは、コンテンツサイズが正しくパディングされていないことを示しています。

0 投票する
3 に答える
2837 参照

ruby-on-rails - Rails 用の暗号化された Cookie セッション ストアを作成します。私のアプローチは安全ですか?

デフォルトでは、Ruby on Rails はセッション データを Cookie に保存します。これには、サーバー側で永続化レイヤーをセットアップする必要がないなど、多くの利点があります。ただし、セッション データは暗号化されておらず、私が作成している Rails アプリは、潜在的に機密性の高いデータをセッションに配置します。セッションデータをサーバー側に保存することはできれば避けたいのですが、既存の Rails 用の暗号化 Cookie ストアの実装だけが放棄されているようです。そのため、独自の暗号化 Cookie ストアを作成しています。

Rails Cookie セッション ストアは次のように機能します。

  1. セッション データをバイト文字列にシリアル化します。
  2. シリアル化されたデータは base64 に変換されます。
  3. base64 データは HMAC によって追加されます。Rails では、HMAC 秘密鍵が少なくとも 30 バイトである必要があります。Rails はデフォルトで、/dev/urandom から取得した 128 バイトのランダムな文字列を秘密鍵として生成します。HMAC に使用されるデフォルトのハッシュ アルゴリズムは SHA-1 です。
  4. base64 データ + HMAC が Cookie として HTTP クライアントに送信されます。
  5. クライアントがリクエストを実行すると、Rails は最初に HMAC 検証が成功するかどうかを確認します。そうでない場合は、ユーザーがセッション データをまったく送信していないかのように、Cookie 内のセッション データを黙って破棄します。これは、管理者が HMAC シークレット キーを変更すると、すべての古いセッションが自動的に無効になることも意味します。
  6. base64 データは de-base64 され、Ruby データ構造にアンマーシャリングされます。

私が書いている暗号化された Cookie セッション ストアは、通常の Cookie ストア クラスのサブクラスです。次のように機能します。

  • ステップ 3.5 を挿入します。ステップ 3 の後、データを暗号化します。
  • ステップ 5 を変更します。HMAC をチェックする前に、データを復号化します。
  • 暗号化アルゴリズムは CFB モードの AES-256 です。EBC が繰り返しパターンを公開することを理解しています。
  • このコードでは、管理者が正確に 32 バイトの暗号化キーを指定する必要があります。暗号化キーはハッシュされません。デフォルトでは、ランダムに生成された正確に 32 バイトの暗号化キーが提案され、/dev/urandom から取得されます。
  • また、管理者は正確に 16 バイトの初期化ベクトルを指定する必要があります。IV はハッシュ化されておらず、デフォルトでは、/dev/urandom から取得されたランダムに生成された IV が提案されます。

(暗号化後の HMAC ではなく) 暗号化前に HMAC を使用する理由は、暗号化キーまたは IV の変更を検出できるようにするためです。暗号化キーまたは IV が変更された場合に、ソフトウェアが古いセッションを自動的に無効にするようにしたい。暗号化後に HMAC を使用すると、暗号化キーまたは IV を変更すると HMAC 検証がパスしますが、これは望ましくありません。

私のアプローチは安全ですか?そうでない場合、何が欠けていますか?

いくつかのメモ:

  • http://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.htmlで推奨されている CTR を使用したいのですが、残念ながら OpenSSL (Ruby 標準ライブラリに含まれています) は使用できません。 CTR をサポートしていないため、ユーザーに別のサード パーティの暗号化ライブラリをインストールするよう要求したくありません。
  • HMAC に SHA-256 を使用したい。daemonology.net は、「32 ビット システムに対するサイドチャネル攻撃」の可能性があるため、SHA-512 を推奨していません (それが何を意味するにせよ)。ただし、HMAC のハッシュ アルゴリズムとしての SHA-256 は、すべてのプラットフォームでサポートされているわけではありません。最も注目すべきは、OS X で出荷された Ruby が HMAC+SHA256 をサポートしていないことです。私のコードは、OS X でもすぐに動作するようにしたいと考えています。
0 投票する
1 に答える
15827 参照

.net - .NET で SlowAES と RijndaelManaged クラスを取得して一緒にプレイする

javascript ライブラリSlowAESと .NET のRijndaelManagedクラスを使用して、AES 暗号化/復号化をセットアップしようとしています。

この投稿を読んだ後、私はこの方法を選択しました。 Cheeso は、これら 2 つの暗号化方法を一緒にプレイすることができました。

「COM-wrapped-SlowAE のテストでは、CBC モードを使用しました。暗号化は .NET の RijndaelManaged クラスと完全に互換性がありました」 - Cheeso

Cheeso の Windows Scripting Component から JavaScript コード、最新の Slowaes ライブラリを取得し、次の JavaScript スクリプトを使用してテストしました。

次の出力が得られます。

MSDNにある次の例を変更して、C# の暗号化と一致するようにしました。

バイト配列のウォッチ:

マネージド .NET クラスですべてのパディング オプションを試しましたが、暗号化された出力を一致させることができません。誰でも私を助けることができますか?

ありがとう、

ボブ

0 投票する
11 に答える
134947 参照

java - アプリケーションのデプロイ時に「無制限の強度」JCE ポリシー ファイルをインストールしないようにするにはどうすればよいですか?

そのままでは Java でサポートされていない 256 ビット AES 暗号化を使用するアプリがあります。これを正しく機能させるには、セキュリティ フォルダに JCE の無制限の強度の jar ファイルをインストールします。これは、開発者である私にとっては問題ありません。インストールできます。

私の質問は、このアプリが配布されるため、エンド ユーザーはこれらのポリシー ファイルをインストールしていない可能性が高いということです。アプリを機能させるためだけにエンド ユーザーにこれらをダウンロードさせることは、魅力的なソリューションではありません。

エンド ユーザー マシン上のファイルを上書きせずにアプリを実行する方法はありますか? ポリシー ファイルをインストールせずに処理できるサード パーティ ソフトウェアはありますか? または、JAR 内からこれらのポリシー ファイルを参照する方法はありますか?

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

c++ - OFB と CFB のどちらがより安全ですか?

AES暗号化を使用して小さなプロジェクトに取り組んでおり、ストリーミングモードで使用したかったのですが、これはソケットの使用により「適した」モードと見なされていますか? OFBまたはCFB?私はそれについて読んでいて、本当に決めることができないので、どんなアイデアでも大歓迎です.

OpenSSL/C++ を使用します。

0 投票する
7 に答える
461097 参照

encryption - AES暗号化モード(CBC ECB CTR OCB CFB)を選択するにはどうすればよいですか?

それらのどれがどのような状況で好まれますか?

さまざまなモードの評価基準のリストと、各基準の適用可能性についての議論が欲しいです。

たとえば、基準の1つは、暗号化と復号化の「コードのサイズ」であると思います。これは、802.11ネットワークアダプタなどのマイクロコード組み込みシステムにとって重要です。CBCを実装するために必要なコードがCTRに必要なコードよりもはるかに小さい場合(これが正しいかどうかはわかりませんが、これは単なる例です)、小さいコードのモードが優先される理由を理解できます。ただし、サーバー上で実行されるアプリを作成していて、使用しているAESライブラリがCBCとCTRの両方を実装している場合、この基準は関係ありません。

「評価基準の一覧と各基準の適用性」の意味をご覧ください。

これは実際にはプログラミング関連ではありませんが、アルゴリズム関連です。

0 投票する
4 に答える
2429 参照

.net - GPUを利用して.NETからAES暗号化を行うことはできますか?もしそうなら、どのように?

ダブリンのトリニティカレッジからの興味深い論文:
コモディティグラフィックスプロセッシングユニットでのAES暗号化の実装と分析

彼らの手法では、openGLを使用してGPUを使用し、AESに必要な数値変換を実行します。

マネージド.NETライブラリを介してこの機能(ストリーム暗号化の実行)を公開することはどれほど難しいでしょうか?

どうすれば始められますか?ヒント?例?

編集:CUDAまたはアクセラレータを使用して関連する経験がある人はいますか?

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

java - 余分なバイトを書き込むJavacipher.doFinal()

JavaCipherとAESを使用して暗号化/復号化を実装しています。doFinal()の呼び出しで5バイト余分に書き込まれることを除いて、すべてが正常に機能しています。したがって、5バイトが追加された正しくデコードされた文字列になります。

その理由は、16バイトのブロック全体が書き込まれているためだと思います。最後のブロックを含めて、3つの16バイトブロックが書き込まれています。入力暗号化ファイルは64バイトです。暗号化されていないテキストは43バイトである必要があります。

doFinalのドキュメントには、出力バッファーに書き込まれたバイト数を返すことができることが示されています。ただし、0、16、16、16です。あらゆる形式のdoFinalとupdateを試しましたが、動作に変化はありません。

これらのアルゴリズムのほとんどが動作する方法であるため、フルブロックを書き出すことは理にかなっています。ただし、出力データのサイズがわからない場合は、過剰なデータを防ぐにはどうすればよいですか?

おそらく私は別のアルゴリズムを使用する必要がありますか?AES256は必須ですが、別のブロックタイプまたはパディングタイプを使用すると、正しいバイト数を書き込むことができるのではないかと思います。

何かガイダンスはありますか?

(いくつかの)簡潔さのために切り取った:

復号化ルーチンのビジネス部分。

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

.net - AesManaged または RijndaelManaged よりも AesCryptoServiceProvider を選択するのはいつですか?

見分け方は以下だと思います

  • AesCryptoServiceProvider は FIPS に準拠しています
  • AesManaged はクロスプラットフォームであり、.NET 3.0 が必要です
  • RijndaelManaged は .NET 2.0 で実行され、ブロックサイズを制限する必要があります

それは正しいですか?