20 Jun, 2019

1 commit


06 Jun, 2019

1 commit

  • The Jitter RNG implementation is updated to comply with upstream version
    2.1.2. The change covers the following aspects:

    * Time variation measurement is conducted over the LFSR operation
    instead of the XOR folding

    * Invcation of stuck test during initialization

    * Removal of the stirring functionality and the Von-Neumann
    unbiaser as the LFSR using a primitive and irreducible polynomial
    generates an identical distribution of random bits

    This implementation was successfully used in FIPS 140-2 validations
    as well as in German BSI evaluations.

    This kernel implementation was tested as follows:

    * The unchanged kernel code file jitterentropy.c is compiled as part
    of user space application to generate raw unconditioned noise
    data. That data is processed with the NIST SP800-90B non-IID test
    tool to verify that the kernel code exhibits an equal amount of noise
    as the upstream Jitter RNG version 2.1.2.

    * Using AF_ALG with the libkcapi tool of kcapi-rng the Jitter RNG was
    output tested with dieharder to verify that the output does not
    exhibit statistical weaknesses. The following command was used:
    kcapi-rng -n "jitterentropy_rng" -b 100000000000 | dieharder -a -g 200

    * The unchanged kernel code file jitterentropy.c is compiled as part
    of user space application to test the LFSR implementation. The
    LFSR is injected a monotonically increasing counter as input and
    the output is fed into dieharder to verify that the LFSR operation
    does not exhibit statistical weaknesses.

    * The patch was tested on the Muen separation kernel which returns
    a more coarse time stamp to verify that the Jitter RNG does not cause
    regressions with its initialization test considering that the Jitter
    RNG depends on a high-resolution timer.

    Tested-by: Reto Buerki
    Signed-off-by: Stephan Mueller
    Signed-off-by: Herbert Xu

    Stephan Müller
     

30 May, 2019

1 commit

  • "jitterentropy_rng" doesn't have any other implementations, nor is it
    tested by the crypto self-tests. So it was unnecessary to change it to
    subsys_initcall. Also it depends on the main clocksource being
    initialized, which may happen after subsys_initcall, causing this error:

    jitterentropy: Initialization failed with host not compliant with requirements: 2

    Change it back to module_init().

    Fixes: c4741b230597 ("crypto: run initcalls for generic implementations earlier")
    Reported-by: Geert Uytterhoeven
    Signed-off-by: Eric Biggers
    Tested-by: Geert Uytterhoeven
    Signed-off-by: Herbert Xu

    Eric Biggers
     

18 Apr, 2019

1 commit

  • Use subsys_initcall for registration of all templates and generic
    algorithm implementations, rather than module_init. Then change
    cryptomgr to use arch_initcall, to place it before the subsys_initcalls.

    This is needed so that when both a generic and optimized implementation
    of an algorithm are built into the kernel (not loadable modules), the
    generic implementation is registered before the optimized one.
    Otherwise, the self-tests for the optimized implementation are unable to
    allocate the generic implementation for the new comparison fuzz tests.

    Note that on arm, a side effect of this change is that self-tests for
    generic implementations may run before the unaligned access handler has
    been installed. So, unaligned accesses will crash the kernel. This is
    arguably a good thing as it makes it easier to detect that type of bug.

    Signed-off-by: Eric Biggers
    Signed-off-by: Herbert Xu

    Eric Biggers
     

17 Nov, 2016

1 commit


24 Jun, 2016

1 commit

  • As part of the Y2038 development, __getnstimeofday is not supposed to be
    used any more. It is now replaced with ktime_get_ns. The Jitter RNG uses
    the time stamp to measure the execution time of a given code path and
    tries to detect variations in the execution time. Therefore, the only
    requirement the Jitter RNG has, is a sufficient high resolution to
    detect these variations.

    The change was tested on x86 to show an identical behavior as RDTSC. The
    used test code simply measures the execution time of the heart of the
    RNG:

    jent_get_nstime(&time);
    jent_memaccess(ec, min);
    jent_fold_time(NULL, time, &folded, min);
    jent_get_nstime(&time2);
    return ((time2 - time));

    Signed-off-by: Stephan Mueller
    Acked-by: Arnd Bergmann
    Signed-off-by: Herbert Xu

    Stephan Mueller
     

14 Oct, 2015

1 commit


28 Jul, 2015

1 commit


25 Jun, 2015

1 commit

  • The core of the Jitter RNG is intended to be compiled with -O0. To
    ensure that the Jitter RNG can be compiled on all architectures,
    separate out the RNG core into a stand-alone C file that can be compiled
    with -O0 which does not depend on any kernel include file.

    As no kernel includes can be used in the C file implementing the core
    RNG, any dependencies on kernel code must be extracted.

    A second file provides the link to the kernel and the kernel crypto API
    that can be compiled with the regular compile options of the kernel.

    Signed-off-by: Stephan Mueller
    Signed-off-by: Herbert Xu

    Stephan Mueller