Bagaimana cara membuat kata sandi yang kuat di Linux?


24

Saya bertanya-tanya bagaimana saya dapat membuat kata sandi yang kuat di Linux (untuk pengguna normal dan admin) dan apakah ada program khusus untuk melakukannya.

Jawaban:



16

Secara pribadi, saya lebih suka untuk tidak menggunakan pembuat kata sandi karena kata sandi yang dihasilkan sangat sulit untuk diingat, tetapi satu solusi portabel adalah menggunakan / dev / urandom

Membuat kata sandi acak yang tidak mengandung karakter khusus, panjangnya 10 karakter:

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

Ini berfungsi dengan mengambil byte dari / dev / urandom, menghapus yang tidak sesuai dengan pola yang ditentukan dalam trperintah, dan membatasinya menjadi 10 karakter head.

Membuat kata sandi acak yang berisi karakter khusus, panjangnya 10 karakter:

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

Ini menggunakan teknik yang sedikit berbeda setelah trmenghapus byte yang tidak diinginkan, karena idenya adalah memaksanya untuk memiliki setidaknya satu karakter khusus. Ini bekerja dengan menggunakan foldperintah untuk membungkus garis menjadi kelompok-kelompok 10, kemudian menggunakan grepuntuk mengambil hanya garis yang berisi karakter khusus. headlalu mengambil kata sandi pertama yang memenuhi persyaratan.


1
Anda juga dapat menggunakan [:print:]for tr( tr -dc '[:print:]'), jika Anda sedikit paranoid. Masalahnya kemudian adalah simbol yang tersedia di keyboard Anda ...
lgeorget

11

Saya menulis skrip kecil ini beberapa tahun yang lalu dan telah menggunakannya sejak itu. Jika ada, ini merupakan pelecehan menarik printfdan menggunakan fitur indah BASH bahwa saya sayangnya jarang melihat dalam skrip: 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

Terima kasih untuk skrip Aaron !!!
Gasuma

4

Saya juga menambahkan KeePassX yang memberi Anda pilihan untuk menggunakan entropi sistem untuk menghasilkan kata sandi yang kuat dengan beberapa fitur bagus - semuanya menggunakan GUI. Ini juga memberi Anda opsi untuk mengelola kata sandi Anda, dan menyimpannya ke file yang dienkripsi.

Ini adalah bagaimana antarmuka penghasil kata sandi KPX:

masukkan deskripsi gambar di sini


3

apg bukan pilihan yang buruk jika Anda menginginkan kata sandi yang mudah diingat.

; 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)

Perhatikan bahwa berdasarkan ini , kata sandi Anda setidaknya harus sepanjang 12 karakter.


2

Saya menggunakan non-acak, tetapi cukup bervariasi untuk semua tujuan serangan ... kata sandi utama, dan pass terakhir untuk menghasilkan kata sandi lain. Inilah cara saya menghasilkan kata sandi utama.

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

dan hasilnya

H1sI Wpbj JE2P CdVJ A1qb 9B/e u7M= 

sekarang cukup pilih beberapa bagian dan buat kata sandi, atur ulang, tinggalkan beberapa, tambahkan karakter atau 2 untuk menjadikannya sebagus acak. Selama Anda dapat mengingat seed Anda, Anda dapat membuat ulang ini, dan memulihkan kata sandi Anda (selama Anda tidak membuat terlalu banyak modifikasi)


1

pwgen adalah alat cli kecil yang bagus yang memungkinkan Anda menentukan sejumlah parameter untuk mengatur kerumitan, kelas karakter jumlah kata sandi untuk dihasilkan, panjang, dll.


1

Berikut ini skrip satu kali untuk membuat frasa sandi gaya XKCD. /usr/share/dict/wordsbukan kamus yang bagus untuk ini karena sebagian besar kata-katanya panjang, tetapi mudah tersedia. Untuk frasa sandi yang lebih bagus, Anda dapat menggunakan kamus kata-kata pendek seperti daftar kata sandi S / Kunci Satu Kali .

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

