Bagaimana hash kata sandi disandikan dalam file kata sandi bayangan?


11

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.


Pertanyaan Anda sangat terkait dengan pertanyaan ini.
Broam

Jawaban:


11

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:

  • status MD5 (128 bit) dikocok dan dipecah menjadi 6 grup, masing-masing berisi 3 byte (grup terakhir berisi 2 byte dari zero-padding)
  • setiap kelompok 3 byte kemudian dibagi menjadi 4 blok masing-masing 6 bit
  • Akhirnya, setiap grup 6-bit dipetakan ke karakter dalam kisaran [a-zA-Z0-9./]

8

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.



2

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'.

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.