GUID在为Web应用程序创建会话密钥时经常使用。我一直想知道这种做法的安全性。由于GUID是根据来自机器的信息和时间以及其他一些因素生成的,因此猜测未来可能会出现的GUID有多难。假设您已经启动了1000个或10000个新会话,以获得正在生成的GUID的良好数据集。这是否会使生成可能用于另一个会话的GUID变得更容易。您甚至不必猜测特定的GUID,而只是继续尝试可能在特定时间段生成的GUID。
答案 0 :(得分:20)
以下是来自Wikipedia(original source)的一些内容:
包含MAC地址的V1 GUID 和时间可以通过 数字“1”在第一个位置 例如,第三组数字 {2f1e4fc0-81fd-11DA-9156-00036a0f876a}。
根据我的理解,他们并没有真正隐藏它。
V4 GUID使用后面的算法, 这是一个伪随机数。这些 在同一位置有一个“4” 例 {38a52be4-9352-453e-af97-5c3b448652f0}。 更具体地说,'data3'位 模式将是0001xxxxxxxxxxxx in 第一种情况,和0100xxxxxxxxxxxx 在第二。密码分析 WinAPI GUID生成器显示, 因为V4 GUID的序列是 给定初始状态的伪随机, 人们可以预测下一个25万 函数返回的GUID UuidCreate 1。 这就是GUID的原因 不应该用于密码学,例如 g。,作为随机密钥。
答案 1 :(得分:10)
GUID保证是唯一的,就是它。不保证随机或难以猜测。
回答你的问题,至少对于V1 GUID生成算法,如果你知道算法,MAC地址和创建时间,你可能会生成一组GUID,其中一个GUID是实际生成的。如果它是V1 GUID,MAC地址可以从同一台机器的样本GUID中确定。
来自维基百科的其他消息:
OSF指定的算法 生成新的GUID已经广泛存在 批评。在这些(V1)GUID中, 用户的网卡MAC地址是 用作最后一组的基础 GUID数字,例如, 可以追溯文档 创建它的计算机。这个 定位时使用了隐私洞 梅利莎蠕虫的创造者。最 其他数字的基础是 生成GUID时的时间。
答案 2 :(得分:9)
.NET Web应用程序调用Guid.NewGuid()来创建一个GUID,这反过来最终会在堆栈深处调用CoCreateGuid() COM函数。
来自MSDN Library:
CoCreateGuid 函数调用 RPC函数 UuidCreate ,它创建 GUID,全局唯一的128位 整数。使用 CoCreateGuid 功能 当你需要一个绝对独特的 您将用作的号码 分布式的持久标识符 环境。非常高的 确定,这个函数返回一个 唯一值 - 没有其他调用 相同或任何其他系统 (网络与否),应该返回 相同的价值。
如果您查看UuidCreate上的页面:
UuidCreate 函数会生成一个 无法跟踪的 UUID 以太网/令牌环地址 生成它的计算机。它 也不能与其他人联系 UUID 是在同一台计算机上创建的。
最后一个句子是你问题的答案。所以我想说,除非微软的实施中存在错误,否则很难猜测。
答案 3 :(得分:6)
如果有人持续使用连续的GUID流来访问服务器,那么它将更多地是拒绝服务攻击。
有人猜测GUID的可能性接近于零。
答案 4 :(得分:0)
取决于。如果GUID设置合理,例如很难使用盐渍安全哈希,你有很多位。如果GUID很短且很明显,它就很弱。
您可能希望采取措施阻止某人创建10000个新会话,因为这可能会造成服务器负载。
答案 5 :(得分:0)
“GUID保证是唯一的,就是它”。 GUID不保证是独一无二的。至少CoCreateGuid生成的那些:“对于非常高的确定性,此函数返回一个唯一值 - 在同一个或任何其他系统上没有其他调用(联网与否),应返回相同的值。“