Насколько безопасны GUID с точки зрения предсказуемости? - PullRequest
7 голосов
/ 23 декабря 2010

В настоящее время мы используем .NET Guid.NewGuid() для генерации кодов активации и ключей API. Интересно, если это создает проблему безопасности, так как их алгоритм открыт.

.NET Guid использует Win32 CoCreateGuid, и я не знаю его внутренних компонентов (возможно, MAC-адрес + метка времени?). Может ли кто-нибудь вывести второй GUID из первого, или он поразит его умными догадками, или случайность достаточно хороша, поэтому пространство поиска становится слишком большим?

При генерации случайных ключей возникает проблема коллизий, их необходимо дважды проверить перед добавлением в базу данных. Вот почему мы придерживаемся GUID, но я не уверен в их безопасности для этих целей.

Вот 4 последовательных выхода UUIDGEN:

c44dc549-5d92-4330-b451-b29a87848993
d56d4c8d-bfba-4b95-8332-e86d7f204c1c
63cdf958-9d5a-4b63-ae65-74e4237888ea
6fd09369-0fbd-456d-9c06-27fef4c8eca5

Вот 4 из них Guid.NewGuid():

0652b193-64c6-4c5e-ad06-9990e1ee3791
374b6313-34a0-4c28-b336-bb2ecd879d0f
3c5a345f-3865-4420-a62c-1cdfd2defed9
5b09d7dc-8546-4ccf-9c85-de0bf4f43bf0

Ответы [ 3 ]

10 голосов
/ 23 декабря 2010

GUID довольно случайны, но они не предназначены для использования в качестве случайных чисел - их единственная цель - уникально идентифицировать объекты, чтобы они могли быть предсказуемыми.

Использовать System.Security.Cryptography.RandomNumberGenerator вместо .

2 голосов
/ 23 декабря 2010

Любой ключ имеет ограниченное пространство, и достаточно определенный человек / группа может и будет генерировать все комбинации. Важно не столько ключ, сколько то, как вы организовываете его валидацию и что он санкционирует. Если вы используете валидацию / авторизацию полностью через Guid, то это, вероятно, не подходит, так как потенциально все Guids действительны, вам лучше использовать что-то вроде SeriousBit Elipter . Если вы используете механизм аутентификации, который записывает, что определенный Guid был выпущен и что он теперь используется для активации, то Guid не такой уж плохой выбор, поскольку это довольно большое пространство ключей.

1 голос
/ 23 декабря 2010

Существует несколько механизмов для создания направляющих, некоторые из которых используют MAC-адреса, а некоторые просто используют генерацию случайных чисел.iirc адрес amc должен быть очевиден в GUID, если он используется - он никак не хэшируется.

edit: proviso, слегка неубедительный ответ, так как здесь я говорю о генерировании общего guid, а неВозможный мс алгоритм, что делает запутывает его.смотрю в него, удаляю, если это бесполезно ..

...