【问题标题】:How secure are GUIDs in terms of predictability?GUID 在可预测性方面的安全性如何?
【发布时间】:2010-12-23 09:38:33
【问题描述】:

我们目前正在使用 .NET 的 Guid.NewGuid() 来生成激活码和 API 密钥。我想知道这是否会带来安全问题,因为他们的算法是开放的。

.NET Guid 使用 Win32 CoCreateGuid,我不知道它的内部结构(可能是 MAC 地址 + 时间戳?)。有人可以从第一个 GUID 中推导出第二个 GUID,还是他可以通过一些聪明的猜测来达到它,或者随机性是否足够好,以至于搜索空间变得太大?

生成随机密钥存在冲突问题,在添加到数据库之前需要仔细检查。这就是我们坚持使用 GUID 的原因,但我不确定它们的安全性。

这是 4 个连续的 UUIDGEN 输出:

c44dc549-5d92-4330-b451-b29a87848993
d56d4c8d-bfba-4b95-8332-e86d7f204c1c
63cdf958-9d5a-4b63-ae65-74e4237888ea
6fd09369-0fbd-456d-9c06-27fef4c8eca5

这是Guid.NewGuid()的其中4个:

0652b193-64c6-4c5e-ad06-9990e1ee3791
374b6313-34a0-4c28-b336-bb2ecd879d0f
3c5a345f-3865-4420-a62c-1cdfd2defed9
5b09d7dc-8546-4ccf-9c85-de0bf4f43bf0

【问题讨论】:

  • 关于 guid 的 Wikipedia 在 guid 算法上相当不错:en.wikipedia.org/wiki/Globally_unique_identifier
  • Cody,它很相似,但我并不是严格寻找随机性本身。例如,GUID 可能是一个非常高精度的计时器,并且仍然是安全的而不是随机的。我想知道的是,连续 GUID 之间的搜索空间是否足够宽且不可预测,足以进行微不足道的蛮力攻击。

标签: .net guid uuid


【解决方案1】:

GUID 非常随机,但并不打算用作随机数 - 它们的唯一目的是唯一标识实体,因此可以预测。

Use System.Security.Cryptography.RandomNumberGenerator instead.

【讨论】:

    【解决方案2】:

    任何键都有一个有限的空间,一个足够确定的人/组可以并且将生成所有组合。重要的不是关键,而是你如何组织它的验证和它的授权。如果您完全通过 Guid 操作验证/授权,那么这可能不合适,因为可能所有 Guid 都是有效的,您最好使用 SeriousBit Elipter 之类的东西。如果您正在使用一种身份验证机制来记录已发布特定 Guid 并且它现在已用于激活,那么 Guid 并不是一个糟糕的选择,因为它是一个非常大的密钥空间。

    【讨论】:

      【解决方案3】:

      生成 guid 的机制有多种,有些使用 MAC 地址,有些仅使用纯随机数生成。 iirc 如果正在使用 amc 地址,则它应该在 GUID 中很明显 - 它不会以任何方式散列。

      编辑:附带条件,有点蹩脚的答案,因为这里我谈论的是通用 guid 生成,而不是 确实 混淆它的可能的 ms 算法。正在研究它,如果它没有用会删除..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-07
        • 2018-08-05
        • 2016-09-20
        • 2012-09-02
        • 1970-01-01
        • 2011-05-26
        相关资源
        最近更新 更多