数字安全隐形基石:随机数、熵源与DRBG核心解析与技术关联

前言:数字安全的 "隐形基石"

在数字化浪潮席卷全球的今天,从金融交易的密钥生成到区块链的共识机制,从量子通信的加密协议到智能汽车的身份认证,随机数如同空气般渗透在信息系统的每一个安全节点。然而,看似简单的 "随机" 二字背后,隐藏着一套精密的技术体系:熵源作为随机性的 "原始矿藏",决定了随机数的 "基因纯度";DRBG(确定性随机比特生成器)则是 "提炼工厂",将有限的原始熵转化为海量可用的随机序列;而最终输出的随机数,既是安全协议的 "密钥材料",也是抵御攻击的 "第一道防线"。

一个简单的比喻

想象一下你要创建一个无人能预测的彩票抽奖系统:

  1. 熵源 :就像测量天空中云朵形状和风速的过程。这个过程充满了不可预测性(高熵),是真正随机性的来源。你得到的是原始的、混乱的、非数字的"随机素材"。

  2. 随机数 :就是最终开奖的那个号码 ,比如 5, 17, 23, 36, 41。它是最终可以被系统使用的、格式规整的数字。

  3. DRBG :就像彩票摇奖机。它本身不会产生随机性。它的作用是:

  • 初始化(播种):你先把从"测量云朵"得到的那一团原始随机数据(熵)作为种子,放进摇奖机里。
  • 生成号码:然后,你启动摇奖机(DRBG),它会根据初始的种子,通过一套复杂的数学算法,摇出(生成)一连串看似随机的中奖号码。
  • 效率与连续性:这样你就不需要每次都去测量云朵(那样很慢),只需要摇动机器(非常快)就能得到大量的号码。

随着量子计算的崛起和攻击手段的升级,传统随机数生成机制正面临前所未有的挑战:2013 年 Dual_EC_DRBG 算法的后门曝光,揭示了标准制定中的信任危机;2022 年 NIST 对 SP 800-90B 的修订,反映了熵源评估方法的持续迭代;中国 GB/T 45240-2025 的发布,则标志着量子随机数标准化的全球竞争进入新阶段。理解随机数、熵源与 DRBG 的技术原理、协同关系及标准体系,已成为信息安全领域的核心课题。

一、随机数的分类与技术解析

  • 定义:指在一定范围内随机产生的、无规律可循的数字序列。它是最终的目的和产物。
(一)随机数的技术分类

|----------------|-----------------------------------------------|--------------------------------------------------------|-----------------------------|
| 类型 | 技术原理 | 典型实现方案 | 应用场景 |
| 真随机数(TRNG) | 基于量子涨落、热噪声等物理过程,输出具有不可预测性和不可复现性 | 中国科学技术大学器件无关量子随机数发生器(通过贝尔检验) | 高安全场景(如量子密钥分发、数字签名) |
| 伪随机数(PRNG) | 通过算法生成看似随机的序列,相同种子产生相同输出 | 梅森旋转算法(周期 2^19937-1)、AES-CTR_DRBG(NIST SP 800-90A 推荐) | 高性能计算(如蒙特卡洛模拟)、非关键业务逻辑 |
| 密码学随机数 | 需同时满足统计随机性(通过 SP 800-22 测试)和不可预测性(抗前向 / 后向预测) | Linux /dev/urandom(SHA-3 哈希 + 硬件熵源补充) | 密钥生成(如 AES 密钥)、安全协议(TLS 握手) |
| 量子随机数 | 利用量子力学内禀随机性(如单光子探测、纠缠光子对) | 国盾量子 GB/T 45240-2025 器件无关量子随机数发生器(自验证安全) | 后量子密码、零知识证明等前沿领域 |

(二)量子随机数的革新突破
  • 器件无关量子随机数:通过贝尔不等式检验,即使设备存在漏洞也能生成可信随机数,如中国科大实现的随机数信标系统,结合后量子签名算法确保广播安全。
  • 性能指标:中国研制的量子随机数发生器实现 3.2Gbps 输出速率,通过 NIST SP 800-22 全套测试,填补国内空白。

二、熵源的分类与技术解析

  • 定义随机性的根本来源。它是从物理世界中采集到的、具有不可预测性和不确定性的原始数据。熵是衡量其混乱度或不可预测性的指标。熵值越高,越随机,越难被猜测。

(一)熵源分类与特性对比

