web-dev-qa-db-ja.com

暗号化アルゴリズムの選択は、それ自体でエントロピーを追加しませんか?

誰かが私の暗号化されたデータを持っていて、彼がそれを解読したいとしましょう。人々は常に、キーの長さ(256ビットなど)が暗号化のエントロピーについてどのように決定するかについて話します。これは完全に理にかなっています。攻撃者が2つすべてを試みた場合256 可能性、彼の偉大な偉大な…孫の子供たちが私のデータを持っているでしょう。

しかし、何年もの間彼が間違ったアルゴリズムを使用していたとしたらどうでしょう。アルゴリズムの選択自体がエントロピーを追加するのではなく、これを仮定するのは間違っていますか?したがって、ファイルに名前を付ける代わりにsuper_secret.aes256名前を付けるだけですsuper_secret.rsa256または、ファイルの末尾がまったく指定されていませんか?

50
Robert

暗号システムを設計している場合、答えはNoです。 Kerckhoffsの原則 は、「鍵を除いて、システムに関するすべてが公開知識であっても、暗号システムは安全である必要があります。」シャノンの格言として言い換えると、「敵はすぐにシステムに完全に慣れるという前提の下でシステムを設計する必要がある」という意味です。

攻撃者がアルゴリズムを学習しないと仮定するのは obscurityによるセキュリティ であり、セキュリティへのアプローチとして不適切と見なされます。

アルゴリズムを知らないことを攻撃者に頼ることは、彼または彼女の終わりに何の仕事も追加しないでしょう。なぜなら、ケルコフによれば、彼または彼女は、それを知っているか、合理的に見つけることが期待できるからです。それが不確実性を追加しない場合、それはエントロピーを追加しません。そして、それらの機能は、数値化できるものではありません。

説明したように、失われた暗号システムの場合、通常はアルゴリズムの性質を決定するために十分な履歴情報または統計情報があります(鍵自体ではない場合)。しかし、それがそうであるという前提の下でシステムを設計することはできません。それが使用されるとすぐに失われました。これはOpSecであり、暗号化ではありません。

[〜#〜] edit [〜#〜]コメントには、アルゴリズム選択をキーの一部として使用することが記載されています。このアプローチの問題は、データの復号化の前にアルゴリズムの選択を必ず決定する必要があることです。これは、TLSなどのプロトコルが今日どのように機能するかということです。

本当にアルゴリズムを混合し、S-boxの選択などを決定するためにキーの要素を使用することを検討している場合は、単一の新しいアルゴリズムを効果的に作成しています(独自のロールするすべての既知のリスクを採用しています)アルゴリズムが伴います。)また、新しいアルゴリズムを作成した場合、キーのすべてのビットはそのエントロピー計算の一部です。ただし、鍵素材ではなくアルゴリズムを決定する特定のビットを指摘できる場合でも、それらをプロトコルビットとして扱い、除外する必要があります。

アルゴリズムの機密性に関して、プロトコルは今日秘密かもしれませんが、エージェントの1つが発見され、彼のシステムがコピーされた場合、たとえ鍵が危険にさらされていなくても、古いメッセージは秘密アルゴリズムを使用していません。あなたがそれらに帰するかもしれないどんな「エントロピー」も失われ、あなたはそれさえ知らないかもしれません。

93
John Deters

ジョンの答え がきちんと説明するように、実際には、いいえ。

仮に、十分なsecure暗号化方式を選択できる場合、1つの方式をランダムに選択し、それを使用してデータを暗号化することができます。たとえば、 – 256ビットのキー。使用されるアルゴリズムの選択は、キーに「追加」され、「秘密にされないようにする」の一部になる必要があります(結合されたエントロピーを取ります選択する8つの暗号化アルゴリズムがある場合は259ビットに)。

これを行う際の問題は次のとおりです。

  • 少数のビットのみが追加されます。8つのアルゴリズムでは、3ビットのエントロピーしか追加されません。 8ビットを追加するには(256ビットのキーで合計264ビット)、256の異なる暗号化アルゴリズムが必要になります。実用的な違いを生み出すのに十分なsecureアルゴリズムを見つけることは、単一の既知の攻撃者のキー長を単純に拡張するよりもほぼ確実に困難です。 、アルゴリズム。

  • アルゴリズムを選択してキーを「拡張」する必要があります。これは、通常のキーと一緒に「記憶」されるように選択を「ユーザー」に渡すことを意味します。これにより、キー管理のプロセスが大幅に複雑になります。 「完全な知識」を持つ攻撃者が情報を見つけて、どのアルゴリズムを使用するかを知ることができるため、暗号化されたデータに選択肢を保存することは簡単ではありません。

  • 選択されたアルゴリズムのいずれかが、使用されたアルゴリズムを攻撃者が識別できる(または少なくとも可能なアルゴリズムの範囲を縮小できる)ある種の「フィンガープリント」を残す場合、これにより(部分的に)エントロピーの余分なビットが無効になります。

