Skip to content

Commit

Permalink
TR and docs (#19)
Browse files Browse the repository at this point in the history
* Add the CCF technical report (987e4c1)
* Update TR and documentation on crypto
  • Loading branch information
fournet authored and achamayou committed May 2, 2019
1 parent 18ae947 commit 53352a5
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 22 deletions.
Binary file added CCF-TECHNICAL-REPORT.pdf
Binary file not shown.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,16 @@ to embed one of several language runtimes on top of its key-value store. Clients

## Learn more and get started

* Get a more detailed breakdown of CCF by reading the CCF Technical Report
* Explore the CCF open-source GitHub repo, which also contains application examples and sample scripts for provisioning and setting up confidential computing VMs using Azure
* Read the [CCF Technical Report](CCF-TECHNICAL-REPORT.pdf) for a more detailed description.
* Explore the CCF open-source GitHub repo, which also contains application examples and sample scripts for provisioning and setting up confidential computing VMs using Azure.
* Learn more about [Azure Confidential Computing](https://azure.microsoft.com/solutions/confidential-compute/) offerings like Azure DC-series (which support Intel SGX TEE)
and [Open Enclave](https://github.com/Microsoft/openenclave) that CCF can run on
and [Open Enclave](https://github.com/Microsoft/openenclave) that CCF can run on.

## Getting Started on Azure Confidential Computing

Under `getting_started/`:
* `create_vm/` contains scripts to create an ACC VM (`make_vm.sh`).
This script expects a valid Azure subscription name to be set, eg: `export SUBSCRIPTION=sub_name`
This script expects a valid Azure subscription name to be set, eg: `export SUBSCRIPTION=sub_name`.
* `setup_vm/` contains ansible playbooks that need to be run on the VM once created, for it to be able to build CCF.
Running `./setup.sh` will apply those playbooks to the VM.

Expand Down
33 changes: 16 additions & 17 deletions sphinx/source/cryptography.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,45 +9,44 @@ Network

A CCF network has a master secret, which is used to derive keys for multiple purposes:

* A network identity, used in :term:`TLS`
* A symmetric data key, used to encrypt entries in the ledgers
* A network identity public-key certificate, used for :term:`TLS` server authentication.
* Symmetric data-encryption keys, used to encrypt entries in the ledger.

Node
````

Each CCF node has a key pair. It is used to authenticate the node when it joins the
network, as well as to sign entries committed by a node to the ledger during its
time as leader.
Each CCF node is identified by a fresh public-key certificate endorsed by a quote.
This certificate is used to authenticate the node when it joins the
network, and to sign entries committed by the node to the ledger during its time as leader.

Node keys are also used during recovery, to share recovered network secrets with nodes.
Node keys are also used during recovery, to share recovered network secrets between nodes.

User
````

CCF users have key pairs, used to authenticate their :term:`TLS` connections to the service.
These keys can also be used to sign user commands.
Each CCF user is identified by a public-key certificate, used for :term:`TLS` client authentication when they connect to the service.
These keys are also used to sign user commands.

Member
``````

CCF consortium members are identified by key pairs, which are used for authentication when
connecting to the member frontend.
Each CCF consortium member is similarly identified by a public-key certificate used for client authentication and command signing.

Ephemeral Network Keys
``````````````````````

Each node to node pair establishes a unique symmetric key, using authenticated Diffie Hellman key exchange,
to authenticate ledger replication headers between the nodes. It is also use to encrypt forwarded
Each node to node pair establishes a symmetric traffic key, using an authenticated Diffie Hellman key exchange.
This key authenticates ledger replication headers exchanged between nodes. It is also use to encrypt forwarded
write transactions from the followers to the leader.

Algorithms and Curves
---------------------

All symmetric encryption in CCF is done with AES-GCM-256 from `Project Everest <https://project-everest.github.io/>`_.
Authenticated encryption in CCF relies on AES256-GCM. Ledger authentication relies on Merkle trees using SHA2-256. These algorithms are provided by `project Everest <https://project-everest.github.io/>`_.

Asymmetric crypto can be configured to use one of the following implementations:
Public-key certificates, signatures, and ephemeral Diffie-Hellman key exchanges all rely on
elliptic curves. They can be configured to use one of the following implementations:

* curve25519/ed25519 from `Project Everest <https://project-everest.github.io/>`_.
* secp384r1 from `mbedTLS <https://tls.mbed.org/>`_.
* secp256k1 from `mbedTLS <https://tls.mbed.org/>`_.
* curve25519/ed25519 from `project Everest <https://project-everest.github.io/>`_.
* secp384r1 or secp256r1 from `mbedTLS <https://tls.mbed.org/>`_.
* secp256k1 from `bitcoin core <https://github.com/bitcoin-core/secp256k1>`_.
2 changes: 1 addition & 1 deletion sphinx/source/glossary.rst
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ Glossary
`Trusted Execution Environment <https://en.wikipedia.org/wiki/Trusted_execution_environment>`_ is a secure area of a main processor. It guarantees code and data loaded inside to be protected with respect to confidentiality and integrity.

TLS
`Transport Layer Security <https://en.wikipedia.org/wiki/Transport_Layer_Security>`_ is a cryptographic protocol designed to provide communications security over a computer network.
`Transport Layer Security <https://en.wikipedia.org/wiki/Transport_Layer_Security>`_ is an IETF cryptographic protocol standard designed to secure communications between a client and a server over a computer network.

JSON-RPC
`JSON-RPC <https://en.wikipedia.org/wiki/JSON-RPC>`_ is a remote procedure call protocol encoded in JSON.
Expand Down

0 comments on commit 53352a5

Please sign in to comment.