Jika Anda adalah pengguna GNOME dan Anda juga perlu menyimpan kata sandi untuk berbagai akun Anda, Anda dapat mencoba pengelola kata sandi Penyingkapan . Ini memiliki fitur penghasil kata sandi dasar, di mana Anda hanya mengatur panjang kata sandi dan memilih untuk memasukkan karakter tanda baca selain huruf dan angka.


0

Perbaiki saya jika saya salah, tetapi: Sejauh yang saya mengerti, tidak mungkin komputer dapat menghasilkan string yang benar-benar acak. Jadi saya datang dengan ide berikut [dan berharap itu tidak sepenuhnya bodoh]:

Jika seseorang melempar dadu 26 sisi, kesempatan untuk melempar, katakanlah 26 adalah 1:26. Dengan kata lain: Peluang untuk melempar 26 adalah sekitar 0,04%. Selanjutnya, dadu tidak memiliki memori dan tidak ada bug. Saya datang dengan ide berikut:

  • dapatkan 26 dadu sisi, di mana masing-masing pihak cocok dengan huruf alfabet
  • dapatkan dadu bersisi sepuluh di mana masing-masing pihak mencocokkan angka antara 0 dan 9
  • Lempar koin
  • kepala berarti: melempar dadu surat
  • ekor berarti: lempar angka dadu

Model Kertas untuk dicetak:

Catatan : Saya bukan Pro Matematika dan saya datang dengan ide ini setelah membaca sebuah artikel di 2600 majalah yang menggambarkan ini. Saya baru saja menambahkan beberapa ide saya sendiri pada konsep dasar.

Juga : Saya ingin tahu apakah ini bukan hanya contoh sempurna untuk ' menulis cracker kata sandi brute force pertama Anda '. Tetapi pertanyaan Anda memberi saya alasan yang sempurna untuk memunculkan ide ini untuk didiskusikan.


1
Sebenarnya ada beberapa cara untuk menghasilkan bit yang benar-benar acak. Misalnya menggunakan noise elektromagnetik dari HDD Anda atau variasi tingkat IO ... Apa yang diharapkan dengan generator yang disebut 'generator pseudorandom' adalah bahwa urutan yang mereka hasilkan tidak dapat dibedakan dari urutan acak yang benar oleh algoritma apa pun yang berjalan di waktu polinomial.
lgeorget

1
Anda mungkin tertarik dengan sistem Diceware. Ini mengikuti ide yang sama, tetapi hanya menggunakan dadu enam sisi. world.std.com/~reinhold/diceware.html
Jander

0

Saya memiliki dua alias yang ditambahkan ke file .zshrc.local saya untuk membuat kata sandi yang kuat.

Yang pertama adalah:

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

Output dari mengetik pw.graph adalah lima baris dari setiap karakter yang dapat diketik pada keyboard dengan pengecualian spasi:

/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?}

Yang kedua adalah:

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

Output dari mengetik pw.alnum adalah setiap huruf dan angka yang dapat dicetak baik huruf besar dan kecil:

E6wgCfVBbXjyzYQ8USKl79LqPih0e5mvGrNHd3osaW2OxkJ1RM4nFTtcuZIpDA
GTvQON1dsZSpJmegBMK6bqnEciU7k0AoV2H4Wh53zr9YRfLlDxywXItu8CjPFa
6u1Db9MfyBApZdU7gqoV2PGwH5LcxWi3JNj8nkQCIThezSlYEXsOtrmF04KvaR
VFrsGwI9yAmabEnlRTKgZO23vUq4f6LHkzQP7tMjNW8ph1exuDoBCXSd50JciY
G3r6Em5tlfjQARJx9gWHes7bCVwkzcP48KaSIXyUFBMLqT0op1uDNdih2nYZOv

Saya biasanya menggunakan pw.graph dan menyalin bagian acak dari baris tersebut. Beberapa kata sandi tidak mengizinkan simbol jadi saya menggunakan sebagian pw.alnum untuk itu.


0

Saya menggunakan ini disimpan sebagai file .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>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.