Hardware random overview

Revision as of 07:42, 10 January 2019 by Lme00487 (talk | contribs) (How to use the framework)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Template:ArticleMainWriter Template:ArticleApprovedVersion

This article gives information about the hardware random (HWRNG) framework.

1 Framework purpose[edit]

The Hardware random framework is integrated in the kernel. It provides access to RNG peripherals and focuses on supporting the hardware number generator.

2 System overview[edit]

The HW random framework allows retrieving random numbers in userland.

Alternate text
Hw Random

2.1 Component description[edit]

  • HW random core (Kernel space)

Generic interface in kernel space. This layer is in charge of creating the character device (char device) and sysfs to access hw_random.

  • RNG (Kernel space)

Hardware random Linux® drivers handling the HW blocks.

  • RNG (Hardware)

HW blocks handling the RNG peripheral.

2.2 API description[edit]

The Hardware random framework uses char device API[1] ioctl operations. For additional information, refer to:

  • sysfs interface.
  • Kernel Documentation directory[2]

3 Configuration[edit]

3.1 Kernel configuration[edit]

The Hardware random support is activated by default in ST deliveries. No specific configuration is required apart from enabling or disabling peripheral support using Linux® Menuconfig tool. Refer to Menuconfig or how to configure kernel and select:

  [*] Device Drivers --->
    [*] Character devices --->
      [*] Hardware Random Number Generator Core support --->
        [*] STMicroelectronics STM32 random number generator

3.2 Device tree configuration[edit]

DT configuration can be done thanks to the STM32CubeMX.

A detailed device tree configuration is described in RNG device tree configuration.

4 How to use the framework[edit]

The framework provides external interfaces from userland : How to control RNG.

4.1 How to use from char device[edit]

The community tool for using Hardware random framework is rng_tools[3] which provides a complete set of utilities related to random number generators:

  • rngd: runs a background daemon that opens /dev/hwrng file (default) to connect and retrieve random numbers.
  • rngtest: runs different tests that check the entropy and verify the compliance regarding FIPS 140-2 standard.

4.2 How to use from sysfs[edit]

Available devices compatible with Hardware framework can be listed using sysfs commands:

 Board $> cat /sys/class/misc/hw_random/rng_available

The selected device is shown here:

 Board $> cat /sys/class/misc/hw_random/rng_current

To select a different device:

 Board $> echo "stm32-rng"> /sys/class/misc/hw_random/rng_current

5 How to trace and debug the framework[edit]

Light information on the framework can be accessed by using sysfs.

By default, the framework does not provide any specific debug output or dynamic debugging tool.

6 Source code location[edit]

Hardware random drivers and framework are available here[4].

7 To go further[edit]

Code examples are directly available from rng-tools[3] github.

8 References[edit]