これをセキュリティの専門家に確認したいと思います。
ユーザーを登録するWebアプリがあります。ユーザーごとに一意のソルトを使用してpwをBcryptし、ハッシュされたpwをDBに保存します。
モバイルアプリからユーザーを認証する必要があります。sslを使用できません。また、モバイルとWebサーバー間でパスワードをクリアで渡さないようにしたいと思います。したがって、サーバーで(RESTful APIを介して)ログインメソッドを呼び出す前に、モバイルでpwをBCryptし、APIを介してハッシュしてサーバーに渡して比較することをお勧めします。
重要なのは、モバイルでは同じソルトでBCryptする必要があるということです(私が知る限り、異なるソルトでハッシュされた2つのBCrypted pwを比較することはできません)。
だから問題は:それは大丈夫で安全ですか?
- モバイルはユーザーXのソルトをサーバーに要求します(DBに保存されているpwから最初の22文字とオフセットを取得します)
- モバイルでは、ポイント1で取得したソルトを使用してpwをBCryptします。
- 最後に、モバイルはサーバー上でlogin(username、hashedpw)を呼び出します。
前述のように、すべての通信はプレーンhttpを介して行われ、SSLは使用されません。
これは理にかなっていますか?