用于包含电话号码的庞大数据集的哈希和加密技术

时间:2013-04-08 20:28:09

标签: algorithm security encryption cryptography hash-function

问题描述: 我正在使用高度敏感的数据集,其中包含人员的电话号码信息作为其中一列。我需要应用(加密/散列函数)将它们转换为某些编码值并进行分析。它可以是单向散列 - 即,在使用加密数据处理后,我们不会将它们转换回原始电话号码。基本上,我正在寻找一个匿名者,它接收电话号码并将它们转换为一些随机值,我可以在其上进行处理。建议这个过程的最佳方法。欢迎使用有关最佳算法的建议。

更新:数据集的大小 我的数据集真的非常庞大,数百GB。

更新:敏感 敏感,我的意思是电话号码不应该是我们分析的一部分。所以,基本上我需要一个单向散列函数但没有冗余 - 每个电话号码应映射到唯一值 - 两个电话号码不应映射到相同的价值。

更新:实施?

感谢您的回答。我正在寻找精心实施。我正在通过python的hashlib库进行散列,它是否必须执行您建议的相同步骤? Here is the link

你能给我一些示例代码来实现这个过程,最好是用Python吗?

4 个答案:

答案 0 :(得分:4)

为您的数据集(16或32字节)生成密钥并保密。使用此密钥对您的数据使用Hmac-sha1,并对其进行64位编码,并且每个不可反转的电话号码都有一个随机唯一字符串(没有密钥)。

示例(带有256位密钥的Hmac-Sha1)使用Keyczar

创建随机密钥:

$> python keyczart.py create --location=path_to_key_set --purpose=sign
$> python keyczart.py addkey --location=path_to_key_set --status=primary

匿名电话号码:

from keyczar import keyczar

def anonymize(phone_num):
  signer = keyczar.Signer.Read("path_to_key_set");
  return signer.Sign(phone_num)

答案 1 :(得分:1)

如果您要使用加密技术,则需要为每个电话号码应用pseudorandom function并丢弃密钥。诸如SHA-256之类的防碰撞哈希不能提供正确的安全保障。但是,真的,有许多不同的电话号码,你不能只是逐步构建一个代表实际随机函数的地图吗?

答案 2 :(得分:1)

按相应列对数据进行排序并开始计算不同的值...将实际值替换为各自的计数器值...无碰撞...单向...

答案 3 :(得分:-1)

所以,基本上我需要一个单向散列函数但没有冗余 - 每个电话号码应该映射到唯一值 - 两个电话号码不应该映射到相同的值。”< / p>

这引发了基于加密哈希函数的解决方案。 MD5和SHA-1是最着名的例子,并为此做了很好的工作。你会读到“MD5已被破解”,但为了你的目的无关紧要。

相关问题