web-dev-qa-db-ja.com

パスワードはメモリに保存されますか?

どの言語でも、パスワードを変数に保存すると、パスワードはプレーンテキストとしてメモリに保存されることに気づきました。

OSはその仕事をしていて、プロセスがお互いに割り当てられたメモリにアクセスするのを禁じていると思います。しかし、これはどういうわけかバイパスできると思います。それで、本当に安全で、外部プロセスがアクセスできないようにパスワードを保存するより安全な方法があるのでしょうか。

私の質問は非常に一般的であるため、私はOSや言語を指定しませんでした。これは、特定の目的の問題というよりは、コンピュータの読み書きの問題です。

452
Antoine Pinsard

これは、さまざまな保護レベルを持つ多くのOSに当てはまる可能性があることを考えると、注意すべき点がいくつかあります。

  1. とにかく、いつかパスワードがメモリに保存されるのを止めることはできません。誰かがアプリケーションのメモリにライブアクセスできる場合、そのメモリが表示されないようにすることはできません。

  2. パスワードは通常、保護するものよりも価値があります。ユーザーはパスワードを再利用します。パスワードログインを受け入れることにより、保護するデータが侵害された場合でも、パスワードを秘密に保つ責任があります。ユーザーのパスワードを低速ハッシュ関数(PBKDF、scrypt、bcrypt)でハッシュし、そのハッシュを認証に使用することで、コールドメモリ(液体窒素または休止状態)への攻撃による被害をある程度軽減できます。

  3. ユーザーのパスワードをメモリから消去することをお勧めします。これを適切に行うには多くの落とし穴があるため、適切なライブラリを使用してください。 WindowsLinuxの例

0
Charles Munger