Bash генерировать безопасный пароль без специальных символов - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть ежедневный процесс bash, который требует использования нового пароля каждый день.

Чтобы избежать работы со специальными символами, я генерирую пароли, используя MD5 для произведения двух $RANDOM переменных:

md5sum <<< $(($RANDOM * $RANDOM))

Моя идея такова: поскольку $RANDOM генерирует случайное целое число от 0 до 32 767, то генерация двух случайных целых чисел и умножение их увеличивает пространство поиска до 32 767 ^ 2 = 1 071 711 169

Я неэксперт по безопасности, поэтому мне любопытно, если мой подход достаточно безопасен, если нет, то какие подходы лучше?

Ответы [ 2 ]

3 голосов
/ 13 апреля 2019

Нет, это небезопасно. Есть несколько проблем:

  • Bash использует простой линейный генератор случайных чисел, поэтому он не является строго случайным
  • Bash заполняет этот генератор временем дня и pid, поэтому, если вы точно знаете, когда был сгенерирован пароль (даже только год), вы уже значительно уменьшите пространство поиска.
  • Умножение двух чисел на 0..n не дает n ^ 2 возможностей, потому что 1 * 16 = 2 * 8 = 4 * 4 = 8 * 2 = 16 * 1. Быстрая программа показывает, что для двух чисел 0..32768 у вас есть 232 483 839 возможных продуктов.
  • Даже если вы исправили это и получили 1 071 711 169 возможностей, это эквивалентно всего 5 буквенно-цифровым символам и может быть взломано довольно быстро, если кто-нибудь знает вашу схему генерации пароля.
3 голосов
/ 13 апреля 2019

Безопасный способ создать пароль любой требуемой длины, скажем, 20 символов и состоящий только из буквенно-цифровых символов:

cat /dev/random | tr -dc '[:alnum:]' | head -c 20

Если /dev/random слишком медленно для вашего вкуса, следующее быстро и, вероятно, более чем достаточно:

cat /dev/urandom | tr -dc '[:alnum:]' | head -c 20

Это имеет преимущества перед md5sum, потому что (a) он использует все буквенные символы, а не только a-f, и (b) он производит как верхний, так и нижний регистр.

Для обсуждения безопасности и urandom против random см. Этот пост: "Когда использовать / dev / random vs /dev/urandom".

...