Как создать надежные пароли в Linux?


24

Интересно, как я могу создавать надежные пароли в Linux (как для обычных пользователей, так и для пользователей с правами администратора) и существуют ли специальные программы для этого.

Ответы:



16

Лично я предпочитаю не использовать генератор паролей, так как сгенерированные пароли очень трудно запомнить, но одно портативное решение - использовать / dev / urandom

Создание случайных паролей, не содержащих специальных символов, длиной 10 символов:

$ cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 10` 
dyxJRKldvp

Это работает путем получения байтов из / dev / urandom, удаления тех, которые не соответствуют шаблону, указанному в trкоманде, и ограничения его до 10 символов с помощью head.

Создание случайных паролей, содержащих специальные символы, длиной 10 символов:

$ cat /dev/urandom | tr -dc 'a-zA-Z0-9-_!@#$%^&*()_+{}|:<>?=' | fold -w 10 | grep -i '[!@#$%^&*()_+{}|:<>?=]' | head -n 1
MSF4wj@vP0

Это использует немного другую технику после trудаления нежелательных байтов, поскольку идея состоит в том, чтобы заставить его иметь по крайней мере один специальный символ. Это работает с помощью foldкоманды, чтобы обернуть строку в группы по 10, а затем использовать grepдля выборки только те строки, которые содержат специальный символ. headзатем выбирает первый пароль, соответствующий требованиям.


1
Вы также можете использовать [:print:]for tr( tr -dc '[:print:]'), если вы немного параноик. Проблема тогда будет в символах, доступных на вашей клавиатуре ...
lgeorget

11

Я написал этот маленький сценарий несколько лет назад и с тех пор использую его. Во всяком случае, это интересное злоупотребление printfи использует прекрасную особенность BASH , что я , к сожалению , редко видеть в сценариях: typeset.

#!/usr/bin/env bash
# Released into public domain
# Aaron Bockover, 2005
# http://abock.org

typeset -i length; length=$1
typeset -i rounds; rounds=$2
[ $rounds -lt 1 ] && rounds=1
[ $length -lt 1 ] && {
    echo "Usage: $0 <length> [<rounds>]" 2>/dev/null; exit 1;
}
for ((i=0; i < $rounds; i++)); do
    for ((j=0; j < $length; j++)); do
        set=$(($RANDOM % 20))
        if   [ $set -le 6 ];  then o=65; l=26; # 35% uppercase
        elif [ $set -le 13 ]; then o=97; l=26; # 35% lowercase
        elif [ $set -le 17 ]; then o=48; l=10; # 20% numeric
        elif [ $set -le 18 ]; then o=58; l=7;  # 10% symbolic
        elif [ $set -le 19 ]; then o=33; l=15; fi
        ord=$(($o + $RANDOM % $l))
        printf \\$(($ord / 64 * 100 + $ord % 64 / 8 * 10 + $ord % 8))
    done
    echo
done

Спасибо за сценарий Аарона !!!
Гасума

4

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

Вот так выглядит интерфейс генератора паролей KPX:

введите описание изображения здесь


3

apg это не плохой выбор, если вы хотите пароль, который можно легко запомнить.

; apg -m 16 -a 0 -t
ByajNudgolIston9 (Byaj-Nud-gol-Ist-on-NINE)
Af}ockhuecUjrak8 (Af-RIGHT_BRACE-ock-huec-Uj-rak-EIGHT)
IakijKadmomIvgig (Iak-ij-Kad-mom-Iv-gig)
NutIlOsyahodBeef (Nut-Il-Os-ya-hod-Beef)
anMechOybekazell (an-Mech-Oyb-ek-az-ell)
VumushCummAd{fra (Vum-ush-Cumm-Ad-LEFT_BRACE-fra)

Обратите внимание, что в соответствии с этим , ваш пароль должен быть не менее 12 символов.


2

Я использую неслучайно, но достаточно разнообразен для всех целей атаки ... мастер-пароль и последний проход для генерации других паролей. Вот как я генерирую мастер-пароль.

echo -n "some seed" |  openssl dgst -binary -sha1 | base64 | sed -e 's/.\{4\}/& /g'

и выход

H1sI Wpbj JE2P CdVJ A1qb 9B/e u7M= 

Теперь просто выберите несколько разделов и создайте пароль, измените их, оставьте некоторые, добавьте символ или 2, чтобы сделать его случайным. Пока вы можете помнить свое семя, вы можете восстановить его и восстановить свой пароль (при условии, что вы не вносите слишком много изменений)


1

pwgen замечательный маленький инструмент Cli, который позволяет вам указать количество параметров для установки сложности, классы символов, количество генерируемых паролей, длину и т. д.


1

Вот одноразовый скрипт для генерации парольных фраз в стиле XKCD . /usr/share/dict/wordsне очень хороший словарь для этого, так как большинство слов длинные, но он легко доступен. Для более хороших парольных фраз вы можете использовать словарь коротких слов, такой как список одноразовых паролей S / Key .

dict="/usr/share/dict/words"
max="`wc -l <"$dict"`" \
    perl -e '$count=4;
        $/=\4; while (<>) {
            print unpack('L') % $ENV{max} + 1, qq(\n); last unless --$count
        }' /dev/urandom | 
    while read n ; do 
        tail -n "+$n" "$dict" | head -1
    done

0

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


0

Поправьте меня , если я ошибаюсь, но: Насколько я понял, нет нет способа компьютера может прийти с совершенно случайной строкой. Поэтому я пришел к следующей идее [и надеюсь, что это не совсем глупо]:

Если бросить 26-гранный кубик, шанс броска, скажем, 26, равен 1:26. Другими словами: шанс бросить 26 составляет около 0,04%. Кроме того, кости не имеют памяти и ошибок. Мне пришла в голову следующая идея:

  • получить 26 двусторонних кубиков, где каждая сторона соответствует букве алфавита
  • получить десять односторонних кубика, где каждая сторона соответствует числу от 0 до 9
  • бросить монетку
  • голова означает: бросить письмо в кости
  • Хвост означает: бросить число кубиков

Бумажные модели для распечатки:

Примечание : я не Math Pro, и я пришел к этой идее после прочтения статьи в журнале 2600, в которой это описано. Я только добавил некоторые из моих собственных идей относительно основной концепции.

Кроме того : мне интересно, не является ли это идеальным примером для « написания вашего первого взломщика паролей ». Но твой вопрос дал мне прекрасную причину для выдвижения этой идеи для обсуждения.


1
На самом деле есть несколько способов генерировать совершенно случайные биты. Например, используя электромагнитный шум от вашего жесткого диска или изменение скорости ввода-вывода ... То, что надеются с генераторами, называемыми «псевдослучайными генераторами», заключается в том, что выводимая ими последовательность не может быть отличена от истинной случайной последовательности любым алгоритмом, работающим в полиномиальное время
lgeorget

1
Вы можете быть заинтересованы в системе Diceware. Он следует аналогичной идее, но использует только шестигранные кости. world.std.com/~reinhold/diceware.html
Jander

0

У меня есть два псевдонима, добавленных в мой файл .zshrc.local для создания надежных паролей.

Первый:

alias pw.graph="cat /dev/urandom | tr -dc '[:graph:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"

Результат ввода pw.graph - пять строк каждого символа, которые можно набрать на клавиатуре, за исключением пробела:

/d=|&mRq!g$QaNZ'L;CfEli,D3\)*h-jkerzv?{y"_Ic(0BtxJwF59:@G}KV1X2o>S~[#]s+W%A.<6bpTO^uP7U4HMYn`8
RIdW87{a4O3][?&rTn=m/:Y`_u*hqy2c%s@!ZPM$5to1f-.U9ClK,)'jDi0"pw>EzN^|gX~BSAJk\VFG(H<bx}+Q6#vL;e
s^H@yEo/X$|d?_jw7-n'l>m"Cb\W5.tTe0APB1D!#69[p+(8x}F&~RM`q3Q%vhfOiUZz]ucJk:)*agGV;=NY4{,K2SLrI<
$/t|!s}og5u:X~hcJUyYHf>;l<zDedL`.T*K8]CBSW[(xw+Mm^E3r16b-97%'@jVR{ZG#0p4AP=,I?\n&"a)vqNkQ2iO_F
,7n|^Y\%MpeBqvhI3mE<9zPS/~+sU`4ZoCWl&uxd'ft"kjcOy0X!{a-T_6RKiVg5Hb21D)w>@*N8;A[(rLG=$Q:.#]FJ?}

