IPv6地址匿名化

11

根据多个国家的法律要求,我们会在日志文件中对用户的IP地址进行匿名处理。使用IPv4时,我们通常只会匿名处理最后两个字节,例如,我们会记录 255.255.\*.\* 而不是完整的IP地址 255.255.255.255

您推荐使用什么算法对IPv6地址进行匿名化处理?

2个回答

14

至少你需要去除IPv6地址的最后64位,也就是所谓的EUI-64。更现实的是,为了真正保护隐私,你需要去除更多内容,因为剩下的部分仍然只能识别一个子网(例如一个房子)。

IPv6全局地址非常分层,参见RFC2374

 | 3|  13 | 8 |   24   |   16   |          64 bits               |
 +--+-----+---+--------+--------+--------------------------------+
 |FP| TLA |RES|  NLA   |  SLA   |         Interface ID           |
 |  | ID  |   |  ID    |  ID    |                                |
 +--+-----+---+--------+--------+--------------------------------+
 <--Public Topology--->   Site
                       <-------->
                        Topology
                                 <------Interface Identifier----->

问题在于什么程度的私密性是足够的?去掉64位,你已经识别出了一个局域网子网,而不是一个用户。再去掉16位,你已经识别出了一个小型组织,例如一个ISP的客户,例如拥有几个子网的公司/分支机构。再去掉接下来的24位,基本上你已经识别出了一个大型的ISP或组织。

您可以使用与IPv4地址完全相同的位掩码实现此操作,但这时问题变成了“我需要削减多少才能符合特定立法要求”的法律问题,而不是技术问题。


谢谢@awoodland,这就是我一直在期待的答案。所以我想一个安全的方法是剥离NLA、SLA和接口ID,即只保留前24位。我们甚至可以剥离保留位,因为它们无论如何都是零(感谢RFC的链接),这样在使用IPv4和IPv6时我们将保留两个字节。 - tec
2
如果你只保留一个v6地址的16位,那么它几乎没有什么用处。例如,查看此目录中列出的生产v6站点地址的前16位:http://sixy.ch/ - Flexo
听起来很合理。嗯,也许更好的方法是保留每个部分的第一个字节。我想我们应该内部讨论一下为什么要保留一些位。感谢您的帮助! - tec
6
@tec:记住,与其丢弃数据,你总是可以对数据进行哈希处理(再加上一个种子值,完成后即可丢弃)。这可以防止找到源头,但如果处理得当,可以保留一些关系(例如,知道这两个地址来自同一个/64,或者这两个地址可能来自同一个/48的公司等)。例如,你可以通过公共+站点+种子位来哈希接口ID,通过公共+种子来哈希SLA,通过RES+TLA+FP+种子来哈希NLA等。另外,请确保结果空间足够大,不能通过结果过小而推断出种子值。 - Seth Robertson
我通过将IP地址的最后几组16位设置为除以16的余数来“哈希”IP地址:ip [3] = ip [3]%16; ... - Spikolynn
2
关于“剥离多少”,Google Analytics通过将IPv4地址的最后一个八位和IPv6地址的最后80位(SLA ID + Interface ID)归零来匿名化IP地址,详见"Analytics中的IP匿名化(或IP掩码)"(访问日期为2020年11月12日)。 - Jeremy W. Sherman

0

为了匿名公共IPv6地址,您可以取前两组并用CRC-16替换其余部分。以下是一些示例(其中abc1abc2是CRC-16值):

  • 2001:0db8:85a3:0000:0000:8a2e:0370:7334 -> 2001:0db8-abc1
  • 2a02:200:7::123 -> 2a02:200-abc2

这种缩短方式允许将第一和第二组与未匿名的IPv6进行简单匹配(当然有一定的概率),在完整日志中具有较短保留时间的情况下,这对于问题或安全事件调查非常有帮助。


不错的想法,但是够好吗?你可以为那个crc16构建一个彩虹表。 - rekire
1
CRC-16是针对96位数据进行的。因此,在彩虹表中,一个CRC-16值将指向2^80个可能的IPv6地址。应该足以实现匿名化;-) - Vlad Rudenko
CRC不具有密码学安全性意味着你仍然可以轻松获得16位数据。如果你能猜出地址中的大部分信息,你就能够推断出剩下的部分。 - undefined
通常情况下,当从96位数据中提取任何16位函数时,我们会丢弃至少80位的信息。而且从这16位中无论如何都无法恢复它们。在我们的情况下,该函数不应该具备密码学安全性。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接