要开始并定义guid,我使用的是.net框架Guid
这在某种程度上是假设的情况
用户在执行特定操作时会生成guid。每个用户都可以看到自己的guid。如果用户要知道另一个用户的guid之一,则会出现安全性损害。
如果我们认为用户无法窃取另一个用户的guid并且只能猜测它,那么这个系统有多安全?
我明白盲目猜测guid是不可能的。即使他们有一百万的成功价值,他们仍然只有10 ^ 20的成功猜测机会
我害怕可能存在的问题是指导预测。用户是否可以生成大量请求,查看他获得的guid,并且知道.net guid生成公式可以大大提高他猜测的几率?
这些几率可以降低到安全问题吗?
在这种情况下,如何以一种独特的不可猜测的方式生成密钥?
我问任何提到猜测/碰撞几率的人都会给它添加一些难以理解的含义。要么是用于定义赔率的确切数字,要么是“它可以用于存储帐户数据,而不是用于存储敏感数据”
编辑
这个问题似乎进入了我最初试图用这个问题探索的领域
GUID是(临时)加密的好钥匙吗?
GUID的/ UUID旨在生成128位数,主要用作唯一的ID(用于所有意图和目的)。
UUID不是为了生成加密强的随机数序列而设计的,如果你想要最大的不可预测性,那么加密的强随机数序列就是你想要的。为此,.NET为您提供了RNGCryptoServiceProvider - 从一开始就设计为不可预测的,可以通过算法手段合理地实现,那么为什么不使用它呢?
例:
byte[] GenerateRandomBytes()
{
byte[] key = new byte[16];
System.Security.Cryptography.RNGCryptoServiceProvider c =
new System.Security.Cryptography.RNGCryptoServiceProvider();
c.GetBytes(key);
return key;
}
Afaik .net生成 版本4 UUID 默认为Guids。如果正确实施,这些是随机的,很难猜测。但由于未来版本可能会使用其他实现,因此我不会依赖它。我认为即使早期版本的Windows或.net也使用基于Mac-Address的Guids,这些更容易猜到。
所以我只使用内置于.net中的一个crypto-pseudo-random-number-generator。如果您生成16个字节,则可以直接替换Guid。