2016-08-02 4 views
1

私はこのトピックを徹底的に調査し、立ち往生しています - 役立つ人々から明確になることを望んでいました。ハッシュと塩を使用したSSLによる認証

背景:私は、Bluetoothのトランスポンダーを私のアプリで支払いで開かれたロックに接続しています。ユーザーが固定料金を支払うと、ロックが開き、アイテムをつかみ、ドアを閉じてロックします。私は、非有料のユーザーがこれらのロックを開くことができるようなスプーフィング攻撃を防止しようとしています。

私の現在の解決策は、理論的には以下のようになります:各トランスポンダにランダム32ビットの塩が与えられます。アプリケーションが接続すると、認証要求がトランスポンダに送信され、トランスポンダはランダムチャレンジストリング+その独自のソルトを作成します。次に、トランスポンダはSHA256を使用して文字列10,000(ブルートフォースから保護するため)をハッシュ反復します。一方、元のチャレンジ文字列+塩はアプリに送信され、共有の秘密ハッシュキーとトランスポンダーの塩が置かれているSSL経由で安全なサーバーに送信されます。この文字列は、Sha256を使用して10,000回ハッシュ反復され、アプリケーションに戻され、トランスポンダに返され、トランスポンダは計算されたハッシュに対してサーバーハッシュを検証します。等しい場合、ロックが開きます。

私の質問です:これは安全ですか?それはブルートフォースかどうか私はいくつかの目障りなセキュリティの欠陥を見落としていますか?私はまったく間違っていますか?あなたがサーバーに、その後アプリに塩とチャレンジ文字列を送信した場合は、生成に必要なすべての情報、

:任意のヘルプまたは勧告はあまり考慮すべき

+0

http://security.stackexchange.com/questions/131764/authentication-over-ssl-using-hash-and-saltのクロスポストであるため、この質問をトピックとしてクローズすることにしました。 。 – SilverlightFox

答えて

0

一つの潜在的なものをいただければ幸いです正解があります。唯一の秘密のビットはあなたのハッシュアルゴリズムですが、今はスタックのオーバーフローになっています。

あなたのシステムを侵害しようとする人たちの生活をより困難にするために、コミュニケーションに塩を送る必要はありません。代わりに、新しいトランスポンダをシステムに追加するときに、トランスポンダIDとその固有のsaltをサーバーがアクセスできるデータベースに追加します。塩を送る代わりに、ランダムチャレンジとトランスポンダーIDを送信します。次に、サーバーはトランスポンダーIDを使用して塩を検索します。

このようにして、塩は決して伝達されず、秘密のままです(サーバーが侵害されていない限り)。

それはそれ自身の問題があります。塩はトランスポンダからリバースエンジニアリングすることができ、ハッシュを生成するアルゴリズムも同様です。トランスポンダの塩を難読化して保護するのであれば、それはもっと難しくなります。

完全性のために、すべてのコンポーネント間で送信するトラフィックが暗号化されていることを確認する必要があります。サーバーとクライアントの間では、これはTLSの使用を意味します。私はブルートゥースについてほとんど知っていないので、通信を暗号化する標準的な方法は何か分かりません。 TLS経由でクライアントとサーバー間の通信をさらに安全にするには、pinningの形式を実装することが必要な場合があります。

関連する問題