Why Your Microsoft 365 Encryption Isn't Enough
Apr 01, 2026
ArticleWhy Microsoft 365 default encryption still leaves Microsoft able to unlock content and when Double Key Encryption or Customer Key becomes a board-level control.
Read article
A practical setup guide for Microsoft 365 Double Key Encryption: keep a customer-held key outside Microsoft so regulated content stays under your authority.
Enterprises migrating sensitive workloads to Microsoft 365 face a persistent dilemma: how do you maintain genuine control over your data when the encryption keys reside with your cloud provider? Double Key Encryption Microsoft 365 addresses this challenge directly by splitting cryptographic control between Microsoft and your organisation, ensuring that no single party, including Microsoft, can access your protected content. For regulated industries under GDPR, NIS2, DORA, or FINMA requirements, this architecture represents a practical path to M365 data sovereignty without abandoning the productivity benefits of cloud collaboration.
This guide provides a complete technical walkthrough for deploying DKE in production environments. We cover infrastructure requirements, step-by-step deployment procedures, sensitivity labels encryption configuration and the operational realities of maintaining compliance at scale. Whether you are a CISO evaluating encryption options or a cloud security architect tasked with implementation, this resource delivers the technical depth required to make informed decisions and execute successfully.
Double Key Encryption (DKE) is a Microsoft Purview Information Protection capability that applies two layers of encryption to protected content. The first key is managed by Microsoft within the Azure Rights Management service. The second key is hosted and controlled exclusively by your organisation, either on-premises or through a trusted third-party key management provider.

DuoKey DKE architecture, the document is encrypted first with your customer key held in DuoKey KMS MPC, then again with the Microsoft-managed Azure key. Both are required to decrypt.
When a user protects a document with DKE:
This dual-encryption model creates a cryptographic barrier that prevents any single entity from accessing protected data. Microsoft cannot decrypt content without your key. Your organisation cannot decrypt content without Microsoft's key. Even if one key is compromised, the content remains protected.
Standard Microsoft 365 encryption, whether using Microsoft-managed keys or Customer Key, still permits Microsoft to technically access your content during certain operations. For organisations subject to strict regulatory frameworks, this creates a compliance gap.
Consider the regulatory landscape facing European enterprises:
| Regulation | Encryption Requirement | DKE Relevance |
|---|---|---|
| GDPR Article 32 | Appropriate technical measures including encryption | DKE provides defence against cloud provider access |
| NIS2 Article 21 | Cryptographic controls and key management | Mandates control over encryption mechanisms |
| DORA Article 28 | ICT third-party risk management | Reduces dependency on single cloud provider |
| FINMA Circular 2018/3 | Data confidentiality in outsourcing | Swiss banks require proof of provider-exclusion |
DKE addresses the fundamental question regulators increasingly ask: "Can your cloud provider access this data?" With DKE properly deployed, the answer is definitively no.
Beyond regulatory requirements, DKE serves strategic security objectives:
Microsoft offers multiple encryption options within Microsoft 365. Understanding the distinctions is essential for selecting the appropriate solution.
Microsoft controls all encryption keys. Content is encrypted at rest, but Microsoft retains technical access capability. Suitable for general business data without elevated regulatory requirements.
Your organisation provides root keys that Microsoft uses to generate encryption keys. These keys are stored in Azure Key Vault under your tenant. Microsoft retains access to a Microsoft-managed "availability key" for data recovery scenarios.
Critical limitation: Microsoft can still technically decrypt data using the availability key, which they control. This fails to satisfy requirements demanding complete provider exclusion.
Your organisation hosts and controls one of the two required decryption keys entirely outside Microsoft infrastructure. Microsoft possesses no technical capability to access protected content.
| Capability | Microsoft-Managed | Customer Key | DKE |
|---|---|---|---|
| Microsoft can access content | Yes | Yes (via availability key) | No |
| Key rotation control | Microsoft | Shared | Full customer control |
| Supported content types | All M365 | Exchange, SharePoint, Teams | Files in Office apps |
| Search and eDiscovery | Full | Full | Limited |
| Co-authoring support | Full | Full | No |
| Mobile support | Full | Full | Limited |
| Implementation complexity | None | Medium | High |
| Meets GDPR "provider exclusion" | No | Partial | Yes |
DKE is appropriate when:
DKE is not appropriate for:
Most enterprises deploy DKE alongside Customer Key, using DKE for the most sensitive content categories while Customer Key protects broader data sets.
Successful DKE deployment requires specific licensing, infrastructure and identity configurations. Address these requirements before beginning implementation.
DKE requires Microsoft 365 E5 licensing or one of the following add-ons:
Users who will protect content with DKE and users who will consume DKE-protected content both require appropriate licensing.
Azure Active Directory (Entra ID):
App Registration:
Your DKE key service can be deployed in multiple configurations:
Option 1: On-Premises Deployment
Option 2: Azure-Hosted Deployment
Option 3: Third-Party Key Management Provider
The DKE service endpoint must be:
Required firewall rules:
| Direction | Source | Destination | Port | Protocol |
|---|---|---|---|---|
| Inbound | Microsoft RMS services | DKE endpoint | 443 | HTTPS |
| Inbound | Client applications | DKE endpoint | 443 | HTTPS |
macOS support requires Microsoft 365 Apps version 16.40 or later. Mobile clients have limited DKE support, evaluate your workforce's device composition before proceeding.

