GUID是(临时)加密的好钥匙吗?

Kee*_*ker 16 .net c# encryption guid

我正在生成一个加密密钥,用Rijndael(AES)加密算法加密一些敏感数据.我正在使用guid作为密钥生成器.这些钥匙"足够"吗?

注意:它只对20分钟敏感.

mne*_*syn 19

不能.可以预测GUID键,至少是由.NET/WinAPI生成的键.还要记住,GUID甚至没有真正的128位随机性,因为版本号是固定的.这首先给你一个非常弱的关键.

更糟糕的是,GUID算法的几个版本具有可预测性.关键是GUID不是随机创建的,但是它们遵循某些规则以使GUID实际上不可能发生冲突.

正如评论中所讨论的,GUID V1遭遇了隐私问题(或者反过来说,弱键),因为MAC地址用于生成它们.使用GUID V4,仍然可以根据下面的(俄语)来源预测序列.

幸运的是,.NET拥有加密强大的随机生成器.这RNGCryptoServiceProvider是你的朋友:

RNGCryptoServiceProvider _cryptoProvider = new RNGCryptoServiceProvider();
int fileLength = 8 * 1024;
var randomBytes = new byte[fileLength];
_cryptoProvider.GetBytes(randomBytes);
Run Code Online (Sandbox Code Playgroud)

您可能想参考:

如何在C#中生成加密安全的伪随机数? - 显示替代方案,并在评论中,给出了维基百科的链接:

http://en.wikipedia.org/wiki/Globally_Unique_Identifier

在那里,声称(根据维基百科,页面是俄语),人们可以预测生成的前一个和未来的数字:

http://www.gotdotnet.ru/blogs/denish/1965/

  • @Neil:我编辑了我的答案.多年前部分是GUID V1,但问题仍然存在,因为GUID首先并不是随机的,所以他们必须知道他们以前的状态以防止冲突.所以GUID V4仍然是可预测的(尽管不容易). (2认同)

Cod*_*ray 16

,GUID在加密方面不安全.它们遵循极其可预测且记录良好的模式,就真正安全的密钥而言,它们相当短.但更重要的是,你这样做是在滥用GUID.这不是他们的设计目标.它们是全球唯一标识符.你得到的唯一保证是每一个都是独一无二的.一个老练的黑客会让孩子玩逆向工程成为GUID.

而是使用System.Security.Cryptography命名空间提供的功能.这就是他们的设计目标.阅读加密安全的伪随机数生成器.