it-swarm-id.com

Apakah mungkin untuk menyimpan kata sandi secara aman menggunakan enkripsi yang dapat dibalik?

Semua orang mengatakan bahwa Anda perlu menggunakan hash yang tidak dapat dibalik ketika Anda menyimpan kata sandi sehingga meskipun database Anda bocor, kata sandinya sendiri masih aman. Saya bertanya-tanya apakah ada cara lain untuk menggunakan enkripsi yang dapat dibalik untuk menyimpan kata sandi.

Paling tidak, Anda harus mensyaratkan bahwa exploit apa pun yang bocor database (injeksi SQL, akses server Shell, dll.) Tidak membocorkan kunci enkripsi dan bahwa tidak mungkin untuk mengetahui kunci enkripsi menggunakan kata sandi plaintext yang dikenal jika Anda memiliki database yang bocor.

Saya tidak serius mempertimbangkan melakukan ini karena sepertinya bahkan jika secara teknis memungkinkan itu akan sulit dilakukan dengan benar, tetapi sepertinya masalah yang menarik.

23
Steve

Enkripsi yang dapat dibalik tidak umum digunakan untuk kata sandi karena persyaratan khusus dan parameter otentikasi kata sandi tidak kompatibel dengan kelemahan enkripsi yang dapat dibalik.

Kelemahan utama dari enkripsi yang dapat dibalik adalah sederhana: jika kuncinya dikompromikan, data yang dienkripsi dikompromikan, titik.

Kata sandi digunakan setiap saat, kapan pun pengguna masuk. Oleh karena itu, proses autentikasi harus dapat mengakses kredensial pengguna setiap saat, secara otomatis, tanpa kontrol obstruktif. Itu berarti bahwa kunci untuk enkripsi yang dapat dibalik harus ada di disk atau di memori sepanjang waktu. Jika program, disk, atau memori itu entah bagaimana terganggu, maka semua kata sandi yang dienkripsi yang dibalik itu semuanya dikompromikan dalam satu gerakan.

Sebaliknya, pertimbangkan penggunaan hash yang tidak dapat dibalik. Jika program, disk, atau memori dikompromikan maka penyerang mendapat hash "terkunci", dan tidak ada kunci. Mereka kemudian dapat menyerang lebih lanjut - serangan ciphertext yang diketahui, brute force, dll - tetapi mereka belum "menang".

Kami menggunakan enkripsi yang dapat dibalikkan (izinkan saya katakan kunci) sepanjang waktu - disk, file, lampiran email. Namun, apa yang sama-sama dimiliki oleh semua orang ini adalah bahwa mereka mendorong (jika tidak memerlukan) intervensi manusia untuk menyediakan kuncinya.

Saya tidak yakin mengapa Anda bertanya tentang ini, tetapi bagaimana dengan model hybrid? Pertimbangkan bahwa mungkin masuk akal untuk menyimpan keduanya ciphertext reversibel dan non-reversibel untuk kata sandi pengguna. Ketika kata sandi dibuat, simpan dua versi terenkripsi: Satu dibuat dengan fungsi hashing satu arah, dan yang lainnya dibuat dengan algoritma enkripsi asimetris ("kriptografi kunci publik"). Semua proses otentikasi otomatis menggunakan hash yang tidak dapat dibalik untuk tujuan otentikasi. Biarkan setengah "kunci publik" dari pasangan pada sistem untuk digunakan menghasilkan kata sandi yang dienkripsi, dan menyimpan separuh "kunci pribadi" dari offline . Jika plaintext kata sandi diperlukan, buat kata sandi yang dienkripsi luring dan dekripsi dengan kunci yang sesuai. Selama kunci dekripsi tidak dapat diakses oleh sistem otentikasi, maka penyerang tidak dapat memanfaatkan fakta bahwa Anda menggunakan enkripsi "reversibel" untuk menyimpan kata sandi plaintext.

Itu hanya akan membantu jika kebutuhan Anda untuk mengakses kata sandi plaintext bukan kebutuhan otomatis, tentu saja. Tapi sepertinya itu ide bagus bagiku.

21
gowenfawr

Apakah mungkin untuk menyimpan kata sandi secara aman menggunakan enkripsi yang dapat dibalik?

Ya, tetapi itu jauh lebih sulit dan membutuhkan usaha dan biaya yang jauh lebih besar. Penguncian sulit dilakukan dengan baik.

Untuk mendukung enkripsi yang dapat dibalik (tidak harus simetris seperti catatan @goenfawr ), Anda memerlukan setidaknya satu kunci (dua untuk kriptografi kunci publik). Anda perlu membuat kunci, menyimpannya dengan aman, melindunginya dari kerusakan atau kerusakan, mengambilnya untuk digunakan, melindunginya saat sedang digunakan, dan secara berkala menggantinya.

Bagian penting dari masalah adalah bagaimana melindungi kunci saat sedang tidak digunakan. Jika Anda mengenkripsi kunci maka Anda perlu kunci lain untuk mendekripsi. Dalam hal ini Anda kembali ke tempat Anda mulai. Metode perlindungan lainnya menggunakan perangkat keras khusus, atau sistem operasi yang aman, atau bahkan komputer khusus dengan memori dan prosesor yang terpisah untuk parameter keamanan. Semua solusi ini memerlukan pelatihan tambahan dan biaya dukungan.

Bandingkan solusi tersebut dengan menggunakan komputer ritel, sistem operasi ritel, dan fungsi hash.

6
this.josh

Satu hal untuk ditambahkan ke jawaban yang ada, adalah mungkin untuk menggunakan enkripsi simetris (reversibel) untuk menyimpan rahasia (termasuk kata sandi) tetapi sedikit lebih rumit/mahal.

Contoh yang baik dari ini adalah jaringan ATM/Mesin ATM, yang secara tradisional menggunakan manajemen kunci simetris (meskipun mereka pindah ke solusi berbasis PKI).

Kuncinya (tidak ada permainan kata-kata) untuk ini adalah bahwa kunci enkripsi disimpan di lokasi tepercaya, dalam hal ini Modul Keamanan Perangkat Keras (HSM) dan prosedur ketat terkait dengan pemuatan kunci dan manajemen perlu diikuti, untuk memastikan bahwa kunci tetap ada rahasia.

4
Rory McCune

Lihat halaman wiki untuk Ciphers. Meskipun ada banyak sandi yang aman, selalu ada risiko bocor kunci. Menggunakan hash satu arah menghindari risiko ini dengan tidak memiliki kunci.

Prinsip rekayasa keamanan adalah untuk meminimalkan informasi yang diperoleh mengingat bahwa sistem dikompromikan.

2
nik3daz