Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bb5530e4 authored by Stephan Mueller's avatar Stephan Mueller Committed by Herbert Xu
Browse files

crypto: jitterentropy - add jitterentropy RNG

The CPU Jitter RNG provides a source of good entropy by
collecting CPU executing time jitter. The entropy in the CPU
execution time jitter is magnified by the CPU Jitter Random
Number Generator. The CPU Jitter Random Number Generator uses
the CPU execution timing jitter to generate a bit stream
which complies with different statistical measurements that
determine the bit stream is random.

The CPU Jitter Random Number Generator delivers entropy which
follows information theoretical requirements. Based on these
studies and the implementation, the caller can assume that
one bit of data extracted from the CPU Jitter Random Number
Generator holds one bit of entropy.

The CPU Jitter Random Number Generator provides a decentralized
source of entropy, i.e. every caller can operate on a private
state of the entropy pool.

The RNG does not have any dependencies on any other service
in the kernel. The RNG only needs a high-resolution time
stamp.

Further design details, the cryptographic assessment and
large array of test results are documented at
http://www.chronox.de/jent.html

.

CC: Andreas Steffen <andreas.steffen@strongswan.org>
CC: Theodore Ts'o <tytso@mit.edu>
CC: Sandy Harris <sandyinchina@gmail.com>
Signed-off-by: default avatarStephan Mueller <smueller@chronox.de>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent b8ec5ba4
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -1489,9 +1489,19 @@ config CRYPTO_DRBG
	tristate
	tristate
	default CRYPTO_DRBG_MENU if (CRYPTO_DRBG_HMAC || CRYPTO_DRBG_HASH || CRYPTO_DRBG_CTR)
	default CRYPTO_DRBG_MENU if (CRYPTO_DRBG_HMAC || CRYPTO_DRBG_HASH || CRYPTO_DRBG_CTR)
	select CRYPTO_RNG
	select CRYPTO_RNG
	select CRYPTO_JITTERENTROPY


endif	# if CRYPTO_DRBG_MENU
endif	# if CRYPTO_DRBG_MENU


config CRYPTO_JITTERENTROPY
	tristate "Jitterentropy Non-Deterministic Random Number Generator"
	help
	  The Jitterentropy RNG is a noise that is intended
	  to provide seed to another RNG. The RNG does not
	  perform any cryptographic whitening of the generated
	  random numbers. This Jitterentropy RNG registers with
	  the kernel crypto API and can be used by any caller.

config CRYPTO_USER_API
config CRYPTO_USER_API
	tristate
	tristate


+2 −0
Original line number Original line Diff line number Diff line
@@ -95,6 +95,8 @@ obj-$(CONFIG_CRYPTO_RNG2) += rng.o
obj-$(CONFIG_CRYPTO_RNG2) += krng.o
obj-$(CONFIG_CRYPTO_RNG2) += krng.o
obj-$(CONFIG_CRYPTO_ANSI_CPRNG) += ansi_cprng.o
obj-$(CONFIG_CRYPTO_ANSI_CPRNG) += ansi_cprng.o
obj-$(CONFIG_CRYPTO_DRBG) += drbg.o
obj-$(CONFIG_CRYPTO_DRBG) += drbg.o
CFLAGS_jitterentropy.o = -O0
obj-$(CONFIG_CRYPTO_JITTERENTROPY) += jitterentropy.o
obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o
obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o
obj-$(CONFIG_CRYPTO_GHASH) += ghash-generic.o
obj-$(CONFIG_CRYPTO_GHASH) += ghash-generic.o
obj-$(CONFIG_CRYPTO_USER_API) += af_alg.o
obj-$(CONFIG_CRYPTO_USER_API) += af_alg.o

crypto/jitterentropy.c

0 → 100644
+909 −0

File added.

Preview size limit exceeded, changes collapsed.

+4 −0
Original line number Original line Diff line number Diff line
@@ -3105,6 +3105,10 @@ static const struct alg_test_desc alg_test_descs[] = {
				.count = HMAC_SHA512_TEST_VECTORS
				.count = HMAC_SHA512_TEST_VECTORS
			}
			}
		}
		}
	}, {
		.alg = "jitterentropy_rng",
		.fips_allowed = 1,
		.test = alg_test_null,
	}, {
	}, {
		.alg = "lrw(aes)",
		.alg = "lrw(aes)",
		.test = alg_test_skcipher,
		.test = alg_test_skcipher,