Bagaimana string acak M1uG*xgRCthKWwjIjWc*010iSthY9buc
yang terdeteksi terlalu sederhana / sistematis untuk kata sandi menurut passwd dan cracklib-check ? Cobalah di mesin Anda dan lihat
echo "M1uG*xgRCthKWwjIjWc*010iSthY9buc" | cracklib-check
Perhatikan bahwa ini bukan kata sandi saya, tetapi string lain yang dihasilkan secara acak dari generator kata sandi acak yang sama yang menghasilkan hasil yang sama.
M1uG*xgRCthKWwjIjWc*010iSthY9buc: OK
/dev/urandom
untuk menghasilkan kata sandi?Jawaban:
Karena cracklib adalah open source, jawabannya dapat ditemukan dalam kode sumber .
"Terlalu sederhana / sistematis" berarti ada terlalu banyak karakter yang didahului oleh salah satu tetangga alfabet mereka. Karenanya "ab" atau "ba" dianggap buruk, tetapi "ac" atau "ca" tidak apa-apa karena b dihilangkan.
Sebelum tambalan ini dari 2010-03-02 , ini memungkinkan paling banyak empat karakter yang menunjukkan sifat ini. Misalnya, "bar12345" akan gagal, karena karakter "a", "2", "3", "4" dan "5" adalah tetangga alfabet dari karakter sebelumnya.
slm menemukan dalam jawabannya
M1uG*xgRCthKWwjIjWc*010iS
itu OK, sementaraM1uG*xgRCthKWwjIjWc*010iSt
tidak. Mari kita analisa. Berikut adalah karakter yang menurut cracklib-check adalah indikasi kata sandi sistematis:yang di bawah maksimal empat, tetapi menambahkan t:
mendorongnya di atas batas, karena T mengikuti S (tampaknya tes peka huruf besar kecil).
Tambalan mengubah batas maks sehingga tergantung pada panjang kata sandi total, untuk menghindari kesalahan positif seperti ini.
sumber
Ww
)?Pada Fedora 19
Ketika saya menjalankannya saya mendapatkan OK. Saya menggunakan Fedora 19.
Inilah info versi:
CATATAN: Saya akan mencobanya dengan tanda kutip tunggal alih-alih double qutoes juga karena Anda sedang berhadapan dengan
*
itu, mereka mungkin akan diperluas dengan cara yang aneh pada Anda.CentOS 5 & 6
Mencoba contoh Anda di CentOS 6 baik-baik saja, mendapat nilai OK, tetapi gagal seperti yang Anda jelaskan pada CentOS 5.9.
Informasi versi:
Bug?
Apa yang Anda temukan sepertinya adalah bug. Jika Anda mengambil string Anda dan menjalankan lebih banyak string
cracklib-check
Anda ke dalam Anda akan melihat bahwa ketika Anda sampai ke karakter ke-26 itu mulai gagal:Menggali lebih dalam tentang ini jika saya mengubah karakter terakhir dari a
t
untuk mengatakanv
itu terus bekerja.Jadi akan terlihat bahwa dalam versi
cracklib-check
semakin terpaku pada substringSth
.Pasti ada sesuatu yang aneh tentang potongan string yang Anda berikan. Jika saya mengambil bagian ujung ekor dan menghilangkan bagian depan saya bisa mendapatkan bagian ini gagal juga.
String yang sama menyebabkan masalah pada Fedora 19 & CentOS 6 juga!
PEMBARUAN # 1Berdasarkan sleuthing @ waxwing yang sangat bagus, kita sekarang tahu bahwa heuristik yang digunakan tersandung jika> 4 karakter terlalu berdekatan satu sama lain. Sebuah tambalan diperkenalkan yang mengubah heuristik ini sehingga panjang keseluruhan kata sandi yang dipertimbangkan dipertimbangkan untuk menghilangkan positif palsu ini.
Kesimpulannya?
Berdasarkan beberapa pengujian terbatas saya, akan muncul bahwa ada beberapa heuristik aneh yang dimainkan di sini. String tertentu yang tampaknya akan baik-baik saja tersandung.
Jika Anda mencoba untuk mengkodifikasikan ini, saya akan menyarankan membungkus generasi & evaluasi kata sandi dan kemudian keluar dari loop setelah kata sandi telah dibuat yang sesuai
cracklib-check
.Atau paling tidak saya sarankan memperbarui ke versi yang lebih baru yang mencakup perbaikan yang @maxwing sebutkan dalam jawabannya.
Alternatif Gen Kata Sandi
pwgenSaya juga akan menambahkan yang biasanya saya gunakan
urandompwgen
untuk menghasilkan kata sandi. Itu mungkin membantu Anda di sini juga.Anda juga dapat menggunakan sihir scripting kecil dengan
tr
,/dev/urandom
, danfold
untuk mendapatkan password acak kualitas yang sangat tinggi.The
fold
perintah dapat mengontrol panjang. Sebagai alternatif, Anda juga dapat melakukan ini:sumber
Tm7U:n=@*+4$*gf$6hOngEHJ;mnh$+R6
itu baik-baik saja pada mesin yang sama.