Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Apakah membandingkan string di MySQL rentan terhadap serangan waktu?

Ya, perbandingan string (dan/atau pencarian indeks) mungkin, pada prinsipnya, membocorkan berapa banyak byte awal yang identik dari hash kata sandi yang disimpan dalam database dan yang dihitung dari pembagian kata sandi yang dimasukkan.

Pada prinsipnya, penyerang dapat menggunakan ini untuk mempelajari prefiks hash kata sandi secara iteratif, byte demi byte:pertama mereka menemukan hash yang berbagi byte pertamanya dengan hash di database, lalu hash yang membagikan dua byte, dan seterusnya.

Tidak, ini hampir pasti tidak masalah.

Mengapa? Karena beberapa alasan:

  1. Serangan waktu mungkin memungkinkan penyerang mempelajari bagian dari hash kata sandi pengguna. Skema hashing sandi yang dirancang dengan baik (menggunakan garam dan peregangan kunci ), bagaimanapun, harus tetap aman (dengan asumsi, tentu saja, bahwa kata sandi itu sendiri tidak mudah ditebak) bahkan jika penyerang mengetahui seluruh hash kata sandi. Jadi, bahkan jika serangan waktu berhasil, kata sandi itu sendiri akan aman.

  2. Untuk melakukan serangan, penyerang harus mengirimkan kata sandi yang nilai hashnya mereka ketahui. Nilai hash tergantung pada garam. Jadi, kecuali penyerang entah bagaimana sudah mengetahui garamnya, serangan ini tidak mungkin dilakukan.

    (Memang benar bahwa, di sebagian besar analisis keamanan skema hashing kata sandi, garam diasumsikan sebagai informasi publik. Namun, ini hanya karena analisis tersebut mengasumsikan skenario terburuk yang disebutkan di atas, di mana penyerang telah memperoleh salinan seluruh basis data pengguna, garam dan hash dan semuanya. Jika penyerang belum mengetahui hash, tidak ada alasan untuk berasumsi bahwa mereka akan mengetahui garam.)

  3. Bahkan jika penyerang mengetahui garamnya, untuk melakukan serangan berulang yang dijelaskan di atas, mereka harus membuat kata sandi yang hash ke nilai dengan awalan yang diinginkan. Untuk fungsi hash aman apa pun, satu-satunya cara praktis untuk melakukannya adalah dengan mencoba-coba kesalahan, yang berarti bahwa waktu yang diperlukan untuk melakukannya akan diskalakan secara eksponensial dengan panjang awalan.

    Apa artinya ini dalam praktiknya adalah, untuk mengekstrak cukup banyak bit hash untuk dapat melakukan serangan brute force offline terhadapnya (yang tidak perlu semuanya; hanya lebih dari jumlah entropi yang efektif dalam sandi), penyerang perlu melakukan komputasi sebanyak yang diperlukan untuk memecahkan sandi itu sendiri. Untuk skema hashing kata sandi yang dirancang dengan baik, dan kata sandi yang dipilih dengan aman, ini tidak layak.

  4. Apa serangan berulang bisa memberi penyerang, pada prinsipnya, adalah kemampuan untuk melakukan sebagian besar perhitungan brute force secara lokal di akhir mereka, sementara hanya mengirimkan sejumlah kecil kata sandi ke sistem Anda. Namun, bahkan ini hanya berlaku jika mereka menerima kembali informasi waktu yang terperinci dan dapat diandalkan dari setiap kata sandi dikirimkan. Dalam praktiknya, serangan waktu nyata sangat tidak efisien , dan memerlukan banyak (seringkali ribuan atau jutaan) kueri untuk menghasilkan apa saja informasi yang berguna sama sekali. Ini kemungkinan besar akan membatalkan potensi keuntungan kinerja yang dapat diberikan oleh serangan waktu kepada penyerang.

    Poin ini diperkuat Anda menggunakan skema hashing password peregangan kunci yang tepat, karena skema tersebut sengaja dirancang untuk menjadi lambat. Dengan demikian, perbandingan string dalam database kemungkinan akan memakan waktu yang dapat diabaikan dibandingkan dengan hashing kata sandi di tempat pertama, dan setiap variasi waktu yang disebabkan olehnya akan hilang dalam kebisingan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql jika tidak ada

  2. MySQL CHECK alternatif kendala

  3. Ambil berapa lama waktu yang dibutuhkan untuk membuat koneksi dengan PHP mysqli_real_connect()

  4. Cara Menampilkan Kolasi Kolom di MySQL

  5. Mendapatkan kesalahan Saat mencoba Mengisi Dropdown HTML Dengan data Mysql di Jawa?