web-dev-qa-db-ja.com

鍵暗号化のためのAES

AESは、アプリケーションのユーザーのコンピューターに保存されているキーを保護するのに適していますか?ブルートフォース攻撃を防ぐために遅いアルゴリズムを使用することを示唆するハッシュパスワードで threads を見てきました。

また、パディングアルゴリズム、暗号モード、キーサイズなど、 RijnadealManaged に使用する必要があるパラメーターに関する推奨事項はありますか?

3
Casebash

私も暗号化の初心者なので、これを少しずつ試してみましょう。ただし、AESを [〜#〜] cbc [〜#〜] モードで使用することは、おそらく良い選択です暗号化する内容/方法によって異なります)。秘密レベルのドキュメントには、128ビットキーのAESで十分です。 [〜#〜] nsa [〜#〜] に従って、TOP SECRETドキュメントには192または256ビットのキーが必要です。パディングに関しては、標準は PKCS7 Padding であると私は信じているので、おそらくそれだけに固執する必要があります。 CBCを使用する場合は、そのキーでデータを暗号化するたびに、ランダムなIV(キーと同じ長さ)を生成するようにしてください。別のメッセージを暗号化するために同じIVを決して使用しない同じキーを使用している限り、確認する必要があります。 IVはパブリックと見なされるため、暗号化されたデータと一緒に保存するだけで、復号化中に暗号を初期化するために使用できます。

以上のことをすべて言っても、おそらく最も安全な方法は、.NETに Jasypt または KeyCzar のようなライブラリがあるかどうかを確認することです。これらのライブラリは、危険な細部のすべてを処理してくれるので、可能であるとさえ知らなかったセキュリティホールが作成されることはありません。

それが少なくとも正しい方向を指すことを願っています!

1
senecaso

一般に、これを自分で行うべきではありませんが、使用しているシステムのガイドラインに従ってください。

パスワードを保存する「正しい」方法は、「一方向」のハッシュと「塩」および「鍵の強化」を使用することです。

「一方向」という用語は、まさにそれを意味します。ハッシュ化すると、自分でパスワードを回復することはできません。パスワードを回復する方法はありません。ただし、ユーザーが入力した内容に対してハッシュを繰り返すことにより、ユーザーが正しいパスワードを入力したかどうかを確認し、それがデータベースに保存されているものと一致するかどうかを確認できます。

ハッカーがパスワードハッシュを盗んだ場合、ハッカーはそれらをオフラインで解読できます。

最も一般的なクラックは、無数のパスワードハッシュを事前に計算することです。彼らがあなたのサイトからハッシュを盗むとき、彼らはテーブルでそれらを調べて、即座にオリジナルのパスワードを見つけます。

それを打破するには、パスワードを「ソルト」します。ランダムなテキストを生成し、そのテキストをパスワードでハッシュします。次に、そのソルト+ハッシュをデータベースに格納します。

これにより、ハッカーは「テーブルルックアップ」を使用する代わりにパスワードを「ブルートフォース」する必要があります。ハッカーのデスクトップは1秒あたり10億ハッシュを計算できるため、小さなパスワードをすばやく発見できます。

それを打ち負かすには、単に値を繰り返しハッシュするだけです。ハッシュを1,000回繰り返すと、ハッカーは1秒あたり100万回しかテストできなくなります。

残念ながら、ハッカーのために作成する費用が高くなるほど、自分でパスワードをテストするための費用が高くなります。ハッシュを1000回繰り返すことは、ハッカーの速度を落とすこととサーバーのパフォーマンスに影響を与えることの間の良い妥協です。

ハッカーを遅くするもう1つの方法は、パスワードにルールを適用することです。たとえば、パスワードに8文字以上で、数字と記号を含めることを要求します。ほとんどのパスワードは単語で、すべて小文字です。つまり、ハッカーは1文字あたり26の組み合わせだけをテストする必要があります。パスワードが大文字、小文字、数字、記号で構成されている場合、1文字あたり約100通りの組み合わせになります。

上記のポイントは、ハッカーがパスワードを攻撃する方法の複雑さ、および管理者がそれらのパスワードを守るために通過することをすべて教えることです。通常、それについて心配する必要はありません。使用している基盤となるシステムが選択したソリューションを選択するだけです。

1