Security 为什么要使用chaffifyids为对象创建唯一的url?

Security 为什么要使用chaffifyids为对象创建唯一的url?,security,twitter,uuid,uniqueidentifier,privacy,Security,Twitter,Uuid,Uniqueidentifier,Privacy,为什么开发人员要为他们的“用户”对象使用fiffy id,或者为什么,比如,Twitter使用消息id。。。?换句话说:为什么在浏览器中显示顺序ID是不好的?这是安全漏洞还是隐私问题?如果它是一个安全漏洞,那么顺序ID会暴露什么漏洞?如果这是一个隐私问题,那么如果终端用户可以识别出顺序ID,那么隐私如何受到侵犯呢?创建唯一ID的三种常见方法是 按顺序排列 选择一个相当大的随机数 选择UUID,即尝试“个性化”该号码,以便不会再次创建该号码 安全方面 如果您将会话之类的东西与ID关联,这当然是

为什么开发人员要为他们的“用户”对象使用fiffy id,或者为什么,比如,Twitter使用消息id。。。?换句话说:为什么在浏览器中显示顺序ID是不好的?这是安全漏洞还是隐私问题?如果它是一个安全漏洞,那么顺序ID会暴露什么漏洞?如果这是一个隐私问题,那么如果终端用户可以识别出顺序ID,那么隐私如何受到侵犯呢?

创建唯一ID的三种常见方法是

  • 按顺序排列
  • 选择一个相当大的随机数
  • 选择UUID,即尝试“个性化”该号码,以便不会再次创建该号码
安全方面 如果您将会话之类的东西与ID关联,这当然是一个安全问题。在这种情况下,您不希望任何恶意用户能够预测这样的ID。顺序ID的可预测性很低,UUID需要更多的努力,但也不是一个好主意,这会留下随机数。即使对他们来说,你也必须确保使用加密安全的随机数生成器,否则仍然有可预测性的空间

作为一个例子,为什么这是严重的,考虑好的旧的“JSISTISID”或URL中包含的任何其他典型的会话ID。攻击者会像普通用户一样登录和行为,记下分配给他的会话ID,然后开始预测进一步的ID,并通过在地址栏中输入这些ID,有效地劫持其他用户的会话

并发/扩展问题 但从Snowflake在其描述中所说的判断,似乎没有与之相关的固有安全问题,该方法似乎属于第三类UUID。在文本中,它说他们正在从MySQL转移到Cassandra,并且他们在过去使用MySQL顺序ID。但如果你仔细想想,当你试图扩展你的系统时,这很快就会成为一个瓶颈:每一个ID生成都需要同步,以防止竞争条件

如果不同步此进程,则此类争用条件的一个示例可能是两个独立实例同时增加ID,从而有效地仅将计数器增加一个,而实际上应该增加两个。现在,通常,如果您只有一个数据库实例,那么数据库将为您执行同步。但是很明显,这并不能扩展,当数据库处于重载状态时,太多的客户端将空闲等待。可以选择多个数据库,但复制ID可能会使您回到相同的情况

无锁唯一ID 因此,如果您希望在不需要同步的情况下生成ID(无锁),您要么学习使用非唯一ID(这或多或少是一个矛盾的说法,并不是真正的解决方案),要么必须找出一些方法来消除瓶颈。我们曾经做过的,以及对一些数据库实例有效的方法:

  • 对于两个实例,一个DB只生成奇数ID,另一个DB只生成偶数ID
  • 对于n个实例,选择n个共素数,并将给定实例的ID与其中一个共素数相乘。对于三个数据库,选择示例2、3和5。基本数论确保不会有重复
但在许多情况下,这将成为一个真正的数论问题,所以你必须寻求一个不同的解决方案。一种解决方法是走UUID路线,这通常是可以的,但缺点是完全依赖于可能随时间变化的外部因素。从我所看到的,我猜这就是雪花的目标

为了完整性起见,我想提到另一个解决方案,它可以很好地扩展,而且本身也很漂亮。它也不受外部因素的影响,在任何地方都能工作,尽管一开始是违反直觉的。其思想是选择足够大(比如说20字节)的加密安全随机数。它必须是那些非加密随机数生成器,通常在生成一定数量的数字后重复,当然,我们不希望这样。除此之外,这就是你所需要的


一开始,我认为这是行不通的,如果我们得到相同的数字呢?但是如果你算一下,你就会意识到可能性有多大。生日悖论告诉我们,你会发现时间上的碰撞,顺序是O(2^(n/2)),其中n是你的随机数的位数。所以20字节=160位,你应该在2^80时间内找到一个冲突。这与SHA-1的安全裕度相同,到目前为止,还没有人在那里发现过碰撞。问题是,你运气好,在2^30的时候偶然发现了碰撞,或者诸如此类的事情,这一点都不太可能。可能性对你不利。这与在同一天成为总统时同时赢得多张彩票大致相同。

从这个问题上,我理解“chaffify”的意思,但它是一个真实的词吗?@Laurent:我偶尔会在代码中看到它出现……作为函数名等……以及Stackoverflow上的其他地方。不过,通过谷歌弹出的页面并不多。所以:这不太可能是一个合法的词,也不可能是一个使用“箔条”来掩盖IDs的最佳实践的名称…(还没有)…本身。谢谢你的洞察力!什么是“RNG”?还有:你的意思是——本质上——如果黑客能够预测ID,会话就可能不安全?最后:你能解释一下“防止种族状况”的含义吗?不客气!我试图回答你们的问题,并补充了一些想法,因为我真的很喜欢这个主题:)我希望这能更好地解释它?