2009-10-01 12 views
5

私はファイル暗号化のための簡単なプログラムを書いています。主に学問的な練習としてではありますが、今後の深刻な使用の可能性があります。すべての重い持ち上げはサードパーティ製のライブラリで行われますが、安全な方法で一緒にまとめることは、非暗号化者にとってまだ難しい課題です。基本的には、私はそれがすべきだと思うようにすべてのことをしています。MD5を使用してパスワードから暗号化キーを生成しますか?

私は、128ビット鍵長の暗号化に128ビットAESを使用しています。ユーザーが可変長のパスワードを入力できるようにするため、MD5でパスワードをハッシュし、そのハッシュをキーとして使用することにしました。私はこれが受け入れられると考えました - 鍵は常に秘密であると考えられているので、衝突攻撃を心配する必要はありません。

これを実装したので、これは悪い考えであることを示すいくつかの記事を掲載しました。私の質問は:なぜですか?良いパスワードが選択された場合、その暗号は、臨時の(読み込み:現時点では実行不可能な)ブルートフォースの努力以外の場合を除いて、鍵を絶対に公開しないほど強力であると思われます。鍵を生成するためにPBKDF2のようなものを使用すべきですか、それとも最も極端な暗号化アプリケーションを除いてすべてのものに対してちょっと残念ですか?あなたの投稿が一般的であるよう

+1

saltパスワード – helloandre

答えて

4

この記事はKey strengtheningです。基本的には、キーを強く(パスワードよりも多くのエントロピー)し、パスワードからの導出を確実に時間のかかるものにしたいとします。

+0

ありがとう、それは私が探していたものです。 – Charles

1

まあ、私はいくつかの一般的なもの述べるみましょう:

  1. MD5、SHA-0、SHA-1は、すべての壊れたハッシュであり、あなたはすべての暗号化のためにそれらを使用しないでくださいSHA-2を使用してください。

  2. パスワードから鍵を引き出すには、よく知られており、文書化されている方法を使用する必要があります(使用している言語は何も言及していません)。

  3. 何らかのセキュリティプログラミングを行う場合、何かをする前に厳密に「脅威モデル」を記録することが最も重要です。これは、基本的に、防止しようとしているすべての攻撃のリストと、それをどうやって行うのか、どのような攻撃を防止できないのかを示しています。それは非常に楽しいことです、あなたはすべての攻撃や他の興味深い事柄について知ることができます。

+1

1.セキュリティ上の専門家でなければ、間違いを犯すことになります。私の目的のためにMD5の脆弱性は重要ではありません。私は可変長文字列からキーを派生させるためにのみ使用しています。敵がハッシュを取得した場合、それはすべての秘密であるはずだったので、ゲームはとにかく終了しています。私が知る限り、衝突攻撃はここで競技場に入ることさえありません。 2.これは私が上記の質問をすることによってやろうとしていることです。 :)プログラミング言語は問題ではありません。なぜなら、これは理論ではなく実装であるからです。しかし、単に好奇心が強い場合は、Pythonを使用しています。 3.これも私がここでやろうとしていることです。 :) – Charles

+0

おい、私はあなたが私が書いているものを読んでいるとは思わない。 :) – Charles

+0

チャールズ、シルキーは正しいです。彼が言及しているハッシュを使用しないでください。あなたが質問しているのであれば、妥協したハッシュ関数の意味を理解していない(私はどちらかと主張していない)。 Go read http://www.daemonology.net/blog/2009-06-11-cryptographic-right-answers.html – lambacck

0

新しい質問への答えは、鍵を生成するためにはPBKDF2のようなものを使っているはずです。

あなたはパスワード(少なくとも10文字上下の数字と句読記号ですか?)を持っていると仮定して、AES-256キーを生成します。このキーは、ファイルの暗号化/復号化に使用されます。あなたは、ブルートフォース攻撃によって鍵/パスワードを知るためにファイルを取得する人の能力を低下させるためにPBKDF2のようなものを使いたいと思っています。 PBKDF2(とランダムな塩!)のようなものを使用すると、ファイルの暗号化を解除するコストが増加します。

は、私が本当にがお勧めすることは、あなたが本当に気に何かを保護するためにおもちゃとしてこれを使用していないということです。

+0

ヒントをありがとう。私はこの疑問を提起し、PBKDF2の実装を終えた後、さらに多くの研究を行いました。重労働の大部分は、自分自身よりずっとスマートな個人によって書かれた図書館によって行われます。それ以外に、私は自分のデータを保護したい(願わくは)ようにするよりも、私のプログラムが正しいことを保証するために、どこかから始めて、何が良い方法で始める必要がありますか?私はここで自分のソリューションを展開し、完全にそれらを受け入れるリスクをよく認識しています。私がプロジェクトを終了したら、オープンソースソフトウェアとして公開して、他の人がコードを精査し、修正を加えることができ、公然と私の仕事を屈辱にさせることを望みます。 :) – Charles

関連する問題