在第六季内容中,将介绍安全固件安装 SFI (Secure Firmware Installation)的原理及解决方案。
安全固件安装的本质是,我们是否能相信工厂的制造过程是安全的过程。如果我们相信工厂是可靠的,相信它总是按照我们的指示,例如,我们希望它不要泄露固件代码,我们希望它不要过生产,他们都能一一办到,那么安全固件安装是没有用武之地。
然而,总有一些工厂,或者工厂里的某些员工 ,他们为了一时利益,可能会将研发设计公司辛苦开发的源代码(通常是厂商的二进制固件代码),直接泄露给其他第三方。同时他们也有可能将委托生产的产品过生产。即,如果我们希望他试着生产的 1000 台 ,结果他们也许会生产 2000 台。1000 台按照合同提供回给厂商,使用正规的商标与品牌,另外 1000 台则不知道使用什么样的商标流入市场。如果该产品在市场上很火爆,他们获得的利益会远远超过代工的收益。
STM32 在这种情景下,提供了一种技术手段,来保护委托方产品研发的权益。也就是说除了正常的 法律手段之外,STM32 技术手段可以防止工厂泄漏受委托生产的固件的二进制代码,同时防止工厂进行过生产,获取非法利益。
2、安全固件安装的两个关键问题及解决
安全固件安装涉及两个关键问题。第一是固件代码的保密性,就是说,我们即使使用第三方工厂进行制造,我们也不会因为工厂制造的安全弱点,而把我们的固件的二进制代码泄露出去。第二个问题就是过生产、产计数的问题。如果我们下的订单是 1000 台,绝无可能生产 1001 台。
要进行固件保密,一种方法就是我们派一个人常驻工厂,24 小时的对工厂流程进行监控。这种情况下我们可以确保没有人去复制二进制固件代码。还有一种方法就是通讯安全的思路。从公司研发部门到设备终端构建一个端对端的安全通道。在这个安全通道上面传输固件。如果你已听过前面的安全讲座的话,我们很快就可以知道,实现这个方法一定是加密技术。我们在研发部门发布产品的时候对固件二进制代码进行加密,然后让设备, 也就是 STM32 进行解密。
那么引出第一个问题,这个加密或者解密的密钥,是如何从研发部门传递到设备里去呢? 这就需要安全通道的概念。我们从前面的加解密技术也知道,我们有能力构建这样的一个安全通道。我们或者利用公钥体系,或者利用对称密钥体系。
那么第二个问题,防止工厂不会过生产产品这个问题是如何解决的呢?如果我们能够控制 STM32 能加密的次数,我们就可以控制实际的产。第一个问题已提到,固件是加密 的。那么,只有通过解密,固件才能在 STM32 里运行。解密的过程,是在 STM32 内部。 换言之, 这是一个产品授权的概念。源端只授权了 1000 台的生产,那么工厂是没有办法 解开 1001 个固件包进行安装。
我们总结一下 ,在工厂里实施固件保密,是通过对称密钥技术。技术原因是,固件一般比 较大,不适合使用公钥算法。而产计数,则是授权的概念,所授权的数字对应于具体的需要生产的产品数目。解密的密钥通过安全的通道直接发送到设备里去。STM32 设备里所运行的程序,是由ST开发,是可信的代码。它能够保证解密的密钥只使用一次。从而保证了使用次数与授权次数相一致。这样一个产计数就成功实现了。
3、安全固件安装的示例解决方案
在了解原理的基础上,我们再具体的看一下这个解决方案的组成。在这个解决方案里有三 个角色,一个角色是研发部门,它是固件的制造者;另一个角色是工厂的产线;第三个参与者则是 STM32 芯片。