如何在不破坏旧数据和新数据之间关系的情况下匿名新日志记录?

时间:2009-05-12 06:53:46

标签: logging foreign-keys privacy

我正在生成有关用户操作的日志记录。出于隐私原因,这些需要在N天后进行匿名处理。但是,我还需要针对此匿名数据运行报告。

我希望真实用户A的所有操作都在匿名日志中的假用户X下列出 - 一个用户的记录仍必须保留日志中一个(假)用户的记录。这显然意味着我需要在真实用户和假用户之间进行一些映射,我在匿名化新记录时会使用这种映射。当然,这完全违背了匿名化的要点 - 如果有映射,原始用户数据可以恢复。

示例:

  

用户FrankMüller买了3罐汤。

     

三天后,用户FrankMüller要求退还3罐汤。

当我对第二个日志条目进行匿名化时,第一个日志条目已经被匿名化了。我仍然希望两个日志记录都指向同一个用户。嗯,这在实践中对我来说几乎是不可能的,所以我想使用一些分割数据的方法,希望能让我在数据中保持尽可能多的完整性。也许使用日志作为数据仓库 - 将所有内容分解为事实并接受无法分析某些维度的事实?

你以前遇到过这种情况吗?我有什么选择?我显然需要做出某种妥协 - 事实证明对你有效吗?如何充分利用这些数据?

1 个答案:

答案 0 :(得分:7)

冒着迂腐的风险,你描述的不是匿名数据,而是假名数据。也就是说,您是否考虑使用某种键控散列函数(如HMAC-SHA1)来执行假名生成?您可以通过以下方案达成公平妥协:

  • 分离您的分析和OLTP数据库。最大限度地减少有权访问这两者的人数。
  • 将HMAC密钥保密为将数据复制到分析数据库的应用程序,不能从任一数据库访问。也许让应用程序在安装时生成它并使用硬编码密钥对其进行模糊处理,这样系统管理员和软件开发人员都不会发现在没有串通的情况下处理它是微不足道的。
  • 请勿从OLTP数据库中复制实名和地址或任何等效或易于链接的密钥,例如用户编号,发票编号等,而不对其进行散列。

如果你这样做,有两种主要的攻击途径来从假名获得真实身份。

  • 直接攻击:获取HMAC密钥,计算每个已知用户的假名,并在结果表中反转查找。 (HMAC是不可逆转的:只给出一个假名和关键,你无法获得原始价值。)
  • 信息融合攻击:在不知道密钥和身份列表的情况下,下一个最好的事情就是尝试将假名数据与其他数据相关联 - 甚至可能是OLTP数据库的被盗副本。

假信息融合攻击的假名数据集notoriously vulnerable - 您必须剥离或“模糊”大量关键相关信息,以使数据集能够抵御此类攻击,但确切地说您需要多少strip是topic of current research