共享链接生成安全性



我一直想知道网站是如何生成"与他人共享";链接。有些网站允许你通过链接共享一段数据,以便让你发送链接的人能够查看甚至编辑数据。例如Google Drive、OneDrive等。他们会给你一个(很短的)链接,但有什么能保证我,有人不可能找到这个链接;运气好";并访问我的数据?比如,如果攻击者尝试链接的所有可能性:https://link.share.me/xxxxxxx,直到找到一些有效的链接,会怎么样?

  1. 是否有一定的长度几乎可以保证没有人会以这种方式找到一个链接?例如,如果一个网站生成了1000个链接,如果端点由10倍于[a-Za-z0-9]的类似字符组成(~8e17种可能性),我们只假设它足够安全?如果是,我们认为这种系统安全的概率或链接与可能性之间的比例是多少
  2. 是否有某种加密或数学方法可以生成这些链接,从而确保任何人都找不到链接

非常感谢。

可能最重要的事情(除了熵,我们稍后会回到熵)是从哪里获得随机性。为此,您应该使用加密伪随机数生成器(crypt-prng)。(顺便说一句,你也可以使用真正的随机,但真正的随机源很难找到,如果你生成了很多链接,你可能会用完可用的随机位,所以加密prng可能足够满足你的目的,很少有应用程序真正需要真正的随机数)。大多数语言和/或框架都有这样的功能,在Ruby中它是SecureRandom,在Java中是java.security.SecureRandom,在python中它可能是os.urandom,等等

好的,它应该有多长。这在一定程度上也取决于你的其他非安全要求,例如,有时这些要求需要在电话里说得容易,打字容易或类似的东西。除此之外,你应该考虑的是熵。你计算所有可能代码数量的想法是一个很好的开始,假设代码中的熵是该数字的log2(以2为底的对数)。因此,对于10个字符长的区分大小写的字母数字代码,熵为log2((26+26+10)^10)=59.5位。您可以以相同的方式计算任何其他长度和字符集的熵。

这可能就足够了,你应该考虑的是你的攻击者。他们只能执行在线攻击(速度慢得多),还是离线攻击(可以非常非常快,尤其是使用专用硬件)?此外,如果他们发现了一个,会有什么影响?它是像财务数据,还是只是一张随机的搞笑图片,或者某人的个人数据,你在多个司法管辖区负有法律责任(见欧盟的GDPR或加州隐私法)?

一般来说,你可以说64位的熵对于许多目的来说可能已经足够了,128位已经足够了(除了加密密钥和非常高的安全性应用程序)。由于上面的59位是..嗯,几乎是64位,对于安全性较低的应用程序来说,这可能是更好可用性的合理折衷。

简而言之,没有明确的答案,这取决于你想如何建模,以及你想满足什么安全要求。

另外两件需要考虑的事情是这些代码的有效性,以及将发布多少代码(空间将有多密集)。

我认为这里常见的变量是代码的字符集及其长度。有效性更像是一种业务需求,代码的密度将取决于您的使用情况以及长度(定义代码空间的大小)。

举个例子,假设你有64位熵,你已经发布了1000万个代码,而你的攻击者只能通过向你的服务器发送请求来执行在线攻击,速度大约为100/秒。这些可能是对安全方面的巨大夸大。

这意味着有0.17%的几率有人能在一年内找到一个有效的代码。但是,你的攻击者会花这么多精力去寻找一个(随机的)有效代码吗?这对你来说是否可以接受,取决于你的具体情况,只有你自己才能判断。如果没有,您可以增加代码的长度,例如。

我不使用OneDrive,但我可以从谷歌硬盘上说:

  1. 链接不是那么短。我刚数了一个,它的长度是32
  2. 除了安全性之外,他们可能还制作了大型链接,以避免组合耗尽,因为每天共享数千个驱动器文件。为了安全起见,Drive允许您选择可以访问它的用户;每个人"然后你应该确保你不会遇到任何人看到链接内容的问题。即使不能找到链接";"偶然";仍然存在这样的可能性:其他人从你的朋友那里获得链接,然后分享它,或者他们被代理捕获。长期联系应该只是对其他安全措施的补充

回答您的问题:

  1. 可以找到任何长度的链接,但更长的链接需要更多的时间才能找到。如果你使用所有的字母数字字符,可能30就足够了,但正如我所说,它们不应该是你系统中唯一的安全性
  2. 只要使它们随机,长,让字符在一个广泛的范围

相关内容

  • 没有找到相关文章

最新更新