|-----------|-------|-------------------------|--------------------|------------------------|--------------------------|
| 分类 | 子类 | 技术原理 | 优势 | 劣势 | 典型应用场景 |
| 物理熵源 | 热噪声 | 导体中电子热运动产生的电压波动(奈奎斯特定律) | 稳定性高,温度漂移可补偿 | 需低噪声放大器,硬件成本高 | 金融加密设备(如 ATM 机密钥生成) |
| | 雪崩噪声 | 反向偏置 PN 结雪崩倍增过程的随机脉冲电流 | 高速(1.6Gbps),适合硬件实现 | 需高压(5-15V),噪声带宽受限 | 通信设备(如 5G 基站会话密钥生成) |
| | 单光子探测 | 量子不确定性原理下的光子透射 / 反射随机性 | 安全性最高(器件无关),抗量子攻击 | 需低温环境(4K 以下),实现复杂 | 量子通信网络(如京沪干线密钥分发) |
| | 时钟抖动 | 两个高频振荡器相位差的随机漂移 | 无需专用硬件,可在 FPGA 实现 | 熵率较低(1-2 位 / 样本),需交叉验证 | 工业控制系统(如 SCADA 设备随机指令生成) |
| 非物理熵源 | 混沌系统 | 洛伦兹方程或 Logistic 映射的混沌行为 | 软件实现简单,适合嵌入式设备 | 数字化实现存在周期退化风险 | 物联网传感器(如智能家居随机事件触发) |
| | 密码学哈希 | 对系统状态连续哈希扩散随机性 | 与现有系统兼容,成本低 | 依赖哈希函数抗碰撞性(SHA-1 已被破解) | 轻量级加密(如 Wi-Fi 密码生成) |

三、DRBG的分类与技术解析

  • 定义确定性随机比特生成器。它是一种密码学安全的伪随机数生成算法。

  • 特点

    • 高效:一旦被播种,它可以非常快速地生成大量随机数。

    • 可重现:相同的种子会产生相同的输出序列。

    • 密码学安全:即使输出序列的一部分被泄露,也很难推算出之前的数字或预测之后的数字(前提是算法设计是安全的)。

(一)DRBG 类型与特性对比

|------------------|----------------------|---------------|---------------------|------------------------------|----------------------|
| 类型 | 核心算法 | 技术原理 | 优势 | 劣势 | 典型应用场景 |
| Hash_DRBG | SHA-256/SHA-512/SHA3 | 哈希函数迭代扩展种子 | 抗侧信道攻击,软件实现简单 | 生成速率低(100Mbps),不适合高速场景 | 嵌入式设备(如智能卡安全模块) |
| CTR_DRBG | AES-128/256 | 计数器模式加密扩展随机序列 | 硬件加速(10Gbps),适合高速场景 | 依赖分组密码安全性(AES 抗量子攻击需后量子算法替代) | 数据中心(如云服务器 TLS 密钥生成) |
| HMAC_DRBG | HMAC-SHA2/3 | 密钥化哈希的消息认证特性 | 灵活支持多种哈希函数,适合频繁重播种 | 需定期更新密钥,硬件实现复杂度高 | 移动终端(如手机支付会话密钥生成) |
| Dual_EC_DRBG | ECDLP(P-256 曲线) | 椭圆曲线标量乘法生成序列 | 历史兼容性强 | 存在 NSA 后门,已被 NIST 撤销推荐 | 遗留系统(如早期 VPN 设备) |

四、随机数、熵源、DRBG 的关系与标准体系

(一)技术协同关系模型
特性 熵源 DRBG 随机数(最终产物)
角色 随机性的源头 随机性的放大器和生成器 最终产品
本质 物理世界的混沌现象 数学算法 数字
速度 非常快 N/A
确定性 非确定性(真随机) 确定性(伪随机) 分为真随机和伪随机
输出 原始、有偏、非均匀的比特 均匀、无偏、高伪随机性的比特流 格式规整的数字
依赖关系 独立存在,不依赖其他二者 严重依赖熵源进行播种 由熵源或DRBG产生
关联(工作流程):

它们三者构成了一个生成密码学安全随机数的标准管道:

熵源 → DRBG → 随机数

  1. 收集熵:操作系统持续地从各种硬件和软件事件中收集熵,存入一个叫"熵池"的地方。

  2. 播种:当应用程序(如openHiTLS)需要随机数时,DRBG会从熵池中取出足够长度的种子来初始化自己。

  3. 生成:DRBG根据这个种子,运行其加密算法,生成一长串高性能的、密码学安全的伪随机数,提供给应用程序使用。

  4. 重置:为确保安全,DRBG会定期用新的熵重新播种,以防止因内部状态泄露而导致的全序列推演。

区别:
  • 熵源 vs DRBG :熵源是"原因",是"原料";DRBG是"工具",是"加工厂"。最核心的区别是:熵源提供不可预测性,DRBG提供效率和可用的输出长度 。没有熵源的DRBG是完全不安全的,因为它的输出可以被完全预测。

  • DRBG vs 随机数 :DRBG是过程 ,随机数是结果 。我们通过DRBG这个过程 来得到随机数这个结果

你可以这样理解:

