[从智能锁谈STM32安全技术 学习笔记] 六. 安全固件安装 SFI (Secure Firmware Installation)

声明:版权归原作者所有,如有侵权请联系删除。

6.1 为什么需要安全固件安装

安全固件安装的本质是:我们能否相信工厂的制造过程是安全的过程。如果我们相信工厂是可靠的,相信他总是按照我们的指示,例如,我们希望他不要泄露固件代码,我们希望他不要过生产,他们都能一一办到,那么安全固件安装时没有永无之地。

然而,总有一些工厂,或者工厂里的员工,为了一时利益,可能会将研发设计公司辛苦开发的源代码(通常是厂商的二进制固件代码),直接泄露给其他第三方。同时,他们也有可能将委托生产的产品过生产,例如我们希望他生产1000台,结果他们生产了1500台,1000台按照合同提供回给厂商,使用正规的商标与品牌,另外500台则不知道通过什么样的商标流入市场。如果该产品在市场上很火爆,他们获得的利益会远远超过代工的收益。

除了正常的法律手段外,STM32 技术手段可以防止工厂泄露受委托生产的固件二进制代码,同时防止工厂进行过生产,获得非法利益。

6.2 安全固件安装的两个关键问题及解决

  • 固件代码的保密性
    • 解决方法:通讯安全,从公司研发部门到设备中断构建一个端对端的安全通道来传输固件。研发部门发布二进制固件时进行加密,设备(也就是 STM32)进行解密。
  • 过生产、产计数
    • 解决方法:授权,ST的可信代码能保证解密的密钥只使用一次,从而保证使用次数和授权次数一致。

6.3 安全固件安装的示例解决方案

这个解决方案里,有三个角色:

  • 研发部门,固件的制造者
    • 安全固件安装流程需要设定一个密钥,然后使用 Trust Package Creator(UM2238)的 STM32 工具对需要安装的固件,进行加密,加密算法可以是 AES-CBC,或者其他所支持的算法
    • 产计数的核心是密钥授权的概念,要将密钥写入智能卡 HSM 硬件安全模块(是一张智能卡,或者说是安全芯片,叫 ST Safe)里,它保证了没有人能够获得固件的解密密钥。同时,为了计数的需要,要对智能卡设置一个次数,这个次数定义了对外生成授权文件的多少,例如1000次,这个数字一旦写入智能卡,就不能再次修改,只能在使用过程中进行逐次递减。
  • 工厂的产线
    • 固件已经被加密了,工厂就没有办法知道原始的二进制文件是什么
    • 工厂还需要研发部门所准备的智能卡,HSM 包含了固件解密所需要的密钥,HSM 也提供给了工厂,但是因为安全芯片的本质,工厂没有办法从芯片中抽取密钥。
    • 在生成过程中,HSM 会生成授权文件。当然,可以生成多少次授权文件,已经被研发部门所固定。
  • STM32 设备
    • 接收工厂通过通讯接口传递过来的加密固件,同时通过安全通道,请求 HSM 生成授权文件给 STM32 芯片。那么,STM32 芯片就安全的拥有了固件解密的密钥,也就具备了对固件解密的能力。解密的过程是发生在 STM32 芯片内部。
    • 同时,该过程被 STM32 安全技术所保护,因而,在整个产品的生成过程中,不存在固件的泄漏,也不存在过生产。当然,如果对同一个设备,多次申请加密固件上授权文件,那么等同于对这个设备进行了多次解密安装,从而可授权次数会相应减少。比如1000次授权,把其中200次都用在同一个设备上,最终的设备最多只有800+1台。

安全固件安装是 STM32 提供给客户的解决工厂不可信的安全技术,属于全生命周期安全的一部分。

你可能感兴趣的:([从智能锁谈STM32安全技术 学习笔记] 六. 安全固件安装 SFI (Secure Firmware Installation))