2016-11-09 13 views
1

私はCでユーザを登録してログインできるプログラムを作っています。ユーザーが自分のユーザー名とパスワードをファイルに保存したいときに登録します。

私が理解しているように、これを行う最善の方法は、パスワードの最後にランダムな塩を加えて、塩漬けされたパスワードの安全なハッシュ(たとえばSHA-1)を保存することです。

私は、ユーザー名、ハッシュ、および塩をテキストファイルにローカルに保存すると、攻撃者がファイル内のハッシュと塩を自分のsaltでSHA-1ハッシュに変更してログに記録するのを防ぐ新しいパスワードを使用していますか?
ありがとうございます。安全にローカルにパスワードを保存する

+0

攻撃者が既にそのレベルのアクセス権を持っている場合、直接必要なすべてのデータを取得できるだけの理由でログインする必要がありますか? –

+0

それはまさに私が防止したいものです。攻撃者がローカルに保存されているデータにアクセスできないようにするにはどうすればよいですか? – Matan

+0

私はあなたのテキストファイルを暗号化している可能性があると思います。それでも、バイナリプログラムには解読方法に関する情報がありますので、攻撃者が解読することは不可能ではありませんが、十分なことをあいまいにすると難しくなります。 – Milack27

答えて

1

これは、攻撃者は、このパスワードファイルへのアクセスのみを持っているかどうか、または彼は同様に実行可能ファイルへのアクセス権を持っている場合に依存します。後者の場合は、ハッシュを交換するのが難しくなりますが、完全に防ぐことはできません。

  1. アプリケーションはその後、秘密強い鍵を含んでいるでしょうし、このキーでハッシュのHMACを計算します:保存されたハッシュを確認するためにHMACを使用することができます上の最初のケースでは

    、。

  2. このHMACは、パスワードハッシュとともにファイルに格納できます。
  3. 検証のためにハッシュを読み取ると、ソフトウェアはHMACを再度計算し、保存したものと比較することができます。

攻撃者は、自分のアプリケーションの秘密鍵がわからない限り、自分のハッシュに対して正しいHMACを生成することはできません。パスワードファイルを変更することはできませんが、アプリケーションによってセキュリティはアプリケーションのキーに集中します。パスワードファイルを暗号化/復号化することでも同じことができます。

P.S. SHA-をパスワードの格納に使用しないでください。代わりに、BCrypt、PBKDF2、SCryptなどのコスト係数を持つハッシュ関数を使用してください。*

1

アプリケーションをホストするサーバーは1つだけですが、ユーザー名とハッシュパスワードもあるようです。この構成では、ルートになっている攻撃者に対して完全な防御はありません。

  • ハッシュされたパスワードは、攻撃者がパスワードを取得し、
  • ただし、ユーザーの資格情報を使用してアプリケーションを使用することが難しい、攻撃者が可能性になる:

    しかし、あなたはいくつかの良い機能を持ってしようとすることができます実際にハッシュを変更します。

    • は、リモートコピー
    • と比較して変化を検出するか、それに署名を使用します:基本的には、唯一のアプリケーションでパスワードを更新できるようにすることを防ぐには、のいずれかによって、そのファイルを保護しようとすることができます。あなたは、アプリケーションに秘密鍵を持たせて、ファイルに署名し、最後に署名を追加することができます。アプリケーションが認証のためにファイルを読み取ると、ファイルが破損しているかどうかを確認できます。攻撃者がその署名メカニズムを取得するのは難しいでしょうが、不可能なことはありません。
関連する問題