芯片密码电路别只验密文:掩码与故障封锁的缺口
密码芯片给出正确密文,只能说明功能路径成立。秘密是否会随电路活动泄漏,故障是否能把中间结果带到接口,是另外两项约束;掩码的数据独立性与异常时的输出封锁必须分别落实到门级实现。
掩码防护的困难首先出现在非线性逻辑。把敏感值拆成若干随机份额后,单个份额在理想模型下可以不泄露原值,但电路并不是只在稳定采样时刻消耗功率。不同输入经过门延迟后先后到达,组合逻辑会经历毛刺与临时状态;若这些瞬态同时依赖多个份额,功耗轨迹便可能重新包含秘密相关信息。因此,算法层面把变量异或拆开,不足以证明替换后的电路具有同样防护阶数,尤其不能直接照搬普通非线性查找逻辑。
受毛刺约束的掩码结构会规定随机量、组合域和寄存器边界之间的关系。寄存器有助于隔开某些跨级瞬态,但随意给组合路径增加流水级,也可能破坏原有份额对齐或随机量使用条件。综合优化若合并逻辑、重定时或共享子表达式,更可能改变安全论证所依据的结构。工程流程应标明必须保持的单元和约束,在映射后的网表检查份额是否被意外汇合,而不是仅以仿真中每拍输出一致作为优化正确性的全部证据。
物理实现仍有额外边界。两路份额若共享强耦合布线或在同一时刻集中翻转,实际泄漏可能偏离独立观测假设;测试应结合布局与真实采样位置分析,而不是把形式模型的结论无限外推。泄漏评估需要足够数据和与攻击模型一致的统计方法,通过某次检测也不等于抵抗所有高阶攻击。芯片团队应把可接受的对手能力、观测次数及实现假设写入验证条件,才能区分结构性缺陷与测试覆盖不足。
故障防护关注的是结果离开核心的时机。攻击者或异常瞬态可能改变密码轮计数、状态机和结果有效信号,让运算过早结束、跳过必要变换,或者泄露内部状态。仅在最终密文上增加一个普通校验字段,无法证明中途控制没有偏离;如果有效信号本身被错误拉高,检测逻辑还没完成就可能先把错误结果推出。因此,设计应为关键控制建立可检测编码和状态转移约束,并把检测结果纳入统一的释放条件。
封锁路径也必须受保护。故障被识别后,若总线输出寄存器仍保留可读的部分结果,外部软件可能在报警到达以前取走数据。稳妥实现需要明确输出何时变为有效、何时被撤销,以及进入终止错误状态后哪些访问仍被允许。报警并不等于立即清除全部敏感状态,清除操作本身也可能需要若干周期;这段时间应由接口权限与控制状态阻止继续使用。不同恢复策略可以选择复位或受控重初始化,但不能留下未定义的继续执行分支。
验证时应从安全目标反推注入位置。例如修改轮计数后,不只检查是否产生报警,还要观察结果有效、总线响应和内部清除序列,确认没有任何被禁止的数据先于封锁释放。若某些故障能同时影响计算和校验,单一路径的覆盖结论就不充分。测试结果应注明单点或多点、瞬态或保持型等假设,并复查综合后的实现是否仍保留预期检测距离。只报告注入总次数,无法说明最敏感的控制出口是否得到覆盖。
可信的密码实现要同时约束信息如何泄漏、结果何时可见。把掩码结构保持到物理实现,并让故障检测真正控制输出许可,才能使功能正确的电路进一步具备可检验的防护边界。





