Always Encrypted dengan kantong aman

Berlaku untuk: SQL Server 2019 (15.x) dan yang lebih baru - Hanya Windows Azure SQL Database

Always Encrypted dengan enklave aman memperluas kemampuan komputasi rahasia Always Encrypted dengan mengaktifkan enkripsi di tempat dan kueri rahasia yang lebih kaya. Always Encrypted dengan enklave aman tersedia di SQL Server 2019 (15.x) dan yang lebih baru, serta di Azure SQL Database.

Diperkenalkan di Azure SQL Database pada tahun 2015 dan di SQL Server 2016 (13.x), Always Encrypted melindungi kerahasiaan data sensitif dari malware dan pengguna yang tidak sah dengan hak istimewa tinggi: Administrator Database (DBA), admin komputer, admin cloud, atau siapa pun yang memiliki akses sah ke instans server, perangkat keras, dll., tetapi tidak boleh memiliki akses ke beberapa atau semua data aktual.

Tanpa peningkatan yang dibahas dalam artikel ini, Always Encrypted melindungi data dengan mengenkripsinya di sisi klien dan tidak pernah mengizinkan data atau kunci kriptografi yang sesuai muncul di teks biasa di dalam Mesin Database. Akibatnya, fungsionalitas pada kolom terenkripsi di dalam database sangat dibatasi. Satu-satunya operasi yang dapat dilakukan Mesin Database pada data terenkripsi adalah perbandingan kesetaraan (hanya tersedia dengan enkripsi deterministik). Semua operasi lain, termasuk operasi kriptografi (enkripsi data awal atau rotasi kunci) dan kueri yang lebih kaya (misalnya, pencocokan pola) tidak didukung di dalam database. Pengguna perlu memindahkan data mereka di luar database untuk melakukan operasi ini di sisi klien.

Always Encrypted dengan enklave aman mengatasi batasan ini dengan memungkinkan beberapa komputasi pada data teks biasa di dalam enklave aman di sisi server. Enklave aman adalah wilayah memori yang dilindungi dalam proses Mesin Database. Enklave aman muncul sebagai kotak buram ke sisa Mesin Database dan proses lain pada komputer hosting. Tidak ada cara untuk melihat data atau kode apa pun di dalam enklave dari luar, bahkan dengan debugger. Properti ini menjadikan enklave aman sebagai lingkungan eksekusi tepercaya yang dapat mengakses kunci kriptografi dengan aman dan data sensitif dalam teks biasa, tanpa mengorbankan kerahasiaan data.

Always Encrypted menggunakan enklave aman seperti yang diilustrasikan dalam diagram berikut:

aliran data

Saat mengurai pernyataan Transact-SQL yang dikirimkan oleh aplikasi, Mesin Database menentukan apakah pernyataan berisi operasi apa pun pada data terenkripsi yang memerlukan penggunaan enklave aman. Untuk pernyataan tersebut:

  • Driver klien mengirim kunci enkripsi kolom yang diperlukan untuk operasi ke enklave aman (melalui saluran aman), dan mengirimkan pernyataan untuk eksekusi.

  • Saat memproses pernyataan, Mesin Database mendelegasikan operasi kriptografi atau komputasi pada kolom terenkripsi ke enklave aman. Jika diperlukan, enklave mendekripsi data dan melakukan komputasi pada teks biasa.

Selama pemrosesan pernyataan, data dan kunci enkripsi kolom tidak diekspos dalam teks biasa di Mesin Database di luar enklave aman.

Driver klien yang didukung

Untuk menggunakan Always Encrypted dengan enklave aman, aplikasi harus menggunakan driver klien yang mendukung fitur tersebut. Konfigurasikan aplikasi dan driver klien untuk mengaktifkan komputasi enklave dan pengesahan enklave (lihat bagian Pengesahan enklave aman di bawah). Untuk detailnya, termasuk daftar driver klien yang didukung, lihat Mengembangkan aplikasi menggunakan Always Encrypted.

Teknologi enklave yang didukung

Always Encrypted mendukung teknologi enklave berikut (atau jenis enklave):

  • Enklave Keamanan berbasis virtualisasi (VBS) (juga dikenal sebagai Mode Aman Virtual, atau enklave VSM) - teknologi berbasis perangkat lunak yang bergantung pada hypervisor Windows dan tidak memerlukan perangkat keras khusus.
  • Enklave Intel Software Guard Extensions (Intel SGX) - teknologi lingkungan eksekusi tepercaya berbasis perangkat keras.

