gpt4 book ai didi

.net - GUID 的不可猜测性如何?

转载 作者:行者123 更新时间:2023-12-02 06:01:53 25 4
gpt4 key购买 nike

不久前,我开发了一个网络应用程序,用户可以在其中购买门票。由于我们客户流程的工作方式,您在购买后实际上得到的是一个包含票号的网址。

这些是在中东购买特性的门票,每张门票的潜在值(value)约为 3,000,000 美元。显然,给出连续整数是一个坏主意。我们使用 GUID,因为它们基本上是无法猜测的,但我的问题是:它们足够安全吗?

据我了解,.NET 生成的 GUID 完全是伪随机的(除了一些不变的位)。但是,我不知道它们是用什么算法生成的。

MSDN 文档告诉我们 Random快速且不安全,并且 RNGCryptoServiceProvider缓慢而安全。也就是说,可以合理地假设某人可以付出足够的努力来预测 Random 的结果,但不能预测 RNGCryptoServiceProvider 的结果。

如果您看到足够长的 GUID 序列,是否可以预测 future 的 GUID?如果是这样,您需要查看多少个?

[在我们的特殊情况下,稍后进行了物理安全检查 - 您必须出示用于购买机票的护照 - 所以如果有人猜到了某人,那也不会太糟糕别人的GUID,所以我们当时并没有担心。使用 GUID 作为数据库 key 的便利性使其成为一种有用的数据类型。]

<小时/>

编辑:

所以答案是“不够”。

使用0xA3下面的答案,以及来自 question 的链接他链接到,以下代码将生成一个加密随机 GUID,其有效期为 Section 4.4 of RFC 4122 :

static Guid MakeCryptoGuid()
{
// Get 16 cryptographically random bytes
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] data = new byte[16];
rng.GetBytes(data);

// Mark it as a version 4 GUID
data[7] = (byte)((data[7] | (byte)0x40) & (byte)0x4f);
data[8] = (byte)((data[8] | (byte)0x80) & (byte)0xbf);

return new Guid(data);
}

这生成 GUID 的速度比 Guid.NewGuid() 慢得多,但对于 122 位“非常随机”的数据,它们是安全的不可预测的。

当然,任何加密随机文本都可以作为票号,但 GUID 非常方便。 :-)

与其他版本 4 GUID 一样,无法绝对保证唯一性,但可能性令人印象深刻。只要同时运行的 GUID 少于 326,915,130,069,135,865(即 sqrt(-22^122ln(0.99)) ),就可以 99% 以上确定不会发生冲突。换句话说:如果像我一样,你的应用程序会到处出现溢出错误,如果你有超过 int.MaxValue 的几乎任何东西,你可以超过 99.9999999999999999% 确定不会发生冲突(即e^-(((2^31-1)^2)/(2*2^122)))。这比您确信陨石不会在应用程序上线后一秒内消灭地球上的大部分生命(即 one per 100 million years )的确信度高出一千倍。

最佳答案

UUID/GUID 由 RFC4122 指定。尽管版本 4 UUID 是根据随机数创建的 Section 6对安全性做出明确声明:

Do not assume that UUIDs are hard to guess; they should not be usedas security capabilities (identifiers whose mere possession grantsaccess), for example. A predictable random number source willexacerbate the situation.

关于 GUID 随机性的很好的讨论也可以在这个问题中找到:

How Random is System.Guid.NewGuid()? (Take two)

关于.net - GUID 的不可猜测性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3652944/

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