字符串中不可逆的唯一ID [英] Irreversible unique ID from String

查看:0
本文介绍了字符串中不可逆的唯一ID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题听起来很常见,但不知何故我找不到帮助我解决这个问题的方法...
我觉得我缺乏基本的哈希和加密知识。

问题
假设我有一个用作ID的电话号码(希望是唯一的)。
但我不想在公共接口中使用我的私人号码作为ID。
我需要的是一种解决方案,它可以对字符串进行单向混淆,但仍然保持唯一性,这样当其他人使用该算法时,他将获得相同的ID。

解决方案(?)
当输入不超过哈希输出长度但仍然(几乎)不可能逆转时,是否有哈希算法可保证唯一性。
使用固定公钥RSA加密怎么样?输出应该是唯一的,但攻击者必须破解单个密钥来解密所有数字。听起来不是个好主意...

更新(根据答案)
显然,我正在寻找一种冲突概率较低的加密哈希算法。
现在,我已经睡了一觉,通过思考,我可以想到更多的事实:

  • 无论如何我都要处理冲突。当我使用电话号码作为ID而没有进一步验证时,任何人都可能会说"这是我的"。
  • 彩虹表将始终是一个问题。因为电话号码的数量是可管理的,并且每个人都应该能够从电话号码生成散列(我甚至不能使用秘密盐)。我唯一的可能是使用密集的算法和盐,这让彩虹表变得独特,我想。

话虽如此:我可以决定使用散列。这样,没有人可以立即(不攻击它)知道使用的是哪个电话号码。这似乎就是重点所在。

推荐答案

您基本上想要的是散列算法(正如您的问题所述)。但棘手的是以下两行:

  • "保证输入不超过哈希输出长度时的唯一性"
  • "但仍(几乎)无法撤消"

根据输入长度,您可以使用几个for循环和一些时间来证明自己的唯一性(或无冲突)。因此,对于您的电话号码示例,您可以很容易地证明SHA1 HAS的所有电话号码不会冲突。

如果您输入空间很大,您可以放心地认为现代散列函数(如SHA-1或SHA-3)的冲突概率非常低([3-0]),但没有保证。尽管人们花了很长时间来寻找SHA-1的冲突并找到了它们,但我认为,在一个名为HashClash的项目中,打破单个SHA1的成本目前为200万美元。目前,建议用户转移到未检测到冲突的SHA-3。(SHA-1的碰撞我认为需要大约2^51次操作才能找到,因此它可能是good enough满足您的需要)。

对于你问题的第二部分,"仍然不可能逆转"。你可以努力让某些东西在计算上变得不可行。但在无限时间内,攻击者可以反转任何哈希。

此链接是对非加密current hash algorithms的极好检查。不幸的是,您可能不能使用本文中提到的任何一种方法,因为您需要抵抗反向操作,所以您不需要快速的散列算法。较慢的算法使事情在计算上更加不可行。

假设攻击者知道160位的SHA1散列(或您正在使用的任何散列)是电话号码。在这种情况下,对于他来说,为每个可能的电话号码创建一个rainbow table散列值并不困难。这对于任何散列算法都是正确的。人们通常会做的避免这种情况的方法是Salt原始短语。这使得建造彩虹桌变得不可行,因为盐分是秘密的,而且可能性很大。

这篇关于字符串中不可逆的唯一ID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