计算机需要一个真随机数 (比如用于生成加密密钥),但直接从物理世界收集(熵源)又太慢。

于是,它先收集一点点真正的随机性(熵)作为"种子" ,然后把它喂给一个非常强大的数学算法(DRBG )。这个算法能把这一点点真随机性"放大"成万亿个看起来毫无规律、无法预测的数字 ,即高质量的随机数

所以,熵源是根基,DRBG是核心工具,而安全可靠的随机数是最终追求的目标。三者密不可分,共同构成了现代密码学和安全应用的基石。

(二)标准体系与对应关系

|-------------|-----------------------------|-----------------|---------------------------------------------------|
| 标准类别 | 国际标准 | 中国标准 | 核心内容 |
| 熵源规范 | NIST SP 800-90B Rev.1(2022) | GB/T 37076-2022 | 熵源质量评估方法(如条件最小熵),物理熵源压力测试(温度、电磁干扰) |
| DRBG 规范 | NIST SP 800-90A(2012) | GM/T 0105-2021 | DRBG 算法实现(如 CTR_DRBG、Hash_DRBG),安全强度分级(112-256 位) |
| 随机数规范 | FIPS 140-3(2019) | GB/T 45240-2025 | 随机数生成器物理安全(如防篡改涂层),量子随机数自验证要求 |
| 系统整合 | ISO/IEC 18031:2023 | 待发布 | 熵源与 DRBG 互操作性接口,量子随机数系统架构 |

(三)后量子时代的标准演进
  • NIST 后量子迁移路线图:计划 2035 年前完成后量子密码过渡,要求 DRBG 支持 ML-KEM 等后量子算法的 256 位安全强度。
  • 中国自主标准:GB/T 45240-2025 器件无关量子随机数发生器标准,填补国内空白,推动国际互认。
  • 技术挑战:量子计算可能破解基于 ECDLP 的 DRBG,需研发基于格密码的新型 DRBG。

五、典型应用与风险防范

(一)高安全场景应用案例
  1. 金融领域
  • 熵源:热噪声 + 单光子探测组合(如中国银联量子随机数信标)
  • DRBG:CTR_DRBG(AES-256)结合硬件加速(10Gbps)
  • 标准遵循:FIPS 140-3 Level 3 + GB/T 45240-2025
  1. 工业控制
  • 熵源:时钟抖动 + 用户行为数据融合(如西门子 PLC 设备)
  • DRBG:HMAC_DRBG(SHA-3)支持频繁重播种
  • 标准遵循:ISO/SAE 21434(汽车电子) + GM/T 0105-2021
(二)风险与应对策略

1、熵耗尽攻击

  • 风险:拒绝服务导致熵源无法更新,随机数可预测
  • 应对:动态熵池管理(熵余量<50% 时暂停非关键请求)+ 硬件熵源芯片(如 Intel RDRAND)

2、算法后门

  • 风险:Dual_EC_DRBG 等算法存在 NSA 后门
  • 应对:优先选择 AES-CTR_DRBG,遵循 NIST SP 800-90A 推荐算法

3、侧信道攻击

  • 风险:通过功耗或电磁泄漏推测密钥
  • 应对:恒定时间实现 + 噪声注入(如 AES 运算随机延迟)

六、结语:随机性的 "三重门" 与安全生态的未来

随机数、熵源与 DRBG 构成了信息安全的 "三重门":熵源的质量决定了随机性的 "下限",DRBG 的设计决定了随机性的 "上限",而随机数的应用则决定了安全体系的 "防线强度"。从热噪声的微观波动到量子世界的内禀随机,从哈希函数的迭代扩展到后量子算法的抗攻击设计,这一技术体系的每一次迭代都反映了攻防对抗的升级。

未来,随着量子计算的实用化和物联网的普及,随机性需求将呈现 "量质齐升" 的趋势:一方面,6G 通信、元宇宙等场景需要 Tbps 级随机数支撑;另一方面,量子攻击迫使随机数生成必须具备 "器件无关" 的自验证能力。在这场全球技术竞赛中,标准体系的主导权将直接影响数字经济的话语权 ------ 中国 GB/T 45240-2025 与 NIST SP 800 系列的并行发展,既体现了技术路线的多元性,也预示着国际互认将成为关键课题。

最终,真正的安全并非依赖单一技术,而是熵源的物理不可预测性、DRBG 的算法严谨性、标准的强制约束性三者的有机统一。只有筑牢这 "三重门",才能在数字时代构建起不可逾越的安全屏障。

开源代码示例:

示例代码展示了基于Linux熵源(/dev/random)的DRBG实现,包括初始化、随机数生成和重新播种等操作流程,使用SHA-256等加密算法确保安全性。

