Мне нужен безопасный пароль с base91.

7 min

language: ja bn en es hi pt ru zh-cn zh-tw

Здравствуйте, я бездарь.
В последнее время я очень беспокоюсь, когда Chromium/Chrome предлагает автоматически создать пароль, поэтому я хочу создать что-то, что было бы достаточно простым и в некоторой степени обратимым.
Кстати, в случае с Artix Linux команда base91 не была установлена по умолчанию, поэтому предполагается, что вы выполнили yay -S base91.

Начнем с вывода

В итоге я решил генерировать пароли таким способом.

echo -n "string" | sha384sum | awk '{print $1}' | xxd -r -p | base91 | tr -d "\n" && echo

※Позже я подумал, что, возможно, awk '{printf $1}' было бы лучше.

Немного о размышлениях

Честно говоря, я довольно часто использовал строки, сгенерированные с помощью sha*sum, и был доволен их длиной. Поскольку сам хеш необратим, если он будет раскрыт, то это не так уж и страшно.
Однако сама по себе хешированная строка — это всего лишь шестнадцатеричная строка, поэтому при серьезной атаке методом перебора, если говорить о типах используемых символов, это будет [a-z0-9] согласно регулярным выражениям.

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

Что получится в данном случае

Давайте сначала разберем это:

echo -n "string"

Выводит строку без новой строки в стандартный вывод и передает ее дальше по конвейеру.

sha384sum

Хеширует полученную строку с помощью SHA384.

awk '{print $1}'

Форматирует полученную строку с помощью awk, так как лишняя строка - в конце не нужна.

xxd -r -p

Я сам узнал об этом, когда исследовал: он выводит шестнадцатеричную строку в двоичном формате.
Таким образом,
выводит полученную строку в двоичном формате.

base91

Кодирует полученные двоичные данные с помощью base91 и выводит их.

 tr -d "\n" && echo

Поскольку base91 автоматически форматирует вывод с новой строкой, удаляем символ новой строки, а затем, если операция успешна, выводим пустую строку в конце, так как без новой строки копировать и вставлять неудобно.
Вот что получается.

alleycat:[haturatu]:~/git/ckr/ckr$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
"OS[fY@wwBqip+$db@5+g!yvk$jE3,M3F({qu]1(_dS2Or()Q:ZqyhOb&9Y

На самом деле, я только что придумал это, поэтому неизвестно, насколько часто формы будут принимать такой пароль.
Длина строки, по крайней мере,

$ echo -n "a" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" | wc -c
59

Даже для очень короткой строки генерируется 59 символов.

Преимущества

Прежде всего, когда это генерируется с помощью xxd -r -p, это может быть сохранено как двоичные данные.
Таким образом, даже если вы забудете исходную string, вы сможете восстановить ее, если у вас есть двоичные данные.

Поэтапно это выглядит так:
sha384sum = необратимо
xxd -r -p = обратимо
base91 = обратимо
Или, скорее, это становится длиннее исходной парольной фразы, и разве не лучше сделать исходную парольную фразу необратимой на ранней стадии? Вот почему это так.

Более того, если сгенерировать таким образом, то, похоже, невозможно прочитать двоичные данные с помощью таких инструментов, как saslauthdb, или команды strings, используемой для отладки двоичных файлов.
Это безопаснее, чем хранить текстовые данные в открытом виде.

Вероятность коллизий при хешировании с помощью shasum крайне мала.
И поскольку это затем кодируется в формат Base91 из двоичных данных, это, вероятно, лучше, чем пароль, созданный моим собственным ограниченным умом.

Добавление функции в .bashrc

Честно говоря, вводить это каждый раз — это просто ад, поэтому

関数名() {
  echo -n "$1" | sha384sum | awk '{print $1}' | xxd -r -p | base91 |tr -d "\n" && echo
}

Я сделал так, чтобы можно было генерировать пароль с помощью 関数名 string.
Если даже это будет взломано, то, кажется, пора бросать быть человеком, или, скорее, бросать заниматься шифрованием...

И если вы хотите увеличить длину самой строки пароля, используемой на стороне сервера, вы можете использовать sha512; если вы хотите уменьшить ее с точки зрения символов, распознаваемых в bash, вы можете использовать base64.
Можно легко изменить это, модифицировать функцию соответствующим образом и добавить ее в .bashrc, верно?

Related Posts