Microsoft introduced Always Encrypted with Secure Enclaves in SQL Server 2019. This allows the database layer to create a secure area in memory to decrypt encrypted data to plaintext. This is a big enhancement to Always Encrypted. This blog provides an introduction to that feature.
Way back in 2015, I blogged about Always Encrypted. I don’t want to go into the full details, but basically encryption keys are stored at the application layer rather than the database layer. This protects sensitive data from even the highest-access individuals.
At the time, I saw a lot of potential but noted there were substantial limitations. Most notably, the inability to perform range scans on randomly encrypted columns. Note this is not an issue when using a deterministic encryption. Because there’s no way to unencrypt the data within SQL Server, there’s no way for SQL Server to determine that range. It’s left to the client to return the full amount of data and sort within the application. This isn’t very efficient as you’re returning the full data over the network and using application memory to filter data. On very large tables, this can be a nonstarter.
Always Encrypted with Secure Enclaves lets SQL Server allow computations on encrypted columns in SQL Server memory. The secure enclave is a secure black box area in memory that acts as a trusted environment. No other processes can access this environment and there is no way to access this from other processes on the host. How this is performed is a fairly simple process:
As mentioned, many previous limitations around randomly encrypted columns can now be performed in the database. This allows the application to minimize data in motion and utilize non-clustered indexes on randomly encrypted columns.
Another benefit is in-place encryption. It’s common practice to rotate encryption keys. Without secure enclaves, this data must be taken out of the database and re-encrypted with the new key at the application layer. Again, with a large data set, this can be a burdensome process. With secure enclaves, this can be performed within the database.
VBS
SQL Server uses virtualization-based security (VBS) to create the secure memory enclave. At a very high level, VBS uses the windows hypervisor to create that region in memory.
Secure Enclave Attestation
The client needs to be able to verify the enclave is genuine. This process is called Attestation and is handled by the client driver. SQL Server uses the Windows Defender System Guard runtime attestation which in turn relies on Host Guardian Service (HGS). HGS configuration will be discussed in a future blog post. But for now, know that the SQL Server instance must register itself with the HGS—and your application must be configured to use HGS as well.
Microsoft strongly recommends enabling Advanced Database Recovery (ADR). Due to the way database recovery occurs—and that encryption keys are stored at the application layer—SQL Server may be stuck waiting for the application to connect before it can fully recover. ADR drastically reduces this chance, and if it does occur, enables it to occur as a background process.
Finally, HGS supports a Trusted Module Platform (TMP) or a host key. If the SQL Server is virtualized, there’s a good chance it doesn’t have TPM. In the case of Host Key, there’s an opportunity for a hypervisor administrator to dump the VM’s memory to plaintext. Therefore, it is highly recommended to use a virtual machine that supports TPM.
Stay tuned for more posts that dive into HGS setup and database-security hardening. If your organization needs help with any SQL Server issues, Anexinet has nearly two decades of experience, so please contact us for a direct database security evaluation.
SQL Server Architect
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
Cookie | Duration | Description |
---|---|---|
cookielawinfo-checbox-analytics | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics". |
cookielawinfo-checbox-functional | 11 months | The cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional". |
cookielawinfo-checbox-others | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other. |
cookielawinfo-checkbox-necessary | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary". |
cookielawinfo-checkbox-performance | 11 months | This cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance". |
viewed_cookie_policy | 11 months | The cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data. |
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.
Other uncategorized cookies are those that are being analyzed and have not been classified into a category as yet.