web-dev-qa-db-ja.com

仮名化を適切に実装する方法

私の会社では、いくつかの [〜#〜] gdpr [〜#〜] 要件を満たすために仮名化を実装したいと考えています。私の理解では、仮名化の目的は、1人の人物に関するすべての情報に簡単にアクセスできないようにすることです。この人に仮名を与え、そのデータをさまざまな場所に分けて保存します。このように、システムAを使用しているユーザーは、システムBに格納されているデータに簡単にアクセスできません。しかし、すべてのシステムのデータベースにアクセスし、パーティション分割されたデータに簡単に接続できるシステム管理者はどうでしょうか。

  • システム管理者がそのようなオプションを持っても大丈夫ですか?

  • システム管理者によるアクセスからデータを保護する方法は?

  • すべてのデータベースにアクセスできる人がいる場合、仮名化されたデータを持つことは可能ですか?

1
Maciek

システム管理者がデータベースにアクセスできるからといって、管理者がすべてのデータにアクセスする必要があるとは限りません。データを暗号化して、システム管理者がデータにアクセスできないようにすることができます。暗号化がクライアント側で行われ、ユーザーだけが暗号化キーにアクセスできる場合は、システム管理者がデータを復号化できないように暗号化を設計できます。公開キー暗号化を使用すると、1人のユーザーが入力したデータを別のユーザーが読み取ることができます。最初のユーザーが自分の暗号化キーを2番目のユーザーと共有する必要はありません。

もちろん、ほとんどの実際のアプリケーションでは、サーバーがデータの一部を処理する必要があります。通常、データベースの検索を可能にするために、アプリケーションのこれらの側面を再考する必要があります。おそらく、2番目のhashed_nameフィールドを格納して、実際の名前を公開せずにユーザーの名前に基づいて検索できるようにすることができます。おそらく、アドレスの一般的な場所をプレーンテキストで保存し、完全なアドレスを暗号化することができます。

また、暗号化/ハッシュ処理を行った後でも、他のデータと相関して情報が漏洩する可能性のあるデータがあるかどうかを検討する必要があります。たとえば、病気の名前をハッシュ化して、フィールドでその病気の患者を検索できるようにすることができますが、ハッシュされた名前の出現頻度を相関させることにより、病気の有病率に関する公的に入手可能なデータと相関させて、可能性の数を減らすことができますそれぞれのハッシュされた名前が可能です。そのような高度な攻撃シナリオが範囲内にあるか、ツリーリスクを受け入れて、仮名化を日和見攻撃者のみに制限するかを検討する必要があります。

物理パーティショニングを適用して、システムAとBを別々のチームが個別に管理し、別々のハードウェアとリソースで実行する(何も共有しない)こともできます。このようにして、単一のシステムがすべてのデータを保持していないことを確認します。データリークが発生すると、異なるチームの少なくとも2人が共謀する必要があります。

1
Lie Ryan