Jenis enklave yang tersedia untuk database Anda bergantung pada produk SQL yang menghostingnya (Azure SQL Database vs. SQL Server) dan (dalam kasus Azure SQL Database) konfigurasi database Anda.

  • Di SQL Server 2019 (15.x) dan yang lebih baru, Always Encrypted mendukung enklave VBS. (Enklave Intel SGX tidak didukung.)

  • Di Azure SQL Database, database dapat menggunakan enklave Intel SGX atau enklave VBS, tergantung pada perangkat keras yang dikonfigurasi database untuk dijalankan:

    • Database yang menggunakan konfigurasi perangkat keras seri DC (tersedia dengan model pembelian vCore) menggunakan enklave Intel SGX.
    • Database yang menggunakan konfigurasi selain seri DC dengan model pembelian vCore dan database menggunakan model pembelian DTU dapat dikonfigurasi untuk menggunakan enklave VBS.

    Catatan

    Enklave VBS saat ini tersedia di semua wilayah Azure SQL Database kecuali: Jio India Tengah.

Lihat bagian Pertimbangan keamanan untuk informasi penting tentang perlindungan tingkat yang disediakan setiap jenis enklave.

Pengesahan enklave aman

Pengesahan Enklave adalah mekanisme pertahanan mendalam yang dapat membantu mendeteksi serangan yang melibatkan pengubahan kode enklave atau lingkungannya oleh administrator berbahaya.

Pengesahan Enklave memungkinkan aplikasi klien untuk membangun kepercayaan dengan enklave aman untuk database, aplikasi terhubung ke, sebelum aplikasi menggunakan enklave untuk memproses data sensitif. Alur kerja pengesahan memverifikasi enklave adalah enklave VBS atau Intel SGX asli dan kode yang berjalan di dalamnya adalah pustaka enklave asli yang ditandatangani Microsoft untuk Always Encrypted. Selama pengesahan, driver klien dalam aplikasi dan Mesin Database berkomunikasi dengan layanan pengesahan eksternal menggunakan titik akhir yang ditentukan klien.

Always Encrypted dapat menggunakan salah satu dari dua layanan pengesahan:

  • Microsoft Azure Attestation - solusi pengesahan berbasis cloud.
  • Host Guardian Service (HGS) yang menerapkan pengesahan runtime Windows Defender System Guard.

Untuk mengaktifkan Always Encrypted dengan enklave aman untuk aplikasi Anda, Anda perlu mengatur protokol pengesahan dalam konfigurasi driver klien di aplikasi Anda. Nilai protokol pengesahan menentukan apakah 1) aplikasi klien akan menggunakan pengesahan, dan, jika demikian, 2) itu menentukan jenis layanan pengesahan yang akan digunakannya. Tabel di bawah ini menangkap protokol pengesahan yang didukung untuk kombinasi produk SQL dan jenis enklave yang valid:

Menghosting produk Jenis Enklave Protokol pengesahan yang didukung
SQL Server 2019 (15.x) dan yang lebih baru Enklave VBS HGS, Tidak ada pengesahan
Database Azure SQL Enklave SGX (database seri DC) Microsoft Azure Attestation
Database Azure SQL Enklave VBS Tidak ada pengesahan

Beberapa poin penting untuk dipanggil:

  • Membuktikan enklave VBS di SQL Server 2019 (15.x) dan yang lebih baru memerlukan HGS. Anda juga dapat menggunakan enklave VBS tanpa pengesahan (driver klien terbaru diperlukan).
  • Dengan enklave Intel SGX (dalam database seri DC) di Azure SQL Database, pengesahan bersifat wajib dan memerlukan Microsoft Azure Attestation.
  • Enklave VBS di Azure SQL Database tidak mendukung pengesahan.

Untuk informasi selengkapnya, lihat:

Terminologi

Kunci berkemampuan Enklave

