Saya belajar tentang keamanan kata sandi Linux (lebih penasaran daripada apa pun yang berguna), dan saya mengerti bahwa kata sandi asli di-hash dan disimpan dalam file kata sandi bayangan. Apa yang saya tidak yakin, dan belum dapat menemukan di Googling singkat saya, adalah pengkodean apa yang digunakan untuk menyandikan nilai hash (dan nilai garam). Jelas bukan hex, dan itu jelas teks, tidak termasuk :
karakter. Adakah yang bisa memberi tahu saya tentang pengkodean itu di sini?
Sunting: Saya mengerti hashing (MD5, SHA-X), garam, dan specifier hashing. Yang saya cari adalah metode konversi hasil hash (array byte (byte [])) ke urutan karakter yang saya lihat dalam file, yaitu: pengkodean.
Jawaban:
Dalam kasus MD5 crypt (), garam hanya string acak hingga 8 karakter dari [a-zA-Z0-9./].
Garam dan kata sandi kemudian di-hash bersama-sama, melewati fungsi penguatan, kemudian disandikan menggunakan varian pada Base64:
sumber
Jika Anda hanya ingin tahu bagaimana kata sandi disandikan, crypt () menggunakan jenis penyandian tipe Base64 khusus.
Pengkodean Base64 menggunakan charset berikut: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /
Sementara pengkodean crypt () menggunakan charset ini: ./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Juga, tidak seperti Base64 tidak ada "=" padding.
Di sisi lain, implementasi crypt () dari MD5, SHA-X, dll melakukan lebih dari sekedar menghasilkan garam acak, menjalankan fungsi hash dan mengkodekannya menggunakan pengkodean sebelumnya.
Saya sarankan membaca dua posting hebat ini: "hashing kata sandi dengan MD5-crypt sehubungan dengan MD5" dan "Implementasi SHA512-crypt vs MD5-crypt" , untuk penjelasan yang lebih lengkap.
sumber
Bagian pertama dari hash di antara $ 's menunjukkan algoritma apa yang digunakan.
Lihatlah http://en.wikipedia.org/wiki/Crypt_%28Unix%29 untuk daftar apa arti dari nilai-nilai yang berbeda.
sumber
Apakah Anda mencari algoritma yang digunakan?
Secara tradisional, varian Unix dan Linux awal menggunakan DES yang lemah berdasarkan maksimum 8 karakter kata sandi. Kebanyakan instalasi Linux modern menggunakan hash MD5 untuk kata sandi, dan beberapa mendukung SHA. Selain itu, lebih banyak dukungan modular untuk algoritma tambahan telah muncul, termasuk Blowfish. GNU libc yang digunakan oleh sebagian besar Linux mendukung DES, MD5, dan SHA, memberi Anda beberapa opsi.
Jenis algoritma hash tertentu yang digunakan ditentukan sebagai awal kata sandi sebagai $ DIGIT $. Misalnya, $ 1 $ adalah MD5.
Anda bisa mendapatkan lebih banyak detail mendalam dari Wikipedia (lihat halaman di Crypt_ (Unix) ) atau google untuk 'crypt unix' atau 'crypt linux'.
sumber