すでにご存知のように、あなたが何をしても、キーがアプリケーションで利用可能であれば、サーバー上でルートアクセスを取得した悪意のあるコード、そしておそらく以下のUIDへのアクセスを取得したコードで利用可能になります。アプリケーションも実行します。それはそれがどれほど簡単かという問題です。
アプリケーションは長期間実行されないため、購入します。それを超えるレベルのリスクを受け入れる必要があるようです。
あなたの考えは、キーをRAMに保持し、アプリケーションによって照会できるある種のデーモンを使用することです。それは機能しますが、アプリケーションがクエリを実行できる場合は、悪意のあるコードもクエリを実行できることをすでにご存知でしょう。とにかくそのオプションを選択する場合は、memcachedの使用を検討してください(なぜ車輪の再発明をするのですか?)。
私が考えることができる他の唯一のオプションは、システムの起動時にシークレットをロードするApacheモジュール(C)(その後、シークレットの永続的なコピーがアンマウントされる)とPHP拡張機能(C)を記述して、同じプロセスに存在するApacheモジュールからの秘密。これは、PHPを外部プロセスとしてではなくApacheモジュールとして使用していることを前提としています。しかし、私にはこれはやり過ぎのように聞こえます。なぜなら、それは非常に複雑であり、実際にはリスクを取り除くことができないからです。
スワップスペースをどうするか考えましたか?(Cで)または同様のものを使用mlock
して、秘密が限られた場所にある場合にスワップに書き込まれないようにすることができますが、PHPインタープリターに渡されると、この方法で保護することは困難です。したがって、スワップなしでシステムを実行することをお勧めします。
シークレットを長時間実行デーモン(おそらくPHPで記述されていない)の単一の場所に限定し、PHPアプリケーションにシークレットへのアクセスを必要とする暗号化機能をこのデーモンに委任させる設計変更を検討してください。