web-dev-qa-db-ja.com

すべてのセキュリティが「あいまいさ」ではありませんか?

私は、セキュリティのために「あいまいさ」をrelyしてはいけないことを知っています。たとえば、非標準のポートを選択することは実際にはセキュリティではありませんが、通常それを行っても害はありません(そして、最も些細な攻撃のいくつかを緩和するのに役立つかもしれません)。

ハッシュと暗号化は、強力なランダム化と秘密鍵に依存しています。たとえば、RSAはdの機密性に依存し、拡張機能としてpq、およびϕ(N)に依存しています。それらは秘密にしておく必要があるので、すべての暗号化(およびランダム化ベクトルがわかっている場合はハッシング)のセキュリティは、あいまいなものではありませんか?そうでない場合、秘密のソースを隠すことと単に秘密のものを秘密にしておくことの違いは何ですか? (適切な)暗号化を安全と呼ぶ理由は、数学が反論できないためです。たとえば、Npqを計算することは、計算上困難です。私たちが知る限り)。しかし、pqが不明であるため、それは本当です。それらは基本的にobscuredです。

私は obscurityの有効な役割どの時点で何かが 'obscurityによるセキュリティ'としてカウントされますか? を読みました、そして私が質問していないので私の質問は異なりますどのようにあいまいさが有効であるか、またはスペクトル内でスキームがobscureになるときですが、むしろ、私たちが定義したとしても、すべての秘密のものを隠すこと自体が不明瞭ではないかどうか尋ねていますそのようなメカニズムを通じて達成されるセキュリティ。私の意味を明確にするために、後者の質問の回答(ちなみに)は「...パスワードを解読する必要があります」で止まっているようです。つまり、パスワードは依然として攻撃者から隠されています。

44
Matt

この答え を参照してください。

重要な点は、obscuritysecrecyを明確に区別することです;違いを単一のプロパティに絞り込む必要がある場合、それは測定可能性でなければなりません。 secret部外者には知られていないものであり、これらの部外者には知られていない程度です。たとえば、128ビットの対称鍵は128ビットのシーケンスであり、すべての2128 可能なシーケンスは使用される確率と同じであるため、このようなキーを推測しようとする攻撃者は、平均して少なくとも2回試す必要があります。127 正しいものを打つ前にそれらの。それは量的です。計算、数値の追加、攻撃コストの計算を行うことができます。

同じことがRSA秘密鍵にも当てはまります。最も効果的な既知の方法は 整数因数分解 に依存しているため、数学はより複雑です。関連するアルゴリズムは、対称鍵の総当たりほど定量化が簡単ではありません(RAMの使用と並列処理またはその欠如)。しかし、それはまだ秘密です。

対照的に、不明瞭なアルゴリズムは、攻撃者がアルゴリズムの詳細を理解しない限り「秘密」であり、それは多くの要因に依存します。アルゴリズム、リバースエンジニアリングのスキル、スマートネス。私たちは、誰かがどれほど賢いかを測定するための有用な方法を持っていません。したがって、秘密アルゴリズムを「秘密」にすることはできません。これには別の用語があり、それは「あいまい」です。

セキュリティはリスク管理であるためセキュリティを秘密にしたい:セキュリティシステムを使用することによるオーバーヘッドを受け入れます。それを使用し、攻撃が成功するリスクをどの程度減らすか、そして情報に基づいた決定を行うためのコストのバランスを取ることができます。これは、攻撃が成功するリスクを数値で示すことができる場合にのみ機能する可能性があります。これは、秘匿性がない場合にのみ可能であり、不明瞭ではありません。

62
Tom Leek

「あいまいさによるセキュリティ」という言葉はよく誤用されていると思います。

あいまいさを介してセキュリティについて話すときに最もよく引用される引用は Kerckhoffsの原則 です。

それは秘密である必要はなく、不便なく敵の手に落ちるはずです。

