前段时间,有同学做加密芯片国产化替代,笔者在加密芯片领域摸爬滚打十几年,积累了一些经验,就此问题做个总结。
加密芯片有多种类型,例如逻辑加密、ASIC、CPU卡等。国产加密芯片还多出了商密算法,选型更加复杂。
举例:有个客户做机顶盒条件接收,需求点是用户身份授权+数据安全传输存储。推荐了国内的一家卡片,但其执意要选取ATXXX16XX卡去完成。原因是这个客户有个朋友,公司做燃气表用的就是ATXXX16XX卡,使用多年很安全,没有非法充值情况发生。
燃气行业的应用特点和使用方式很特别。例如燃气表有铅封,一打开就失效,因此没人拆表分析;远传表连接后台云端,终端表具有篡改行为发生,会立即报警。有的采用工作人员上门抄表方式,异常充值立即会被发现。
客户需求的CPU跟卡片通信传输安全,在ATXXXX16XX卡片无法实现;而身份认证也只支持明文认证PIN口令。ATXXX16XX安全使用多年,更多的是行业应用方式决定,而非安全性高。表面看客户需求实现,但安全防护效果不佳。为了突出产品卖点认国际大厂品牌,选型比较盲目。举个例子,多数机顶盒需要终端与后台联网传输授权信息,这个时候最适合的卡片功能应该是具备密钥安全存储与数据加密的功能,用来对传输数据进行保护,但ATXXX16XX却不具备。又比如,ATXXX16XX有设置熔断功能,避免设置被篡改,而这个功能在机顶盒上也用不到,所以我跟人认为这个选型是有一些问题,或者说不太妥当的。
反观推荐的LK系列卡片,身份认证权限机制健全,数据存储算法优越,权限控制严格,安全性明显好于ATXXX16XX,但客户不用,也是无可奈何。
二、性能参数评估
有个项目需求是实现终端数据的加密传输,同时必须保证密钥存储和运算安全。经过仔细选型,定了两款型号,手册参数上看,功能相似性能接近。可行性评估时理论计算差不多,实际运行则相差甚远。最终定位在通信速率差异。手册中加密速度指的是芯片内部运行速度,但应用中,MCU(或者FPGA、DSP)还要和加密芯片通信,通信速率(uart 和IIC)限制了加密带宽,看起来低级错误,但基本都要踩过坑才知道。
还有的项目对于功耗等有要求,在手册中看是符合的,实际测试中待机功耗高于预期,最终也用不上。
三、方案设计
主流加密方案主要有身份认证、数据保密存储、算法移植这3大类。
身份认证:车载终端、公交刷卡机、门禁系统等场景需要身份认证,其内部加密芯片负责存储密钥和数据加密,与服务器(或者云端)身份鉴权,成功后登陆平台并开启响应功能权限。设计方案应侧重芯片自身的安全性和性能。参与认证的随机数应是真随机数。
数据保密存储:以汽车检测仪行业为例,采集分析后汇总的核心数据,能够提升产品品质,作出更符合消费者需求的产品。设计方案要考虑存储数据安全。默认MCU(或flash、EEPROM存储)安全性差。常规做法是存储在加密芯片中,使用时再加密读回,MCU解密后使用。MCU与加密芯片传输的安全性可控,大大提升产品安全性。配合传输前双向认证,方案更具可靠性。
算法移植方案:安防设备、工控机具等通常对程序防盗版有很高的要求,前述2种方案相对程序保护效果有限,后诞生了算法移植方案。这是国内公司凌科芯安最初提出的方案。流程是将MCU部分程序移植到加密芯片(高安全等级)中存储运行,芯片具备内部程序数据区离散存储、固有函数隐蔽性强、客户独立设计方案自由等特点。此时单独破解MCU无效,而破解加密芯片面临成本高难度高等棘手问题,投入产出不成正比,以此防盗防抄。以凌科芯安的LKT和LCS系列为代表,在防盗版领域优势相对明显。
四、调试壁垒(调试难度)
硬件方面,设计电路过程尽可能按照原厂demo电路进行设计,上拉电阻、复位电路器件参数选取,一般是厂家多年心血总结,比较靠谱,没必要尽量不改。
电源方面,处理好电源滤波。软件通信调试,务必仔细看厂家提供的通信协议手册,避免私有产品协议导致调试不通。以前有次通信采用ISO7816接口,默认所有指令按7816规范开发,卡了好几天,最终发现有一条E3开头命令是私有指令,有别于ISO7816。希望大家引以为鉴。
稳定性测试、老化测试必须重视。这是合格产品的必由之路,有些问题开发环节无法浮现,必须要经过批量测试和老化测试才能暴露。避免正式批量时出现问题。
五、量产发行(初始化问题,发行中的密钥保护问题)
加密芯片除了要求自身安全稳定,也要考虑发行(初始化和应用烧录)条件,手工发行和机械发行的效率和成本差别巨大,还有就是找第三方发行。
第三方代发行要考虑安全性,这个问题在合作过的芯片厂家中,凌科芯安比较有特色,可根据需求定制个人化加密发行方案,保证密钥和数据安全,第三方无法超发多发。
综上所述,加密保护首选方案,对功能和性能具备不同要求,开发调试和量产发行注意细节和安全,如何快速有效完成生产开发工作是一门很大的学问,希望此文有所裨益!