質問

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

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

static uint16 randomSeed;

...

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

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

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

しかし、私が作成したコードは、同様に本物のセキュリティの専門家を笑わせたり、震えさせたりすることになることを私は知っています。

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

-アダム

役に立ちましたか?

解決

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

注意すべき点:

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

他のヒント

独自のライブラリを作成しようとせず、可能であれば標準ライブラリを使用してください。セキュリティ コードへの微妙な変更は、発見が容易ではないほど大きな影響を与える可能性がありますが、セキュリティ ホールが開く可能性があります。例えば、 変更された 2 行 ある図書館に穴が開きましたが、その穴は長い間明らかではありませんでした。

ランダム性の貧しい源:

あなたの質問は、より一般的なものの一つを示しています。彼らのビットが十分にランダムでない場合は、256ビットキーを使用するかどうかは問題ではありません。

ナンバー2は、おそらくあなたが専門家より良いシステムを設計できることを想定しています。これは、標準の品質の実装は、ほぼ確実に技術革新よりも良いことになるだろうされる領域です。 SSLは本当に安全なだった前に、それは3つの主要なバージョンを取ったことを覚えておいてください。私たちは考えてます。

私見ですが、攻撃には次の 4 つのレベルに注意する必要があります。

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

  2. 任意のコードを実行しないでください (バッファ オーバーフロー、XSS エクスプロイト、SQL インジェクションはすべてここにグループ化されています)。これについて学ぶために最低限行うべきことは、MS の誰かが書いた「安全なコードの作成」を読み、Google の技術講演「Web ソフトウェアを破壊する方法」を視聴することです。これにより、多層防御についても少し学ぶことができます。

  3. 論理的な攻撃。コードで平文、証明書、署名、暗号文、公開鍵、その他の暗号オブジェクトを操作している場合は、それらを間違った方法で扱うと悪いことが起こる可能性があることに注意する必要があります。注意すべき最低限の事項には、オフラインおよびオンラインの辞書攻撃、リプレイ攻撃、中間者攻撃などがあります。これについて学習するための出発点であり、一般に非常に良い参考資料となります。 http://www.soe.ucsc.edu/~abadi/Papers/gep-ieee.ps

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

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

一般的には、『応用暗号化』が適切な参考資料となります。

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

  

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

簡単に - あなたは(1)独自のアルゴリズムを考え出すには十分にスマートではありません。

(1)そして、あなたによって、私はあなたを意味し、私と他の皆はおそらくアランを除き...このサイトを読んでケイとのジョンスキートするます。

私はどちらかの暗号男ないんだけど、とめちゃめちゃときのS-boxは、面倒なことができます(と彼らは違いを作るのですか)。また、単にPRNG(それがどのように見えるかをランダムに関係なく)、エントロピーの本当の原因をする必要はありません。 PRNGは無用です。次に、あなたはエントロピーソースが決定論的ではない、それは改ざんできないことを確認する必要があります。

私の謙虚なアドバイスです:あなたが専門家だとリスクを理解していない限り、既知の暗号アルゴリズムに固執します。あなたはいくつかのテスト、公的に利用可能なオープンソース/パブリックドメインのコードを使用したほうが良い可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top