あいまいさによるセキュリティとは、セキュリティシステムの design および implementation を、攻撃者から詳細を隠すことで安全に保つことに依存することを指します。システムとプロトコル /をリバースエンジニアリングして、十分な時間をかけて分解することができるため、これはあまり信頼できません。また、その実装を隠すことに依存するシステムは、弱点を調べる専門家に依存することはできません。これは、調査されたシステムよりもセキュリティ上の欠陥が多くなる可能性があり、バグが判明して修正されています。

RSAを例にとります。世界中の誰もがそれがどのように機能するかを知っています。さて、とにかく関与する数学をよく理解しているすべての人。それはよく研究されており、難しい数学的問題に依存しています。ただし、関係する数学について私たちが知っていることを考えると、pqの値が秘密にされていれば、安全です。これは本質的に、集中システムを1つのシークレットに分解(および保護)する作業であり、保護することができます。

これを、ケルクホフスの原則に同意しない暗号化アルゴリズムと比較してください。秘密鍵を使用する既知のスキームを使用する代わりに、この暗号化アルゴリズムは秘密です。アルゴリズムを知っている人なら誰でも、アルゴリズムで暗号化されたデータを復号化できます。アルゴリズムが敵の手に届かないようにすることはほとんど不可能であるため、これは very を確保するのが困難です。この良い例については Enigma machine を参照してください。

15
user10211

重要な違いは、秘密にされているものにあります。

RSAを例にとります。 RSAの中核となる原則は、単純な数学です。数学的知識が少ししかない人でも、RSAが機能的に機能する方法を理解できます(数千年前の数学です)。それをセキュリティにどのように活用できるかを理解するには、想像力と経験が必要ですが、少なくとも2回は独立して行われています(Rivest、Shamir、Adleman、数年前は Clifford Cocks )。 。 RSAのようなものを設計し、それを秘密にしておけば、誰か他の人がそれを理解できるほど賢い可能性があります。

一方、秘密鍵はランダムに生成されます。正しく行われると、ランダム生成により、人間が利用できる計算能力でシークレットを再構築することが不可能になります。ランダムなビットの秘密の文字列は、その文字列に直感的な構造がないため、巧妙さを問わず誰でも再構築できません。

暗号アルゴリズムは巧妙さから発明されており、目標は広く共有されています(一部のデータを保護し、アルゴリズムを安価に実装するなど)。賢い人々が同じアルゴリズムに収束する可能性は十分にあります。一方、秘密のビットのランダムな文字列は豊富であり、定義上、人々は同じランダムな文字列を思い付くことはありません¹。したがって、独自のアルゴリズムを設計する場合、隣人が同じアルゴリズムを設計する可能性が高くなります。また、アルゴリズムをバディと共有した後、バディからプライベートに通信したい場合は、新しいアルゴリズムが必要になります。しかし、秘密鍵を生成する場合、それはあなたの隣人やあなたの仲間のものとは異なります。ランダムなキーを秘密にしておくことには潜在的に価値がありますが、これはアルゴリズムを秘密に保つことには当てはまりません。

重要な秘密についての2番目のポイントは、測定できることです。優れたランダムジェネレーターを使用して、ランダムなnビット文字列を生成し、それを秘密にしておくと、誰かが1回の試行でそれを見つける可能性は1/2 ^ nです。アルゴリズムを設計する場合、他の誰かがそれを理解するリスクは測定できません。

RSA秘密鍵は単純なランダムな文字列ではありません—素数のペアである何らかの構造を持っています。ただし、エントロピーの量(特定のサイズの可能なRSA鍵の数)は、1つを事実上推測できないほど大きくします。 (RSA鍵は、公開鍵と平文と暗号文の束から再構築することが実質的に不可能であるということについては、数学的に証明することはできませんが、多くの賢い人々が試みて失敗したため、そうであると信じています。しかし、それは別の話。)

もちろん、これはあらゆる暗号化アルゴリズムに一般化されます。ランダムな文字列を秘密にしてください。巧妙なデザインを公開します。

