《人民的名义》大结局后3个月,你们还记得那个火成表情包的达康书记吗?安在君
(ID:AnZer_SH)
最近重温这部剧时候,注意到了一个细节:达康书记用的手机竟然是金立?!这不是那个号称最安全的那款手机吗?
安在上网一查,原来今年4月“达康书记”扮演者、著名演员吴刚出任了金立手机首席安全体验官!哎呦,了不得了!
话锋一转,
安在(ID:AnZer_SH)
比较关心的是:这个号称最安全的手机到底有”多安全”呢?
去年年中,金立发布的M6/M6 Plus在业界首次搭载“内置安全加密芯片”,以硬件加密的方式极大地提升了安卓智能手机的安全性,产品上市后获得了政商人士的青睐与肯定。而作为M6系列的全新升级之作,金立M6S Plus搭载了一颗全球首款指纹加密芯片,被业内人士认为是目前安全性最高的智能手机之一。
去年7月份,国外媒体福布斯在介绍金立M6手机的时候也有提到,“深圳的这家公司宣传这款手机是‘全球最安全的手机’,由于其采用128位加密芯片所以相当安全”。很多国外媒体也都跟随用了“safest”最安全一词。
也许,金立会说:我可没说“最安全”,要被广告法罚的哟,这个锅我可不背。是的,实际上我们并没有发现金立官方做过这样的宣传。不过国内还是有不少媒体下标题,类似于“这可能是当前最安全的手机”,“iOS还真不是最安全的”…无论如何,这款手机都是以安全为卖点的。而金立M6的广告,也赫然写着“内置加密安全芯片”的宣传词。
按照金立的说法,这颗“安全芯片”是位于M6手机主芯片旁边的一颗独立芯片:“M6采用的是硬件加密方式,为此M6专门内置了一颗安全加密芯片,加解密过程、密钥存储均在此芯片中完成”。金立官方只解释了这颗芯片采用“与商业银行同样的加密算法。通过这颗芯片,金立M6可以实现私密空间、专线通话以及支付保护等多种功能。”
另一方面,从媒体对金立M6手机的拆解来看,这款手机的主芯片(联发科P10)旁边的确有一颗标注了VEB A3的芯片,这可能就是传说中金立M6的安全加密芯片了。
这颗VEB A3应该就是金立M6的“安全加密芯片”
那么,这颗芯片对用户而言,究竟有什么价值?
从金立的宣传来看,M6加密芯片主要负责“私密空间2.0”、“专线通话”和“支付保护”三项功能。
金立
M6的“私密空间”
所谓的私密空间,是指用户可以将联系人、短信、通话记录、图片、文件和应用放入到一个加密的空间内,操作界面直接表现为有一个专门的“私密空间”,可对私密空间进行密码设置,输入密码才能进入——金立曾经提到过M6的加密芯片内置有独立的RAM、ROM和闪存。我们猜测这里的私密空间就是指,将资料以加密的方式保存在专门的加密芯片内(既然涉及到独立于主系统之外的Memory存储,果然还是需要成本投入的)。所以金立也说,即便手机被盗,将芯片取出来也无法获取其中的数据。
专线通话则是对通话过程进行加密防止窃听,但我们并不清楚通话过程是如何通过这颗芯片实现加密解密的。
支付保护则是系统对金融应用做安全认证、扫描支付环境、对支付验证码(也就是与支付相关的短信)单独加密保护。我们猜测,对金融应用做安全认证、扫描支付环境理应还是在系统层面以软件方式实现的,对支付验证码的加密保护或许是借用了加密芯片。至于用户指纹或密码之类的信息,可能需要打个问号,因为ARM的TrustZone原本是负责这部分工作的。
总的来说,虽然我们不清楚金立M6加密芯片的工作流程(及其与主CPU的协作方式),但这种设计属于典型的在SoC之外增加硬件安全模块的方案。
实际上金立M6安全加密芯片属于比较常规的设计思路,就是将普通世界和安全世界进行隔离,在安全世界中存储更有价值的信息。运用这种思路做安全设计的典范就是ARM芯片内部的TrustZone了—。
对半导体行业有了解的同人都知道,ARM是一家提供芯片设计IP的公司,现如今这个星球上超过九成的手机都采用ARM设计的CPU和芯片。高通、联发科、苹果、华为这样的厂商从ARM公司购买芯片设计授权,再做二次开发,推出自家的芯片产品应用到手机上。
早在多年以前,ARM就考虑到了芯片层面的安全问题,所以将专门解决安全问题的TrustZone融入到了此后几乎所有的芯片设计中。在谈ARM的TrustZone之前,有必要先聊聊苹果和iPhone。既然有媒体将金立M6的安全性与iPhone对比,那么提iPhone是如何做安全的就很有必要了。
苹果2013年推出了iPhone 5s,这款手机的一大变化就是加入了TouchID指纹识别传感器。很多人可能不知道的是,指纹识别传感器的采用并不只是关乎指纹识别技术,身份认证一旦涉及到生命体征(比如指纹),其安全性要求就会高出一截。就像许多人常说的,指纹识别这样的生命体征一旦被盗,就是永久被盗,无法像密码那样——泄露了大不了改掉就是。
所以iPhone 5s采用的A7主芯片(同样是ARM架构)内部有个叫做Secure Enclave的区域(苹果在自家的安全拍皮书中将之称作coprocessor-协处理器)。这个区域包含有硬件随机数生成器,并采用加密存储(高速缓存),用户的指纹数据就加密存储在这个位置,另外此处还针对数据防护密钥管理提供加密操作、生成唯一UID等等。
Secure Enclave其实还有很多数据加密方面的特性,下面的章节中会详细探讨。
总之指纹、密钥、加密操作一类的相关安全的部分就隔离在CPU的这块Secure Enclave中。它就像一个黑匣子,与CPU其它区域的通讯也是被严格限制的,即便是系统级别的进程也无法获取Secure Enclave中像指纹这样的数据。针对指纹数据做解密的密钥只在Secure Enclave中使用,外界是拿不到的。
这里我们可以简单谈一谈指纹的加密存储。TouchID指纹识别传感器本身通过一个串行界面总线与处理器连接,数据是直接转往Secure Enclave的。双方针对指纹数据的加密和通讯方式是这样的:设备专为Touch ID指纹识别传感器和Secure Enclave准备了一个共享密钥,利用该共享密钥协商出一个会话密钥对指纹进行加密存储。会话密钥的交换又会采用双方“包装”的AES密钥,用提供的随机密钥生成该会话密钥,并采用AES-CCM传输加密。
这段话其实没有必要去深究。在你进行指纹识别的时候,指纹识别传感器首先对你的指纹做光栅扫描,将之临时存储到Secure Enclave中,分析过后就会丢弃。我们平常所见的任何应用(即便是系统级应用)要求用户按压指纹,无论是支付还是购买确认操作,它们实际上并没有机会拿到指纹数据——不仅指纹加密存储在Secure Enclave中,而且指纹只是客户端和服务器交互过程中本地加密解密的一个环节,而不会参与身份认证的数据传输过程。这种身份识别方式先前已经由FIDO联盟做出过标准化的统一。
有关FIDO UAF标准的扩展
比如利用指纹来支付的场景,简单说来是设备生成公钥和私钥——针对用户、设备及卖家(也就是购物网站)。卖家那边仅持有公钥,而设备持有的私钥需要用指纹识别的方式来解锁。指纹数据本身是不在设备间和网络上传递的,这一点很重要。卖家一方能够获取到一些元数据,包括用户身份认证的方式(此处就是指纹识别)、所用的密钥保护机制以及设备型号,这些数据可用于后端风险分析。
这种方案是FIDO联盟提出来的,苹果的芯片和Android手机芯片基本都在遵循这套方案。其实想一想,网上购物的传统用户名、密码组合方式——卖家一方是需要和用户共同持有这个“私钥”的,只不过卖家一方以加密的方式存储私钥(也就是用户密码),卖家服务器如果被黑,数据就会被获取。但在FIDO这套方案中并不存在这样的风险,因为卖家并不持有私钥。
不过目前某些互联网服务的生物识别身份认证过程,的确有采用将生命体征(如声纹、指纹)存储在服务器上的方式——这种方式原则上是非常不被推崇和不安全的。
虽然苹果没有公布过Secure Enclave的技术细节,但从其描述方式来看,和ARM设计中的TrustZone在理念上很相似,或许是TEE的其他实现方式,或者也可能是高度定制版TrustZone——TrustZone也是在处理器内部区隔出一块独立的安全区域(ARM称之为Secure World)。也就是将安全世界和普通世界进行隔离的设计理念。
听起来似乎和金立M6的设计也差不多,但千万不要忘记:无论是ARM芯片内部的TrustZone,还是苹果A7(到现如今的A10)芯片内部的Secure Enclave,它们都是在设计伊始就融入到整个系统的流程中的,也就是将安全作为芯片设计的必要环节。
所以这两者的设计思路是整合到处理器流程内部的,而金立M6安全芯片如前文所述更像是个“外来者”——虽然严格来说这也属于内置硬件安全模块。且不说这颗芯片中的加密数据经过总线和主芯片通讯的性能会打折扣,打个更为宏观的比方,
现如今的企业安全都讲究将安全融入到业务中去,而不是在业务之外孤立地考虑安全问题,这就是两者的区别所在。
这种在主芯片旁边采用定制硬件的方案的安全设计思路如果早几年应该是个可被接受的方案,但在TrustZone(TEE)普及之后就显得没那么给力了。就安全而言,其主要问题在于涉及的范围有限,投入产出不大成正比:没有人会将所有应用和数据全部放到“私密空间”,现实也不允许这么干,这就注定其保护的资产是不全面的。
《Securing Java》一书中总结用户在安全和功能之间做出选择时的一句话很有趣,在行业内也非常有名:
“要在跳舞的猪和安全之间做出选择,用户肯定总是会选跳舞的猪!”
这句话很形象地表达了,在安全事件出现之前,绝大部分人对安全的忽视。所以最佳方案是在整个“业务”流程中融入安全,令安全成为系统的组成部分,而不是独立于系统之外。不要寄希望于用户会主动选择安全,将数据主动放进“黑匣子”,而是帮他们去做这件事。
安在(ID:AnZer_SH)
也在网上看到一个金立M6用户回答说:其实使用起来没有那么复杂,比如你把qq放在私密空间,在锁屏的时候qq里有新消息了,双击就进去了,什么暗码,指纹都不要,同样我用绿色守护这个软件,里面有个启动软件的地方,你在哪里启动私密空间里的软件,虽然会显示此软件无启动入口,但是多试几次就可以进去了,同样,你把东西分享到qq也可以进去私密空间
很显然,这个所谓的“私密空间”“加密”等概念对于一般用户来说,并没有很大的区别。
TrustZone主要就是在CPU内部构建一个叫做“Trust Execution Enviroment(TEE)”的区域,也就是前文所述的“安全世界”。这里的TEE早在很久之前就由GlobalPlatform提出了标准化,TrustZone算是遵循TEE的具体解决方案(TrustZone也并非唯一一种TEE解决方案)。其理念就是在硬件架构之中,将安全基础设施扩展到整个系统设计,比如安全启动、授权Debug之类的操作都考虑在其中。
在此,我们还可以对TrustZone的设计做一些简单展开。由于芯片具体实现比较枯燥,这里只谈其中的一小部分。
左边的
Rich OS表现在手机上就是Android和iOS了
如前文所述,TrustZone的设计理念就是将整个SoC硬件和软件资源都分隔成两部分:安全子系统的“安全世界”,和常规使用的“普通世界”。“安全世界”有自己专有的操作系统(受信任的启动流程,Root of Trust),敏感数据就放在其中,也会有一些微应用运行在安全处理器核心之上,诸如加密、密钥管理和完整性检查,这个“世界”也有专门的安全Debug。
AMBA3 AXI总线结构用于确保“安全世界”不会被“普通世界”的成员访问。
在具体实现上,比如如今占据移动芯片半壁江山的高通,其CPU内部的TrustZone名为QSEE,所用的安全操作系统叫QSEOS。QSEOS直接以系统调用的形式提供少量服务,由TrustZone自身内核处理。为了让受信任功能具有扩展性,TrustZone内核是可以加载执行名为“Trustlets”的小程序的——为“普通世界”操作系统(也就是Android)提供安全服务。一般来说这两个世界之间的通讯是需要经过操作系统的内核的。通常的Trustlets有:
Keymaster
,Android的”keystore”守护进程提供的密钥管理API的具体实现,它的作用是生成存储加密密钥并让用户使用这些密钥。(FreeBuf去年曾经报道过高通芯片漏洞,可导致Android全磁盘加密被破解的核心就在这里)
Widevine
,Widevine DRM的实现方式,就是在设备上进行媒体的“安全播放”。