忽如一夜春风来,智能手机来到每个人的手上,我们用它支付、理财、娱乐、工作、记录生活、存储私密信息、乘坐公共交通、开启家门、控制汽车...。智能手机是如此的重要,不知天天把它拿在手上的你,是否关心过它是否足够安全。

本文从Secure Element(安全单元)说起,介绍手机设备上若干重要的安全角色和概念。为后续文章介绍如何基于手机安全地实现认证、支付、DRM等业务流程打下基础。

SE(Secure Element)

按照Global Platform的定义:安全单元提供私密信息的安全存储、重要程序的安全执行等功能。其内部组件包含有:CPU、RAM、ROM、加密引擎、传感器等,大致如下图所示:

SecureElementInternal

外在表现上SE是一块物理上独立的芯片卡。从外在表现上可以分为三种:

  • UICC 通用集成电路卡,由电信运营商发布和使用。就是大家购买手机号时的手机SIM卡;
  • Embedded SE 虽然也是独立的芯片,但普通用户看不到,由手机制造厂商在手机出厂前集成在手机内部;
  • Micro SD 以SD存储卡的形式存在,通过插入SD卡槽集成到手机上。由独立的SE制造商制造和销售;

SecureElementShape

SE物理上独立,采用安全协议与外部通讯。具有自己独立的执行环境和安全存储,软件和硬件上防篡改。软件通过签名等方式防篡改很多人都了解,说下硬件防篡改,简单说就是物理拆改SE,它会自毁。最简单的硬件防篡改的例子,大家可以参考大家给自己车安装车牌时所使用的单向螺丝和防盗帽。

SE固若金汤,但保存在其中的数据和程序需要有更新机制,这通过TSM(Trusted Service Manager)来实现,以保证安全。

TrustedServiceManager

SE不年轻了从19世纪70年代就开始发展,但它十分安全,是目前手机上最安全的技术措施。

NFC(Near-field Communication)

近场通信是一种短距高频的无线电技术,在13.56MHz频率运行于20厘米距离内,由非接触式射频识别(RFID,公交卡、校园一卡通、门禁卡等都采用RFID技术实现)演变而来,由飞利浦、诺基亚和索尼于2004年共同研制开发。目前已成为ISO/IEC IS 18092国际标准、EMCA-340标准与ETSI TS 102 190标准。

NFC设备有三种工作模式:

  • 卡模拟模式(Card emulation mode):这个模式其实就是相当于一张采用RFID技术的IC卡。可以替代现在大量的IC卡(包括信用卡)场合商场刷卡、IPASS、门禁管制、车票、门票等等。
  • 读卡器模式(Reader/Writer mode):作为非接触读卡器使用,可用来实现给公交卡充值等功能。
  • 点对点模式(P2P mode):这个模式和红外线差不多,可用于数据交换,只是传输距离较短,传输创建速度较快,传输速度也快些,功耗低(蓝牙也类似)。将两个具备NFC功能的设备链接,能实现数据点对点传输,如下载音乐、交换图片或者同步设备地址薄。

三种工作模式中,卡模拟模式用途最为广泛,可将用平时使用的各种卡通过手机模拟实现,从此出门不再带卡。此种方式下,NFC芯片通过非接触读卡器的RF域来供电,即便是手机没电也可以工作。

NFC设备若要进行卡片模拟(Card Emulation)相关应用,则必须内置安全单元(Security Element, SE)以保存重要隐私数据。可以说NFC给SE插上了翅膀,在NFC广泛应用的今天,SE如此的重要,成为电信运营商(移动、联通、电信等)、手机厂商(华为、小米等)、操作系统厂商(谷歌、苹果等)的兵家必争之地。

NFC

HCE(Host Card Emulation)

因为不涉及硬件制造,在SE的竞争过程中,操作系统厂商相对弱势,确切的说是谷歌弱势,因为苹果既是操作系统厂商,也是手机厂商。

早期Goole Pay是基于SE实现的,但由于在SE生态环境中弱势的竞争地位,导致Google Pay适配的机型少,难以发展。从Android 4.4开始,谷歌独辟蹊径在Android系统中提供了HCE服务,用来绕过SE直接控制NFC Controller。大概的模式如下图所示:

HCE

HCE不在依赖设备上的SE模块,只要有NFC芯片就可以实现支付等功能,但其实是无奈之举。方便是方便了,有两个主要缺点:一个是安全性有所降低,虽然可以使用白盒密码、服务端token校验等一系列手段来提升安全性,但相比SE,安全性降低到依赖Android OS,只要OS被攻破,HCE就无法保证安全;一个是费电,NFC Controller + SE的方案,可以在手机无电的情况下,使用NFC读卡器的电磁信号供电。而HCE则必须在手机供电,OS正常工作甚至还要联网的情况下才能使用。

相对的,因为对设备有这强的控制力,苹果的Apple Pay是基于SE实现的,更安全一些。

TEE(Trusted Execution Environment)

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

