Почему MD5'ing является UUID не хорошая идея?

Это означает, что самый портативный способ определить реализации метода шаблонных классов состоит в том, чтобы определить их в определении шаблонного класса.

template < typename ... >
class MyClass
{

    int myMethod()
    {
       // Not just declaration. Add method implementation here
    }
};
20
задан Ferdinand Beyer 18 August 2009 в 13:40
поделиться

6 ответов

UUID имеет ширину 128 бит и уникальность, присущую способу его генерации. Хеш MD5 имеет ширину 128 бит и не гарантирует уникальности, только низкую вероятность коллизии. Хэш MD5 не меньше, чем UUID, поэтому он не помогает с хранилищем.

Если вы знаете, что хеш от UUID, его гораздо легче атаковать, потому что домен действительных UUID на самом деле довольно предсказуем, если вы что-то знаете о машине, генерирующей их.

Если вам нужно предоставить защищенный токен, вам нужно будет использовать криптографически безопасный генератор случайных чисел. (1) UUID не предназначены для криптографической безопасности, только гарантированно уникальный. Монотонно возрастающая последовательность, ограниченная уникальными машинными идентификаторами (обычно MAC) и временем, по-прежнему является совершенно допустимым UUID, но очень предсказуемой, если вы можете реконструировать единственный UUID из последовательности токенов.

  1. Определяющая характеристика криптографически безопасного PRNG заключается в том, что результат данной итерации не содержит достаточно информации, чтобы сделать вывод о значении следующей итерации, т.е. в генераторе есть какое-то скрытое состояние, которое не раскрывается в числе и не может быть выведено путем изучения последовательности чисел из числа ГПСЧ.

    Если вы углубитесь в теорию чисел, вы можете найти способы угадать внутреннее состояние некоторых PRNG из последовательности сгенерированных значений. Mersenne Twister является примером такого генератора. Он имеет скрытое состояние, которое использовалось для получения своего длительного периода, но оно не является криптографически безопасным - вы можете взять довольно небольшую последовательность чисел и использовать ее для вывода внутреннего состояния. Сделав это, вы можете использовать его для атаки на криптографический механизм, который зависит от сохранения этой последовательности в секрете.
36
ответ дан 29 November 2019 в 22:58
поделиться

Обратите внимание, что uniqid () возвращает не UUID , а «уникальную» строку, основанную на текущем времени:

$ php -r 'echo uniqid("prefix_", true);'
prefix_4a8aaada61b0f0.86531181

Если вы сделайте это несколько раз, вы получите очень похожие выходные строки, и каждый, кто знаком с uniqid () , узнает исходный алгоритм. Таким образом, довольно легко предсказать следующие идентификаторы, которые будут сгенерированы.

Преимущество вывода md5 () вместе со строкой соли или случайным числом для конкретного приложения состоит в том, что угадать строку труднее:

$ php -r 'echo md5(uniqid("prefix_", true));'
3dbb5221b203888fc0f41f5ef960f51b

В отличие от простого uniqid () , это дает очень разные выходные данные каждую микросекунду. Кроме того, он не раскрывает ни вашу строку "prefix salt", ни то, что вы используете uniqid () под капотом. Не зная соли,

13
ответ дан 29 November 2019 в 22:58
поделиться

MD5-определение UUID бессмысленно, потому что UUID уже уникальны и имеют фиксированную длину (короткие), свойства, которые являются одной из причин, по которым люди часто используют MD5 для начала. Так что, я полагаю, это зависит от того, что вы планируете делать с UUID, но в целом UUID имеет те же свойства, что и некоторые данные, которые были определены с помощью MD5, так почему оба варианта?

5
ответ дан 29 November 2019 в 22:58
поделиться

Версия 3 UUID уже имеет MD5, поэтому нет смысла делать это снова. Однако я не уверен, какую версию UUID использует PHP.

2
ответ дан 29 November 2019 в 22:58
поделиться

UUID уже уникальны, поэтому в MD5 нет смысла.

Что касается секретного вопроса, в целом вы можете подвергнуться атаке, если злоумышленник сможет предсказать, какой следующий уникальный идентификатор вы собираетесь сгенерировать. Если известно, что вы генерируете свои уникальные идентификаторы из UUID, набор потенциальных следующих уникальных идентификаторов намного меньше, что дает больше шансов для атаки методом грубой силы.

Это особенно верно, если злоумышленник может получить целую кучу уникальные идентификаторы от вас,

2
ответ дан 29 November 2019 в 22:58
поделиться

Кстати, MD5 на самом деле устарел и не должен использоваться ни в чем заслуживающем защиты - PHI, PII или PCI - с 2010 г. Федеральные органы США ввели в исполнение это требование, и любая организация, не соблюдающая правила, заплатит много долларов в виде штрафа.

0
ответ дан 29 November 2019 в 22:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: