これは、私のセキュリティ プロセスが、保存している情報の種類に適しているかどうかについての質問です。
SQL バックエンドで ASP.NET 4.0 を使用して Web サイトを構築しており、パスワードやハッシュなどに関してセキュリティがどのように維持されるかを知る必要があります。
私は誰かに関する重要な情報を保存しません -real names, addresses, credit card
詳細やそのようなものはありません... ただemail and username
.
今のところ、いくつかの詳細を意図的に省略していますが、それを伝えることが私のセキュリティを弱めるかどうかはわかりませんが、そうでない場合は、もう少し明らかにすることができます.
これが私がそれを行う方法です:
- ユーザーは、電子メールと一意のユーザー名を使用して登録し
50 chars
ます - 彼らはパスワードを作成します(
6 chars)
キーボード上の任意の文字を最小限使用します(入力をHTMLエンコードし、parameterized
ストアドプロシージャを使用しているため、文字を制限しません) - それらが本物であることを確認するためのリンクを記載したメールを送信します。
- FormsAuthentication を使用して認証 Cookie を設定しますが
SSL
、現時点では使用していません...プレーンで認証の詳細を送信することの意味は理解してhttp
いますが、ホストに証明書を追加するように依頼したので、すぐに準備が整います。
それは私が確認する必要があるハッシュビットです!
次の文字セットからランダムな100
文字ソルトを作成します ( System.Random クラスを使用するだけで、何も使用しませんcryptographic
) -abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!£$%^*()_{}[]@~#<,>.?
これはパスワードとマージされ、SHA-512 (SHA512Managed class)
何万回も使用してハッシュされます (2 seconds on my i7 laptop
最終的なハッシュを生成するのにほぼかかります)。
この最終的なハッシュはbase64
文字列に変換され、データベース内の既にハッシュされたパスワードと比較されます (ソルトは DB 内の別の列にも保存されます)。
いくつか質問があります (現時点では証明書の不足は無視しSSL
てください。まだ証明書を購入していませんが、1 週間ほどで準備が整います):
これで十分安全だと思いますか?セキュリティにはある程度のレベルがあり、十分な時間とリソースがあればどんなものでも壊れやすいことは理解していますが、重要なデータを保存していないことを考えると、それで十分だと思いますか?
パスワードをハッシュした実際の回数を明らかにすると、セキュリティが弱まりますか?
- キャラクターソルトは、
100
キャラクターソルトと比べて何か違いがあり20
ますか? - パスワードを結合する方法を明らかにすること
salt
で、セキュリティが弱まりますか?