Cara menyimpan hash kata sandi di mysql

Adobe mengalami pelanggaran data yang memengaruhi setidaknya 38 juta pengguna pada Oktober 2013. Tiga juta kartu kredit pelanggan terenkripsi dan kredensial masuk untuk sejumlah pengguna yang tidak diketahui terungkap. Tautan

Antipola. Jangan simpan kata sandi dalam teks biasa

Biasanya, kata sandi disimpan di beberapa tabel sebagai kolom atribut string. Kata sandi tidak boleh disimpan atau diteruskan melalui jaringan dalam teks yang jelas

Jika penyerang dapat membaca pernyataan SQL yang Anda gunakan untuk memasukkan kata sandi, mereka dapat melihat kata sandi secara langsung. Ini juga berlaku untuk pernyataan SQL yang digunakan untuk mengubah kata sandi atau memverifikasi bahwa input pengguna cocok dengan kata sandi yang disimpan

Meskipun kedengarannya konyol, ada situs web yang menyimpan kata sandi pengguna dalam teks biasa

Cupid Media meretas 42m tautan kata sandi kencan online

Peretas memiliki beberapa opsi untuk mencuri kata sandi, termasuk

  • Saat pernyataan SQL dikirim dari aplikasi ke server basis data, paket jaringan dicegat
  • Menganalisis log kueri SQL di server basis data. Dengan asumsi penyerang memiliki akses ke host server basis data, mereka mungkin dapat mengakses file log yang merekam pernyataan SQL yang dijalankan oleh server basis data
  • Baca data dari file cadangan basis data di server atau di media cadangan

Mengirim Kata Sandi di Email

Kata sandi disimpan dalam teks biasa di database, jadi mudah untuk mengambilnya di aplikasi Anda. Atas permintaan, aplikasi Anda dapat mengirim email ke alamat email pengguna. Mengirim kata sandi melalui email dalam teks biasa merupakan risiko keamanan yang serius. Dalam berbagai cara, peretas dapat mencegat, mencatat, dan menyimpan email

Antipola. Jangan simpan kata sandi terenkripsi

Kedengarannya jauh lebih baik untuk mengenkripsi kata sandi. Tapi tunggu dulu. Karena algoritme dapat dibalik, karena penyerang memiliki akses ke kata sandi terenkripsi dan dengan beberapa teks biasa dan bentuk terenkripsinya, dia dapat menebak logika enkripsi dan membalikkannya. Tidak peduli seberapa rumit algoritmenya, semua kata sandi akan dibalik secepat dalam teks biasa jika berhasil

Antipola. Ancaman Nyata menyimpan kata sandi yang dapat dipulihkan

Aplikasi yang dapat memulihkan kata sandi Anda dan mengirimkannya kepada Anda harus menyimpannya dalam teks biasa atau setidaknya dengan beberapa bentuk penyandian yang dapat dibalik. Peretas dapat membaca kata sandi secara ilegal jika aplikasi Anda dapat membaca kata sandi untuk tujuan yang sah

Berikut ini adalah praktik terbaik

  1. Kata sandi tidak boleh dipulihkan dari database
  2. Panjang kata sandi tidak boleh ditebak dari database
  3. Hash yang berbeda harus digunakan untuk kata sandi yang sama, atau serupa

Mencirikan sandi

Menurut persyaratan di atas, kata sandi pengguna tidak boleh dipulihkan dari database

Gunakan fungsi hash kriptografi satu arah untuk menyandikan kata sandi. Fungsi hash mengubah string input menjadi string yang tidak dapat dikenali, disebut hash

Karakteristik lain dari hash adalah tidak dapat dibalik. String input tidak dapat dipulihkan dari hashnya karena algoritme hashing dirancang untuk "kehilangan" beberapa informasi tentangnya. Algoritme hashing yang baik harus berusaha keras untuk memecahkannya karena mereka akan menebak inputnya dengan coba-coba

Dalam persyaratan dua di atas, ditentukan bahwa database tidak boleh memberikan petunjuk apa pun tentang panjang kata sandi

