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