Mencari Data Terenkripsi dari Database
Misalkan saya memiliki tabel dengan email yang disimpan dalam satu tabel. Saya telah mengenkripsi menggunakan AES-256 dan menyimpan hasilnya di Kolom DB.
Misalnya saya punya satu masukan email dan saya ingin mencari apakah email ini ada di DB atau tidak: Sekarang saya melihat dua pendekatan untuk itu
- Enkripsi input dan cari nilai terenkripsi.
- Gunakan konsep Blind Index (menggunakan HMAC SHA-256) dan simpan kemudian untuk input buat juga HMAC ini dan cari.
Pendekatan mana yang lebih baik dan mengapa? Untuk Encrytion kami menggunakan perpustakaan Inhouse yang melakukan AES-256 menggunakan Secret Key / Salt. Kunci rahasia diambil dari AWS KMS (Pada dasarnya mendekripsi dari AWS KMS)
Jawaban
Mungkin pendekatan dua kolom umum yang digunakan untuk skenario login dapat diterapkan di sini.
Di sinilah pengguna sering kali perlu masuk dengan email mereka (baik karena mereka lupa nama pengguna atau situs tidak menggunakannya), tetapi alamat email mereka dianggap sebagai data rahasia yang tidak boleh disimpan dalam bentuk teks biasa.
Dalam skenario ini, database memiliki dua kolom:
- Satu kolom berisi hash alamat email yang dibumbui (seperti
SHA-256 (email + pepper), di mana "pepper" hanyalah beberapa byte rahasia yang disimpan di server atau HSM. Istilah ini diambil dari bagaimana "lada" digunakan untuk melindungi sandi) - Satu kolom yang berisi alamat email terenkripsi (sering dienkripsi oleh DEK standar (kunci enkripsi data) melalui AES-256 dengan random-IV- per-entry )
The pertama kolom digunakan untuk cepat mencari info pengguna untuk tujuan masuk sementara kedua kolom dapat digunakan untuk mengambil alamat email yang sebenarnya setiap kali diperlukan (misalnya, untuk tujuan korespondensi).