Этот вопрос никак не связан с Rails.
UUID небезопасен по той простой причине, что он является уникальным идентификатором и содержит «постоянные» части данного компьютера (например, он может использовать MAC-адрес для компьютера),что упрощает угадывание.
Если вы хотите, чтобы строки по 100k + не были угаданы, вы должны иметь возможность распределять ваши ключи по большому пространству ключей.Позвольте мне объяснить:
Если вам нужен только 1 ключ (давайте), вы можете выбрать «А».В ключевом пространстве AZ у вас есть шанс 1:26 угадать это.Теперь, если вы расширите свое пространство клавиш до A-Za-z, у вас есть шанс угадать 1:52.
Нужна еще безопасность?Используйте более длинную клавишу: «AA» 1: 2704 шанс.
Теперь, если вы хотите иметь 2000 ключей и использовать длину ключа 2 (например, «AA»), есть шанс 2000:2704 => 1:1.352
кто-то может догадаться.Довольно плохо.
Итак, ключ здесь - это выбрать очень длинный размер ключа.С Digest::SHA1
вы получаете 40-символьные ключи (используя Hex, с 16 различными значениями на символ).Это 1.46150164e48
уникальные значения.Ваши 100k значений должны быть достаточно случайными.
Редактировать:
С 40-значными значениями HEX SHA1 у вас есть 1:461501640000000000000000000000000000000000000000000
шанс угадать одно.Это занимает много времени.