Bagaimana cara mengubah kunci aes-256 setelah enkripsi?

Saya memiliki situs web tempat pengguna mengirimkan data pribadi mereka, dan saya berpikir untuk mengenkripsi data ini menggunakan aes-256 dan kata sandi mereka digunakan sebagai kunci untuk enkripsi itu dan kemudian saya menyimpan data terenkripsi dalam database mysql...

Sekarang jika pengguna mengubah kata sandinya, bagaimana cara mengubah kunci data terenkripsi

Haruskah saya mengumpulkan semua data dari database lalu mendekripsi datanya dengan kunci lama lalu mengenkripsinya lagi dengan kunci baru?


person Michael harris    schedule 24.01.2012    source sumber


Jawaban (4)


Anda tidak perlu mengenkripsi ulang semua data pengguna saat mereka mengubah kata sandinya.

Hasilkan kunci rahasia untuk mengenkripsi data pengguna; menyebutnya sebagai "kunci enkripsi konten". Dapatkan kunci dari kata sandi pengguna; menyebutnya sebagai "kunci enkripsi kunci". Enkripsi "kunci enkripsi konten" menggunakan "kunci enkripsi kunci". Simpan kunci terenkripsi bersama dengan garam dan jumlah iterasi yang digunakan untuk derivasi kunci.

Jika mereka mengubah kata sandinya, dekripsi kunci enkripsi konten dengan kata sandi lama, dan enkripsi ulang dengan kunci yang berasal dari kata sandi baru. Anda harus memilih garam baru untuk kata sandi baru, dan pastikan Anda menyimpannya bersama dengan kunci terenkripsi yang baru.

Karena kunci enkripsi konten dipilih secara acak dari ruang yang besar, Anda dapat menggunakan ECB dengan aman sebagai mode sandi saat mengenkripsinya.

