忽如一晚上春风来,智能手机来到每一个人的手上,咱们用它支付、理财、娱乐、工做、记录生活、存储私密信息、乘坐公共交通、开启家门、控制汽车...。智能手机是如此的重要,不知每天把它拿在手上的你,是否关心过它是否足够安全。android
本文从Secure Element(安全单元)提及,介绍手机设备上若干重要的安全角色和概念。为后续文章介绍如何基于手机安全地实现认证、支付、DRM等业务流程打下基础。git
按照Global Platform的定义:安全单元提供私密信息的安全存储、重要程序的安全执行等功能。其内部组件包含有:CPU、RAM、ROM、加密引擎、传感器等,大体以下图所示:安全
外在表现上SE是一块物理上独立的芯片卡。从外在表现上能够分为三种:性能
SE物理上独立,采用安全协议与外部通信。具备本身独立的执行环境和安全存储,软件和硬件上防篡改。软件经过签名等方式防篡改不少人都了解,说下硬件防篡改,简单说就是物理拆改SE,它会自毁。最简单的硬件防篡改的例子,你们能够参考你们给本身车安装车牌时所使用的单向螺丝和防盗帽。加密
SE固若金汤,但保存在其中的数据和程序须要有更新机制,这经过TSM(Trusted Service Manager)来实现,以保证安全。操作系统
SE不年轻了从19世纪70年代就开始发展,但它十分安全,是目前手机上最安全的技术措施。code
近场通讯是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内,由非接触式射频识别(RFID,公交卡、校园一卡通、门禁卡等都采用RFID技术实现)演变而来,由飞利浦、诺基亚和索尼于2004年共同研制开发。目前已成为ISO/IEC IS 18092国际标准、EMCA-340标准与ETSI TS 102 190标准。orm
NFC设备有三种工做模式:视频
三种工做模式中,卡模拟模式用途最为普遍,可将用平时使用的各类卡经过手机模拟实现,今后出门再也不带卡。此种方式下,NFC芯片经过非接触读卡器的RF域来供电,即使是手机没电也能够工做。blog
NFC设备若要进行卡片模拟(Card Emulation)相关应用,则必须内置安全单元(Security Element, SE)以保存重要隐私数据。能够说NFC给SE插上了翅膀,在NFC普遍应用的今天,SE如此的重要,成为电信运营商(移动、联通、电信等)、手机厂商(华为、小米等)、操做系统厂商(谷歌、苹果等)的兵家必争之地。
由于不涉及硬件制造,在SE的竞争过程当中,操做系统厂商相对弱势,确切的说是谷歌弱势,由于苹果既是操做系统厂商,也是手机厂商。
早期Goole Pay是基于SE实现的,但因为在SE生态环境中弱势的竞争地位,致使Google Pay适配的机型少,难以发展。从Android 4.4开始,谷歌独辟蹊径在Android系统中提供了HCE服务,用来绕过SE直接控制NFC Controller。大概的模式以下图所示:
HCE不在依赖设备上的SE模块,只要有NFC芯片就能够实现支付等功能,但实际上是无奈之举。方即是方便了,有两个主要缺点:一个是安全性有所下降,虽然可使用白盒密码、服务端token校验等一系列手段来提高安全性,但相比SE,安全性下降到依赖Android OS,只要OS被攻破,HCE就没法保证安全;一个是费电,NFC Controller + SE的方案,能够在手机无电的状况下,使用NFC读卡器的电磁信号供电。而HCE则必须在手机供电,OS正常工做甚至还要联网的状况下才能使用。
相对的,由于对设备有这强的控制力,苹果的Apple Pay是基于SE实现的,更安全一些。
SE千般好,除了慢。硬件隔离,独立的计算和存储资源,意味着SE的计算性能差、跟主机的数据传输速度也慢,这限制了SE的应用场景。与此同时,移动互联网发展迅速,迫切须要一个更好的安全生态。所以TEE应运而生。
TEE是一个硬件安全执行环境,一般跟平时使用的Rich OS(Android等)共用同一个主处理器(CPU),提供了代码和数据的安全防御、外置设备的安全访问等功能。TEE具备本身的TEE OS,能够安装和卸载执行其中的安全应用TA(TEE Application)。跟SE相比,是一个相对不那么安全,但运行速度更快、功能更丰富的安全环境。为全部支持TEE的手机,提供了操做系统以外的安全方案。
SE、TEE以及REE的对比:
对比项 | SE | TEE | REE |
---|---|---|---|
安全级别 | 最高(硬件防篡改) | 高(硬件安全方案) | 普通 |
性能 | 差 | 高 | 高 |
是否在主处理器执行 | 否 | 是(极个别状况有独立处理器) | 是 |
安全的外设访问 | 不支持 | 支持 | 不支持 |
提供硬件证实 | 必定程度上提供 | 提供 | 不提供 |
软件生态 | 较差 | 较好 | 极好 |
TEE的内部API和外部API都由Global Platform定义和发布。TEE获得了业界普遍的支持,好比ARM在2006年就发布了ARM处理器下的TEE方案TrustZone,AMD、Intel、华为海思等,也有本身的TEE方案。
TEE普遍应用在支付、身份认证、内容保护等领域。举例来说,视频厂商每每须要DRM(Digital rights management)系统来保护版权内容可以顺利得在用户设备上播放,而不被泄露。TEE自然适合用来完成这种需求,其安全存储的能力能够用来保存解密版权内容所需密钥,这样,TEE Application访问可信的服务端获取已加密的版权视频后,使用安全密钥解密,而后利用安全访问外置设备的能力,锁住显卡和声卡,将解密后的视频送往显卡和声卡播放。整个过程当中,不论是加密密钥仍是视频内容都没有离开过TEE,保护了版权视频的安全。尤为值得一提的,因其锁定外置设备的能力,想经过录屏来窃取内容,也是不可能的。
Android设备的指纹识别,依赖TEE来实现用户指纹认证,要求指纹采集、注册和识别都必须在TEE内部进行,已保证安全。
Android从4.0开始引入了KeyStore,开发者可使用KeyStore API生成密钥、使用密钥签名、使用密钥加解密、获取密钥的属性信息,但没法将密钥自己从KeyStore中取出。由于密钥不进入应用进程,这大大提升了密钥的安全性。随着Android版本更迭,KeyStore的实现不断进化得更加安全,在有些设备上,不只密钥不进入应用进程,甚至不进入Android OS只存储在TEE或SE中,接下来咱们大概列举下KeyStore的进化。
Android 版本 | 新增的KeyStore能力 |
---|---|
4.0 | 创世版本,密钥使用用户的passcde加密后存储,支持RSA、ECDSA |
4.1 | 增长了使用安全硬件的基础设施,在可能的状况下密钥会被存储到安全硬件中 |
6.0 | 增长支持AES、HMAC;增长了密钥绑定用户认证的能力,便可以指定某些密钥,在每一次使用时,必须由用户进行认证(指纹、passcode等) |
7.0 | 强制要求预装7.0系统的设备必须拥有安全硬件而且支持基于安全硬件的KeyStore |
8.0 | 增长了设备证实(Key Attestation)能力,开发者可经过验证Key Attestation的证书链,来确认密钥的确保存在了安全硬件中 |
能被业界接受的,就是好方案。