Always Encrypted dengan enklave aman memperkenalkan konsep kunci yang diaktifkan enklave:

  • Kunci master kolom yang diaktifkan Enclave - kunci master kolom yang memiliki ENCLAVE_COMPUTATIONS properti yang ditentukan dalam objek metadata kunci master kolom di dalam database. Objek metadata kunci master kolom juga harus berisi tanda tangan properti metadata yang valid. Untuk informasi selengkapnya, lihat MEMBUAT KUNCI MASTER KOLOM (Transact-SQL)
  • Kunci enkripsi kolom yang diaktifkan Enclave - kunci enkripsi kolom yang dienkripsi dengan kunci master kolom yang diaktifkan enklave. Hanya kunci enkripsi kolom yang diaktifkan enklave yang dapat digunakan untuk komputasi di dalam enklave aman.

Untuk informasi selengkapnya, lihat Mengelola kunci untuk Always Encrypted dengan enklave aman.

Kolom berkemampuan Enklave

Kolom yang diaktifkan enklave adalah kolom database yang dienkripsi dengan kunci enkripsi kolom yang diaktifkan enklave.

Kemampuan komputasi rahasia untuk kolom yang diaktifkan enklave

Dua manfaat utama Always Encrypted dengan enklave aman adalah enkripsi di tempat dan kueri rahasia yang kaya.

Enkripsi di tempat

Enkripsi di tempat memungkinkan operasi kriptografi pada kolom database di dalam enklave aman, tanpa memindahkan data di luar database. Enkripsi di tempat meningkatkan performa dan keandalan operasi kriptografi. Anda dapat melakukan enkripsi di tempat menggunakan pernyataan ALTER TABLE (Transact-SQL ).

Operasi kriptografi yang didukung di tempat adalah:

  • Mengenkripsi kolom teks biasa dengan kunci enkripsi kolom yang diaktifkan enklave.
  • Mengenkripsi ulang kolom yang mendukung enklave terenkripsi untuk:
    • Putar kunci enkripsi kolom - enkripsi ulang kolom dengan kunci enkripsi kolom baru yang diaktifkan enklave.
    • Ubah jenis enkripsi kolom yang diaktifkan enklave, misalnya, dari deterministik menjadi acak.
  • Mendekripsi data yang disimpan dalam kolom berkemampuan enklave (mengonversi kolom menjadi kolom teks biasa).

Enkripsi di tempat diizinkan dengan enkripsi deterministik dan acak, selama kunci enkripsi kolom yang terlibat dalam operasi kriptografi diaktifkan enklave.

Kueri rahasia

Catatan

SQL Server 2022 (16.x) menambahkan dukungan tambahan untuk kueri rahasia dengan operasi JOIN, GROUP BY, dan ORDER BY pada kolom terenkripsi.

Kueri rahasia adalah kueri DML yang melibatkan operasi pada kolom berkemampuan enklave yang dilakukan di dalam enklave aman.

Operasi yang didukung di dalam enklave aman adalah:

Operasi Database Azure SQL SQL Server 2022 (16.x) SQL Server 2019 (15.x)
Operator perbandingan Didukung Didukung Didukung
ANTARA (T-SQL) Didukung Didukung Didukung
IN (Transact-SQL) Didukung Didukung Didukung
LIKE (Transact-SQL) Didukung Didukung Didukung
DISTINCT Didukung Didukung Didukung
Gabung Didukung Didukung Hanya gabungan perulangan berlapis yang didukung
SELECT - ORDER BY Clause (Transact-SQL) Didukung Didukung Tidak didukung
PILIH - GROUP BY - T-SQL Didukung Didukung Tidak didukung

Catatan

Operasi di atas di dalam enklave aman memerlukan enkripsi acak. Enkripsi deterministik tidak didukung. Perbandingan kesetaraan tetap menjadi operasi yang tersedia untuk kolom menggunakan enkripsi deterministik.

Tingkat kompatibilitas database harus diatur ke SQL Server 2022 (160) atau yang lebih tinggi.

Di Azure SQL Database dan di SQL Server 2022 (16.x), kueri rahasia menggunakan enklave pada kolom string karakter (char, nchar) mengharuskan kolom menggunakan kolase titik kode biner (_BIN2) atau kolase UTF-8. Di SQL Server 2019 (15.x), kolase a_BIN2 diperlukan.

Untuk informasi selengkapnya, lihat Menjalankan pernyataan Transact-SQL menggunakan enklave aman.

