暗号に雪崩効果を表示させるにはどうすればよいですか?

私は暗号化の初心者です。ランダムソルトとパスワードを使用してメッセージを暗号化する、パスワードベースの暗号化/復号化アルゴリズムを設計しました。私はハッシュにSHA-512、シャッフルに行列演算、データの混合と取得にビット単位のXORを使用しています。ソルトと暗号文の長さは256文字です。

私の知る限り、アバランシェ効果は、次のいずれかのわずかな変更を意味します:

  • 暗号
  • パスワード
  • salt

出力を大幅に変更する必要があります。

私の実装では、saltまたは暗号を変更しても、大きな変更は見られません。出力。ただし、パスワードにわずかな変更があると、出力が大幅に変更されます。

それで、私の質問:

  • 雪崩効果についての私の理解は一般的に正しいですか?そうでない場合は、どうすればよいですか?
  • 自分の(または任意の)暗号でアバランシェ効果を最もよく生成するにはどうすればよいですか?アバランシェ効果を作成するには、ソルトの長さを短くし、暗号文を小さくする必要がありますか?そうでない場合、どうすればこれを達成できますか?

コメント

  • 好奇心から、ハッシュを何に使用していますか?
  • Cryptography StackExchangeへようこそ。 @Avinash、あなたの質問はここに移行されました。これは、StackOverflowよりもここで話題になっているためです。コメントして回答を受け入れるには、ここでアカウントを登録してください。
  • 建設的な回答が必要な場合は、暗号が現在どのように機能しているかを示す必要があります(数式で、望ましい)。次に、それを改善する方法を確認できます。
  • ' " don '独自の暗号を設計しない"-ここでは暗号化' sもちろん、すべて自己責任であると理解する必要がありますが、試してみるのはまったく問題ありません:)私は'質問を少し編集して、不在時の雪崩効果に焦点を当てました。関連する暗号構造の。誰かがそれが不要だと感じた場合は、私が'行ったことをロールバックまたは改善してください。

回答

実際の暗号アルゴリズムを変更する必要はありません。ケルクホフスの原則について読んでください。実際のアルゴリズムではなく、キーやIVなどを変更するだけです。

雪崩をテストするには、キーを1ビット反転します。これにより、出力の約半分のビットが変更されるはずです。

暗号設計については、 Applied Cryptography がすでに提案されています。それに加えて、アルゴリズムに拡散と混乱を導入することを検討する必要があります。また、既存のアルゴリズムを研究して、それらがどのように機能するかを確認することも価値があります。私は独自の単純な Feistel暗号を設計することから始めました。そうすれば、周囲の構造の多くがすでに完成しています。また、F関数を反転可能にする必要がないため、設計が簡素化されます。これにより、その分野での柔軟性が大幅に向上します。

学習演習以外の目的で独自のデザインを使用しないことに関する警告は適切です。

コメント

  • どうもありがとうございました…
  • 暗号/暗号は英国/米国のものです。

回答

独自の暗号化/復号化アルゴリズムを構築しているのは素晴らしいことだと思います。その方法で暗号化について多くのことを学びます。これまでのところ、暗号化暗号化-復号化アルゴリズムは、何らかの形で恐ろしい欠陥を最初に構築します-非常に教育的です-

用語

私があなたの質問を正しく理解していれば、あなたは完全に雪崩効果についての合理的な質問ですが、このサイトのほとんどの人はあなたの非標準的な用語について非常に混乱しているため、「あなたが何を求めているのかさえ理解できません。

あなたの質問を正しく理解していれば、あなたは「暗号化-復号化システムを構築しています平文を入力として受け取り、データを暗号化されたファイルとして保存し、後で正しいパスワードを持っている人がそれらの保存されたファイルを復号化し、元の平文入力と同じ復号化された平文をビットごとに復元できるようにします。

おそらくすでに知っていると思いますが、一般的な暗号化プログラムは、暗号化ファイルの作成時に暗号化された安全なランダム番号ジェネレーターによって新たに生成された初期化ベクトル(IV)で始まる暗号化ファイルを作成します。次に、暗号化プログラムは、入力ファイルをいくつかの固定されたブロックサイズのプレーンテキストブロックに切り刻み、いくつかのブロック暗号モードを使用しますブロック暗号を介して各ブロック(および暗号化キー)を処理し、最終的に次の暗号化ブロックを作成する「暗号化モード」での操作暗号化されたファイルに追加される同じブロックサイズ。多くの場合、最後に「パディング」と「メッセージ認証」に関連する厄介なビットがあります。

後で、復号化プログラムは暗号化されたファイルを同じ固定ブロックサイズの暗号化されたブロックに切り刻み、各ブロックにフィードします(および暗号化キー)「復号化モード」で同じブロック暗号操作モードを使用してブロック暗号を介してプレーンテキストブロックを回復し、すべてのプレーンテキストブロックを連結して、元のプレーンテキストファイルとビットごとに同一のファイルを回復します。 。

ハッシュにSHA-512を使用しています

OK、 SHA-512は優れたハッシュアルゴリズムです。これを内部ラウンド関数の一部として使用している場合、またはメインの暗号化キーからサブキーを生成する場合は、機能します。不必要に複雑に見えるだけです。

SHA-512を次のように使用している場合パスワードからメインの暗号化キーを生成するための鍵導出関数(KDF)。多くの人は、それは「十分に複雑ではない」と言うでしょう。

シャッフル

これは珍しいことですが、うまくいく可能性があります。

