Является ли / proc / sys / kernel / random / uuid сильным ключом? - PullRequest
6 голосов
/ 03 мая 2011

Я искал способы создания сильного симметричного ключа 256 бит / 32 байта для алгоритма HMAC_SHA256. Я наткнулся на файл / proc / sys / kernel / random / uuid.

Согласно man random (4) : «Файлы только для чтения uuid и boot_id содержат случайные строки, такие как 6fd5a44b-35f4-4ad4-a9b9-6b9be13e1fe9. Первый генерируется заново для каждого чтения последнее было сгенерировано один раз. "

Строка из cat /proc/sys/kernel/random/uuid выглядит идеально для этой цели. Я могу удалить символы '-' и получить 32 байта случайности.

Является ли это действительным подходом для создания криптографически надежного источника ключевого материала?

Ответы [ 3 ]

9 голосов
/ 07 января 2013

Старый вопрос, но в случае, если кто-то наткнется на него, я бы не советовал.

/proc/sys/kernel/random/uuid - это UUID типа 4 (случайный) с определенной семантикой - это не просто строка случайных шестнадцатеричных символов. Например, вы увидите, что первая цифра в третьей группе всегда равна 4.

Для 256 случайных бит просто прочитайте 32 байта из /dev/random (использует внешнюю энтропию, может блокировать) или /dev/urandom (никогда не блокирует).

1 голос
/ 03 мая 2011

Будете ли вы полагаться на четко определенный детерминированный псевдослучайный алгоритм для генерации ключей?Это в основном вопрос.

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

0 голосов
/ 19 ноября 2016

o172.net является лучшим ответом, прокомментирует его напрямую, но не может.

/proc/sys/kernel/random/uuid основан на urandom, но лучше всего брать напрямую из урандома.

Это ниже, как получить его из оболочки, следующее получает 32 шестнадцатеричных байта ascii:

echo $(tr -dc a-f0-9 < /dev/urandom | dd bs=32 count=1 2> /dev/null)

Вы можете изменить набор символов с помощью параметров tr, байтов с помощью

dd bs=
or not use tr

и получить случайный двоичный файл.

...