DuoKey applies Zero Trust access controls (location, device, roles, groups, Azure integration) before serving the customer key during a decrypt request.
This section provides a technical walkthrough for deploying the DKE key service and integrating it with Microsoft Purview.
Microsoft provides a reference implementation for the DKE service on GitHub.
git clone https://github.com/Azure-Samples/DoubleKeyEncryptionService.git
Navigate to the src/customer-key-store directory. This contains the .NET Core application that will serve as your key service.
Generate RSA key pairs for your DKE service. For production deployments, use HSM-protected keys.
Create a key generation configuration file (appsettings.json):
{
"KeyStoreType": "File",
"KeyStorePath": "./keys",
"Keys": [
{
"Name": "DKEKey1",
"Id": "your-unique-key-id-1",
"KeyType": "RSA",
"KeySize": 2048
}
]
}
For production environments, replace the file-based key store with Azure Key Vault or an external key management system that provides HSM protection and comprehensive audit logging.
Navigate to Azure Portal > Azure Active Directory > App Registrations
Select "New registration"
Configure the application:
DKE Key ServiceAfter creation, note the Application (client) ID and Directory (tenant) ID
Configure API permissions:
Azure Rights Management Services > Content.SuperUserCreate a client secret or configure certificate authentication (certificates recommended for production)
Update the DKE service configuration with your Azure AD details:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-app-client-id",
"ClientSecret": "your-client-secret"
},
"KeyStore": {
"Type": "AzureKeyVault",
"VaultUri": "https://your-vault.vault.azure.net/"
},
"ServiceSettings": {
"PublicKeyEndpoint": "https://dke.yourcompany.com/keys"
}
}
For Azure App Service deployment:
appsettings.jsonFor on-premises IIS deployment:
Test that your DKE service responds correctly:
GET https://dke.yourcompany.com/keys/DKEKey1
Expected response includes the public key in JWK format:
{
"key": {
"kty": "RSA",
"n": "base64-encoded-modulus",
"e": "AQAB",
"kid": "DKEKey1"
}
}
At this point, your DKE infrastructure is operational and ready for sensitivity label integration.
Sensitivity labels encryption with DKE requires specific configuration in Microsoft Purview. This section covers label creation and policy deployment.
Open the Microsoft Purview compliance portal
Navigate to Information Protection > Labels
Select Create a label
Configure basic label settings:
Highly Confidential - DKE ProtectedDKE ProtectedDefine the label scope:
Configure encryption settings:
https://dke.yourcompany.com/keys/DKEKey1Configure access permissions:
Configure content expiration and offline access:
Configure content marking:
Review and create the label
Labels must be published via a label policy to become available to users:
Label policies can take up to 24 hours to propagate to all users. Plan pilot testing accordingly.
| Configuration | Recommendation | Rationale |
|---|---|---|
| Label visibility | Limit to users with genuine need | Reduces confusion and support burden |
| Sub-labels | Use parent/child hierarchy | "Highly Confidential" > " |
Written by
DuoKey Security Team
Related Resources
Tell us where control is difficult today. We will help you identify a practical next step.