これは、ランダムなビットの束である小さな部分を除いて、すべてが公開されるべきだと言っているのではありません。 ケルホフの原則 はそれを述べていません—デザインのセキュリティはデザインの秘密に依存すべきではないと述べています。暗号化アルゴリズムは最もよく公開されています(十分な数のユーザーが解読に失敗したかどうかを確認するために10年ほど待つ必要があります)が、他のセキュリティ対策、特にアクティブプローブを必要とするセキュリティ対策は秘密にしておくのが最善です見つけ出す。たとえば、一部のファイアウォールルールはこのカテゴリに分類できます。ただし、ルールを知っている攻撃者に対する保護を提供しないファイアウォールは、最終的に誰かがそれらを理解するため、役に立たないでしょう。

¹ これは数学的には正しくありませんが、文字通りそれに賭けることができます。

セキュリティはすべて秘密を守ることですが、優れたセキュリティは、どの秘密を保持でき、どの秘密を保持できないかを知ることです。

特に、最高のセキュリティプロトコルは、設計から秘密を分解するという原則に基づいて構築されているため、設計を秘密にする必要がなく、秘密を守ることができます。システム設計は秘密にしておくことが不可能であることで悪名高いため、これは特に重要です。これはKerckhoffsの原理の中核であり、古い軍用暗号化マシンの設計に戻ります。

言い換えると、アルゴリズムisが秘密である場合、アルゴリズムの実装を見る人-ハードウェアを持っている人、ソフトウェアを持っている人、サービスを使用している人-があなたの秘密。アルゴリズムは非常に簡単に調べることができるので、アルゴリズムは秘密を置くためのひどい場所です。さらに、設計に埋め込まれた秘密は、実装を変更しない限り変更できません。あなたは永遠に同じ秘密に悩まされています。

ただし、マシンを秘密にする必要がない場合、シークレットがマシンから独立するようにシステムを設計した場合(一部の秘密鍵またはパスワード)、デバイスを検査した後でもシステムは安全なままです。このようにして、パスワードなしではシステムが壊れないことを確信しながら、パスワードだけを保護することに集中できます。

7
tylerl

あいまいさによるセキュリティは、一般に Kerchoffの原則 を指します。これは、すべてのキーを除くが一般的な知識であっても、システムは安全でなければならないことを示しています。これは、暗号化や暗号文の生成に適用されるだけではありません。また、URLの生成、パスワード、ハッシュ、メモリアドレス、さらにはシステムアーキテクチャを秘密にしてはなりません。その理由は、システム内の何かが秘密である必要があるためです。秘密の部分を1つの大きな数値に分離することで、非常に使いやすくなります。

アルゴリズムではなくキーを保護する理由は、アルゴリズムがリークされる可能性が高く、考えられるアルゴリズムよりもキーの数が多いこと、およびリークのコストが大きいことです。アルゴリズムは非常にリークしやすいです。分類されたと思われるアルゴリズムとハードウェアシークレットは、たとえば次のように毎日漏えいします。

  • ソースコードを盗むハッカー
  • アルゴリズムをペンテストや研究者がレビューできるようにする。
  • ソフトウェア/ハードウェアを入手した人によるアルゴリズムのリバースエンジニアリング
  • アルゴリズムを使用する人によるアルゴリズムのリバースエンジニアリング
  • 不満や悪意のある元従業員がアルゴリズムを漏らす
  • 通常、256ビットのキーを推測するよりも、安全でないアルゴリズムを推測する方がはるかに簡単であるため、ブルートフォース推測。

アルゴリズムを研究者に明らかにすることで、Catch-22が提示されます。 シークレットメソッドは、公開せずに安全であると主張することはできません。これが、アルゴリズムの秘密の部分を分離する理由です。あなたはcanメソッドを使用しても秘密鍵が明らかにならないことを示します。

アルゴリズムがシークレットの一部である場合、リークやキー更新も非常にコストがかかります。攻撃者の一歩先を行くには、アルゴリズムのすべての使用法を再設計し、まったく新しいものに更新する必要があります。非常に安全なシステムを運用している場合は、数か月ごとに「秘密」を変更する必要があるかもしれません。 特にハードウェア、下位互換性、またはクライアントへの更新のプッシュが含まれる場合、アルゴリズム全体を置き換えるよりも、安全なアルゴリズムでキーを置き換える方がはるかに簡単です