TEE广泛应用在支付、身份认证、内容保护等领域。举例来讲,视频厂商往往需要DRM(Digital rights management)系统来保护版权内容能够顺利得在用户设备上播放,而不被泄露。TEE天然适合用来完成这种需求,其安全存储的能力可以用来保存解密版权内容所需密钥,这样,TEE Application访问可信的服务端获取已加密的版权视频后,使用安全密钥解密,然后利用安全访问外置设备的能力,锁住显卡和声卡,将解密后的视频送往显卡和声卡播放。整个过程中,不管是加密密钥还是视频内容都没有离开过TEE,保护了版权视频的安全。尤其值得一提的,因其锁定外置设备的能力,想通过录屏来窃取内容,也是不可能的。

Android Fingerprint

Android设备的指纹识别,依赖TEE来实现用户指纹认证,要求指纹采集、注册和识别都必须在TEE内部进行,已保证安全。

AndroidFingerprint

Android KeyStore

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的证书链,来确认密钥的确保存在了安全硬件中

总结

能被业界接受的,就是好方案。

转载于:https://www.cnblogs.com/xinzhao/p/9319419.html

从 Secure Element 到 Android KeyStore相关推荐

  1. Android KeyStore流程

    文章目录 一.Keystore 二.Keystore架构及接口函数 1. Keystore组件架构 2. IKeymasterDevice.hal中的几个重要接口函数 2.1 begin函数 2.2 ...

  2. 武汉天喻信息 移动安全领域 SE(Secure Element)

    产品简介: SE(Secure Element)为安全模块,是一台微型计算机,通过安全芯片和芯片操作系统(COS)实现数据安全存储.加解密运算等功能.SE可封装成各种形式,常见的有智能卡和嵌入式安全模 ...

  3. ECDH KDF java_java-ECDH使用Android KeyStore生成的私钥

    我正在尝试使用由Android KeyStore Provider生成的私有代码在Android中实现ECDH. public byte[] ecdh(PublicKey otherPubKey) t ...

  4. Android keystore 密码找回

    昨天准备给自己的应用发布一个新版本,在apk打包时,发现之前的用的keystore密码忘了. 蛋碎了一地,我把我所能想到的密码都试了一遍(注:我平常在各个门户网站注册基本上用的都是那几个字母和数字组合 ...

  5. android keystore密码,Android keystore的使用方法

    一.eclipse 中生成android keystore 建立任意一个android项目(例如:AntForAndroid) 右键AntForAndroid根目录弹出菜单->Android T ...

  6. Android KeyStore密钥存储

    KeyStore简介 利用 Android KeyStore System,您可以在容器中存储加密密钥,从而提高从设备中提取密钥的难度.在密钥进入密钥库后,可以将它们用于加密操作,而密钥材料仍不可导出 ...

  7. java ecdh_java-ECDH使用Android KeyStore生成的私钥

    我正在尝试使用由Android KeyStore Provider生成的私有代码在Android中实现ECDH. public byte[] ecdh(PublicKey otherPubKey) t ...

  8. android keystore作用,Android KeyStore理解及簽名

    Android簽名概述 我們已經知道的是:Android對每一個Apk文件都會進行簽名,在Apk文件安裝時,系統會對其簽名信息進行比對,判斷程序的完整性,從而決定該Apk文件是否可以安裝,在一定程度上 ...

  9. Android Keystore/keymaster的错误码

    上层 (frameworks/base/core/java/android/security/keymaster/KeymasterDefs.java)// Error codes. public s ...

最新文章

  1. 使用pp架构形成计算机集群请求的地址无效_干货!史上最详细脑图《大型网站技术架构》...
  2. 【转】构建微服务架构的最佳实践2/3
  3. 成为iPhone游戏开发者的十大秘技
  4. 18. strings
  5. Delphi TForm 转 TFrame
  6. mtk camera faq
  7. cryptojs AES加密
  8. 数据结构银行排队系统c语言,数据结构银行排队系统实验报告
  9. Laravel log channel 分组配置
  10. 多目标优化常见分解方法
  11. npm install 安装一直报错Error EPERM operation not permitted, mkdir
  12. 67tool.com 即用即走的在线工具箱
  13. 计算机一级幻灯片版式,ppt2010官方基础教程:添加不同版式幻灯片-powerpoint技巧-电脑技巧收藏家...
  14. 神经网络常用的训练方式,神经网络训练过程详解
  15. 哪个服务器便宜又稳定,便宜又稳定的云服务器
  16. 如何使用BeaconEye监控CobaltStrike的Beacon
  17. 宋词欣赏 李清照
  18. 关于auth0的jwt
  19. Nervos 双周报第 9 期:CKB Testnet 要上线?
  20. oracle 事务提交回滚吗,c# – 提交和回滚Oracle事务

热门文章

  1. html字体加载规则,CSS-等待字体加载,然后渲染网页
  2. Aspose.Cells Excel删除行
  3. vue 控制某个元素的显示或者隐藏之v-if属性
  4. 最新京东短信登录+傻妞机器人保姆级部署教程(2022/9/8)
  5. 练习:输入一个数,判断他是奇数还是偶数
  6. 绿巨能 macbook pro 电池
  7. 全面了解风控指标体系
  8. 使用阿里云提供的短信服务发送短信(个人版)
  9. CI框架中表单取值 $this-input-post('city');
  10. AD16如何添加禁止区域