根据几个国家的法律要求,我们在日志文件中匿名用户的IP地址。使用IPv4,我们通常只是匿名化最后两个字节,例如,我们记录255.255.*.*
而不是255.255.255.255
您建议使用什么算法来匿名化IPv6地址?
至少您想去掉EUI-64,即地址的最后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值):
- 2001:0db8:85a3:0000:0000:8a2e:0370:7334->2001:0db8-abc1
- 2a02:200:7::123->2a02:200-abc2
这种缩短允许在具有较短保留时间的完整日志中容易地将前2个组(当然具有一定概率)与非匿名IPv6进行匹配。这有利于问题或安全事件的调查。