Karena hash yang dikembalikan oleh fungsi hash adalah string dengan panjang tetap, bahkan panjang string aslinya pun dikaburkan

Kelemahan dari pendekatan ini

Bahkan jika Anda menyimpan hash alih-alih kata sandi dan penyerang mendapatkan akses ke database Anda, dia masih dapat menggunakan kekerasan untuk mencoba menebak kata sandi. Mungkin perlu waktu lama baginya untuk menebak setiap kata sandi. Namun, dia dapat membuat database hash dari kemungkinan kata sandi untuk membandingkan hash di database Anda. Itu bergantung pada tabel yang telah dihitung sebelumnya yang dikenal sebagai tabel Rainbow, yang merupakan pendekatan untuk membalikkan fungsi hash kriptografi.

Bayangkan Anda adalah seorang peretas yang baru saja mencuri 38 juta hash dari Adobe. Anda dapat memeriksa hash tersebut di tabel pelangi, dan jika cocok, tabel pelangi juga akan berisi string asalnya, mengambilnya untuk Anda

Antipola. Fungsi Hash Usang

Kata sandi sering disimpan menggunakan fungsi kriptografi usang yang tidak dapat diubah (MD5, SHA1, dll)

Peretasan LinkedIn 2012 mengacu pada peretasan komputer LinkedIn pada 5 Juni 2012. Kata sandi untuk hampir 6. 5 juta akun pengguna dicuri. Pada Mei 2016, LinkedIn menemukan 100 juta alamat email tambahan dan kata sandi hash yang diklaim sebagai data tambahan dari pelanggaran tahun 2012 yang sama. Tautan

Direkomendasikan. Salting dan Hashing Password

Sesuai dengan persyaratan tiga di atas, identik, atau bahkan serupa, kata sandi harus memiliki hash yang berbeda

Anda dapat mengalahkan "serangan kamus" semacam ini dengan memasukkan garam dalam ekspresi pengkodean kata sandi Anda. Garam adalah serangkaian byte tidak berarti yang Anda gabungkan dengan kata sandi pengguna sebelum meneruskan hasilnya ke fungsi hash. Hash yang dihasilkan oleh kata sandi asin tidak akan cocok dengan hash di basis data hash penyerang, bahkan jika pengguna memilih kata dalam kamus sebagai kata sandinya

Nilai garam harus berbeda di antara kata sandi sehingga penyerang harus membuat tabel kamus hash baru untuk setiap kata sandi. Dia kemudian kembali ke titik awal

Jika seorang peretas mengetahui garamnya, dapatkah dia mengambil kata sandinya? . Anda dapat meng-hash garam jika Anda mau, tetapi mengetahui garam tidak akan membahayakan kata sandi dengan cara apa pun. Anda harus membuat tabel baru untuk setiap garam jika Anda mencoba menggunakan serangan meja pelangi

Gunakan hanya hash dalam kueri SQL Anda dan hitung hash dalam kode aplikasi Anda. Mencegat hash membuat penyerang sedikit baik karena dia tidak bisa membalikkannya untuk mendapatkan kata sandi

Kelemahan dari pendekatan ini

Apakah pendekatan ini benar-benar sangat mudah?

Apa solusi yang lebih baik?

Paling Direkomendasikan. Salting dan Hashing dengan Hitungan Iterasi

Hitungan iterasi pada dasarnya adalah hashing apa yang telah di-hash sebelumnya sebanyak n kali. Menggunakan kata sandi itu, sistem menghasilkan garam unik untuk pengguna itu dan menggabungkan keduanya. Ini kemudian menggabungkan hash yang dihasilkan dengan garam yang dihasilkan secara acak dan melakukan hash lagi sebanyak n kali

Ini akan menambah keamanan ekstra pada teknik dasar "hashing and salting". Ini jelas akan memakan waktu lebih lama

PBKDF2, yang merupakan singkatan dari Password-Based Key Derivation Function 2, adalah contoh dari teknik ini. Fungsi menerapkan fungsi pseudorandom dan nilai garam ke kata sandi masukan dan kemudian mengulangi proses n kali untuk menghasilkan kunci yang diturunkan

Ini adalah bagaimana PBKDF2 didefinisikan

