描述PDCP层安全功能验证的方法

解读

面试官抛出“PDCP层安全功能验证的方法”,核心想确认三件事:

  1. 你是否真正理解PDCP在LTE/5G协议栈里的安全职责(加密、完整性保护、重放保护、密钥派生);
  2. 能否把“安全功能”拆成可量化、可检查的验证特性,并映射到SystemVerilog/UVM的验证框架;
  3. 是否具备“安全验证闭环”意识——从异常注入、覆盖率收敛到签名交付,全部有量化指标。
    国内SoC项目普遍把PDCP做成可配置RTL IP,支持LTE/5G双模、128/256-bit密钥、SN长度12/18-bit,验证难点在“密钥动态切换+空口时序”组合爆炸。回答必须体现“协议+芯片”双视角,避免只背协议条文。

知识点

  1. PDCP安全特性清单

    • 用户面加密:AES-CTR/128、256,SN+COUNT作为IV;
    • 控制面完整性:AES-CMAC或Snow3G,MAC-I 32-bit;
    • 重放保护:窗口大小2^15/2^18,RX侧滑动窗;
    • 密钥派生:KDF基于HMAC-SHA-256,输入FC、P0、L0;
    • 安全激活/去激活:PDCP-Control PDU携带1-bit Security Flag,需与RRC时序对齐;
    • 异常场景:密钥未生效提前加解密、COUNT回卷、SN wrap-around、MAC-I错误、窗口下溢/上溢。
  2. 验证方法学

    • 特性抽取→覆盖率模型:功能覆盖(security_mode, key_len, sn_len, bearer_type)、断言覆盖(密钥生效时序窗口)、代码覆盖(branch/toggle);
    • 参考模型:SystemC/TLM2.0实现黄金模型,与RTL零延迟对比,支持加密库OpenSSL+Snow3G官方C码;
    • 异常注入:在UVM sequence里随机化key_refresh_timing、提前/滞后security激活、空口丢包、bit-error;
    • 形式验证:对“重放窗口永不回卷”做SVA + formal prove,保证RX窗下界≤上界;
    • 硬件加速:将5G 100 MHz带宽、4CC、256-QAM业务流搬到Zebu或Palladium,跑24小时回归,检查吞吐量是否掉速;
    • 功耗验证:在FPGA原型上跑安全开关切换用例,对比开启/关闭安全引擎的动态功耗,确保<5%预算;
    • 签名交付:收集FC+代码+功能+断言覆盖率≥95%,并提供安全特性通过清单,附GDSII版本号。

答案

我通常把PDCP安全功能验证拆成“三步九层”闭环:
第一步,特性分解与建模。依据3GPP TS 33.401/TS 24.301,把安全功能拆成18条可测特性,每条写进DOORS,并映射到UVM寄存器模型。例如“AES-CTR加密”对应寄存器SEC_CTRL.cipher_en,我在reg_block里加front-door prediction,保证写1后下一拍cipher_ready拉高。
第二步,测试平台与用例。

  1. 参考模型:用DPI-C封装OpenSSL EVP_aes_128_ctr(),与Snow3G官方C库统一接口,保证RTL与黄金模型bit-exact;
  2. 序列分层:底层security_sequence随机化key_index、COUNT_value、bearer_id;中层traffic_sequence生成RLC PDU长度分布(泊松+截断指数),顶层virtual_sequence负责在1 ms TTI边界动态开关安全;
  3. 异常注入:在uvm_sequence里用`uvm_do_with(req, {cipher_en_delay inside {0,1,2}; mac_drop_rate inside {0,0.1,1};}),模拟RRC与PDCP时序错位;
  4. 覆盖率收敛:功能covergroup分cipher_mode、key_len、sn_size、refresh_type四类交叉,目标≥95%;断言cover_sequence检查“security激活后首个PDCP PDU必须加密”,用SVA cover property收集。
    第三步,签收与复盘。
  5. 形式验证:对重放窗口断言“rx_window_lower ≤ rx_window_upper && rx_window_upper – rx_window_lower ≤ 32768”做formal prove,30分钟内全证通过;
  6. 硬件加速:把4CC 100 MHz业务搬到Zebu,跑3轮24小时,记录加密引擎吞吐≥7.2 Gbps,CPU占用<2%;
  7. 功耗回归:FPGA原型跑“密钥每200 ms更新一次”用例,测得动态功耗增加4.1%,满足<5%要求;
  8. 最终交付:收集代码、功能、断言、toggle四类覆盖率,合并报告,附安全特性通过清单,由项目经理、设计、验证三方签字,达到sign-off标准。
    通过上述方法,我在上一颗7 nm 5G基带芯片中,流片前发现3处密钥提前生效缺陷、1处重放窗口上溢边界错误,保障一次流片成功。

拓展思考

  1. 国内项目常把PDCP安全引擎与平台级安全子系统(如国密SM4/SM3)做融合,验证时需额外跑《GM/T 0002-2012》合规用例,建议提前在参考模型里预留可插拔加密算法接口。
  2. 面对后量子加密(NIST Kyber/Dilithium)的预研需求,可在验证平台里用Python脚本生成Kyber密钥封装向量,通过DPI喂给RTL,提前评估面积/时序/功耗增量。
  3. 安全验证的“隐藏战场”在侧信道:建议在后硅阶段用FPGA原型+电磁探头,跑固定密钥+固定COUNT的循环用例,检查功耗轨迹是否存在Hamming权重泄露,若发现尖峰,可反馈设计在加密引擎插入掩码逻辑。