在《PolarFire_FPGA_and_PolarFire_SoC_FPGA_System_Services_User_Guide_VD.pdf》中,OTP(One-Time Passcode,一次性密码)服务属于密码服务(Passcode Services) 范畴,是用于临时解锁软件调试锁(SWL_DEBUG)的安全协议类服务,仅支持 PolarFire SoC 和 RT PolarFire SoC FPGA 设备,其他型号(如基础款 PolarFire FPGA、RT PolarFire FPGA)不支持该服务。
OTP 相关服务包含两个核心子服务,需配合使用以完成一次性密码的生成与验证,具体如下:
作为 OTP 协议的第一步,用于初始化一次性密码流程:生成设备端唯一随机数(NFPGA),并接收用户端随机数(NUSER),仅解锁软件调试锁(SWL_DEBUG),不涉及其他安全锁操作。
- 服务命令码(SERVICECMD):十六进制
7AH 。
- 输入参数:
KEYMODE(1 字节):指定用于传输加密密码的密钥模式,该参数的有效性需在后续 “Match OTP Service” 中验证 。
NUSER(16 字节):用户提供的 128 位随机数,用于参与后续 OTP 生成 。
- 输出参数:
NFPGA(16 字节):设备生成的 128 位随机数,存储在易失性内存中,需用于后续 “Match OTP Service” 的验证 。
- 若生成非 ce 失败(如密钥模式无效、随机数生成错误),返回的
NFPGA 为 0,操作会中止并触发 PASSCODE_FAIL 篡改事件 。
- 该服务仅解锁
SWL_DEBUG,不影响其他安全锁(如硬件调试锁、SPI 端口锁等) 。
作为 OTP 协议的第二步,用于验证用户提供的一次性密码(OTP)有效性:需先通过 “Generate OTP Service” 获取 NFPGA,再提交用户 ID、验证器(V)和 OTP,完成身份核验。
- 服务命令码(SERVICECMD):十六进制
7BH 。
- 输入参数:
UID(16 字节):用户 ID,用于标识请求验证的用户身份 。
V(32 字节):验证器,由用户根据 NFPGA、NUSER 及预设算法生成 。
OTP(32 字节):用户生成的一次性密码,需与设备端计算结果匹配 。
- 操作逻辑:
- 设备端根据此前生成的
NFPGA、用户输入的 UID、V、OTP 进行一致性校验。
- 校验成功:维持
SWL_DEBUG 解锁状态,允许调试操作;校验失败:自动重新锁定所有已解锁的密码,并触发 PASSCODE_FAIL 篡改事件 。