web-dev-qa-db-ja.com

セキュリティ要件を定義して、開発者が無名によるセキュリティを提供しないようにする方法は?

あいまいなセキュリティは使わない方がいいと説明しようとしたけど、チャレンジングだったとしよう!

既知のセキュリティを、ある種の悪い習慣として知っている曖昧なものでリストするための回答を受け取りました。実際、セキュリティをObscurityで定義することは非常に困難ですが、私は、悪い習慣をリストすることも正しい方法であるとは確信していません。

したがって、私の質問:

  • 誰かが私がリストできる不明瞭なソリューションによるセキュリティのリストを持っていますか?
  • セキュリティを曖昧にすることで停止する要件を定義する方が良いでしょうか?しかし、それらの要件をどのように定義しますか?あいまいさによるセキュリティを許可しないために、セットアップするための適切な要件が何かを誰かが知っているかどうか疑問に思っていました
10

たとえば、DVDのコピーを防ぐコンテンツスクランブルシステムです。スクランブルシステムは不明でしたが、これは機能しました。それから Jon Lech Johansen と呼ばれるティーンエイジャーがそれを理解し、DeCSSを書いて、それは壊れていました。

@GrahamLeeが指摘しているように、信頼できるセキュリティメカニズムは、悪意のある人が知っている場合でも機能する必要があります。

最近、暗号化は非常に多くのアプリケーションにセキュリティを提供するため、正しく実装することが重要です。数学はほとんどの人を超えているため、アルゴリズムを公開して世界中の人々に欠陥を見つけさせようとする考え方が1つあります。逆さま-多くの目。欠点-アルゴリズムがすでに実装されている場合、攻撃者は欠陥を見つけてそれを使用できる可能性があるため、実装前にこれを行うと非常に便利です。

もう1つの視点は、アルゴリズムを隠して攻撃者がその仕組みを知らないようにすることです。あいまいさの問題は、いつか悪意のある人が秘密を発見するため、あいまいさを介してセキュリティに依存することができないことが何度も証明されていることです。

価値のある読み物 this Bruce Schneierによる投稿-あいまいさによるセキュリティのよく知られた反対者、およびコミュニティによってテストされたさまざまな暗号アルゴリズムの作者-あいまいさが機能した場所の例として、ただし犯罪者がその計画を知らなかったからです。

詳細な説明なしに質問の最後の部分に本当に答えることができるかどうかはわかりません。たとえば、これがサードパーティによって開発されたコード用である場合、コードレビューを要求できますが、実際に探すことができるのは、アルゴリズム/コードなどをオープンソースとして公開しているサードパーティです。

9
Rory Alsop

不明瞭なセキュリティに対する正反対の例は、キルヒコフの原理です。暗号化の設計者は、暗号化システムが敵に捕獲されることを想定する必要があります。したがって、それに関するすべてが安全である必要がありますキーを除くがわかっている場合。

ただし、これはあいまいさが悪いことではなく、信頼すべきではないことにも注意してください。あいまいさをonly防御にすることはできないことを示しています。それは壊れやすいからです。しかし、あいまいであることは未熟な攻撃者を遅らせたり、思いとどまらせたりすることができます。

7
user185

不明瞭さは、定量化できないものです。

適切なセキュリティにはコストの見積もりが伴います。徹底的な検索(可能なすべての128ビットキーの試行)によってキーを見つけるのにかかるコスト(専用プロセッサと電力、最終的にはドル)を見積もることができるため、128ビット暗号化キーは安全であると言えます。コストが攻撃者が費やす意思のある金額よりもはるかに高い場合、特に、地球ベースのテクノロジーを使用する攻撃者が費やす可能性のある金額よりもはるかに高い場合、セキュリティは達成されました。

そのような推定が不可能な場合、それは無名によるセキュリティです。たとえば、秘密にしておくソフトウェアにある種の暗号化システムがあるとします。そのソフトウェアはどのくらい秘密ですか?一部のハードディスクに書き込まれています。それはどこかで開発されており、そのソースコードが存在し、どこかに保存されています。攻撃者がアルゴリズムを回復するのはどのくらい難しいですか?保存されたファイルが多くの場所でリークします。古い破棄されたコンピューター、盗まれたラップトップ、下請業者からの不条理(ソフトウェアのソースコードはファイルにありますが、一部のプログラマーの頭脳にもあります)...攻撃者がバイナリを手に入れることができる場合、彼はそれを分解できます即時ではなく、攻撃者の機知によってのみ制限されます。

これらすべての要点は、コードを秘密にすることで攻撃者にとってタスクが困難になる一方で、ドルでそれを表現したい場合にどのくらい難しくするかを言うのは非常に難しいということです。

だからここにあなたの質問への私の答えがあります:実装者が無名によるセキュリティを使用することを防ぐために、彼らは攻撃のために詳細な正当化されたコスト見積もりを作成するべきだと義務付けます。

6
Thomas Pornin

社内開発者向けの安全なコーディングガイドラインを構築しようとしている場合、そのホイールはすでに発明されています。 [〜#〜] owasp [〜#〜] は、たとえば、あいまいさによるセキュリティへの依存に対する差し止め命令を含む広範な概要を持っています。および [〜#〜] cert [〜#〜] には、CおよびC++に関する非常に詳細な標準があります。

1
user502