ここでの考え方は、すべての安全なシステムには秘密があるということです。ハッカーが秘密を知らずに逆転したり推測したりできないように何かを生成するときはいつでも、それは優れたエンジニアリングです。

  1. 秘密の知識を簡単に変更または置換できるようにします。
  2. 秘密自体が入力と出力から推測するのが難しいことを確認してください
  3. 秘密が推測できないほど複雑であることを確認してください

ある数値を受け取り、別の数値を吐き出すボックスを構築する場合(またはシードを取り込み、「ランダムな」値を吐き出すなど)、誰かが同じボックスを構築した場合、今度は自分のボックスを変更する必要があります。私のボックスで変更しなければならないのが256ビットの数値を変更することだけであれば、時間と労力を大幅に節約できます。同様に、これらのボックスを販売したい場合は、すべてのボックスが異なる必要があります。ボックスごとにランダムなキーを変更するのではなく、販売するボックスごとにアルゴリズムを変更するのは、途方もなく悪い設計です。

最後に、あいまいさによるセキュリティと「独自の暗号をロールする」はしばしば一緒に見つかることを理解する価値があります。 自分の暗号をロールバックしないでください。 暗号を秘密裏に変更することにより、機密性の向上はセキュリティの損失によって損なわれます。独自の暗号をロールすることで、システムを数兆倍、または2 ^(大きな数)倍安くクラックできるようになる可能性が高く、攻撃者が独自のシステムをどのようにロールしたかを発見するのに1兆回も推測しないことを保証します。

3
Cody P

あいまいさによるセキュリティは、セキュリティが秘密にされているアルゴリズムにかかっていることを意味します。

たとえば、暗号化にrot13を使用することを決定した場合、システムのセキュリティは、使用しているアルゴリズムを他の誰にも知られないようにすることに依存しています。最後に、アルゴリズムがどれほどクラック可能かを判断する責任は私にあります。

大きな問題の1つは、このシステムを配布できないことです。これは、誰でもアルゴリズムをリバースエンジニアリングして、暗号化を解くために使用できるためです。さらに、コードが危険にさらされている場合は、他のすべても同様です。

あいまいさによってセキュリティに依存しているプロトコルは、通常、出力を分析することによっても最終的にクラック可能になります。 (もちろん、これを起こしにくいアルゴリズムを設計することもできます。最も簡単な方法は、RSAアルゴリズムとハードコードキーペアを取得して、「あいまいさによるセキュリティ」アルゴリズムを自明に作成することです。)アルゴリズムを信頼すべきではありません。最終的には推測されません。

一方、暗号化にRSAを使用すると、各インスタンスに独自の鍵ペアを生成させることができるため、プログラムを心配することなく配布できます。キーを含む特別なハードウェアデバイスによってキーが危険にさらされるのを防ぎ、メッセージを暗号化できますが、キーを吐き出すことができません。また、公に知られているプロトコルであるため、多くの人々がセキュリティホールのプロトコルを分析しています。暗号化されたメッセージを解読できないと私は信じています。確率は私たちの側にあるため、キーを推測することはできません。

これは無名によるセキュリティではありません。これは秘密によるセキュリティです。アルゴリズムは公開されており、秘密にされている「秘密」(鍵)があります。

2
Manishearth

他の人が言ったように、あいまいさは実際には実装を指します。

例を挙げましょう。あなたとあなたのパートナーがあなたの家にあなたが確保したいが、方法については同意しない金の塊を持っていると仮定します...

あなたがたのうちの1人はたまたま魔神を持っています。それは、パスワードを与えることなく5フィート以内に入る誰でも焼却するように命令することができます。

あなたの1人は、台所の流しの排水管にナゲットを隠したいと思っています。排水はまだ機能し、誰もそこを見るとは思わないだろうと言っています。この方法は過去のすべてのパートナーで使用されており、まだ失敗していません。