Второе:

alias pw.alnum="cat /dev/urandom | tr -dc '[:alnum:]' | fold -w 1000 | perl -pe 's/(.)(?=.*?\1)//g' | head -n 5"

Вывод команды pw.alnum - это каждая печатная буква и цифра, прописные и строчные

E6wgCfVBbXjyzYQ8USKl79LqPih0e5mvGrNHd3osaW2OxkJ1RM4nFTtcuZIpDA
GTvQON1dsZSpJmegBMK6bqnEciU7k0AoV2H4Wh53zr9YRfLlDxywXItu8CjPFa
6u1Db9MfyBApZdU7gqoV2PGwH5LcxWi3JNj8nkQCIThezSlYEXsOtrmF04KvaR
VFrsGwI9yAmabEnlRTKgZO23vUq4f6LHkzQP7tMjNW8ph1exuDoBCXSd50JciY
G3r6Em5tlfjQARJx9gWHes7bCVwkzcP48KaSIXyUFBMLqT0op1uDNdih2nYZOv

Я обычно использую pw.graph и копирую случайную часть строки. Некоторые пароли не допускают символы, поэтому для этого я использую часть pw.alnum.


0

Я использую это как файл .html:

<script>
var keylist="abcdefghijklmnopqrstuvwxyzABCEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*_"
var temp=''

function generatepass(plength){
temp=''
for (i=0;i<plength;i++)
temp+=keylist.charAt(Math.floor(Math.random()*keylist.length))
return temp
}

function populateform(enterlength){
document.pgenerate.output.value=generatepass(enterlength)
}
</script>

<form name="pgenerate">
<input type="text" size=32 name="output">
<input type="button" value="Generate Password" onClick="populateform(this.form.thelength.value)"><br />
<b>Password Length:</b> <input type="text" name="thelength" size=3 value="32">
</form>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.