PIIを保存できるシステムのデータベースインターフェイスを設計しています。私の最初の焦点は、すべてのデータが安全であることを確認することです。これを行うために、次のようにシステムを設計しました。
私は3つの別々の役割を持つ3つの別々のサーバーを実行しています。サーバー1、Webインターフェイス(これをEl Jefeと呼びます)は、ユーザーからの要求を受け取り、それらを処理し、必要に応じて適切な情報を返します。
サーバー2、暗号化インターフェース(私はBagmanと呼びます)はEl JefeからSSL経由で情報を受け取り、それを暗号化し(Paragon Initiative EnterprisesのHaliteインターフェースを使用)、サーバー3に渡します。
サーバー3、データベース(これをStashと呼びます)は、Bagmanから受信した暗号化された情報を格納します。 Bagmanなどの暗号化キーはありません。
現在、保存されているデータは安全です。 Stashが何らかの理由で侵入された場合、ファイルはすべて暗号化されており、キーはそのサーバーに保存されていないため、ファイルは何も意味せず、データベースのエントリも何も意味しません。
ただし、バッグマンが侵入された場合、バッグマンを通過するすべての情報が盗まれる可能性があります。
さらに、El Jefeが危険にさらされた場合、Stashにあるものをすべて取得、復号化、および返すようにBagmanに指示を出すことができます。
これを軽減するために、私は次の計画を立てました。ElJefeまたはBagmanのいずれかの違反による被害を最小限に抑えるために、暗号化キーをユーザーのパスワードのSHA2ハッシュでソルトし、誰かがBagmanに侵入した場合でも、ユーザーのパスワードの追加ハッシュがないと、キーは無意味です。しかし、これは「自分の暗号を転がす」という領域に該当するように感じます。これは、過去2週間の私の測定値に基づくとノーゴーです。さらに、ユーザーがパスワードを忘れた場合、ファイルを回復する方法がないという問題が発生します。または、パスワードを変更することにした場合は、復号化してから、すべてのファイルを再暗号化する必要があります。
ちなみに、サーバーの名前をお詫びします。それは私が彼らの役割を思い出し、彼らが私の心の中で何をしているかを視覚化するのに役立ちます。このような安全なシステムの設計に関するリソースや追加の読み物やホワイトペーパーの方向性を教えていただければ幸いです。
SQLCipher はオプションです。
OWASP Top 1 で概説されているように、従来のハッキング以外にも多くの方法があるため、サービスを実際に保護するには脅威モデリングを使用する必要があります。特にSQLインジェクションまたはCSRFは、PIIを危険にさらす可能性があります。
暗号化は、誰かが論理的または物理的にDBMSを盗むのを防ぎます。プログラミング/実装の穴を塞ぐことはなく、誰かがデータを盗むことを可能にします。