描述PDCP层安全功能验证的方法
解读
面试官抛出“PDCP层安全功能验证的方法”,核心想确认三件事:
- 你是否真正理解PDCP在LTE/5G协议栈里的安全职责(加密、完整性保护、重放保护、密钥派生);
- 能否把“安全功能”拆成可量化、可检查的验证特性,并映射到SystemVerilog/UVM的验证框架;
- 是否具备“安全验证闭环”意识——从异常注入、覆盖率收敛到签名交付,全部有量化指标。
国内SoC项目普遍把PDCP做成可配置RTL IP,支持LTE/5G双模、128/256-bit密钥、SN长度12/18-bit,验证难点在“密钥动态切换+空口时序”组合爆炸。回答必须体现“协议+芯片”双视角,避免只背协议条文。
知识点
-
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错误、窗口下溢/上溢。
-
验证方法学
- 特性抽取→覆盖率模型:功能覆盖(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拉高。
第二步,测试平台与用例。
- 参考模型:用DPI-C封装OpenSSL EVP_aes_128_ctr(),与Snow3G官方C库统一接口,保证RTL与黄金模型bit-exact;
- 序列分层:底层security_sequence随机化key_index、COUNT_value、bearer_id;中层traffic_sequence生成RLC PDU长度分布(泊松+截断指数),顶层virtual_sequence负责在1 ms TTI边界动态开关安全;
- 异常注入:在uvm_sequence里用`uvm_do_with(req, {cipher_en_delay inside {0,1,2}; mac_drop_rate inside {0,0.1,1};}),模拟RRC与PDCP时序错位;
- 覆盖率收敛:功能covergroup分cipher_mode、key_len、sn_size、refresh_type四类交叉,目标≥95%;断言cover_sequence检查“security激活后首个PDCP PDU必须加密”,用SVA cover property收集。
第三步,签收与复盘。 - 形式验证:对重放窗口断言“rx_window_lower ≤ rx_window_upper && rx_window_upper – rx_window_lower ≤ 32768”做formal prove,30分钟内全证通过;
- 硬件加速:把4CC 100 MHz业务搬到Zebu,跑3轮24小时,记录加密引擎吞吐≥7.2 Gbps,CPU占用<2%;
- 功耗回归:FPGA原型跑“密钥每200 ms更新一次”用例,测得动态功耗增加4.1%,满足<5%要求;
- 最终交付:收集代码、功能、断言、toggle四类覆盖率,合并报告,附安全特性通过清单,由项目经理、设计、验证三方签字,达到sign-off标准。
通过上述方法,我在上一颗7 nm 5G基带芯片中,流片前发现3处密钥提前生效缺陷、1处重放窗口上溢边界错误,保障一次流片成功。
拓展思考
- 国内项目常把PDCP安全引擎与平台级安全子系统(如国密SM4/SM3)做融合,验证时需额外跑《GM/T 0002-2012》合规用例,建议提前在参考模型里预留可插拔加密算法接口。
- 面对后量子加密(NIST Kyber/Dilithium)的预研需求,可在验证平台里用Python脚本生成Kyber密钥封装向量,通过DPI喂给RTL,提前评估面积/时序/功耗增量。
- 安全验证的“隐藏战场”在侧信道:建议在后硅阶段用FPGA原型+电磁探头,跑固定密钥+固定COUNT的循环用例,检查功耗轨迹是否存在Hamming权重泄露,若发现尖峰,可反馈设计在加密引擎插入掩码逻辑。