Security 抢夺社会保障号码

Security 抢夺社会保障号码,security,encryption,hash,Security,Encryption,Hash,我正在使用一个处理个人数据的数据集(即处理人的数据,而不一定是私人数据)。。。这些数据随时间变化,格式由客户端强制执行。我需要一些东西用作主键,不幸的是,唯一唯一唯一标识一个人并且不会发生不可预测的更改的字段是SSN。ID号(主键)将是面向公众的,所以我不能发布它,但我希望能掩盖它 结果必须是数字 结果的长度可能最多为25位 结果必须是唯一的 考虑到上述约束条件,在没有钥匙的情况下,结果应该尽可能难以反转 有适合这个的数字密码吗 我这么做是不是疯了?一个社会保险号码有九位数长,这意味着只有1

我正在使用一个处理个人数据的数据集(即处理人的数据,而不一定是私人数据)。。。这些数据随时间变化,格式由客户端强制执行。我需要一些东西用作主键,不幸的是,唯一唯一唯一标识一个人并且不会发生不可预测的更改的字段是SSN。ID号(主键)将是面向公众的,所以我不能发布它,但我希望能掩盖它

  • 结果必须是数字
  • 结果的长度可能最多为25位
  • 结果必须是唯一的
  • 考虑到上述约束条件,在没有钥匙的情况下,结果应该尽可能难以反转
有适合这个的数字密码吗


我这么做是不是疯了?

一个社会保险号码有九位数长,这意味着只有
10^9=100000000
唯一的SSN。您在SSN上执行的大多数操作都可能被强制执行,因此我建议您只为每个SSN分配唯一的随机25位数字。随机的25位数字是您的公共ID,每对数字之间的关系是完全私有的


随机键不依赖于分配给它的数据,因此无法从输出中检索输入(如果将其视为函数)。

听起来像是解决问题的方法。在SSN上使用这个,然后你就有了一些随机的10位数字,你可以填充到你需要的25位id。如果填充正确,甚至可以将其反转(如果您有键)。关键是,在通过格式保持加密运行它之后,您的数据是不敏感的

你需要它是可逆的吗?您只需通过随机排序然后分配单调递增的整数来匿名,也就是说,在SSN和id之间创建一个映射,然后用关联的id替换所有SSN并丢弃该映射。您的大小和仅限数字的要求使得这一点变得棘手,并排除了像SHA甚至MD5这样的更强候选项。我可能会使用您分配的代理密钥,SSN只是一段元数据(如果您保留它的话)。我不使用固定的数据集。。。人们不断地被添加和删除。。。所以我必须将所有88000000个可能的SSN随机化。。。可能吧,我猜,但查找会很麻烦…我自己无法分配密钥。。。我根据客户的数据跟踪人员,所以我必须使用SSN,或它的模拟。您不需要存储每个SSN。那只是浪费时间和资源。您只需要有一种方法将数据库中的每个SSN公开映射到一个唯一的编号,该编号将是主键。你能再解释一下你的情况和限制吗?我不太确定你能用什么,不能用什么。很好的一点-字典攻击的容易性使得任何哈希解决方案都不是一个好主意,除非计算哈希非常昂贵。谢谢。出于好奇,你知道有任何加密安全的散列函数可以吐出整数吗?基于我使用数据的方式,我必须使用散列。基本上,我看到的答案是‘你尝试这个简直是疯了’。@巴顿,不一定。您只需要为整个(1b)密钥空间保留一个固定的SSN->KEY映射,至少在导入新数据时是这样。@Barton这个答案只证明您需要一个密钥,因为由于明文数量很少,单向函数无法工作。在这种情况下,80位块密码似乎是正确的选择。谢谢!我在寻找一种算法来掩盖发票号码。不知道它叫什么。维基链接正是我想要的。