4

既存のセキュリティ コードを変更しています。仕様はかなり明確で、サンプル コードもありますが、私は暗号の専門家ではありません。実際、サンプル コードには、事実上、「このコードを逐語的に使用しないでください」という免責事項があります。

変更しようとしているコードを監査しているときに (これは機能が完成していると思われます)、チャレンジの生成に使用されるこの小さな宝石に出くわしました。

static uint16 randomSeed;

...

uint16 GetRandomValue(void)
{
  return randomSeed++;/* This is not a good example of very random generation :o) */
}

もちろん、私がすぐに最初に行ったのは、それをオフィスに回して、みんなで笑えるようにすることでした。

このコードを作成したプログラマーは、(コメントで示されているように) 良いアルゴリズムではないことを知っていましたが、セキュリティへの影響を理解していなかったと思います。彼らはメインループでそれを呼び出すことさえ気にしなかったので、少なくともフリーランニングカウンターに変わります - まだ理想的ではありませんが、これを超えた世界です.

しかし、私が作成したコードが、本物のセキュリティの第一人者を同じように笑わせたり震えさせたりすることはわかっています。

  • 暗号化に特有の、理解する必要がある最も一般的なセキュリティの問題は何ですか?
  • よくある間違い以外に知っておくべきことについて、適切な知識を与えてくれる優れたリソースは何ですか?

-アダム

4

6 に答える 6

18

独自のものを作成しようとしないでください。可能であれば、標準ライブラリを使用してください。セキュリティ コードへのわずかな変更は、簡単には見つけられない大きな影響を与える可能性がありますが、セキュリティ ホールを開く可能性があります。たとえば、 1 つのライブラリに対して2 つの変更された行が穴を開けましたが、これはしばらくの間、すぐにはわかりませんでした。

于 2009-01-30T20:51:48.543 に答える
12

Applied Cryptographyは、暗号とコードを理解するのに役立つ優れた本です。ブロック暗号の仕組みや、完全に実装されたバージョンの AES を使用している場合でも、不十分な暗号モードを選択するとコードが役に立たなくなる理由など、多くの基本事項について説明します。

注意すべき点:

  • ランダム性の貧弱なソース
  • 独自のアルゴリズムまたはプロトコルを設計しようとしています - 絶対にしないでください。
  • コードレビューを受けていない。できればオンラインで公開してください。
  • 十分に確立されたライブラリを使用せず、自分で作成しようとしています。
  • 万能薬としての暗号 - データを暗号化しても魔法のように安全になるわけではありません
  • キー管理。最近では、仮想通貨を攻撃するよりも、サイドチャネル攻撃で鍵を盗む方が簡単な場合がよくあります。
于 2009-01-30T20:55:48.503 に答える
6

あなたの質問は、より一般的なものの1つを示しています。ランダム性のソースが貧弱です。ビットが十分にランダムでない場合、256 ビット キーを使用しても問題ありません。

2 番目は、専門家よりも優れたシステムを設計できると想定している可能性があります。これは、標準の質の高い実装がイノベーションよりも優れていることがほぼ確実な領域です。SSL が本当に安全になるには、3 つのメジャー バージョンが必要だったことを思い出してください。我々が考えます。

于 2009-01-30T20:51:37.887 に答える
4

私見ですが、知っておくべき 4 つのレベルの攻撃があります。

  1. ソーシャル エンジニアリング攻撃。ばかげたことをしないようにユーザーを訓練し、ユーザーがばかげたことをしにくくなるようにソフトウェアを作成する必要があります。私はこのことについての良い参考文献を知りません。

  2. 任意のコードを実行しないでください (バッファ オーバーフロー、xss エクスプロイト、SQL インジェクションはすべてここにまとめられています)。これについて学ぶために最低限行うべきことは、MS の誰かからの安全なコードの記述を読み、ウェブ ソフトウェアを破る方法の Google テクニカル トークを見ることです。これにより、多層防御についても少し学ぶことができます。

  3. 論理攻撃。コードがプレーンテキスト、証明書、署名、暗号文、公開鍵、またはその他の暗号化オブジェクトを操作している場合、それらを悪い方法で処理すると悪い結果が生じる可能性があることに注意する必要があります。最低限知っておくべきことには、オフラインとオンラインの辞書攻撃、リプレイ攻撃、中間者攻撃などがあります。これについて学ぶための出発点であり、一般的に非常に優れたリファレンスはhttp://www.soe.ucsc.edu/~abadi/Papers/gep-ieee.psです。

  4. 暗号攻撃。暗号化の脆弱性には次のものがあります。

    • 回避できるもの: 不適切な乱数生成、壊れたハッシュ関数の使用、セキュリティ プリミティブの壊れた実装 (たとえば、エンジニアがコードのどこかで -1 を忘れて、暗号化関数を元に戻せるようにする)
    • 可能な限り最新の状態にしなければ回避できないもの: ハッシュ関数または暗号化関数に対する新しい攻撃 (最近の MD5 トークを参照)、新しい攻撃手法 (暗号化された音声を送信するプロトコルに対する最近の攻撃を参照)通信網)

一般的には、Applied Cryptography が参考になります。

また、スタックオーバーフローでセキュリティについて質問している誰かによって書かれた、おそらくロックされていて更新が難しいモバイルデバイスにあるものが、私には非常に心配です。あなたのケースは、詳細を正しく理解するのに役立つ外部の (優れた) コンサルタントが必要な数少ないケースの 1 つだと思います。セキュリティ コンサルタントを雇うことをお勧めしますが、上記の (最小限の) 参考文献もお読みください。

于 2009-01-30T21:37:43.707 に答える
2

暗号化に特有の、理解する必要がある最も一般的なセキュリティの問題は何ですか?

簡単 - あなた (1) は、独自のアルゴリズムを思いつくほど賢くありません。

(1) そして、あなたとは、あなた、私、そしてこのサイトを読んでいる他のすべての人を意味します...おそらくAlan KayJon Skeetを除いて.

于 2009-01-30T20:54:52.140 に答える
1

私も暗号マニアではありませんが、S-box をいじると面倒になることがあります (違いはあります)。また、PRNG だけでなく、エントロピーの実際のソースも必要です (どんなにランダムに見えても)。PRNGは役に立たない。次に、エントロピー ソースが確定的ではなく、改ざんできないことを確認する必要があります。

私の謙虚なアドバイスは、あなたが専門家でリスクを理解していない限り、既知の暗号アルゴリズムに固執することです. テスト済みで公開されているオープン ソース/パブリック ドメイン コードを使用する方がよい場合があります。

于 2009-01-30T20:57:00.450 に答える