データベースのパスワードを保護するための良い、簡単な暗号化方式とは何ですか?私はハイパーセキュアなものも必要もないし、速くて忙しいものは何も必要ないが、そのようなことはすばらしいだろう。主に、私はちょうど非常に遅くて、あるいは安全でなくても実装が簡単なものを求めています。単純なパスワードの暗号化
答えて
mkによれば、SHA1またはMD5はSHA2とともに標準のものです。
より一般的には、暗号ハッシュ関数と呼ばれます。暗号化ハッシュは一方向に設計されています(生成されたハッシュが与えられているため、元の入力を派生させることはできません)。また、同じハッシュ(ハッシュ衝突とも呼ばれる)を持つ2つの任意の文字列の可能性は低い(理想的には1 /ハッシュ値の数)べきである。
あなたのパスワードがハッシュされているという理由だけで、ハッシュバージョンを安全に保つために本当に大変努力する必要がなくなりません。あまりにも多くの人がオフラインのブルートフォース攻撃に対して脆弱な弱いパスワードを使用します。
編集 - 複数の人々が既に塩を使用することの重要性を指摘しています。塩は、ハッシュ関数を使用する前に入力と混合する定数値です。独自のソルトを持つことで、オフラインの攻撃者は、事前計算済みの共通パスワード(虹テーブル)のテーブルを使用してパスワードをより迅速に強制できなくなります。
SHA片方向ハッシュアルゴリズムと固有の塩を使用してください。それは私のパスワードをデータベースに保存するために使う主なアルゴリズムです。
MD5またはSHA1を使用する場合は、レインボーテーブルのハッキングを避けるために塩を使用してください。
は、C#では、これは簡単です:
MD5CryptoServiceProvider hasher = new MD5CryptoServiceProvider();
string addSalt = string.Concat("ummm salty ", password);
byte[] hash = hasher.ComputeHash(Encoding.Unicode.GetBytes(addSalt));
SQL Serverを使用している場合は、HashBytes機能があります:
ジェフのYou're probably storing passwords incorrectly資料では、このトピックに関する優れた読書です。
私は塩でMD5またはSHAに投票しています。主要なWeb開発言語には、ハッシュを計算するための関数が組み込まれています(PHPでは、たとえば、mcryptパッケージに必要な関数が含まれています)。
なぜ人々は、ランダムに周りに行くと、完全に合法的な答えをdownvoteていますか? –
上記で提案したSHA-1のような単方向ハッシュアルゴリズムをソルトで使用する必要があります。私は詳細については、このサイトをお勧めします。いくつかのサンプルコード/実装が含まれています。 http://www.obviex.com/samples/hash.aspx
Easy:BCrypt。
セキュリティを強化する鍵は、ダイナミック塩を使用することです。つまり、新しいユーザーごとにランダムな文字列を生成し、その文字列を使用してハッシュをソルトします。もちろん、後でパスワードを確認できるようにするには、この塩をデータベースに保存する必要があります(私は暗号化しません)。
これは数週間前の私の問題でした。 大規模なMISプロジェクトを、975の異なる地理的な場所に展開していました。ここでは、独自のユーザー資格情報ストアが、すでに実装されているさまざまなアプリケーションの使用のための認証者として使用されます。すでにRESTとSOAPベースの認証サービスを提供していましたが、顧客は関連するテーブルやビューの読み取り専用ビューにDB接続するだけで、他のアプリケーションからユーザーの資格情報ストアにアクセスできるようにしなければなりませんでした。一口... (この非常に結合した悪いデザインの決定は別の質問の対象です)。
私たちは、塩漬けで反復的にハッシュされたパスワード記憶方式を仕様に変換し、いくつかの異なる言語実装を提供して簡単に統合できるようにしました。
「Fairly Secure Hashed Passwords」または簡潔にFSHPと呼ばれています。 Python、Ruby、PHP5で実装し、パブリックドメインにリリースしました。 GitHubで消費、フォーク、火炎または唾液の採取が可能http://github.com/bdd/fshp
FSHPは、塩漬けで反復的にハッシュ化されたパスワードハッシングの実装です。
設計原理は、RFCでPBKDF1仕様2898 と同様です(:PKCS#5:別名。パスワードベースの暗号化仕様バージョン2.0) FSHPは、反復回数と 基本となる暗号ハッシュを塩の長さを選択することができますSHA-1とSHA-2(256,384,512)の間の機能です。 すべての出力の冒頭にあるメタ定義の自己定義でポータブルになり、消費者は独自のパスワードストレージセキュリティベースラインを選択できます。
SECURITY:
デフォルトFSHP1はSHA-256ハッシュの4096回の反復と、8つのバイトの塩を使用します。 - 8バイトのsaltは、 に必要なスペースに2^64を掛けて、虹のテーブル攻撃を非実用的にします。 - 反復回数が4096であるため、ブルートフォース攻撃がかなり高価になります。 - このリリースの時点でより少ない2^128の操作の計算量との衝突を見つけるためにSHA-256に対する既知の攻撃はありません。
実装:
- パイソン:2.3.5 2.5.1、(hashlib/W)でテストされ、2.6.1
- ルビー:1.8.6
- PHP5でテスト:テストさ5.2.6
すべての人は、欠けている言語の実装を作成することを歓迎するだけでなく、 は現在のものを磨くだけです。
基本動作(パイソン付き): CRYPTをカスタマイズ
>>> fsh = fshp.crypt('OrpheanBeholderScryDoubt')
>>> print fsh
{FSHP1|8|4096}GVSUFDAjdh0vBosn1GUhzGLHP7BmkbCZVH/3TQqGIjADXpc+6NCg3g==
>>> fshp.validate('OrpheanBeholderScryDoubt', fsh)
True
:
私たちのパスワードのハッシュ方式を弱めてみましょう。 - 2 にデフォルト8からの塩の長さを短く - デフォルト4096から10 に反復ラウンドを減らし - 基本となるハッシュアルゴリズムとしてSHA-1を用いてFSHP0を選択します。
>>> fsh = fshp.crypt('ExecuteOrder66', saltlen=2, rounds=10, variant=0)
>>> print fsh
{FSHP0|2|10}Nge7yRT/vueEGVFPIxcDjiaHQGFQaQ==
非可逆暗号化の場合、私はもっとも間違いなくSHA256またはSHA1を使用します。 MD5には現在多くの衝突があり、多くの努力がそれを打ち破っているので、使い方は良くありません。
ソリューションを将来的に証明したい場合は、SHA256またはSHA512をお勧めします。暗号化されたgeekworldは、MD5について、少し程度は低いが、SHA1に関して不安を感じている。
または、あなたは、私が特にstackoverflowの上、適切にハッシュ化パスワードを行う方法について多くの混乱を気づいたSHA-3
を待つことができるかどうか。だから私はすべてをクリアするはずのページを書いた。シンプルなハッシュを使うよりももう少しです。
さらに詳しい情報:How to do password hashing properly
ちょっと手を加えて*答えを編集できますか?これはあなたのページに恥知らずなプラグ(* spam *)のように感じるでしょう。あなたのページには良い情報が含まれているようです。 – jschmier
- 1. イメージの単純な2ウェイ暗号化
- 2. Pythonの単純な暗号化
- 3. txtドキュメントの単純な暗号化と復号化
- 4. OpenAM:RESTFUL API - 暗号化/暗号化パスワード
- 5. パスワードの暗号化
- 6. パスワードの暗号化
- 7. Symfony暗号化パスワード
- 8. パスワードの暗号化/復号化スプリングセキュリティ
- 9. パスワードでの暗号化と復号化
- 10. 単純なJavaの暗号化/復号化 - inputFileNameは存在しません
- 11. 単純なC#の暗号化プログラムの問題
- 12. QMLパスワードの暗号化
- 13. パスワードの暗号化方法
- 14. Powerbuilder Datawindowパスワードの暗号化
- 15. Oracle:パスワードの暗号化
- 16. 純粋なPHPでのOpenPGP暗号化
- 17. DESとパスワードで暗号化
- 18. パスワードを暗号化する
- 19. tomcat server.xml暗号化パスワード
- 20. Sails.js - パスワードを暗号化
- 21. TDS7ログインパケット、暗号化パスワード
- 22. Maven暗号化パスワードArrayIndexOutOfBoundsException
- 23. 暗号化パスワードkafka sslセットアップ
- 24. 単純なクライアント/サーバー、メッセージストリームを暗号化するTCP/IP、SSL
- 25. WinAPIを使用した単純なAES暗号化
- 26. 関数、単純な暗号化初心者レベル
- 27. C#と対称アルゴリズムを使用した単純な暗号化
- 28. 暗号化とハッシュ化のパスワード
- 29. ログイン中のパスワードの暗号化
- 30. Web.configファイルのパスワードの暗号化
OPの場合:MD5やSHA1/2などの一方向ハッシュを使用している場合、その「復号化」はできません。つまり、元の平文パスワードをハッシュ文字列から復元することはできません。ユーザーがログインしたときにパスワードをテストするには、入力されたパスワードに同じハッシュを適用し、2つのハッシュを比較します。 –