Является ли GUID хорошим ключом для (временного) шифрования? - PullRequest
16 голосов
/ 07 июня 2011

Я создаю ключ шифрования для шифрования некоторых конфиденциальных данных с помощью алгоритма шифрования Rijndael (AES) . Я использую гид в качестве генератора ключей. Достаточно ли сильны эти клавиши?

Примечание: он чувствителен только в течение 20 минут.

Ответы [ 4 ]

19 голосов
/ 07 июня 2011

Нет. Ключи 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/

16 голосов
/ 07 июня 2011

Нет , GUID не являются криптографически безопасными.Они следуют чрезвычайно предсказуемому и хорошо документированному шаблону, и они достаточно короткие, насколько это действительно безопасно.Более того, вы неправильно используете GUID.Это не то, для чего они были созданы.Это глобально уникальные идентификаторы .Единственная гарантия, которую вы получаете, - это то, что каждый из них уникален .Опытный хакер превратит детскую игру в реверс-инжиниринг в GUID.

Вместо этого используйте функции, предоставляемые пространством имен System.Security.Cryptography .Вот для чего они предназначены.Читайте о криптографически безопасных генераторах псевдослучайных чисел .

1 голос
/ 07 июня 2011

Я бы не использовал GUID для ключа для шифрования данных.Посмотрите на некоторые реализации протокола UUID: UUID их можно предсказать, поскольку они вычисляются как уникальные, а не случайные.Я хотел бы изучить использование пространства имен System.Security.Cryptography для таких объектов, как «TripleDESCryptoServiceProvider», для личных данных.

0 голосов
/ 07 июня 2011

Рассмотрите возможность использования этого или эквивалентного генератора случайных строк: http://msdn.microsoft.com/en-us/library/aa379942%28VS.85%29.aspx

...