GUID 的不可猜测性如何?

2024-01-28

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

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

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

MSDN 文档告诉我们Random http://msdn.microsoft.com/en-us/library/system.random.aspx快速且不安全,并且RNGCryptoServiceProvider http://msdn.microsoft.com/en-us/library/system.security.cryptography.rngcryptoserviceprovider.aspx缓慢而安全。也就是说,假设某人可以付出足够的努力来预测结果是合理的Random,但不属于RNGCryptoServiceProvider.

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

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


Edit:

所以答案是“不够”。

Using 0xA3 https://stackoverflow.com/users/40347/0xa3下面的答案,以及以下链接question https://stackoverflow.com/questions/2621563/how-random-is-system-guid-newguid-take-two他链接到,以下代码将生成一个加密随机 GUID,该 GUID 通过以下方式有效RFC 4122 第 4.4 节 https://www.rfc-editor.org/rfc/rfc4122#section-4.4:

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 一样,不能绝对保证唯一性,但可能性令人印象深刻。只要您的数量少于 326,915,130,069,135,865(即sqrt(-22^122ln(0.99)) http://www.wolframalpha.com/input/?i=sqrt(-2*2%5E122*ln(0.99))) GUID 同时运行,您可以 99% 以上确定不会发生冲突。换句话说:如果像我一样,如果您的应用程序有超过int.MaxValue几乎任何事情,你都可以有超过 99.9999999999999999% 的把握不会发生碰撞(即e^-(((2^31-1)^2)/(2*2^122)) http://www.wolframalpha.com/input/?i=e%5E-(((2%5E31-1)%5E2)/(2*2%5E122)))。这比您确信陨石不会在应用程序上线后一秒内消灭地球上的大部分生命(即,更确定)大约一千倍。每一亿年就有一个 http://en.wikipedia.org/wiki/Impact_event#Mass_extinctions_and_impacts).


UUID/GUID 指定为RFC4122 https://www.rfc-editor.org/rfc/rfc4122。尽管版本 4 UUID 是根据随机数创建的第 6 节 https://www.rfc-editor.org/rfc/rfc4122#section-6关于安全性做出明确声明:

不要假设 UUID 很难猜测;不应该使用它们 作为安全功能(仅拥有即可授予的标识符 访问),例如。可预测的随机数源将 加剧局势。

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

System.Guid.NewGuid() 的随机性如何? (拿两个) https://stackoverflow.com/questions/2621563/how-random-is-system-guid-newguid-take-two

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GUID 的不可猜测性如何? 的相关文章

  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • 如何将 CSV 文件读入 .NET 数据表

    如何将 CSV 文件加载到System Data DataTable 根据CSV文件创建数据表 常规 ADO net 功能是否允许这样做 我一直在使用OleDb提供者 但是 如果您正在读取具有数值的行 但希望将它们视为文本 则会出现问题 但
  • 检测 SignalR Hub 客户端立即断开连接

    SignalR Hub OnDisconnected 何时在服务器端引发 对于崩溃或关闭而不调用Stop method 我正在使用 SignalR NET 客户端进行测试 而不是 javascript 客户端 如果我打电话给Stop客户端上
  • 元素属性语法和属性属性语法之间有语义差异吗?

    我认为元素属性语法和属性属性语法在语义上没有太大区别 但是 我发现一定有什么不同 例如 下面的例子只是演示了一个简单的触发器
  • 反序列化嵌套类时不需要 xmlns=''

    我在尝试在服务器上序列化类 将其发送到客户端并在目标上反序列化时遇到问题 在服务器上我有以下两个类 XmlRoot StatusUpdate public class GameStatusUpdate public GameStatusUp
  • 确定最接近的已知颜色

    我允许我的应用程序的用户选择自定义颜色 并希望有一种方法来显示每种颜色的友好名称 而不是显示十六进制代码的文本表示形式 我如何找到最近的System Drawing Color对于给定的十六进制代码 希望这对某人有帮助 Public Fun
  • ASP.NET MVC ActionFilterAttribute 在模型绑定之前注入值

    我想创建一个自定义操作过滤器属性 该属性在模型绑定期间可访问的 HttpContext 项中添加一个值 我尝试将其添加到 OnActionExecuting 中 但似乎模型绑定是在过滤器之前执行的 你知道我该怎么做吗 也许模型绑定器中有一个
  • 序列包含多个元素

    我在通过 Linq 获取 RhsTruck 类型的列表并显示它们时遇到一些问题 RhsTruck 只有属性 品牌 型号 序列号 等 RhsCustomer 具有 CustomerName CustomerAddress 等属性 我不断收到错
  • 如何获取可用系统内存的大小?

    C NET 中是否可以获取系统可用内存的大小 如果是的话怎么办 Use Microsoft VisualBasic Devices ComputerInfo TotalPhysicalMemory http msdn microsoft c
  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • 服务 AddJsonOptions .net core 2.1

    以前使用 net 2 0 您可以通过这种方式添加 json 内容 services AddJsonOptions options gt options SerializerSettings ContractResolver new Came
  • 函数的变量存储在哪里?在堆栈或堆上?

    当程序调用函数时 为该函数中的变量分配哪种类型的数据结构内存 堆还是栈 为什么 在我看来 它应该存储在堆栈上 因为它们不一定是引用类型 但在我读到答案的地方 据说它们存储在堆上 并在函数返回值后释放 它比这更复杂一点 事实上使用堆栈和堆实际
  • 如何将位写入文件?

    如何使用 c net 将位 而不是字节 写入文件 我很坚持它 Edit 我正在寻找一种不同的方法 将每 8 位写为一个字节 一次可以写入的最小数据量是一个字节 如果您需要写入单独的位值 例如 二进制格式需要 1 位标志 3 位整数和 4 位
  • 在业务逻辑中使用反射是一种好的做法吗?

    我需要开发一个由两个主要部分组成的应用程序 具有特定业务类别的业务逻辑部分 例如书籍 图书馆 作者 一个通用部分 可以在数据网格中显示书籍 图书馆 将它们映射到数据库 通用部分使用反射从业务类中获取数据 而不需要在业务类中编写特定的数据网格
  • Windows 每秒进行一次线程切换的频率是多少? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions Windows 通常 每秒进行一次线
  • .Net 支持柯里化泛型吗?

    假设我们有一个嵌套的泛型类 public class A
  • ArrayList 有什么问题?

    最近我问了一个关于 SO 的问题 其中提到了可能使用 c ArrayList 来解决问题 有人评论说使用数组列表不好 我想了解更多有关此的信息 我以前从未听说过关于数组列表的这种说法 有人可以带我了解使用数组列表可能出现的性能问题吗 C n
  • 使用属性和性能

    我正在优化我的代码 我注意到使用属性 甚至自动属性 对执行时间有深远的影响 请参阅下面的示例 Test public void GetterVsField PropertyTest propertyTest new PropertyTest
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web

随机推荐

  • 强制将 XML 字符实体放入 XmlDocument 中

    我有一些如下所示的 XML
  • 无法安装测试飞行中的应用程序。此请求有错误

    在装有 iOS 8 3 的 iPhone 5 上 重置所有设置 后 我无法通过 TestFlight 安装测试版 azimov 问题来自 OS 8 3 我们只有 OS 8 3 上的设备才会遇到同样的问题 我个人尝试过重新邀请 更改苹果账户
  • 未捕获的引用错误:React 未定义

    您好 我知道此类问题已被问过很多次 但我无法得到答案 我正在尝试编写一个 React hello world 示例 我只有两个文件 一个是 app jsx 另一个是 homepage jsx 我正在使用 webpack 来捆绑文件 但是当我
  • 当 FlowDocument 放置在带有自定义玻璃的窗口中时,子元素中的 ClearType 会丢失

    因此 新的 WPF 4 文本渲染看起来很棒 但在窗口上启用航空玻璃效果需要将背景更改为透明 这当然会禁用 ClearType 渲染 使用提供的 RenderOptions ClearTypeHint Enabled 允许您指定子元素以从树中
  • 如何解决Wordpress中阻止具有来源的框架访问跨来源框架错误? [复制]

    这个问题在这里已经有答案了 我正在开发一个 WordPress 网站 其中安装了很多 WordPress 插件 WordPress网站上安装的插件有以下选项 当我点击查看详情选项 我得到如下图所示的空白屏幕 但是当我在新窗口或选项卡中打开时
  • PhoneGap 捕捉 iPhone 的“Go”按下事件

    我想知道如何使用 PhoneGap 捕获 Go 按下事件 我有一个带有 2 个输入字段的表单 当用户按下键盘中的 Go 时 如何捕获 我尝试将输入字段对接Form并添加了一个onSubmit方法 在我的 Js 中我有这个方法 functio
  • 使 Swing 组件同步

    我正在阅读Java线程第三版 作者 Oaks 和 Wong O Reilly 2004 他们在整本书中都有一个 Swing 打字游戏的例子 他们定义的类大多是自定义子类javax swing JComponent 在我看来 非常错误的是他们
  • ArrayList中ensureCapacity方法中使用的逻辑

    我正在浏览ArrayList的源代码 我遇到了 EnsureCapacity 方法 它增加了内部使用的数据数组的容量 其中 数据阵列的新容量是根据逻辑增加的int newCapacity oldCapacity 3 2 1 其中旧容量是当前
  • 我们可以继承并更改odoo中的noupdate =“1”吗?

    是否可以继承一个 xml 并更改其可更新性 我尝试继承 检查操作规则 将 interval number 从 4 小时更改为 1 小时 让它每小时运行一次 我认为它可能不起作用 因为 noupdate 1 有人对此有任何想法吗 是的 您可以
  • 如何从 Textmate 2 的项目抽屉中删除 SCM 文件状态

    我可以从项目抽屉中的文件中删除这些状态图标吗 即下图中的红色 x 和绿色 我尝试从 Textmate 中删除一些 SCM 捆绑包 但这并没有成功 我正在使用最新版本的 Textmate 2 你可以加scmStatus false到您的 Te
  • 参数号无效:致命错误

    News Feed Data public function newsFeed db getDB stmt db gt prepare SELECT user id as id user nome as nome app id as app
  • 在 Swift 中使用 AVAudioEngine 保存更改时间音调的音频文件

    目前 我正在尝试更改文档文件夹中现有音频文件的时间音调 然后使用 AVAudioEngine 用修改后的文件覆盖旧文件 我已经使用 AVAudioPlayerNode 和 AVAudioUnitTimePitch 完成了第一部分的工作 不过
  • jsp页面如何将int值转换为字符串

    我有一个包含 Map 的地图 我使用它在 jsp 页面上迭代它
  • jQuery/JavaScript - 拥有大量小 .js 文件时的性能问题?

    我有一个包含大量引用的 js 文件的网站 这些是相当小的文件 但我想将我的方法按主题 功能分开 将所有方法保存在一个 js 文件中是否更好 或者拥有许多 20 30 个小文件都只包含一些行没有问题 无论如何 将它们分开进行开发 但您应该考虑
  • ios 11 自定义导航栏位于状态栏下方

    刚刚下载了 xcode 9 我遇到了这个奇怪的问题 在 ios 11 上 我的自定义导航栏似乎只有一半大小 位于状态栏下方 在 ios 10 上工作正常 所以这是我的代码 let newNavbar UINavigationBar UINa
  • 启用 AOP 会破坏我对带有字符串的工厂 bean 的依赖注入

    启用 AOP 会破坏我对带有字符串的工厂 bean 的依赖注入 这是上下文文件中的片段
  • R类型转换表达式()函数()

    我一直在尝试用 R 编写一个程序来实现牛顿法 我基本上是成功的 但有两个小障碍一直困扰着我 这是我的代码 Newton lt function f f guess f lt readline prompt Function f lt rea
  • time() 是好盐吗?

    我正在查看一些我自己没有编写的代码 该代码尝试使用 SHA512 对密码进行哈希处理 并仅使用time 作为盐 是time 盐太简单了还是这个代码安全 感谢您的回答和评论 我在这里为新读者总结一下 每个用户的盐应该不同 因此如果2个用户同时
  • 如何计算两个 AnchorEntities 之间的距离?

    有一个位置是SIMD3 还有 AnchorEntity 我想拉开两人之间的距离 我是怎么做到的 var distance distance position self modelentity position relativeTo nil
  • GUID 的不可猜测性如何?

    不久前 我开发了一个网络应用程序 用户可以在其中购买门票 由于我们客户流程的工作方式 您在购买后实际上得到的是一个包含票号的 URL 这些是在中东购买房产的门票 每张门票的潜在价值约为 3 000 000 美元 显然 给出连续整数是一个坏主