Як створити надійні паролі в 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:]для 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 і вам також потрібно зберігати паролі для різних облікових записів, ви можете спробувати диспетчер паролів Одкровення . Він має основну функцію генератора паролів: ви встановлюєте лише довжину пароля і вибираєте, чи не включати розділові знаки, крім букв і цифр.


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.