gpt4 book ai didi

string - 来自字符串的不可逆唯一 ID

转载 作者:行者123 更新时间:2023-12-04 11:39:46 25 4
gpt4 key购买 nike

这个问题听起来很普遍,但不知何故我找不到可以帮助我的东西......
我觉得我缺乏基本的散列和加密知识。

问题
假设我有一个电话号码(希望是唯一的并且)用作 ID。
但我不想在公共(public)接口(interface)中使用我的私有(private)号码作为 ID。
我需要的是一种以一种方式混淆字符串但仍保持唯一性的解决方案,因此当其他人使用该算法时,他将获得相同的 ID。

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

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

  • 无论如何,我必须处理碰撞。当我在没有进一步验证的情况下使用电话号码作为 ID 时,任何人都可以说“这是我的”。
  • 彩虹 table 永远是个问题。由于电话号码的数量是可控的,并且每个人都应该能够从电话号码生成哈希(我什至不能使用 secret 盐)。我唯一的可能性是使用强化算法和盐,这使得彩虹表我认为是独一无二的。

  • 话虽如此:我可以决定使用哈希。这样,没有人可以立即(不攻击它)知道使用了哪个电话号码。这似乎是重点。

    最佳答案

    您基本上想要的是散列算法(如您的问题所述)。但它变得棘手的是两条线:

  • “当输入不超过散列输出长度时保证唯一性”
  • “但仍然(几乎)无法逆转”

  • 根据输入长度,您可以通过一些 for 循环和一些时间自己证明唯一性(或非冲突)。因此,对于您的电话号码示例,您可以轻松证明 SHA1 的所有电话号码都没有冲突。

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

    enter image description here

    对于您问题的第二部分,“仍然无法逆转”。您可以努力使某些东西在计算上不可行。但是攻击者可以在无限时间内反转任何哈希值。

    此链接是对非加密 current hash algorithms 的出色检查.不幸的是,您可能无法使用本文中提到的任何这些,因为您需要抵抗反转,因此您不想要快速散列算法。较慢的算法使事情在计算上更加不可行。

    让我们假设攻击者知道 160 位 SHA1 哈希(或您使用的任何哈希)是电话号码。在那种情况下,他创建一个 rainbow table 并不难。对于每个可能的电话号码哈希值。对于任何哈希算法都是如此。人们通常会做 Salt原来的短语。这有助于使构建彩虹表变得不可行,因为 Salt 是 secret 的并且可能性的数量是巨大的。
  • Current Cyrptographic hash functions
  • Good Blog post on coding horror on Hashing with Salt
  • Another Blog Post
  • 关于string - 来自字符串的不可逆唯一 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16878341/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com