Reference

crypto(7)

OpenCrypto algorithms

NAME

crypto – OpenCrypto algorithms

DESCRIPTION

The in-kernel OpenCrypto framework supports several different encryption and authentication algorithms. This document describes the parameters and requirements of these algorithms. Unless otherwise noted, all sizes listed below are in bytes.

Authenticators

Authenticators compute a value (also known as a digest, hash, or tag) over an input of bytes. In-kernel requests can either compute the value for a given input, or verify if a given tag matches the computed tag for a given input. The following authentication algorithms are supported:

NameNonceKey SizesDigestDescription
CRYPTO_AES_CCM_CBC_MAC1216, 24, 3216
CRYPTO_AES_NIST_GMAC1216, 24, 3216
CRYPTO_BLAKE2B0, 6464
CRYPTO_BLAKE2S0, 3232
CRYPTO_NULL_HMAC12
CRYPTO_POLY13053216
CRYPTO_RIPEMD16020
CRYPTO_RIPEMD160_HMAC6420
CRYPTO_SHA120
CRYPTO_SHA1_HMAC6420
CRYPTO_SHA2_22428
CRYPTO_SHA2_224_HMAC6428
CRYPTO_SHA2_25632
CRYPTO_SHA2_256_HMAC6432
CRYPTO_SHA2_38448
CRYPTO_SHA2_384_HMAC12848
CRYPTO_SHA2_51264
CRYPTO_SHA2_512_HMAC12864

Block Ciphers

Block ciphers in OCF can only operate on messages whose length is an exact multiple of the cipher's block size. OCF supports the following block ciphers:

NameIV SizeBlock SizeKey SizesDescription
CRYPTO_AES_CBC161616, 24, 32
CRYPTO_AES_XTS81632, 64
CRYPTO_CAMELLIA_CBC161616, 24, 32
CRYPTO_NULL_CBC040-256

CRYPTO_AES_XTS implements XEX Tweakable Block Cipher with Ciphertext Stealing as defined in NIST SP 800-38E. OCF consumers provide the first 8 bytes of the IV. The remaining 8 bytes are defined to be a block counter beginning at 0.

NOTE: The ciphertext stealing part is not implemented in all backends which is why this cipher requires input that is a multiple of the block size.

Stream Ciphers

Stream ciphers can operate on messages with arbitrary lengths. OCF supports the following stream ciphers:

NameIV SizeKey SizesDescription
CRYPTO_AES_ICM1616, 24, 32
CRYPTO_CHACHA201616, 32

The IV for each request must be provided in crp_iv via the CRYPTO_F_IV_SEPARATE flag.

CRYPTO_AES_ICM uses the entire IV as a 128-bit big endian block counter. The IV sets the initial counter value for a message. If a consumer wishes to use an IV whose value is split into separate nonce and counter fields (e.g., IPsec), the consumer is responsible for splitting requests to handle counter rollover.

CRYPTO_CHACHA20 accepts a 16 byte IV. The first 8 bytes are used as a nonce. The last 8 bytes are used as a 64-bit little-endian block counter.

Authenticated Encryption with Associated Data Algorithms

AEAD algorithms in OCF combine a stream cipher with an authentication algorithm to provide both secrecy and authentication. AEAD algorithms accept additional authentication data (AAD) in addition to the ciphertext or plaintext. AAD is passed to the authentication algorithm as input in a method defined by the specific AEAD algorithm.

AEAD algorithms in OCF accept a nonce that is combined with an algorithm-defined counter to construct the IV for the underlying stream cipher. This nonce must be provided in crp_iv via the CRYPTO_F_IV_SEPARATE flag. Some AEAD algorithms support multiple nonce sizes. The first size listed is the default nonce size.

The following AEAD algorithms are supported:

NameNonceKey SizesTagDescription
CRYPTO_AES_NIST_GCM_161216, 24, 3216
CRYPTO_AES_CCM_1612, 7-1316, 24, 3216
CRYPTO_CHACHA20_POLY130512, 83216
CRYPTO_XCHACHA20_POLY1305243216

SEE ALSO

crypto(4), crypto(9)

HISTORY

The crypto manual page first appeared in FreeBSD 10.1.

History