Jangan hanya meng-hash kata sandi, meskipun Anda menggunakan salt, meskipun Anda menggunakan algoritme yang belum terputus. Anda perlu mengulangi operasi hashing ribuan kali. Ada perpustakaan untuk melakukan ini (dengan benar) di sebagian besar platform. Gunakan algoritma derivasi kunci (PBKDF2, dari PKCS #5) untuk membuat kunci rahasia dari kata sandi.

Konsep ini mengikuti draf enkripsi S/MIME berbasis sandi.

person erickson    schedule 24.01.2012
comment
Di mana kunci terenkripsi disimpan? Di memori di server aplikasi, atau di penyimpanan fisik di server database? - person dimiguel; 14.06.2017
comment
@dimgl Disimpan di beberapa penyimpanan yang andal dan persisten, dengan cadangan. Jelas tidak ada dalam ingatan. Kecuali Anda tidak peduli jika konten tersebut hancur karena pemadaman listrik. - person erickson; 14.06.2017
comment
Bagaimana Karena kunci enkripsi konten dipilih secara acak dari ruang yang sangat besar membantu mengatasi masalah dengan ECB? - person Freek; 13.02.2020
comment
@Freek Karena setiap teks biasa (kunci enkripsi konten) yang digunakan dengan kunci enkripsi kunci tertentu adalah unik, teks tersandi yang dihasilkan juga unik. - person erickson; 13.02.2020
comment
Lihat juga kutipan kedua dari Kriptografi Terapan di sini. - person erickson; 13.02.2020
comment
Ah maksud Anda enkripsi enkripsi konten, saya membaca enkripsi data dengan kunci enkripsi konten pada pandangan pertama saya atas jawaban ini. - person Freek; 13.02.2020

Pertama, Anda biasanya tidak boleh menggunakan kata sandi sebagai kunci AES. Mungkin sesuatu seperti hash kriptografi (bukan MD5) dari kata sandi + garam (Anda akan menyimpan garam tetapi bukan hash dalam kasus ini).

Satu hal yang dapat Anda lakukan adalah mengenkripsi file setiap pengguna dengan kunci acak, lalu mengenkripsi kunci tersebut dengan kata sandi hash+asin. Jika pengguna mengubah kata sandi, Anda hanya perlu mengenkripsi ulang kuncinya.

person Jarred    schedule 24.01.2012

Salah satu kemungkinan yang perlu dipertimbangkan adalah memisahkan kunci yang digunakan untuk mengenkripsi data dari kunci yang digunakan untuk mendapatkan akses ke data. Jika dilakukan dengan hati-hati, hal ini memungkinkan pengguna untuk mengubah kata sandinya sesering yang mereka inginkan, sementara Anda hanya mengubah satu catatan dalam database. Secara terpisah, Anda dapat menjadwalkan perubahan pada kunci yang mengenkripsi datanya kapan pun Anda mau.

Bagaimana cara kerjanya?

  • Anda mengenkripsi data D untuk pengguna U dengan kunci yang dibuat secara acak, KU,D.
  • Anda mengenkripsi kunci KU,D dengan kunci terpisah K1U,K yang dihasilkan dari garam acak, S1U (yang Anda simpan catatan) dan sandi pengguna P1U (yang mungkin Anda lacak atau tidak). Kunci terenkripsi adalah E1U.
  • Anda menyimpan S1U dan K1U,K yang siap digunakan saat pengguna ingin mengakses datanya.
  • Saat pengguna U ingin mengakses datanya, mereka memberi Anda kata sandinya, P1U, dan Anda mencari S1U dan membuat ulang K1U,K dari data tersebut, dan menggunakannya untuk mendekripsi E1U, memberi Anda KU,D sekali lagi, yang dengannya Anda mendekripsi data sebenarnya.
  • Anda memastikan bahwa Anda dapat mendeteksi kapan kata sandi yang diberikan sudah benar sehingga Anda tidak melontarkan omong kosong biner jika pengguna mengetikkan kata sandi yang salah.

Keuntungan dari tingkat tipuan ini muncul ketika pengguna ingin mengubah kata sandinya. Jika Anda tidak menggunakan teknik serupa dengan ini, Anda harus mendapatkan dan memvalidasi kata sandi lama dan kata sandi baru, mendekripsi semua data dengan kata sandi lama, dan mengenkripsi ulang semuanya dengan kata sandi baru.

Dengan tingkat tipuan, Anda tetap meminta kata sandi lama (P1U) dan kata sandi baru (P2U) kepada pengguna dan memvalidasinya, namun Anda hanya perlu melakukannya dekripsi E1U lalu enkripsi ulang dengan kunci baru K2U,K yang dihasilkan dari garam baru S2U dan kata sandi baru P2 kamu. Anda tidak perlu menyentuh data terenkripsi sama sekali.

Dengan tingkat tipuan, sistem S juga dapat menyimpan salinan terenkripsi kedua dari kunci data KU,D, yang dienkripsi dengan kata sandi sistem. Jika diperlukan atau diinginkan untuk mengubah kunci yang digunakan untuk mengenkripsi data, sistem dapat menggunakan salinan kunci terenkripsi untuk melakukannya. Ia dapat menyimpan catatan kunci mana yang terakhir kali dicatat oleh pengguna di kuncinya, sehingga ketika pengguna kembali untuk melihat data, ia dapat mengatur untuk mengubah kunci yang disimpan K2U,D karena pada saat itu, ia memiliki kata sandinya (selebihnya, tidak).

Ini adalah variasi ringan pada beberapa ide di "Kriptografi dalam Basis Data: Garis Pertahanan Terakhir" oleh Kevin Kenan. Kunci KnU,K adalah contoh KEK, Kunci Pengenkripsi Kunci. Anda juga dapat membaca tentang keluarga kunci di buku ini, yang akan membantu pengelolaan data terenkripsi.

person Jonathan Leffler    schedule 24.01.2012

Itu konyol.

AES menggunakan kunci 256 bit sehingga ketika Anda mengatakan bahwa Anda akan menggunakan kata sandi mereka untuk kunci tersebut, panjangnya tidak akan sesuai dengan persyaratan ukuran kunci.

person Dan Kanze    schedule 24.01.2012
comment
Saya akan meng-hash kata sandi mereka untuk memberi saya 256 byte kemudian menggunakannya dalam enkripsi - person Michael harris; 24.01.2012