私のデータベースには、PHPクラスを使用してオンザフライで暗号化および復号化された情報が保存されています。PHP環境で暗号化用の秘密鍵を格納する場所
アプリケーションごとユーザーが自分のデータを復号しようとすると、復号化が成功するだけであることを確認するために、ユーザーキーが付加された秘密キーを使用します。
ユーザー 'キー'はデータベースに格納されます。秘密鍵(アプリケーションレベル)はtxtファイルとしてFSに格納されます。もちろん、ウェブルートの上にはありません。
考慮事項: - データベースがハッキング入った場合: - :彼らだけinclude('../private/private.php')
その中で単一のページで終わるPHP-停止した場合、または破損している彼らは、一つのキーの一部、および暗号化されたデータ で終わります。
- NGINXが失敗した場合:接続が「ただの」状態になりました。
私が考えることができる唯一のシナリオは、システム自体の破損です。しかし、サーバーはファイアウォールを実行し、定期的に更新され、fail2banを実行し、必要なサービスだけが実行されます。 SSHログインはキーアクセスなどでのみ行われます。
これは「ベスト」なのか疑問に思っていました。 上記の仕様でこの種の暗号化を行うより良い方法がある場合は、 キーファイルへの正しいアクセス権は何ですか?
現時点では、データベースとWebサーバーは、両方ともインターネットに面した同じサーバーにあります。それを分割し、Webサーバーだけを持つインターネットに直面しているサーバーを作成する方が良いですか?データベースサーバーとキーファイルをプライベートネットワーク内の別のサーバーに配置しますか?
編集:
$key = $app_key . $user_key
キーファイルへの正しいアクセス権は '-r --------'または '400'で、Webサーバーユーザーは所有者です。それ以外は、あなたはかなり良い仕事をしたようだ。 –
* "私は自分のデータを解読しようとすると解読が成功するだけであることを確認するために秘密鍵をユーザキーに付加する" *何が手段。両方のキーをサーバーに保存するので、いつでも復号化が成功します。逆に、サーバーが所有されている場合、データも所有されます。 – Jon
その能力は、あなたが持っている情報のレベルとセキュリティが必要なのはどれほど厳しいかによってまったく異なります。ほとんどの一般的なシナリオでは、OS上で実行されているデーモンの監査を実行して、sshのバージョンなどの既知の攻撃ベクトルがないことを確認することを検討することをおすすめします。 – Dave