Skip to content
This repository has been archived by the owner on Feb 18, 2021. It is now read-only.

Latest commit

 

History

History

cs

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Cipher Sets

A Cipher Set (CS) is a group of crypto algrithms that are used to implement the core security functions as required by E3X. Multiple sets exist to allow an evolution of supporting newer techniques as well as adapting to different system and deployment requirements.

A set always contains an endpoint public key cipher, an ephemeral public key cipher (for forward secrecy), and an authenticated streaming cipher. Often a set uses the same public key algorithm for both the endpoint and epehemeral ciphers with different keys for each.

## Cipher Set Key (CSK)

Each set can generate a single public key byte array called the Cipher Set Key (CSK) that is shared to other entities in order to generate outgoing or validate incoming messages.

The CSK is a consistent opaque value intended for use only by a given CS. It must be treated as an arbitrary binary octet string when transferred, imported, or exported.

## Cipher Set ID (CSID)

Each CSK is identified with a unique identifier (CSID) that represents its overall selection priority. The CSID is a single byte, typically represented in lower case hex. The CSIDs are always sorted from lowest to highest preference.

Two endpoints must always create exchanges to each other using the highest common CSID between them. Apps may choose which one or more CSIDs they want to support when they create an endpoint and know that a lower one will only ever be used to communicate with other endpoints that only support that CS.

Every CS requires a strong/secure random number generator in order to minimally function, some of them may have additional entropy requirements during CSK generation.

The 0x00 CSID is not allowed and always considered invalid.

Any CSID of 0x0* (0x01 through 0x0f) is for experimental use when developing custom Cipher Sets and should not be used in production.

### Reserved

All CSIDs with the mask of 11111000 (0x18 through 0x1f, 0x28 through 0x2f, etc) are reserved and their usage is specified in this table:

CSID Status Crypto Uses
CS1a Active ECC-160, AES-128 Embedded, Browser
CS1b Draft ECC-256, AES-128 Hardware-Accelerated
CS1c Draft ECC-256k, AES-256 Bitcoin-based Apps
CS2a Active RSA-2048, ECC-256, AES-256 Server, Apps
CS2b Draft RSA-4096, ECC-521, AES-256 High-Security
CS3a Active Curve25519, XSalsa20, Poly1305 Server, Apps
### Custom

Any CSID with the mask of 11110111 (0x10 through 0x17, 0x20 through 0x27, etc) are for custom application usage, these Cipher Sets definitions are entirely app-specific. Implementations are responsible for ensuring that the custom CSIDs match their security preferences.

See the JOSE-based mapping draft for example custom CSIDs.