6

ここで同様の質問を見つけましたアプリケーション内でパスワードを保存していますが、私の懸念には実際には答えませんでした。

ユーザーからパスワードを(安全に)受け取るアプリケーションを扱っています。パスワードを受け取ったら、それを何らかの変数に保存し、トランザクションを介して他のシステムに送信する必要があります (このロジックは安全でセキュアであり、既に実装されています)。

私の心配は、パスワードをコア ダンプで見られないようにしたいので、変数に保存する前にパスワードを暗号化したいということです。

質問:

  • 変数に保存する前に暗号化するだけで十分ですか? または、セキュリティの抜け穴がいくつかありませんか?

  • 暗号化を行うことができる単純なヘッダーのみのライブラリはありますか? どこから探し始めることができるか教えてもらえますか?

コメント投稿者への回答メモ:

  • パスワードは長期間保存されません。トランザクションの存続期間のみ。

  • 残念ながら、トランザクションの参加者はパスワードを解読できないため、パスワードを送信する前に解読する必要があります。

  • 現在の私の主な関心事は、パスワードをローカルで暗号化および復号化する方法を見つけることです-簡単な方法で...

  • OpenSSLライブラリとcrypto ++を見つけましたが、それらとリンクする必要があると思われます.それらをインクルードして呼び出すことはできません(つまり、ヘッダーのみのライブラリではありません)...

ありがとう、

4

1 に答える 1

2

(注: セキュリティについて実際に何かを知っている人々や当局から、安全なソフトウェアでパスワードを扱う方法に関する厳密なチェックリストと公式のガイドラインがあると確信しています。これはそれらの 1 つではありません!)

プロセスメモリにパスワードを保持し、それらを使用できるが、デバッガーでアプリケーションを実行したり、コアダンプを検査したりできるユーザーにパスワードへのアクセスを許可しない、暗号的に安全な方法はないと思います。

できることは、パスワードを隠すことです。使用できるテクニックを次に示します。

  • パスワードを単純な文字列として記憶のどこかに保管しないでください (文字を散らばらせるなど)。
  • パスワードが使用された後、パスワードが保存されているすべての変数をスクラブします (たとえば、パスワードを関数に渡す場合、その変数のすべての文字を関数内で NUL に設定する必要があります)。
  • パスワードを暗号化します。
  • アプリケーションを実行するたびに (または長時間実行されるアプリの場合は定期的に) 暗号化キーを変更します。
  • システム/ハードウェアのいくつかの側面に基づいて手続き的に暗号化キーを生成し、パスワードの暗号化キーをプロセスメモリのどこにも保存しないでください。
  • 可能な場合は、トラステッド プラットフォーム モジュール (TPM) などのハードウェアを使用します。

上記を一貫して効果的に実装することは非常に難しく、パスワードを扱うすべてのコードに影響を与えます。また、コードを意図的にわかりにくくし、プログラマーとしての本能に反する必要がある場合もあります (たとえば、パスワードをパラメーターとして関数に渡すのではなく、関数内でハードコーディングされたアドレスを使用するなど)。

繰り返しになりますが、攻撃者が物理マシンに完全にアクセスできる場合、ソフトウェアのみでパスワードを保護することはおそらく不可能であることを強調しなければなりません。

あなたの質問の2番目の部分については、ヘッダーのみの暗号化ライブラリについては知りませんが、パスワードの暗号化にはおそらく暗号とおそらくハッシュのみが必要です. そして、最高のアルゴリズムはすべて、パブリック ドメインまたは無料で実装されています。それらのいずれかを取得して、独自のアプリケーションにコピー/貼り付けできます。ただし、真剣にテストすることを忘れないでください。

于 2013-06-12T15:25:52.853 に答える