SNVS模块简介

SNVS全称: Secure Non-Volatile Storage, 它主要用于保存程序运行中和安全相关的密钥信息和一个安全的计时功能。它本身支持安全和非安全两种运行模式,模式之间可以自动或者手动切换。

功能简介

  1. 实时计数器RTC功能,技术数值软件可以直接读取,也可以用于把计数值更新到SRTC。
  2. 周期中断,一个可以软件编程的硬件周期性中断。
  3. 通用寄存器,通用寄存器可以用于保存在主电源断电,而只有电池供电情况下的部分数据,通用寄存器用电池供电,可以保证数据断电不丢失。
  4. 可以输出一个pmic_on_request信号,这个信号可以控制整个系统的断电和上电。

SNVS分为HP和LP两个部分,HP是系统供电,LP是电池供电,之前提到的非易失的寄存器的内容就是保存在不掉电的LP模块中,这个模块还支持防篡改检测,当监测到系统异常的时候,LP中保存的数据会自动清除,从而保证系统安全。

HP部分主要提供和系统之间的接口,同时也会控制LP部分逻辑。

snvs.PNG

从框图中可以很清楚的看到系统各个部分之间的联系,HP部分主要有五个部分组成:

  1. 总线接口,提供系统访问的接口
  2. RTC,实时计数器模块,可以产生定时和周期中断
  3. 系统安全检测,可以在系统各个安全状态之间进行切换,不同的安全状态系统会有不同的工作方式,比如某些状态密钥会自动清除,有些状态切换时双向的,而有些切换是单向的,并且只能经过复位或者POR才能正常切换。
  4. 密钥控制单元,这部分就是负责存储和保证密钥安全的单元,它会在检测到系统异常的时候自动清除里面保存的密钥数据。

电源毛刺监测

我们知道嵌入式系统攻击中有个常用的手段就是在系统供电中加入一些毛刺,这样就可以在一定概率上导致MCU内部数据出现异常,当然程序运行也有可能出错,而程序一旦出错就可能运行到攻击程序,从而导致系统被攻破。为了应对这种攻击,SNVS模块引入了一个PGD(Power Glitch Detector)模块,这个模块其实非常简单,就是一个32位的寄存器的内容和一个固定值(0x41736166)进行比较,一旦比较失败,那么系统就会认为检测到异常,相应 的密钥也会自动清除。但我不知道这个东西到底靠不靠谱,毕竟是一个概率性的问题,谁知道有没有可能其它的寄存器变了而这个寄存器没有变呢?

RTC

其实SNVS最常用的功能应该还是RTC,这个模块因为也需要电池供电,所以放到SNVS模块中也是比较正常的,SNVS的RTC模块提供一般RTC常有的功能,比如计数,定时中断,周期中断,单向递增计数器等等。

总结

其实SNVS就是一个电池供电模块,它提供了常用的RTC功能,并且可以提供篡改异常监测,并且可以保存一些断电不丢失的数据。

发表新评论