DK = PBKDF2(PRF, Password, Salt, c, dkLen)
* PRF : pseudorandom function of two parameters with output length hLen (e.g., a keyed HMAC) 
* Password : master password from which a derived key is generated
* Salt : sequence of bits, known as a cryptographic salt
* c : number of iterations desired
* dkLen : desired bit-length of the derived key
* DK : generated derived key

Teknik seperti ini jauh lebih lambat daripada fungsi hash biasa. Merupakan keuntungan jika seseorang mencoba memaksa kata sandi, tetapi harus cukup cepat sehingga pengguna tidak melihat adanya penundaan

Keamanan Tambahan. Penggunaan Lada

Garam dapat dikombinasikan dengan lada untuk meningkatkan perlindungan, tetapi lada umum digunakan oleh semua pengguna. Data merica ini tidak disimpan di database, tetapi di sumber aplikasi, di file konfigurasi, atau di variabel lingkungan. Setelah memahami database, penyerang harus menebak lada atau mengambilnya dengan cara lain untuk memecahkan hash

Kata Sandi Dapat Direset Bukan Dipulihkan

Terlepas dari kenyataan bahwa kata sandi disimpan dengan cara yang lebih aman, Anda tetap perlu membantu pengguna yang lupa kata sandinya. Basis data Anda sekarang menyimpan hash alih-alih kata sandinya, jadi Anda tidak dapat memulihkannya. Hash tidak dapat dibalik lebih mudah daripada penyerang

Namun, Anda dapat mengizinkan pengguna mengakses dengan cara lain

Sebagai alternatif pertama, ketika pengguna yang lupa kata sandinya meminta bantuan, alih-alih mengirimkan kata sandinya melalui email, aplikasi dapat mengirim email berisi kata sandi sementara yang dibuat olehnya. Selain itu, aplikasi dapat kedaluwarsa kata sandi sementara setelah beberapa saat, jadi jika email dicegat, kemungkinan besar tidak akan mengizinkan akses tidak sah. Aplikasi juga harus dirancang sedemikian rupa sehingga hal pertama yang dilakukan pengguna setelah masuk adalah mengubah kata sandinya

Sebagai alternatif kedua, alih-alih menyertakan kata sandi baru di email, token unik diberikan ke permintaan di tabel database. Setelah itu, token dimasukkan ke dalam email. Token juga dapat dikirim melalui pesan lain, seperti SMS, selama alamat tersebut dikaitkan dengan akun yang meminta pengaturan ulang kata sandi. Akibatnya, jika orang yang tidak berwenang meminta reset kata sandi, pemilik akun hanya akan menerima email fiktif. Jika aplikasi menerima permintaan untuk layar reset_password khusus, nilai dalam parameter token harus sesuai dengan baris dalam tabel PasswordResetRequest, dan stempel waktu kedaluwarsa masih harus mendatang

Di mana hash kata sandi MySQL disimpan?

Hash kata sandi disimpan di tabel pengguna database mysql . File tabel itu sendiri biasanya disimpan dalam struktur pohon di bawah /var/lib/mysql , tetapi lokasi tersebut dapat dimodifikasi dengan opsi build atau konfigurasi run-time.

Bisakah MySQL hash kata sandi?

Fungsi PASSWORD MySQL digunakan untuk pembuatan kata sandi hash menggunakan string kata sandi teks biasa Ini menggunakan teknik hashing untuk menghasilkan kata sandi hash. This function is carried out by the authentication system.

Bagaimana hash kata sandi disimpan?

Hash kata sandi Windows disimpan dalam file SAM ; . Jika seorang hacker dapat mengakses kedua file ini (disimpan di C. WindowsSystem32Config), maka file SYSTEM dapat digunakan untuk mendekripsi hash kata sandi yang disimpan dalam file SAM.

Bagaimana kata sandi disimpan di MySQL?

Kata sandi MySQL untuk pengguna disimpan di dalam MySQL itu sendiri; . tabel pengguna . Kata sandi di-hash secara default menggunakan fungsi PASSWORD(), namun ada alternatif lain, meskipun tidak ada teks biasa.