Indeks pada kolom berkemampuan enklave

Anda dapat membuat indeks non-kluster pada kolom berkemampuan enklave menggunakan enkripsi acak untuk membuat kueri DML rahasia menggunakan enklave aman berjalan lebih cepat.

Untuk memastikan indeks pada kolom yang dienkripsi menggunakan enkripsi acak tidak membocorkan data sensitif, nilai kunci dalam struktur data indeks (pohon B) dienkripsi dan diurutkan berdasarkan nilai teks biasanya. Mengurutkan menurut nilai teks biasa juga berguna untuk memproses kueri di dalam enklave. Saat pelaksana kueri di Mesin Database menggunakan indeks pada kolom terenkripsi untuk komputasi di dalam enklave, ia mencari indeks untuk mencari nilai tertentu yang disimpan dalam kolom. Setiap pencarian mungkin melibatkan beberapa perbandingan. Pelaksana kueri mendelegasikan setiap perbandingan dengan enklave, yang mendekripsi nilai yang disimpan dalam kolom dan nilai kunci indeks terenkripsi untuk dibandingkan, ia melakukan perbandingan pada teks biasa dan mengembalikan hasil perbandingan dengan pelaksana.

Membuat indeks pada kolom yang menggunakan enkripsi acak dan tidak diaktifkan enklave tetap tidak didukung.

Indeks pada kolom yang menggunakan enkripsi deterministik diurutkan berdasarkan ciphertext (bukan teks biasa), terlepas dari apakah kolom diaktifkan enklave atau tidak.

Untuk informasi selengkapnya, lihat Membuat dan menggunakan indeks pada kolom menggunakan Always Encrypted dengan enklave aman. Untuk informasi umum tentang cara kerja pengindeksan di Mesin Database, lihat artikel, Indeks Terkluster dan Tidak Terkluster dijelaskan.

Pemulihan basis data

Jika instans SQL Server gagal, databasenya mungkin dibiarkan dalam keadaan di mana file data mungkin berisi beberapa modifikasi dari transaksi yang tidak lengkap. Ketika instans dimulai, instans menjalankan proses yang disebut pemulihan database, yang melibatkan rollback setiap transaksi yang tidak lengkap yang ditemukan di log transaksi untuk memastikan integritas database dipertahankan. Jika transaksi yang tidak lengkap membuat perubahan pada indeks, perubahan tersebut juga perlu dibatalkan. Misalnya, beberapa nilai kunci dalam indeks mungkin perlu dihapus atau diinserksi ulang.

Penting

Microsoft sangat menyarankan untuk mengaktifkan pemulihan database terakselerasi (ADR) untuk database Anda, sebelum membuat indeks pertama pada kolom berkemampuan enklave yang dienkripsi dengan enkripsi acak. ADR diaktifkan secara default di Azure SQL Database, tetapi tidak di SQL Server 2019 (15.x) dan yang lebih baru.

Dengan proses pemulihan database tradisional (yang mengikuti model pemulihan ARIES), untuk membatalkan perubahan pada indeks, SQL Server perlu menunggu hingga aplikasi menyediakan kunci enkripsi kolom untuk kolom ke enklave, yang dapat memakan waktu lama. Pemulihan database terakselerasi (ADR) secara dramatis mengurangi jumlah operasi batalkan yang harus ditangguhkan karena kunci enkripsi kolom tidak tersedia di cache di dalam enklave. Akibatnya, itu secara substansial meningkatkan ketersediaan database dengan meminimalkan peluang bagi transaksi baru untuk diblokir. Dengan ADR diaktifkan, SQL Server mungkin masih memerlukan kunci enkripsi kolom untuk menyelesaikan pembersihan versi data lama tetapi melakukan itu sebagai tugas latar belakang yang tidak memengaruhi ketersediaan database atau transaksi pengguna. Anda mungkin melihat pesan kesalahan dalam log kesalahan, menunjukkan operasi pembersihan yang gagal karena kunci enkripsi kolom yang hilang.

Pertimbangan keamanan

