私は現在、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. Firebase認証とデータベース暗号化
- 2. CryptoStreamと認証された暗号化モード
- 3. データベースとユーザー入力の暗号化されたパスワードと暗号化の比較
- 4. beline暗号化されたパスワードファイルを使用したLDAP認証
- 5. GreenDao - アンドロイド - ONUPGRADE(暗号化されたデータベース)
- 6. カスタム認証とパスワード暗号化laravel 5
- 7. 通常の暗号化/認証を超えた暗号化のクリエイティブな使用
- 8. デバイスまたはクラウドのデータベースに暗号化されたデータベース?
- 9. C#暗号化されたデータをJavascriptで暗号化する
- 10. 認証なしのHTTP暗号化
- 11. PHP:基本認証の暗号化
- 12. (暗号化された)暗号化されたメッセージを復号する
- 13. 暗号化された認証の秘密鍵は必要ですか?
- 14. 暗号化されたメディアファイルエンジニア
- 15. 暗号化された列名をSQL Serverの暗号化キーと証明書で取得する
- 16. 暗号化された秘密鍵と暗号化された文字列の復号化
- 17. MongoDBデータベース暗号化
- 18. データベースの暗号化
- 19. Sql 2016常に暗号化 - 暗号化された列と非暗号化列との結合操作?
- 20. Sybase IQと暗号化されたパスワード
- 21. ブラウザ暗号化サーバ解読
- 22. 例暗号化されたメディア拡張の暗号化
- 23. System.Data.SQLite - 暗号化されたデータベースにアクセスできない
- 24. iPhoneで暗号化されたsqliteデータベースを扱う方法は?
- 25. 暗号化されたデータベースにdacpacを展開このデータベースの暗号化を無効にする
- 26. OrientDBで暗号化キーを変更した後に暗号化されたデータベースに接続する
- 27. mysqliで暗号化されたパスワードを確認するには?
- 28. Stethoを使用してAndroidで暗号化された領域データベース、Chromeブラウザで視覚化するエラー
- 29. 隔離されたストレージファイルの暗号化と復号化
私は知っているが、幻想的な説明の後には長い - 私は一般的に、ドライブバイノイズの「感謝」のコメントを避けるが、これは本当にダイジェスト認証の限界を理解するのに役立った。 – ChrisV