今天,布鲁斯·施耐尔的博客和ArsTechnica上都有关于纽约市如何发布关于出租车司机、他们的行程等信息的新闻。
基本上,敏感信息只是简单的MD5散列。由于输入是有限的(最多3个数字,3个字母),所以很容易做出一些蛮力攻击:生成所有可能的组合,然后进行回溯。
考虑到信息的性质(很小的输入,以便于生成所有组合),如何才能适当地匿名这些数据?
我想到的一些办法是:
我们能做些什么?
发布于 2014-06-25 06:46:42
您可以使用标记化。这意味着您创建了一个独立的数据库,其中包含随机生成的ID,映射到3个数字和3个字母。然后插入令牌而不是真正的标识。
另一个选项,如果您不需要将数据映射回,您可以使用一个HMAC (哈希算法)与一个长随机产生的秘密。如果没有秘密,您就不能野蛮地使用原始ID,即使它们仅由一个字符组成。
使用HMAC实际上是使用“秘密盐”的正确方法(在密码学中,盐实际上从来不被认为是秘密)。
发布于 2014-06-25 14:24:31
不释放数据的方法是不释放数据。
标记化不会很好地工作,因为我所要做的就是知道在任何地方和什么时候驱动程序是什么地方,什么时候知道驱动程序,然后我就知道驱动程序的令牌了。
如果你不想让我搞清楚这一点,那就不要以任何形式发布这些数据。
发布于 2014-06-25 06:42:31
如果输入是如此有限,您将始终存在这个问题。
唯一的解决办法是增加更多的“东西”,使输入多样化。就像你说的,盐是一种选择,但是如果它被破坏了,它就不会有多大的好处。同样的情况也适用于使用秘密密钥或密码。
我想说的是,在这个具体的案例中,答案是连接更多关于出租车的信息。例如:
Nonce | Driver Name | Driver's License | License Plate | ...
基本上是一个更丰富的输入,以补偿容易的野蛮强迫的车牌。哦,很明显,使用加密安全的散列函数:-)
https://security.stackexchange.com/questions/61875
复制相似问题