データの混合と取得のためのビットワイズXOR。

事実上すべての最新の暗号化アルゴリズムは、多くのビットワイズXOR演算を使用します。最新の暗号化アルゴリズムの多くは、モジュラー加算、固定回転量の回転、および内部ループでのXOR(ARX)のみを使用するように設計されています(ラウンド反復)。

使用する内部ラウンド関数はかなりです。 only XOR、 only 回転、または only モジュラー追加は、ラウンドの繰り返しがいくつ使用されても、致命的に安全ではありません。

(XORと行列演算の特定の組み合わせのセキュリティについて何も言えません。

の長さソルトと暗号文は256文字です。

「初期化ベクトル(IV)と各暗号文ブロックの長さは256文字です。 。 “

「塩」は一方向の暗号化ハッシュで使用されます-暗号化 salt "は?です。 「IV」は、暗号化と復号化の両方の双方向暗号化で使用されます。 「salt」と「IV」はどちらも、公に知られていると想定される新たに生成されたランダム値ですが、用語は、それらがさまざまな種類のシステムで使用されることを示唆しています。

ほとんどの人が長さを設定します。 IVはブロックサイズに等しいので、「すばらしい」です。

1997年のAESコンテストの発表前に開発された事実上すべての暗号は、64ビット(8バイト)以下のブロックサイズを使用していました。どうやらそれだけでは不十分だと思っていたようですが、私が知る限り、128ビット(16バイト)のブロックサイズで十分だと誰もが考えているようです。

256バイトのブロックサイズで十分です。不必要に大きいように見えます。

アバランシェ効果

平文の各ブロックをブロック暗号(一部の暗号化モードで)で実行すると、アバランシェ効果は、次のいずれか:

  • プレーンテキストブロックのデータ
  • パスワード
  • IV

変更する必要があります暗号テキストブロックを大幅に出力します(約半分のビット)。

暗号テキストの各ブロックをブロック暗号で実行すると(一部の復号化モードで)、なだれ効果は、次のいずれかで1ビットが変化することを意味します。

  • 暗号化ブロック
  • パスワード
  • IV

出力の「プレーンテキスト」ブロックを大幅に変更する必要があります(約半分のビット)。

私の実装では、ソルトまたは暗号を変更しても、出力に大きな変更は見られません。

次の2つのいずれかを言うつもりだったと思います:

  • “の近くで1ビット変更した場合始まりo暗号化されたファイル(つまり、IVまたは初期の暗号文ブロック)では、「出力平文ファイルの終わりに向かって大きな変化は見られません。」

この欠如(安全な)暗号ブロック連鎖(CBC)またはその他の操作モードを使用すると、常に変更が発生します。したがって、必ずしも問題ではありません。

ただし、(安全な)伝搬暗号ブロック連鎖(PCBC)モードを使用していると考えた場合、これは問題になる可能性があります。実装のバグ。

また、この変更の欠如は、(安全でない)電子コードブック(ECB)モードを使用する場合に予想される結果です。

どの操作モードを選択しても、復号化プログラム暗号化されたファイルのいずれかのビットが破損している場合は常に、ファイルがMAC認証チェックに失敗したという大きな恐ろしい警告を出力する必要があります。

  • “の1つのビットを変更した場合暗号化されたファイル内の単一の暗号化された暗号化テキストブロック、「出力平文ファイル内の対応する平文ブロックに大きな変更は見られません。」

はい、これは重大な欠陥を示しています。ブロック暗号アルゴリズムには、良いなだれ効果がありません。これは、アルゴリズムに十分な混合がないことを示しています。これは通常、システムが選択暗号文攻撃および同様の攻撃に対して脆弱であることを意味します。

自分の(または任意の)暗号でアバランシェ効果を最もよく生成するにはどうすればよいですか?雪崩効果を作成するには、ソルトの長さを短くし、暗号文を小さくする必要がありますか?

「のサイズを小さくする必要がありますか」と尋ねるつもりだったと思います。アバランシェ効果を作成するためのIVとブロックサイズ? “

通常は必要ありません。

アバランシェ効果を生成するための最も一般的なアプローチは、Wikipedia

ブロック暗号の記事:

1回のラウンド後に完全な雪崩を発生させるブロック暗号を知りません。ブロック暗号を設計する人々は、ブロック暗号がすべての標準暗号攻撃に抵抗するのに十分な数のラウンドを選択しようとします。これは、完全ななだれを生成するのに十分すぎるほどです。 。

ブロック暗号を設計する人々は通常、1つの一般的なブロック暗号設計スキームを選択し、ブロック暗号プログラムに選択されたラウンド数を繰り返してもらいます。最も一般的な一般的なブロック暗号設計スキームのいくつかは次のとおりです。

  • 置換置換ネットワーク
  • Feistel暗号
  • Lai-Massey暗号

これらのそれぞれには、いくつかの内部非線形関数が必要です。初期のブロック暗号は、多くの場合、各ラウンドで複雑な内部関数を使用し、1回のラウンドでアバランシェをほぼ達成します。最近の暗号は、多くの場合、ラウンドごとに非常に単純で高速な内部関数(いくつかのARX関数)を使用し、多数のラウンドの後に最終的にアバランシェを達成するのに十分な非線形性を備えています。

コメント

  • 補足: khazad暗号は1回のラウンド後に完全に拡散します。私も'それを行うおもちゃを作りました。'は確かに可能であり、その方法を見つけるのは楽しいです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です