私は現在、ssl経由で基本認証を使用している小さなウェブサーバを作成しました。これまでのところはすべて素晴らしいです。今、私は(要望)ダイジェスト認証に切り替える必要があります。しかし、私はデータベースで平文として保存されていないパスワードでこの作業を行う方法を理解できません。私は、ユーザのパスワードの(bcryptを使って生成された)パスワードダイジェストだけを保存しています。 httpダイジェスト認証はまったく可能ですか?データベースとブラウザで暗号化されたパスワードダイジェスト認証
答えて
ちょうどこれを今見ていました。まず、RFC 2617 - HTTP Authentication: Basic and Digest Access Authenticationを読んで仕様を理解し、REST API認証にどのように適合できるかを確認します。
あなたがしたのと同じ質問にはまっていますか?ダイジェスト認証は、サーバーがユーザーのパスワードを平文で保存する必要があることを意味しますか? - it should store the hash of (username|realm|password)
番号サーバは平文パスワードをを格納しません:
Thisスタックオーバーフローの答えは、それが明確になります。
これは、1つのことを除いてはうまくいきました。標準仕様では、MD5をハッシュ関数として使用することしかサポートしていません。
もちろん、あなたは両方 bcryptのハッシュと MD5ハッシュを保存するが、そうすることだけ効果的にレンダリングbcryptのハッシュのセキュリティを損なう可能性があり、それ役に立たない(攻撃者は、MD5ハッシュをブルートフォース攻撃に彼の努力をシフトすることができますので、代わりに)。
だから、私は戻って一歩を踏み出した、なぜスペックを無視し、ハッシュ関数(bcrypt(username|realm|password)
)として両方脇にbcryptの使用ではない、と思いましたか?
ゆえに、意図的にゆっくりであることを除いて、bcrypt has a maximum password lengthmakes it unsuitable for use as a general digest algorithm。
これまでのところ、私の頭は水泳していましたが、私はまだそれを別のものにすると思っていました。提案の中には、SRPや認証された暗号化、特にEAXでTLSを使用するものがありましたが、単純なWebサービスではあまりにも遠すぎるものがあるかもしれません。
簡単に言えば、実際にこれを行うことに夢中ならば、work around bcrypt's character limitation by using a preliminary hashです。
かいつまんで、あなたが行うことができますようだ:
bcrypt(sha256(username|realm|password))
そしてスペックのbastardizedバージョンでH(A1)
の代わりにそれを使用。
質問は今や複雑になりましたが、それは本当にそれに値するものでしたか? HTTPS経由の基本認証以上のセキュリティ層が追加されましたか?
- 1. CryptoStreamと認証された暗号化モード
- 2. データベースとユーザー入力の暗号化されたパスワードと暗号化の比較
- 3. カスタム認証とパスワード暗号化laravel 5
- 4. 通常の暗号化/認証を超えた暗号化のクリエイティブな使用
- 5. C#暗号化されたデータをJavascriptで暗号化する
- 6. 認証なしのHTTP暗号化
- 7. 暗号化されたメディアファイルエンジニア
- 8. 暗号化された認証の秘密鍵は必要ですか?
- 9. データベースの暗号化
- 10. MongoDBデータベース暗号化
- 11. Sybase IQと暗号化されたパスワード
- 12. ブラウザ暗号化サーバ解読
- 13. iPhoneで暗号化されたsqliteデータベースを扱う方法は?
- 14. 暗号化されたデータベースにdacpacを展開このデータベースの暗号化を無効にする
- 15. 隔離されたストレージファイルの暗号化と復号化
- 16. JSON Web暗号化(JWE)で暗号化されたセキュリティトークンの発行者を検証していますか?
- 17. Rails 3.1 attr_encrypted gem(暗号化フィールドのwhere句)で暗号化されたデータベースの照合
- 18. クエリ文字列暗号化を使用したREST API認証
- 19. python jsencryptで暗号化されたテキストの復号化
- 20. MySQLデータベースの暗号化されたデータのワイルドカード検索?
- 21. 暗号化されたSQLiteの圧縮iOS用FTS3データベース
- 22. Rails:暗号化されたデータをデータベースに格納する
- 23. SQLCipher - デスクトップ上に暗号化されたデータベースを開く
- 24. Python - 暗号化 - ネットワーク上で暗号化されたデータを送信
- 25. 暗号化証明書
- 26. SSLでのセッションの保存暗号化されたCookieとクライアント証明書
- 27. RSA暗号化(RSACryptoServiceProvider)を使用した暗号化されたデータサイズ
- 28. 全文データベースの暗号化
- 29. 保存された暗号化されたパスワードと一致するようにパスワードを暗号化します。
私は知っているが、幻想的な説明の後には長い - 私は一般的に、ドライブバイノイズの「感謝」のコメントを避けるが、これは本当にダイジェスト認証の限界を理解するのに役立った。 – ChrisV