Conclave is a toolkit for building enclaves, small pieces of software that are protected from attack by the owner of the computer on which they run. It is ideally suited to solving multi-party collaboration and privacy problems.
- High level, simple API that is much easier to use than other enclave APIs.
- Full support for auditing enclaves over the internet, including remote attestation and fully deterministic, reproducible builds. A user can verify what the source code of the remotely running enclave is, to ensure it will behave as they expect.
- A Gradle plugin to automate compiling, signing and calculating the code hash of your enclave. No need to use the Intel SDK - everything needed is included.
- API designs that guide you towards SGX best practices and avoidance of security pitfalls.
- A powerful unit testing framework to verify the operation of your enclave and remote attestation functionality, using just JUnit.
- Tutorials, guides and commercial support from the SGX experts at R3.
Enclaves. If you're totally new to enclave development, start with our introduction to enclave-oriented design. This will explain the concepts referred to in the rest of the documentation.
Architectural overview. This explains the core Conclave APIs.
Tutorial. Once you understand the concepts go straight to writing your first enclave.
Enclave Configuration. Now you've created your first enclave, take a deeper look at the configuration options available for creating enclaves.
Machine setup. Learn how to obtain SGX capable hardware, set it up, deploy to production and then keep your machine trusted by applying updates.
Reference guide. We provide detailed JavaDocs for the API.
Get in touch¶
There's a public mailing list for discussion of using Conclave and SGX. Join firstname.lastname@example.org.
You can also email us directly. In future R3 will offer ticket based commercial support.
This is a developer preview release of Conclave. You may not run enclaves built with it in production. Please read the list of known issues.
- New feature! Conclave now supports building GraalVM Native Image
enclaves on macOS and Windows! GraalVM Native Image
support was added in Beta 3 but required a Linux build system. Now, by installing Docker on Windows or macOS you
can configure your enclaves to use the
graalvm_native_imageruntime and let Conclave simply manage the build process for you. Creating and managing the container is automated for you.
- New feature! Conclave now supports a new remote attestation protocol. That means it now works out of the box on Azure Confidential Compute VMs, without any need to get an approved signing key: you can self sign enclaves and go straight to 'release mode' on Azure. Follow our tutorial on how to deploy your app to Azure to learn more.
- New feature! Mail is now integrated with the SGX data sealing and TCB recovery features. If a version of the CPU microcode, SGX architectural enclaves or the enclave itself is revoked, old mail will be readable by the newly upgraded system, but downgrade attacks are blocked (old versions cannot be exploited to read new mail). This support is fully automatic and especially useful when using the 'mail to self' pattern for storage.
- New feature! The new
EnclaveHost.capabilitiesDiagnosticsAPI prints a wealth of detailed technical information about the host platform, useful for diagnostics and debugging.
System.currentTimeMillisnow provides high performance, side-channel free access to the host's clock. The host copies the current time to a memory location the enclave can read, thus avoiding a call out of the enclave that could give away information about where in the program the enclave is. Remember however that as per usual, the host can change the time to whatever it wants, or even make it go backwards.
- Significantly improved multi-threading support. Learn more about threads inside the enclave. Write scalable, thread safe enclaves and use thread-pools of different sizes inside and outside the enclave.
- Conclave's internal dependencies are better isolated. As a consequence it's now loadable from inside an app designed for R3's Corda platform. Corda is one of the world's leading blockchain platforms and its privacy needs are what drove development of Conclave. We plan to release a sample app showing Corda/Conclave integration soon.
- API improvements! The API for receiving local calls into an enclave has been simplified, the mail API lets the host provide a routing hint when delivering, and the API for passing attestation parameters has been simplified due to the introduction of support for the new DCAP attestation protocol. Learn more about the API changes.
- Mail has been optimised to reduce the size overhead and do fewer memory copies.
- Bug fixes, usability and security improvements. Upgrade to ensure your enclave is secure. We've improved error messages for a variety of situations where Conclave isn't being used correctly.
- New feature! The Mail API makes it easy to deliver encrypted messages to the enclave that only it can read, with sequencing and separation of different mail streams by topic. Mail can also be used by an enclave to persist (sealed) data. Learn more
- New feature! You can now compile your entire enclave ahead of time using GraaalVM Native Image. This gives you access to a much better JVM than in prior releases, with faster enclaves that use less RAM. The performance improvement can be between 4x and 12x faster than in prior releases and memory usage can be up to 5x lower.
- New feature! New mock API for easy debugging between the host and enclave, fast unit testing and easy development of enclaves on machines that don't support the technology. Learn more.
- New feature! You can now produce enclaves on macOS! Just follow the instructions as you would on a Linux developer machine, and a JAR with an embedded Linux enclave .so file will be produced automatically. You can then take that JAR and upload it to a Linux host for execution, e.g. via a Docker or webapp container (e.g. Tomcat). Combined with the equivalent Windows support we added in beta 2 and the easy to use mock enclave API, this completes our developer platform support and allows mixed teams of people working on their preferred OS to build enclave-oriented apps together. Please note: at this time only the Avian runtime can be cross-compiled from Windows and macOS.
- New feature! You may now make concurrent calls into the enclave using multiple threads,.
- Remote attestations (serialized
EnclaveInstanceInfoobjects) now remain valid across enclave restarts. They may still be invalidated by changes to the SGX TCB, for example, microcode updates applied as part of an operating system upgrade.
- Enclave/host communication now handles exceptions thrown across the boundary properly.
- In order to prevent accidental leakage of information from inside enclaves, release builds of enclaves no
longer propagate console output across the enclave boundary. Calls to
System.out.println()and related methods will now only print to the console on simulation and debug builds of enclaves.
- New feature! Build enclaves on Windows without any special emulators, virtual machines or other setup.
- New feature! Specify an enclave's product ID and revocation level in the enclave build file. There's a new
conclaveblock which lets you do this. These values are enforced in any relevant
- New feature! A new
EnclaveHost.checkPlatformSupportsEnclavesAPI allows you to probe the host operating system to check if enclaves are loadable, before you try to actually do so. Additionally, if SGX is disabled in the BIOS but can be enabled by software request, Conclave can now do this for you. If the host machine needs extra configuration a useful error message is now provided in the exception.
- New feature! Better support for enclave signing in the Gradle plugin. New documentation has been added showing how to sign with externally managed keys.
- You can now use the Conclave host API from Java 11. The version of Java inside the enclave remains at Java 8.
- We've upgraded to use the version 2.9.1 of the Intel SGX SDK, which brings security improvements and lays the groundwork for new features. Make sure your host system is also running version 2.9.1. We've also upgraded to the latest version of the Intel Attestation Service (IAS).
- The ID for the enclave plugin is now
com.r3.conclave.enclave. You will need to change this in your enclave's build.gradle file.
enclave.xmlfiles are no longer needed. You can safely delete them, as they're now generated for you by Conclave.
- The enclave measurement is now stable when built using different versions of the JDK.
- The format of an
EnclaveInstanceInfohas been optimised. Old
EnclaveInstanceInfoobjects won't work with the beta 2 client libraries and vice-versa.
- Java serialization is now formally blocked inside the enclave using a filter. Unfiltered deserialization has a history of leading to exploits in programs written in high level managed languages.