我们谈论了很多关于“可验证的硬件”,但是当你不知道你在看什么的时候,很难验证一些东西。这篇文章试图解释前身主板的主要特征,首先指出物理组件的位置,然后简要讨论它们管理背后的原理。
上面是一张预产版前身的照片,上面注明了关键部件的位置。和软件一样,硬件也有修订版。因此,在验证系统时,请务必先检查主板的版本。最终的生产单元将在每个电路板的背面印有清晰的修订代码,一旦位置最终确定,我们将告诉您在哪里查找代码。在生产之前,电路板将有一些变化,我们稍后会讨论这一点。
但是所有的组件都做些什么,它们又是如何连接起来的呢?上面的框图试图捕捉所有组件之间的关系。
首先,也是最重要的,您会注意到设计分为两个主要领域:“T-域”和“U-域”。“T”代表“信任”,“U”代表“不信任”。这样的简化图有助于分析系统的安全性,因为它清楚地说明了进出T域的内容;换句话说,它定义了信任域的硬件攻击面。当然,图中没有明确显示的是侧信道,例如射频发射和功率波动,它们可以用来泄露机密数据。简而言之,通过将整个T域封闭在法拉第笼中来减轻RF发射。同时,通过局部滤波和使用恒定时间算法执行敏感计算,部分缓解了功率波动。
顾名思义,T域是秘密的去处,而U域则充当不可信互联网的第一级防火墙。U域被明确地设计为非常低的功耗,因此它可以“始终开启”,同时仍然提供几天的待机时间。我们将U域内的FPGA称为嵌入式控制器(EC),将T域内的FPGA称为片上系统(SoC),或者有时简称为“FPGA”。
其目的是让始终在线的EC监听传入的WiFi数据包;只有在接收到有效数据包后,T域才会通电。
使用独立于SoC的低功耗EC允许突发地完成耗电处理,之后T域自动断电。多亏了我们选择的“内存LCD”,即使在T域断电的情况下,显示器也可以持续显示。当然,在T域断电时将数据留在屏幕上是一种潜在的安全风险,但用户可以根据其特定的使用案例和威胁场景调整电源策略,以便在安全性和电池寿命之间进行权衡。我们预计,T-domain在没有电源管理的情况下满口径运行将在大约6-7小时内耗尽1100mAh的电池。在空闲状态中花费的任何时间都将极大地延长电池寿命;因此,对于CPU仅在打字和数据传输期间处于活动状态的假设消息传递应用程序,一次充电应该能够实现全天的使用。
扩展信任边界以包括面向人的I/O是前身安全设计哲学的核心租户。因此,T域还包括键盘、LCD和音频元素。这是因为将消息的呈现推迟到不受信任的显示器意味着任何用于保护消息的密码都可能被屏幕刮取器轻易击败。将击键委托给不受信任的触摸控制器同样提供了一种通过键盘记录器捕获传出机密的快速变通方法。为了减轻/防止这种情况,Premitive集成了一个可以用光学显微镜验证的LCD和一个用肉眼很容易验证的物理键盘。Premitive还放弃了集成麦克风,转而采用3.5 mm耳机插孔,从而使用户可以牢牢控制该设备何时可以或可能不具有记录对话的能力。
上面方框图中的绿色方框是连接器。这些是插入未集成到主板的组件中的项目。考虑到这一点,我们可以定义T域的攻击面。我们可以看到,我们将GPIO、USB和JTAG暴露到外部连接器。我们还有一条通向U域的总线,我们称之为COM总线,以及一对用于通信电源状态信息的准静态引脚和一组用于监控键盘上的用户唤醒事件的引脚。让我们更详细地研究这些攻击面。
JTAG当系统需要密封并且机密不可访问时,用户需要用胶水关闭JTAG端口。这是通过将金属屏蔽罐放在T-domain上,并在孔中涂抹一种特殊配方的环氧树脂来实现的。这同时完成了法拉第笼,减少了边带发射,同时使JTAG端口更难访问。
GPIO和USB在其默认配置中,GPIO是惰性的,因此很难攻击面。为了安全应用,我们还主张断开USB引脚的连接;但是,开发人员可能会选择在FPGA内部布线,冒着打开广阔的USB攻击面的风险。
原始功率输入原始功率输入产生的主要攻击面是毛刺。拒绝服务当然也是一个问题,通过切断电源或通过施加过高的电压来破坏系统;但这些都超出了本讨论的范围。防止原始电源输入毛刺的主要对策是复位监视器,如果电压降到规定水平以下,它会将任何毛刺扩展为几毫秒长的复位信号。此外,本地滤波、调节和储电消除了非常短的故障。所有T域电源信号都被路由,因此它们完全包含在T域屏蔽罐内。在T域屏蔽之外的PCB的顶部或背面上,没有T域电源信号暴露为外层迹线或通孔。
电源状态引脚电源状态引脚允许EC与FPGA SoC就当前电源状态进行协调。从SoC来看,它们被构造为“只读”,并且也被认为是“咨询”。换言之,SoC能够独立地强制其自身电源进入接通状态;因此,只有在T域明确允许时,EC才能关闭SoC的电源。这最大限度地降低了EC试图通过操纵其对电源的访问来对SoC执行毛刺攻击的风险。
键盘唤醒引脚为了让EC知道何时打开系统电源,EC还可以访问键盘矩阵上的一对行/列引脚。这使EC能够响应两个键的和弦将系统从睡眠状态唤醒;但是,这也意味着EC可能会监控键盘上的几个键,从而导致潜在的信息泄漏。SoC使用一组硬件隔离开关来拒绝EC在系统通电后访问键盘矩阵,从而缓解了这一问题。
音频通过编解码器芯片呈现。上面照片中显示的DVT原型使用的是LM49352,但几个月前它被供应商TI宣布停产。在生产方面,我们计划采用TLV320AIC3100,这是一种功能相当的编解码器,有望具有更长的生产寿命。编解码器芯片集成了放大麦克风、驱动一对耳机以及驱动用于通知的小型扬声器所需的所有电路。虽然在音频芯片中埋入植入物是可能的,但人们认为,任何足够大的植入物要么可以记录大量有用的对话,要么可以对对话进行语音到文本的处理,从而产生易于检测的大小或功率签名,或者两者兼而有之。耳机插孔与Android生态系统的耳机具有最佳兼容性。
COM总线最后,COM总线是T域用来与世界其他地区通信的SPI接口。它直接连接到EC。COM总线的结构使得SoC是SPI总线的唯一控制器;除非SoC允许,否则EC无法向SoC发送数据。COM总线需要进一步的数据包级和协议级对策来强化其攻击面,但归根结底,这是数据从外部世界到达T域的主要路径,因此它应该是任何面向软件的攻击面分析的主要焦点。
重要的是,COM总线数据包在移交给EC之前必须经过身份验证、加密和序列化;EC只能将T域数据放入适当的信封中,以便在Internet上路由,但不能更多。这使我们可以安全地将将COM总线数据包映射到给定网络接口的工作委托给EC。
在T域上运行的安全软件应该尽可能实际地忽略EC实现的是哪种类型的互联网连接。因此,EC是否将COM数据包路由到WiFi、LTE、蓝牙或以太网应该与T域的安全性无关。
对于前身,我们选择在EC中添加Silicon Labs WF200 WiFi芯片,作为连接互联网的主要手段。Silicon Labs WF200包含大量不可信任的代码和电路;但是,因为WF200在不可信域中,所以我们不需要信任它,就像我们不需要信任Internet上的电缆调制解调器或核心网络路由器一样。
因此,我们可以安全地利用WF200中的大量协同处理来处理与WAP关联的复杂性,以及无线以太网的其他MAC/PHY级别的细微差别。这允许我们在系统主要等待接收传入消息的“关闭屏幕”时间内大幅降低对系统的电源需求。此外,WF200有一个特征良好的低功耗模式,这与实验台的测量结果很好地吻合。这与ESP32不同,ESP32在一年前进行评估时,标榜低功耗,但存在电源状态转换的细微差别,阻碍了实际系统实现总体低功耗。
EC负责将固件上传到WF200,以及服务其中断并将接收到的数据包转录到T域。除了这些职责外,EC还可以通过轮询IMU来检测系统在待机期间是否被物理移动,它还管理电池充电器和煤气表。它还向LCD提供待机期间LCD继续正常显示消息所需的~1 Hz方波。
T域包括离散的TRNG。这是为了补充集成到SoC本身的TRNG。分立式TRNG的优点是可以使用普通实验室设备(如示波器)进行验证;分立式TRNG的缺点是实际拥有该设备的攻击者可以通过钻穿RF屏蔽板并将针落在毫米级元件焊盘上来操纵其输出。
SoC内部的集成TRNG不太容易受到物理存在的攻击者的攻击,但代价是难以手动验证。因此,我们提供离散的和集成的TRNG,并建议开发人员在安全应用程序中使用之前合并他们的输出。
时间感在许多密码协议中都很重要,因此实时时钟(RTC)是一个安全关键元素。我们选择了一种RTC,它将晶体和时钟芯片集成到一个密封的封装中,以减少物理在场的攻击者可以操纵时间的攻击面。所选的RTC还包含基本的时钟完整性检查,这有助于减轻针对RTC的简单毛刺攻击。
我们提供16MiB的电池后备SRAM,用于安全计算。我们将其设为电池后备,以减少系统的待机/恢复开销,代价是为实际在场的攻击者从系统中恢复数据创建了一个潜在的攻击面。
电源更大的DRAM需要在SoC上使用DRAM PHY。此接口非常耗电,并且在系统开机时耗电量会增加一倍以上。此外,将DRAM保持在自刷新模式将不允许完全关闭FPGA的电源,这意味着SoC的大量待机泄漏功率将计入“关屏”时间。
代码复杂性前身是Betrusted项目的副产品。Betrusted的目标之一是建立一个可以在合理的时间内由个人或小团体审计的代码库。选择少量RAM等同于在迫使向前推进的军队进入胜负局面的战斗之前烧毁船只;它限制了操作系统和应用程序层中所做的每一个选择,以牺牲更多的开发时间和更少的功能为代价,更倾向于更简单、更不复杂的实现。
路线图最终,我们希望将整个T域的先驱封装到单个芯片的版图中。在芯片上集成数百兆字节的RAM是不切实际的,即使在激进的进程节点中也是如此。在更现实的28或40 nm节点中,我们估计4-16MiB是低成本、低功耗、大众市场实施中潜在的实际RAM容量。使用类似数量的RAM配置前身有助于确保为其开发的代码将来有一条迁移到更高集成度的解决方案的途径。
最后,我们为选择使用电池供电的AES密钥保护其FPGA映像的用户提供了“自毁”功能。“自毁”机制由一个使用分立晶体管构建的锁存器组成。在正常通电期间,系统锁存到“正常”操作模式。然而,当SoC断言“KEY_KILL”引脚时,锁存器切换到“KILL”操作模式。一旦进入“终止”模式,T域的电源就会被切断-包括备份AES密钥的电源。还有一套有源下拉开关,可以快速给相关的电压轨放电,以确保电力线在几毫秒内降到适合数据擦除的电平。虽然数据擦除只需要零点几秒的时间,但要想摆脱“杀死”模式,唯一的办法就是取出电池或等待电池完全放电。
这就结束了我们对前身主板的旋风之旅。这篇文章介绍了前身主板的所有主要设计功能,并简要总结了每种选择的基本原理。该系统架构最小化了可信组件的攻击面。此外,组件选择遵循简单和透明的原则,同时试图为安全敏感应用程序提供完整但可审核的解决方案。最后,主板的设计只有一侧的组件,所有安全关键组件都包含在一个定义良好的区域内,希望这样可以更容易地在最终用户收到设备时进行目视检查和验证。
喜欢这个帖子吗?注册前身基金活动邮件列表,当新帖子上线时会收到通知!