Pertimbangan keamanan berikut berlaku untuk Always Encrypted dengan enklave aman.

  • Enklave VBS membantu melindungi data Anda dari serangan di dalam VM. Namun, mereka tidak memberikan perlindungan apa pun dari serangan menggunakan akun sistem istimewa yang berasal dari host. Enklave Intel SGX melindungi data dari serangan yang berasal dari OS tamu dan OS host.
  • Menggunakan pengesahan enklave disarankan jika tersedia untuk lingkungan Anda dan jika Anda khawatir melindungi data Anda dari serangan oleh pengguna dengan akses admin tingkat OS ke mesin yang menghosting database Anda. Jika Anda menggunakan pengesahan, Anda perlu memastikan layanan pengesahan dan konfigurasinya dikelola oleh administrator tepercaya. Selain itu, kedua layanan pengesahan yang didukung menawarkan kebijakan dan mode pengesahan yang berbeda, beberapa di antaranya melakukan verifikasi minimal enklave dan lingkungannya, dan dirancang untuk pengujian dan pengembangan. Ikuti dengan cermat panduan khusus untuk layanan pengesahan Anda untuk memastikan Anda menggunakan konfigurasi dan kebijakan yang direkomendasikan untuk penyebaran produksi Anda.
  • Mengenkripsi kolom menggunakan enkripsi acak dengan kunci enkripsi kolom yang diaktifkan enklave dapat mengakibatkan kebocoran urutan data yang disimpan dalam kolom, karena kolom tersebut mendukung perbandingan rentang. Misalnya, jika kolom terenkripsi, yang berisi gaji karyawan, memiliki indeks, DBA berbahaya dapat memindai indeks untuk menemukan nilai gaji terenkripsi maksimum dan mengidentifikasi seseorang dengan gaji maksimum (dengan asumsi nama orang tersebut tidak dienkripsi).
  • Jika Anda menggunakan Always Encrypted untuk melindungi data sensitif dari akses yang tidak sah oleh DBA, jangan bagikan kunci master kolom atau kunci enkripsi kolom dengan DBA. DBA dapat mengelola indeks pada kolom terenkripsi tanpa memiliki akses langsung ke kunci dengan menggunakan cache kunci enkripsi kolom di dalam enklave.

Pertimbangan untuk kelangsungan bisnis, pemulihan bencana, dan migrasi data

Saat mengonfigurasi ketersediaan tinggi atau solusi pemulihan bencana untuk database menggunakan Always Encrypted dengan enklave aman, pastikan bahwa semua replika database dapat menggunakan enklave yang aman. Jika enklave tersedia untuk replika utama, tetapi tidak untuk replika sekunder, pernyataan apa pun yang mencoba menggunakan fungsionalitas Always Encrypted dengan enklave aman akan gagal setelah failover.

Saat Anda menyalin atau memigrasikan database menggunakan Always Encrypted dengan enklave aman, pastikan lingkungan target selalu mendukung enklave. Jika tidak, pernyataan yang menggunakan enklave tidak akan berfungsi pada salinan atau database yang dimigrasikan.

Berikut adalah pertimbangan spesifik yang harus Anda ingat:

  • SQL Server

    • Saat mengonfigurasi grup ketersediaan AlwaysOn, pastikan bahwa setiap instans SQL Server yang menghosting database dalam grup ketersediaan mendukung Always Encrypted dengan enklave aman, dan memiliki enklave dan pengesahan yang dikonfigurasi.
    • Saat memulihkan dari file cadangan database yang menggunakan fungsionalitas Always Encrypted dengan enklave aman pada instans SQL Server yang tidak memiliki enklave yang dikonfigurasi, operasi pemulihan akan berhasil dan semua fungsionalitas yang tidak bergantung pada enklave akan tersedia. Namun, pernyataan berikutnya yang menggunakan fungsionalitas enklave akan gagal, dan indeks pada kolom berkemampuan enklave menggunakan enkripsi acak akan menjadi tidak valid. Hal yang sama berlaku saat melampirkan database menggunakan Always Encrypted dengan enklave aman pada instans yang tidak memiliki enklave yang dikonfigurasi.
    • Jika database Anda berisi indeks pada kolom yang diaktifkan enklave menggunakan enkripsi acak, pastikan untuk mengaktifkan pemulihan database terakselerasi (ADR) dalam database sebelum membuat cadangan database. ADR akan memastikan database, termasuk indeks, tersedia segera setelah Anda memulihkan database. Untuk informasi selengkapnya, lihat Pemulihan Database.
  • Azure SQL Database

    • Saat mengonfigurasi geo-replikasi aktif, pastikan database sekunder mendukung enklave aman, jika database utama melakukannya.

