根据多个国家的法律要求,我们会在日志文件中对用户的IP地址进行匿名处理。使用IPv4时,我们通常只会匿名处理最后两个字节,例如,我们会记录 255.255.\*.\*
而不是完整的IP地址 255.255.255.255
。
您推荐使用什么算法对IPv6地址进行匿名化处理?
至少你需要去除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地址完全相同的位掩码实现此操作,但这时问题变成了“我需要削减多少才能符合特定立法要求”的法律问题,而不是技术问题。
为了匿名公共IPv6地址,您可以取前两组并用CRC-16替换其余部分。以下是一些示例(其中abc1和abc2是CRC-16值):
这种缩短方式允许将第一和第二组与未匿名的IPv6进行简单匹配(当然有一定的概率),在完整日志中具有较短保留时间的情况下,这对于问题或安全事件调查非常有帮助。