4. 熵源评估标准:NIST SP 800-90B、AIS 31、FIPS 140-3 对熵源的要求对比

做TRNG这行,绕不开三个标准:NIST SP 800-90B、AIS 31、FIPS 140-3。我刚开始接触时也头大,每个标准都厚得像砖头。后来踩了几次坑才明白——它们不是互相替代的关系,而是各有各的脾气。

说白了,选哪个标准取决于你的产品要卖到哪。卖美国,看NIST;卖欧洲,盯AIS 31;做认证,绕不开FIPS 140-3。今天我就把这三个标准的底裤扒一扒,告诉你它们到底要什么。

4.1 三个标准的定位差异

先看一张总览图,把三者的关系理清楚。

三大熵源评估标准定位对比 NIST SP 800-90B 美国国家标准与技术研究院 熵源健康测试与认证 侧重:统计检测 + 熵估计 适用:FIPS 140-3 认证前置 版本:2018年1月 AIS 31 德国联邦信息安全办公室 物理噪声源评估标准 侧重:物理模型 + 在线测试 适用:CC EAL 认证 版本:2011年(PTA/PTG.2) FIPS 140-3 美国联邦信息处理标准 密码模块安全要求 侧重:整体安全等级 适用:政府/军用设备 版本:2019年3月 NIST SP 800-90B 是 FIPS 140-3 的熵源评估子标准;AIS 31 与 CC 认证体系深度绑定 核心差异维度 熵估计方法 NIST: 非参数化 AIS 31: 物理模型 FIPS: 引用NIST 在线测试要求 NIST: 必选 AIS 31: 强要求 FIPS: 必选 认证层级 NIST: 算法/模块 AIS 31: 物理器件 FIPS: 整体系统 测试数据量 NIST: 1M样本 AIS 31: 约10万 FIPS: 引用NIST

4.2 NIST SP 800-90B:统计派代表

这个标准我用的最多。它不关心你的噪声源是热噪声还是抖动,只看输出比特的统计特性。说白了,它是个「数据驱动」的标准。

核心要求:

  • 必须采集至少1,000,000个样本做离线评估
  • 运行10项统计检测(包括重复计数、自适应比例、LZ复杂度等)
  • 给出每样本的最小熵估计值
  • 必须实现连续健康测试(在线测试)

我的经验: 800-90B的统计检测对某些噪声源其实不太友好。比如纯热噪声源,理论上熵很高,但LZ复杂度检测有时会低估。我建议在评估时多看几个检测项的结果,别只看最小值。

健康测试要求:

  • 重复计数测试(RCT):检测连续相同比特
  • 自适应比例测试(APT):检测局部偏置
  • 测试频率:每1024个样本至少执行一次
  • 失败阈值:可配置,但需在文档中说明

4.3 AIS 31:物理派代表

AIS 31是德国人的标准,严谨到变态。它不光看统计结果,还要求你解释噪声源的物理原理。我当年做CC EAL5+认证时,被AIS 31折磨得不轻。

两个评估层级:

层级 要求 典型应用
PTA(物理真随机数) 物理噪声源 + 在线测试 + 统计检测 普通安全应用
PTG.2(物理真随机数生成器) PTA基础上 + 后处理 + 故障注入防护 高安全等级CC认证

AIS 31的独特要求:

  • 必须提供噪声源的物理模型和理论熵证明
  • 在线测试必须覆盖:频率测试、运行测试、自相关测试
  • 对后处理算法有明确要求(不能只用简单异或)
  • 需要评估环境变化(温度、电压)对熵源的影响

避坑指南: 我曾经把一个基于环形振荡器抖动的TRNG拿去送AIS 31认证,结果被要求提供每个振荡器的相位噪声测量数据。当时没做这个测试,硬是补了两个月的数据。所以,如果你打算走AIS 31路线,物理特性测试一定要提前规划。

4.4 FIPS 140-3:系统级安全标准

FIPS 140-3不是专门的熵源标准,但它对TRNG有明确要求。它直接引用NIST SP 800-90B作为熵源评估方法,同时增加了系统级的安全约束。

对TRNG的具体要求:

  • 熵源必须符合NIST SP 800-90B或等效标准
  • 必须实现连续健康测试
  • 必须提供自检功能(上电自检 + 条件自检)
  • 失败时必须有明确的错误状态输出
  • 安全等级3/4要求物理防篡改

关键点: FIPS 140-3 Level 2及以上要求TRNG有「故障安全」机制。也就是说,如果熵源失效,密码模块必须能检测到并进入错误状态,不能默默输出低质量随机数。这个在硬件设计时就要考虑进去。

4.5 三个标准的对比总结

我把核心差异整理成一张表,方便你对照。

对比维度 NIST SP 800-90B AIS 31 FIPS 140-3
发布机构 NIST(美国) BSI(德国) NIST(美国)
评估对象 熵源 + 健康测试 物理噪声源 + 生成器 密码模块(含TRNG)
熵估计方法 非参数化统计 物理模型 + 统计 引用800-90B
在线测试 RCT + APT 频率 + 运行 + 自相关 连续健康测试
离线测试数据量 1,000,000样本 约100,000样本 引用800-90B
物理模型要求 不强制 强制 不强制
认证周期 约2-4周 约3-6个月 约6-12个月
典型应用 商用密码产品 CC认证产品 政府/军用设备

4.6 实际选型建议

说了这么多,到底怎么选?我个人的经验是这样的:

  1. 做消费级产品:NIST SP 800-90B就够了。成本低,周期短,市场接受度高。
  2. 做金融/政务:建议走FIPS 140-3 Level 2以上。虽然认证贵,但客户认这个。
  3. 做欧洲市场:AIS 31是硬门槛。别想着绕过去,德国人很较真。
  4. 做最高安全等级:AIS 31 PTG.2 + FIPS 140-3 Level 4。不过说实话,这种项目我五年才遇到一次。

小技巧: 如果你的TRNG设计得好,其实可以同时满足三个标准的大部分要求。我现在的做法是:物理设计按AIS 31来,统计测试按800-90B跑,系统安全按FIPS 140-3做。一套设计,三份报告,省时省力。

嗯,标准对比就聊到这。记住一点:标准是死的,你的设计是活的。理解每个标准背后的逻辑,比死记硬背条款重要得多。