7

私はファイル暗号化のための簡単なプログラムを書いています。主に学術的な演習としてですが、将来の深刻な使用のために使用される可能性があります。面倒な作業はすべてサードパーティのライブラリを使用して行われますが、暗号化を行わない人にとっては、安全な方法でそれらをまとめることは依然として非常に困難です。基本的に、私はほぼすべてが私が思うように機能している。

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

これを実装したので、これが悪い考えであることを示すいくつかの記事に出くわしました。私の質問は:なぜですか?適切なパスワードが選択された場合、暗号はそれ自体で十分に強力であり、並外れた(現在は実行不可能な)ブルートフォース攻撃を除いて、キーを明らかにすることはありません。キーを生成するためにPBKDF2のようなものを使用する必要がありますか、それとも最も極端な暗号化アプリケーションを除くすべてのアプリケーションにとってそれはやり過ぎですか?

4

3 に答える 3

6

キー強化に関するこの記事が役立つかもしれません。基本的に、キーをより強力にし (パスワードよりもエントロピーを高く)、パスワードからの導出に確実に時間がかかるようにする必要があります。

于 2009-10-01T03:55:26.903 に答える
1

さて、あなたの投稿は一般的であるため、いくつかの一般的なことを述べさせてください。

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

  2. 一般に、パスワードからキーを取得するには、よく知られた文書化されたアプローチを使用する必要があります(どの言語を使用しているかは言及せず、使用している言語を指定してください)。

  3. あらゆる種類のセキュリティプログラミングを行う場合、最も重要なことは、何かを行う前に、「脅威モデル」を厳密に文書化することです。これは基本的に、あなたが防ごうとしているすべての攻撃、それをどのように行うか、そしてあなたが防げない攻撃の種類のリストです。行うのはとても楽しいです、そしてあなたはすべての攻撃と他の面白いことについて学ぶようになるでしょう。

于 2009-10-01T03:37:06.027 に答える
0

あなたの新しい質問への答えは、PBKDF2 のようなものを使用して鍵を生成する必要があるということです。

AES-256キーを生成するパスワード(少なくとも10文字の上下の数字と句読点ですよね?)を持っていると思います。キーは、ファイルの暗号化/復号化に使用されます。ファイルを取得した誰かがブルート フォース攻撃によってキー/パスワードを見つけ出す能力を低下させるために、PBKDF2 のようなものを使用したいと考えています。PBKDF2 (およびランダムなソルト!) のようなものを使用すると、ファイルの暗号化を破るコストが増加します。

私が本当にお勧めするのは、これをおもちゃとして使用し、本当に大切なものを保護するためではないということです. あなたがセキュリティの専門家でないなら、間違いを犯すでしょう。専門家でさえ (そして多くの専門家が一緒になっても) 間違いを犯します: http://www.sslshopper.com/article-ssl-and-tls-renegotiation-vulnerability-発見された.html

于 2010-03-20T01:25:55.207 に答える