cpp 复制代码
/*
 * This file is part of the openHiTLS project.
 *
 * openHiTLS is licensed under the Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *
 *     http://license.coscl.org.cn/MulanPSL2
 *
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include "crypt_types.h"
#include "bsl_sal.h"
#include "bsl_err.h"
#include "crypt_algid.h"
#include "crypt_eal_init.h"
#include "crypt_errno.h"
#include "crypt_eal_rand.h"

void *StdMalloc(uint32_t len) {
    return malloc((size_t)len);
}

void PrintLastError(void) {
    const char *file = NULL;
    uint32_t line = 0;
    BSL_ERR_GetLastErrorFileLine(&file, &line);
    printf("failed at file %s at line %d\n", file, line);
}

int main(void)
{
    int ret;
    uint8_t output[100] = {0};
    uint32_t len = 100;
    ret = CRYPT_EAL_Init(CRYPT_EAL_INIT_CPU | CRYPT_EAL_INIT_PROVIDER);
    if (ret != CRYPT_SUCCESS) {
        printf("CRYPT_EAL_Init: error code is %x\n", ret);
        return ret;
    }
    /**
     * Before calling the algorithm APIs,
     * call the BSL_SAL_CallBack_Ctrl function to register the malloc and free functions.
     * Execute this step only once. If the memory allocation ability of Linux is available,
     * the two functions can be registered using Linux by default.
    */
    BSL_SAL_CallBack_Ctrl(BSL_SAL_MEM_MALLOC, StdMalloc);
    BSL_SAL_CallBack_Ctrl(BSL_SAL_MEM_FREE, free);

    BSL_ERR_Init(); // Initialize the error module.

    // Initialize the global random number by using the default entropy source from **/dev/random** of Linux.
    ret = CRYPT_EAL_ProviderRandInitCtx(NULL, CRYPT_RAND_SHA256, "provider=default", NULL, 0, NULL);
    if (ret != CRYPT_SUCCESS) {
        printf("RandInit: error code is %x\n", ret);
        PrintLastError();
        goto EXIT;
    }

    // Obtain the random number sequence of the **len** value.
    ret = CRYPT_EAL_RandbytesEx(NULL, output, len);
    if (ret != CRYPT_SUCCESS) {
        printf("CRYPT_EAL_Randbytes: error code is %x\n", ret);
        PrintLastError();
        goto EXIT;
    }

    printf("random value is: ");  // Output the random number.
    for (uint32_t i = 0; i < len; i++) {
        printf("%02x", output[i]);
    }
    printf("\n");

    // Reseeding
    ret = CRYPT_EAL_RandSeedEx(NULL);
    if (ret != CRYPT_SUCCESS) {
        printf("CRYPT_EAL_RandSeed: error code is %x\n", ret);
        PrintLastError();
        goto EXIT;
    }

    // Obtain the random number sequence of the **len** value.
    ret = CRYPT_EAL_RandbytesEx(NULL, output, len);
    if (ret != CRYPT_SUCCESS) {
        printf("CRYPT_EAL_Randbytes: error code is %x\n", ret);
        PrintLastError();
        goto EXIT;
    }

    printf("random value is: "); // Output the random number.
    for (uint32_t i = 0; i < len; i++) {
        printf("%02x", output[i]);
    }
    printf("\n");

EXIT:
    // Release the context memory.
    CRYPT_EAL_RandDeinit();
    BSL_ERR_DeInit();
    return 0;
}

除示例代码外,openHiTLS提供各种种类的DRBG,可访问代码仓了解:

https://gitcode.com/openHiTLS/openhitls

相关推荐
搬砖魁首5 天前
密码学系列 - 零知识证明(ZKP) - 多种承诺方案
密码学·零知识证明·pcs·zkp·承诺方案
努力还债的学术吗喽6 天前
2021 IEEE【论文精读】用GAN让音频隐写术骗过AI检测器 - 对抗深度学习的音频信息隐藏
人工智能·深度学习·生成对抗网络·密码学·音频·gan·隐写
大千AI助手7 天前
艾伦·图灵:计算理论与人工智能的奠基人
人工智能·密码学·图灵·turing·人工智能之父·计算机科学之父·图灵机
openHiTLS密码开源社区8 天前
【密码学实战】国密TLCP协议简介及代码实现示例
密码学·国密·sm2·sm3·sm4·openhitls·tlcp
hrrrrb13 天前
【密码学】6. 消息认证和哈希函数
算法·密码学·哈希算法
hrrrrb13 天前
【密码学】8. 密码协议
密码学
景彡先生14 天前
密码学侧信道攻击(Side-channel Attack):从物理泄露中窃取密钥
密码学
小明的小名叫小明15 天前
区块链技术原理(1) -密码学
区块链·密码学·哈希算法
景彡先生16 天前
基于编码的密码学与Classic McEliece:后量子时代的稳健之选
密码学