真随机数发生器 (TRNG)
W55MH32 是 WIZnet 推出的一款专为网络中心嵌入式应用设计的微控制器。为了满足此类应用严格的安全需求,W55MH32 集成了一个专用的硬件外设,称为真随机数发生器 (TRNG)。TRNG 不是一种软件算法,而是一个真正的硬件组件,它从物理熵源获取数据,提供不可预测、高质量的随机数流。对于加密操作而言,随机值的完整性和不可预测性至关重要,因此这项功能非常关键。
概述与工作原理
W55MH32 的 TRNG 通过利用内部物理过程产生真正的随机性来源。虽然具体的熵源是芯片内部设计的一部分,但其整体工作流程遵循硬件 TRNG 的标准架构:
1.熵源(Entropy Source): TRNG 利用内部模拟噪声源(可能基于热噪声或时钟抖动)产生不可预测的电信号。这个信号是随机数生成的基础。
2.数字化器(Digitizer): 来自熵源的模拟信号通过数字化器,将物理噪声转换为原始的二进制数据流。这些原始数据虽然随机,但可能仍存在统计偏差。
3.调节器(Conditioner): 原始二进制数据随后进入数字调节器。这个硬件模块执行后处理, 以消除任何偏差,并确保最终的随机比特流具有均匀分布。结果就是生成一个高质量、加密安全的随机数,并存储在 TRNG 的数据寄存器中。
W55MH32 的 TRNG 旨在符合行业标准,为嵌入式应用提供可靠且安全的随机性来源。
W55MH32 TRNG 在 TLS/SSL 中的作用
W55MH32 的 TRNG 是在芯片上安全实现 TLS/SSL 等协议的关键。在网络通信中,这些协议需要强大的随机性来源来建立安全连接。 TRNG 通过为以下关键步骤提供不可预测的必要值来履行这一职责:
- 会话密钥生成:在 TLS 握手过程中,客户端和服务器都会交换用于派生共享会话密钥的随机数。 W55MH32 的 TRNG 确保其贡献的随机值是完全不可预测的,从而防止攻击者猜测或重现会话密钥。
- 一次性随机数(Nonces):TRNG 用于生成随机的“一次性随机数”,以防止重放攻击,并确保会话中的每条消息都是唯一且真实的。
通过提供基于硬件的、加密安全的随机性来源,W55MH32 允许开发人员构建安全、可信的网络设备。
应用
W55MH32 的 TRNG 功能使其非常适合各种注重安全的应用,包括:
- 物联网 (IoT) 安全:为数据传输和身份验证生成唯一的设备 ID 和安全的加密密钥。
- 网络设备: 为安全启动过程和建立加密连接提供可信的随机性来源。
- 加密库: 为固件和其他与安全相关的软件中使用的伪随机数发生器 (PRNG) 提供种子。
- 安全通信:为 VPN、安全电子邮件和其他加密数据流生成密钥和一次性随机数。
W55MH32 TRNG 的操作流程
W55MH32 提供了两种与 TRNG 外设交互的主要方法:轮询(Polling) 和 中断驱动(Interrupt-Driven)。用户提供的代码片段清楚地展示了这两种方法。
1. 轮询(Polling)方式
TRNG_Polling 函数演示了 CPU 如何主动等待随机数准备就绪。
void TRNG_Polling(void)
{
uint32_t Buf[4];
TRNG_Out(ENABLE);
TRNG_Start();
while (1)
{
if (0 == TRNG_Get(Buf))
{
printf("Rng : %08X %08X %08X %08X \r\n", Buf[0], Buf[1], Buf[2], Buf[3]);
TRNG_ClearITPendingBit(TRNG_IT_RNG0_5128);
}
}
}
- 流程: 函数启动 TRNG (TRNG_Start),然后进入一个无限 while 循环。在循环内部,它不断调用 TRNG_Get(Buf)。 这个函数是一个轮询机制,用于检查 TRNG 上的状态标志。
- 结果: CPU 专注于此任务,不断检查随机数是否准备就绪。printf 语句仅在 TRNG_Get() 返回 0 时执行,这表示已成功生成并存储了新的 128 位随机数到 Buf 数组中。 调用 TRNG_ClearITPendingBit 是必要的,用于重置“就绪”标志,以便 TRNG 可以生成下一个随机数。

2. 中断驱动(Interrupt-Driven)方式
TRNG_Int 函数演示了一种更高效的中断驱动方法。
void TRNG_Int(void)
{
NVIC_Configuration();
TRNG_Out(ENABLE);
TRNG_ITConfig(ENABLE);
//TRNG_SetPseudoRandom(0X12345560);
TRNG_Start();
}
- 流程: 此函数配置 TRNG 在完成任务时向 CPU 发出信号。它启用 TRNG (TRNG_Out),配置 NVIC (NVIC_Configuration) 来处理中断,并启用 TRNG 的中断功能 (TRNG_ITConfig)。
- 结果: 调用 TRNG_Int 后,主程序可以继续执行其他任务或进入空闲状态。CPU 不会主动轮询。当 TRNG 成功生成随机数时,它会触发一个中断。一个单独的中断服务程序 (ISR)(代码中未显示)随后会执行,从 TRNG 寄存器中读取随机数。 TRNG_SetPseudoRandom(0X12345560) 这行代码很可能是用于测试或伪随机模式的特定功能,用于调试或验证目的。

总的来说,中断驱动方法效率很高,因为它允许 CPU 在 TRNG 在后台工作时执行其他操作。轮询方法实现起来更简单,但会浪费 CPU 周期,通常不适用于复杂的应用。
结论
W55MH32 的硬件 TRNG 是一项强大的功能,提升了其在安全网络和嵌入式应用中的能力。通过提供真正的物理随机性来源,它为加密操作(从 TLS/SSL 密钥生成到安全硬件认证)提供了最高级别的安全性。WIZnet W55MH32 灵活的 API,支持高效的中断驱动和直接的轮询方法,使开发人员能够将这一关键安全功能无缝集成到他们的项目中,确保其系统在日益互联的世界中的完整性和机密性。