Beberapa kali saya mencoba untuk mengubah kata sandi pengguna di berbagai mesin Linux dan ketika kata sandi baru mirip dengan yang lama, OS mengeluh bahwa mereka terlalu mirip.
Saya selalu bertanya-tanya, bagaimana sistem mengetahui hal ini? Saya pikir kata sandi disimpan sebagai hash. Apakah ini berarti bahwa ketika sistem dapat membandingkan kata sandi baru untuk kesamaan, yang lama sebenarnya disimpan sebagai teks biasa?
Jawaban:
Karena Anda perlu memasukkan kata sandi lama dan kata sandi baru saat digunakan
passwd
, kata sandi tersebut dapat dengan mudah dibandingkan dalam plaintext, dalam memori, tanpa menuliskannya di drive.Memang kata sandi Anda di-hash ketika akhirnya disimpan, tetapi sampai itu terjadi, alat tempat Anda memasukkan kata sandi tentu saja dapat mengaksesnya secara langsung seperti program lain yang dapat mengakses hal-hal yang Anda masukkan pada keyboard saat membaca dari STDIN.
Ini adalah fitur sistem PAM yang digunakan di latar belakang
passwd
alat. PAM digunakan oleh distribusi Linux modern.Lebih khusus lagi,
pam_cracklib
adalah modul untuk PAM yang memungkinkan untuk menolak kata sandi berdasarkan beberapa kelemahan yang akan membuatnya sangat rentan.Bukan hanya kata sandi yang terlalu mirip yang dapat dianggap tidak aman. The kode sumber memiliki berbagai contoh dari apa yang dapat diperiksa, misalnya apakah password adalah palindrom atau apa mengedit jarak antara dua kata. Idenya adalah untuk membuat kata sandi lebih tahan terhadap serangan kamus.
Lihat juga halaman
pam_cracklib
manual.sumber
Setidaknya di Ubuntu saya, pesan "terlalu mirip" muncul
ketika: "... lebih dari separuh karakter adalah yang berbeda ...." (lihat detail di bawah).terima kasih atas dukungan PAM, sebagaimana dijelaskan dengan jelas dalam jawaban @slhck.Untuk platform lain, di mana PAM tidak digunakan, pesan "terlalu mirip" keluar ketika: "... lebih dari separuh karakter adalah yang berbeda ...." (lihat detail di bawah)
Untuk lebih lanjut memeriksa pernyataan ini sendiri, dimungkinkan untuk memeriksa kode sumber. Begini caranya.
Program "passwd" termasuk dalam paket passwd:
Saat kita berhadapan dengan teknologi Open Source, kita memiliki akses tidak terbatas ke kode sumber. Mendapatkannya sesederhana:
Setelah itu mudah untuk menemukan bagian kode yang relevan:
Pemeriksaan cepat ke "obscure.c" memberikan ini (saya hanya memotong dan menempelkan potongan kode yang relevan):
Jadi, sekarang, kita tahu bahwa ada fungsi "mirip" yang didasarkan pada yang lama dan yang baru memeriksa apakah keduanya mirip. Berikut cuplikannya:
Saya belum meninjau kode C. Saya membatasi diri dalam mempercayai komentar sebelum definisi fungsi :-)
Perbedaan antara platform yang sadar PAM dan NON-PAM didefinisikan dalam file "obscure.c" yang terstruktur seperti:
sumber
passwd
meminta kata sandi lama dan baru adalah jawabannya . Sisa dari jawaban ini tidak relevan.Jawabannya jauh lebih sederhana dari yang Anda pikirkan. Bahkan, hampir memenuhi syarat sebagai sihir, karena begitu Anda menjelaskan triknya, itu akan hilang:
Ia tahu kata sandi baru Anda mirip ... Karena Anda mengetik yang lama hanya beberapa saat sebelumnya.
sumber
Meskipun jawaban lain benar, mungkin perlu disebutkan bahwa Anda tidak perlu memberikan kata sandi lama agar ini berfungsi!
Bahkan, seseorang dapat menghasilkan banyak kata sandi yang mirip dengan kata sandi baru yang Anda berikan, memotongnya, dan kemudian memeriksa apakah hash ini cocok dengan yang lama. Jika ini masalahnya, maka kata sandi baru dinilai mirip dengan yang lama! :)
sumber
n
)62 * (n!)/(6 * (n - 3)!)
, yang sama dengan 13540 untuk 12 karakter kata sandi panjang. Tetapi jika ada yang berpikir tentang sesuatu yang berbeda, persamaan itu tidak berguna, jadi mengapa repot-repot?Satu aspek tidak dicakup: riwayat kata sandi. Beberapa sistem mendukung hal ini. Untuk melakukan itu, ia menyimpan riwayat kata sandi dan mengenkripsi mereka dengan kata sandi saat ini. Ketika Anda mengubah kata sandi Anda, kata sandi itu menggunakan kata sandi "lama" untuk mendekripsi daftar dan memverifikasi. Dan ketika menetapkan kata sandi baru, itu memang menyimpan daftar (lagi) yang dienkripsi dengan kunci yang berasal dari kata sandi baru.
Ini adalah cara
remember=N
kerjanya di PAM (disimpan di/etc/security/opasswd
). Tetapi juga Windows dan vendor Unix lainnya menawarkan fungsi serupa.sumber