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



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

注意:它只敏感20分钟

否。GUID密钥可以预测,至少是由生成的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);

你可能想参考:

如何在C#中生成加密安全的伪随机数?——显示了备选方案,在评论中,给出了指向维基百科的链接:

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

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

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

,GUID在加密方面不安全。它们遵循一种极其可预测和有据可查的模式,就真正安全的密钥而言,它们相当短。但更重要的是,你这样做是在滥用指南。这不是他们设计的目的。它们是全局唯一的标识符。你得到的唯一保证是它们中的每一个都是唯一的。一个老练的黑客会把孩子玩的逆向工程变成GUID。

请改用System.Security.Cryptography命名空间提供的函数。这就是它们的设计目的。阅读加密安全的伪随机数生成器。

我不会使用GUID作为密钥来加密数据。看看UUID协议的一些实现:UUID可以被预测,因为它们被计算为唯一的,而不是随机的。我会研究一下使用系统。安全对象的加密命名空间,如"TripleDESCryptoServiceProvider",用于个人敏感数据。

考虑使用此或等效的随机字符串生成器:http://msdn.microsoft.com/en-us/library/aa379942%28VS.85%29.aspx

相关内容

  • 没有找到相关文章

最新更新