全体として、使用する鍵の長さを拡張する方がはるかに簡単であり、攻撃者が暗号化方式を知っていることを心配する必要はありません。

47
TripeHound

@John Deterと@TripeHoundからの回答は、物事を非常によく説明しますが、私はケルクホフスの原理を文脈に取り入れた例を挙げたかったのです。外部の攻撃者の観点からこれらの質問に取り組むのは自然ですが、それだけが関連する脅威モデルではありません。実際、すべてのデータ侵害の約半分は内部エージェント(別名、従業員、請負業者など)から始まり、偶発的および意図的な漏出が混在しています。

より現実的な脅威ベクトル

隠された暗号化アルゴリズムがあると外部の攻撃者が、使用しているシステムを簡単に推測できない場合に役立ちます。ただし、コードにアクセスできる内部の攻撃者に対する追加の保護はまったく提供されません。極端な例として、システムが重要な個人識別情報(PII)をデータベースに保持しているが、本番データベースのアクセス資格情報、暗号化アルゴリズム、および暗号化キーの両方がコードリポジトリに直接格納されている場合、アクセス権を持つすべてのユーザーに効果的にアクセスできます。すべての顧客のPIIへのアクセスをコードリポジトリに追加します。

もちろん、それはしたくないので、運用システムを管理者全員から隔離し、アプリケーションにのみアクセス可能な(可能な限り)別のキー管理システムに暗号化キーを保存しておきます。開発者は、どの暗号化アルゴリズムが使用されているか(コードリポジトリで確認できるため)を知っていますが、本番データベースへのアクセス権はなく、データベースへの読み取りアクセス権を取得しても、キーはありません。そこにあるデータを復号化します。

ケルコフの原理を適用する

これがケルクホフスの原則の要点です。秘密を守る必要があるのは、実際の秘密(別名、暗号化キー)だけです。他のすべては誰にでも知られている可能性があり、あなたはまだ安全です。秘密を1つだけ保持するのは難しいので、これは良いことです。キーだけでなく、暗号化アルゴリズムやその他の詳細もできるだけ多くの人から隠すシステムを考案しようとすると、かなり難しくなり、失敗しやすくなります。

要するに、人々は秘密を守るのが苦手です。その結果、保持する秘密が少なくなるようにシステムを設計すると、直感に反しているように見えても、実際にはmoreが安全になります。結局のところ、あなたが提案することはあるレベルで理にかなっています:データを暗号化するだけなのはなぜですか?暗号化方法も非表示にして、安全性を高めましょう!実際には、より多くのものを非表示にすると、間違いを犯し、誤った安心感を覚えます。シークレットを可能な限りシンプルにする効果的な暗号化方法を使用することをお勧めします-キーを非表示にし、メッセージは安全です。

11
Conor Mancone

抽象的に、2 ^ nの暗号化スキームがあり、まったく同じように解読が困難で、キーのスペースが同じである場合、新しい暗号化スキームを「これらの2 ^ nスキームの1つをランダムに選択する」として定義できます。鍵に追加するnビットを効果的に検討します。

しかし実際には、これが可能であったとしても、代わりに単一のアルゴリズムを選択してキーをもう少し長くすることができれば、それは多くの不必要な複雑さです。

8

OPの質問は洞察を示していると思います。答えは、少なくとも理論的にはそうです。ここに何かがあります。それが最初のポイントだと思います。与えられた応答はほとんどが見解です:実際にはそれはそのようには機能しません。これらは間違っているわけではありませんが、OPのポイントの妥当性/関心を失っていると思います。

私がこれを推論する方法:理論的なブラックボックスの観点から見ると、2つの暗号化システム間の選択は、キーの最初のビットの選択に類似しています。実際、それらは本当に同じものです(ビットを追加した場合)。ブラックボックスでは、キーについて特別なことは何もありません。これらは、使用する暗号化変換のオプションを列挙するための優れた方法にすぎません。

これを見るには:

AES128の新しいバリアントを作成するとします。これをJES_0_128と呼びます。これが機能する方法は次のとおりです。提供されたキーの前に0(この場合は128のゼロ)のバイナリエンコーディングを追加し、これを(標準)AES256で使用します。次に、JES_1_128と呼ばれる別の1つを作成します。JES_(2の128がベース10にあるもの)_128まで、1などのエンコーディングです。これらはすべて、完全に有効な128ビットキー暗号化アルゴリズムです。しかし、どれがわからない場合は、256ビットのキー暗号化アルゴリズムです。正確にはAES256。それは確かに、はるかに多くのエントロピーです。

他の回答が指摘する違いは、実際には鍵が2 ^ 256 AES-256暗号化アルゴリズムのどれを使用するかを選択する本当に良い方法であることです。柔軟性があり、よく理解されており、相互の秘密の生成と信頼をユーザーに任せています。なぜ他のものを使うのですか?