Di SQL Server dan Azure SQL Database, saat Anda memigrasikan database menggunakan file bacpac, Anda perlu memastikan Anda menghapus semua indeks untuk kolom yang diaktifkan enklave menggunakan enkripsi acak sebelum membuat file bacpac.

Pembatasan yang diketahui

Always Encrypted dengan enklave aman membahas beberapa batasan Always Encrypted dengan mendukung enkripsi di tempat dan kueri rahasia yang lebih kaya dengan indeks, seperti yang dijelaskan dalam kemampuan komputasi rahasia untuk kolom yang diaktifkan enklave.

Semua batasan lain untuk Always Encrypted yang tercantum dalam Batasan juga berlaku untuk Always Encrypted dengan enklave aman.

Batasan berikut khusus untuk Always Encrypted dengan enklave aman:

  • Indeks berkluster tidak dapat dibuat pada kolom berkemampuan enklave menggunakan enkripsi acak.
  • Kolom yang diaktifkan enklave menggunakan enkripsi acak tidak dapat menjadi kolom kunci utama dan tidak dapat direferensikan oleh batasan kunci asing atau batasan kunci unik.
  • Di SQL Server 2019 (15.x) (batasan ini tidak berlaku untuk Azure SQL Database atau SQL Server 2022 (16.x)) hanya gabungan perulangan berlapis (menggunakan indeks, jika tersedia) didukung pada kolom yang diaktifkan enklave menggunakan enkripsi acak. Untuk informasi tentang perbedaan lain di antara berbagai produk, lihat Kueri rahasia.
  • Operasi kriptografi di tempat tidak dapat dikombinasikan dengan perubahan metadata kolom lainnya, kecuali mengubah kolase dalam halaman kode dan nullability yang sama. Misalnya, Anda tidak dapat mengenkripsi, mengenkripsi ulang, atau mendekripsi kolom DAN mengubah jenis data kolom dalam satu ALTER TABLE/ALTER COLUMN pernyataan Transact-SQL. Gunakan dua pernyataan terpisah.
  • Menggunakan kunci yang diaktifkan enklave untuk kolom dalam tabel dalam memori tidak didukung.
  • Ekspresi yang menentukan kolom komputasi tidak dapat melakukan komputasi apa pun pada kolom yang diaktifkan enklave menggunakan enkripsi acak (bahkan jika komputasi adalah salah satu operasi yang didukung yang tercantum dalam kueri Rahasia).
  • Karakter Escape tidak didukung dalam parameter operator LIKE pada kolom yang diaktifkan enklave menggunakan enkripsi acak.
  • Kueri dengan operator LIKE atau operator perbandingan yang memiliki parameter kueri menggunakan salah satu jenis data berikut (yang menjadi objek besar setelah enkripsi) mengabaikan indeks dan melakukan pemindaian tabel.
    • nchar[n] dan nvarchar[n], jika n lebih besar dari 3967.
    • char[n], , varchar[n]binary[n], varbinary[n], jika n lebih besar dari 7935.
  • Batasan alat:
    • Satu-satunya penyimpanan kunci yang didukung untuk menyimpan kunci master kolom yang diaktifkan enklave adalah Windows Certificate Store dan Azure Key Vault.
    • Untuk memicu operasi kriptografi di tempat melalui ALTER TABLE/ALTER COLUMN, Anda perlu mengeluarkan pernyataan menggunakan jendela kueri di SSMS atau Azure Data Studio, atau Anda dapat menulis program Anda sendiri yang mengeluarkan pernyataan. Saat ini, Set-SqlColumnEncryption cmdlet dalam modul SqlServer PowerShell dan wizard Always Encrypted di SQL Server Management Studio tidak mendukung enkripsi di tempat. Pindahkan data keluar dari database untuk operasi kriptografi, bahkan jika kunci enkripsi kolom yang digunakan untuk operasi diaktifkan enklave.
  • Saat Anda memulihkan database berkemampuan enklave VBS, penting untuk mengonfigurasi ulang pengaturan enklave VBS lagi.

Langkah berikutnya

Lihat juga