パスワードと場所はどちらも「秘密」ですが、場所はそこを見るのではなくそれらに依存しています。一方、パスワードは、どこで再利用しても、それらを知らないことに依存しています。

1
jmoreno

1から10までのスライディングスケールを考えてみてください。10は「IEEE準拠のセキュリティ」であり、1は「フランネルの層でできたナイフ防止の金庫」です​​。 「あいまいさによるセキュリティ」とは、質問の内容と曜日、およびベテルギウスからのコロナ質量放出の現在の推定レベルに応じて、値が1〜8のセキュリティ計画を説明するために使用される語句です。

つまり、ゼロデイエクスプロイト中の標準と非標準のセキュリティ計画のリスクの違いを誰も知ることができないため、これはセキュリティポリシーが標準にどれだけ近いかを完全に主観的に測定した結果です。 。

1
orokusaki

あいまいさによるセキュリティは次のように表示できると思います。

ドアノブを反時計回りではなく時計回りに完全に回すと、ロックが解除されるドアがあります。ドアのノブに鍵穴を設けて、ロックを解除するのに鍵が必要ないという事実を覆い隠します。

情報技術に変換すると、これはセキュリティ機能を異常な方法で実装して、攻撃者を軌道から外すことに似ていると思います。たとえば、実際にNginxである場合、WebサーバーをIISとして見せかけます。

あいまいさによるセキュリティは、必ずしもbadセキュリティではありません。重要なのはその実装にあります。つまり、実装した従来とは異なる機能により、つまずくことなく一貫して実行できるかどうか。

1

素晴らしい質問のためのたくさんのテキスト。

アナロジーでこれに対する答えを簡単にしましょう。あいまいさはさまざまな方法で定義でき、すべて別のものに従っています。 「理解するのが難しい何かは曖昧です」。

ドアを観察します。ドアを固定する3つの方法を提案します。 1.ハンドルを非表示にします(不明、セキュリティなし)2.キーでロックします(セキュリティ)3.ハンドルを非表示にし、キーでロックします(セキュリティと不明)

(私のアナロジーに関する限り、鍵穴またはロックを非表示にすることもできます)

ドアが鍵を必要としていることを知っていると考えられていても、秘密かセキュリティかはわかりません。ドアのハンドルがそれを開くために使用されていることを誰もが知っています。

これらのアプローチを組み合わせると、実際にはそれ自体よりも安全です。

0
Pedro Rodrigues

あいまいさは、アクセスするために必要な情報ではなく、物事の安全性を扱います。ポートの変更などの場合、使用するポートは実際のセキュリティ保護手段であり、動作を監視することでも簡単に取得できます。クローズドソースアルゴリズムを使用し、クローズドソースの性質に依存してそれを理解するのを難しくする場合、セキュリティはシステムを使用するすべてのユーザーにとって同じです。一度それを壊すと、システム全体に対する攻撃を覆い隠してしまうため、誰にとってもそれを壊します。

パスワードのようなものにとって、それは鍵です。はい、そのキーは "あいまい"な秘密ですが、特定のパスワードを知っていてもシステムが壊れることはなく、ユーザーが壊れます。システムのセキュリティは、既知であっても完全に機能します。それでも、その知識を持つユーザーのみが許可することに成功し、各ユーザーは異なる秘密を使用したり、秘密を変更してアクセスを許可したりできます。

したがって、違いは、メソッドの秘密またはキーの秘密を扱う場合です。この方法で機密性を確保する必要がある場合、その方法が危険にさらされるとすぐに、その方法は完全に破られます。メソッドが秘密を必要とせず、特定の使用法に関する情報のみを必要とする場合、妥協の範囲は秘密とアクセスされるものとの1対1の関係に制限されるため、セキュリティを提供します。

事実上、シークレットを保護されている特定のものにマップでき、そのシークレットが保護しているものに置き換えた場合、そのシークレットの保護で十分であれば、システムは十分に安全です。

0
AJ Henderson