一方、使用する暗号化アルゴリズムの256ビットファミリのうちの1つを選び、それをハードコーディングすることは、あまり良い方法ではありません。キーサイズの非常に小さな増加に比べても。またはまったく。みんなに言うだけでもいい。実用的な/ライティングソフトウェア/タイプの観点から、これは、これが興味のある攻撃者から守られていると信頼することはまったく安全ではありません。理由はたくさんあります。特に、攻撃者がどのコピーを選択した場合、どの値を選択したかを簡単にテストできます。しかし、それらは「単なる」実用的な考慮事項です...

1
drjpizzle

これはそれを見る良い方法だと思います:

256ビットのキーであるシークレット、またはそのキーの派生元のパスワード、またはそれらのいずれかと、使用した暗号化アルゴリズムなどの他の情報があります。

攻撃者はあなたの秘密を推測したいと考えています。彼らは、適切なものが見つかるか、時間、お金、または動機が不足するまで、さまざまな可能性を試すことによってこれを行います。

あなたは彼らがどのような可能性を試みているのか分かりません。あなたの質問では、「彼が何年もの間間違ったアルゴリズムを使用していたとしたらどうしますか?」それに対する唯一の答えは、「彼がいなかった場合はどうなりますか?」あなたはそれを制御できません。攻撃者がどのような可能性を試すかわかっている場合は、リストにないものをシークレットとして選択するだけで、セキュリティの問題は簡単に解決されます。

しかし、あなたができることは、コンピューティング技術の状態に基づいて、時間やお金がなくなる前に彼らが試すことができる可能性のある数を概算することです。これは、量子コンピューティングやAESのバックドアなど、他の世界にはない技術に秘密裏にアクセスできないことを前提としています。その場合、彼らはその場合より良いことをするので、おそらく安全な仮定です。パスワードを解読してみてください。 (Cf Cut Lex Luthor a Check 、ただし this rebutal も参照)

次の結果を証明することもできます:nの可能性からランダムに(高品質のRNGを使用して)秘密をランダムに選択した場合、そして攻撃者はkの可能性を試します彼らが何であろうと、彼らがあなたの秘密を推測する可能性は高々 k/n

nは、保存/記憶しなければならない情報量とともに指数関数的に増加しますが、kは、彼らが費やす時間/お金の量なので、k/nを非常に小さくすることは難しくありません。

だから、あなたはあなたの秘密を大きな可能性のセットからランダムに均一に選ぶべきです。ランダムな256ビットの対称鍵は、サイズ2のセットから一様に選択されます256、これは(はるかに)十分な大きさです。

(アルゴリズム、キー)のペアのバッグからランダムに選択することもできますが、単一のアルゴリズムはすでに多くの選択肢を提供しているため、無意味です。

あいまいなアルゴリズムを選択して、攻撃者がそれを試さないように願うことができますが、randomを選択しないため、それがまったく役立つことを証明する。他に選択肢がない場合は、何もしないよりはましですが、他の選択肢があります。

これが、暗号学者が鍵だけを秘密として扱うようにアドバイスする根本的な理由です。たくさんの鍵があり、鍵はランダムに選択するのが最も簡単なものです。他には何も必要ありません。

0
benrg

あるアルゴリズムで何かを暗号化し、別のアルゴリズムが使用されたように見せかけると、他の回答で指摘されているようにケルクコフの原理が適用されるため、少なくとも私たちの実装に関する知識を持つ攻撃者に対しては、少し役に立たないでしょう。それはまだ攻撃者に対して「働く」でしょう。暗号化されたファイルをOneDriveまたはクラウドストアから何も知らずに盗みます。

暗号化アルゴリズムの選択を復号化プロセスに含める必要がある場合(つまり、ツールは、入力内容に応じて、いくつかのアルゴリズムから1つを選択します)、キーの長さに効果的にビットを追加します。ケルコフの原理はnotを適用します。しかし、かなりの量のビットを追加するのは少し難しいです-選択するには多くのアルゴリズムが必要です-それは意味がありません(最後の段落を参照)。

どちらの場合でも、やりたいことはほとんど無意味です。誰かが大金持ちの子供が機器に数十億ドルを投資している場合、誰かがあなたのデータを持っている可能性があるという仮定は、90〜100ビットの範囲のキーについては間違いなく真実です。現実的ではありますが、誰も(NSAでさえも)それを行うことはありません。費用便益比率はそれを放棄しません。ソーシャルエンジニアリング、つまり殺害に続く拷問は、はるかに安く、速く、実用的なアプローチです。

110ビット程度よりも明らかに大きいものについては、費用便益比を無視しても、総当たり攻撃は現実的ではありません。 one single 128ビットのキーが一生の間にブルートフォースによって破壊されるよりも、AESに組み込まれているバックドアについて心配する必要があります。

現在、ブルートフォースを介して256ビットのキーをクラックするという単なるアイデアはまったくばかげています。その上にビットを追加するというアイデアは無意味であり、まったく違いがありません。不可能は「不可能」よりも良くなることはありません。

0
Damon