IC:

概述

真随机数生成器(TRNG)可生成全熵 32 位随机数据供应用程序使用。其核心组件包括动态熵源和内部调理模块。采用物理熵源设计,从根本上免疫旁路攻击。 该模块已通过 NIST sts-2.1.2 随机性测试。

特性

  • TRNG 生成由熵源产生的 32 位真随机数

  • TRNG 内部嵌入了一个健康测试单元和一个错误管理单元

  • TRNG 包含两个独立的 FIFO:FIFO_NS 和 FIFO_S(更高优先级)

  • TRNG 的吞吐量约为 2Mbps

架构

结构框图

../../rst_secure/3_trng/figures/trng_block_diagram.svg

关键子模块功能

  1. 时钟与熵源

    • PLL 锁相环:提供稳定时钟信号,保障系统时序精准。

    • 噪声源(Noise Source):利用时钟抖动等物理过程产生随机噪声信号,作为生成随机数的基础。

    • 去偏(Debias):处理噪声信号,消除或减少偏差。

    • LFSR(线性反馈移位寄存器):对去偏后的信号进一步混合处理,增加随机序列复杂性和周期长度。

    • 提取器(Extractor):从处理后的信号中提取出最终的随机数序列。

  2. 控制与安全

    • TRNG control:

      • 此区域为真正的控制寄存器。

      • 增加一个控制位,用于控制是否允许从非安全域(non-secure world)访问控制寄存器。

    • Control_S:

      • 安全域的访问窗口,实际地址为 Control 寄存器。

    • Control_NS:

      • 非安全域的访问窗口,实际地址为 Control 寄存器。

      • 仅当控制寄存器(Control)中的 S 位为 A 时才可访问。

  3. FIFO 资源分级

    • 安全域 FIFO_S:

      • 256 位容量,高优先级填充(数据量小于 128 位时立即补满,保证遭受恶意攻击时,安全域可以正常获取随机值)。

    • 非安全域 FIFO_NS:

      • 128 位容量,填充依赖安全域余量(FIFO_S ≥ 128 位时开启填充)。

  4. 数据可靠性

    • 内置 1024 位 APT 测试缓冲区,确保输出通过 NIST sts-2.1.2 标准验证。

使用说明

  • 若系统需启用安全属性,建议将 TRNG 设置为安全模式,确保其控制寄存器仅允许安全域(Secure World)访问,防止非安全域(Non-Secure World)非法操作。

  • 当安全域与非安全域同时请求大量随机数据时:

    • 来自安全域的请求会优先得到响应(更高优先级)。

    • 安全域请求处理完毕后,才会响应来自非安全域的请求。

API

API

描述

参数

_rand()

获取单个32位真随机数

TRNG_get_random_bytes()

获取指定长度的随机字节流,优化处理非对齐内存访问

  • buf:

  • len:

TRNG_get_random_bytes_f_rng()

为用户提供的,可以作为 mbedtls 标准 RNG 函数签名的适配器

  • p_rng

  • output

  • output_size

__wrap_rand()

可以替代标准库 rand(),返回值范围:0 ≤ n ≤ __RAND_MAX (当前为 0x7FFFFFFF)