作者:清真佛性程序强,于 2018 年 11 月 23 日
什么是 TEE?
TEE (Trusted Execution Environment)可信执行环境,用于构造一种安全的飞地环境,在可信计算领域,它常用作提供可信根。我们泛化的去理解 TEE 设备,不妨将它看作一台微型电脑,通常配备 CPU、内存、外存、时钟、IO通信等部件,无非这种微型电脑对驻留的程序与数据提供安全保障,存放在 TEE 中私钥能做到永远不泄露到飞地之外,程序也是,无法导出被用于破解分析,执行过程(尤其调用输入输出时)也有安全保障,破解驻留在 TEE 中程序通常认为是很困难的。另外,TEE 设备还常在出厂时固定厂商号与序列号,以便唯一标识此设备。
如果大家对 TEE 理解还不够深,想象一下银行的 U 盾就大致清楚了。U 盾硬件由若干 TEE 安全芯片,加上显示屏、按键等小零件构成,TEE 驻留有板级操作系统(COS),COS 用于装载并运行若干个 TA(Trusted Application)。
TEE 在区块链应用领域的独特地位
我们以手机支付场景为例,解释传统 TEE 与现今 TEE 使用场景上的区别。早年的手机普遍不带 TEE,现在 TEE 在高端机上已逐步普及开来,像华为、HTC、联想、360、金立等厂家的许多高端机型都配有 TEE,随着数字经济深入发展,尤其区块链技术的进一步发展,我们有理由相信,TEE 即将成为中高端手机的标准配置。
先理解一个问题,微信(或支付宝)转账,并不依赖 TEE 为啥就够用了?本质上说,微信转账安全性由用户自己与腾讯共同保证的,用户要记住支付密码,微信 APP 须提供安全运行环境,这两者是串联关系(非并联),整体安全由两者乘数决定。微信转账依赖于服务端,还有风控、限额等安全措施,所以,在 APP 级别控制安全已基本够用。
但如果在平台级别提供支付,像华为的 NFC 近场支付以 SDK 方式提供编程,只在 APP 级别管控风险显然不够,SDK 提供了开放的调用环境,必须用 TEE 加持才能保障平台级的支付安全,否则拦截或伪造触摸屏操作,支付过程很容易被破解。
数字钱包的安全级别也是平台级别的,动用私钥对交易签名是唯一的安全屏障,不像微信还有服务器端的安全保障。签名只是一个点上的控制手段,如果不把签名过程纳入 TEE 飞地环境中执行,系统安全性无异于裸奔。所以,我们自然先下一个结论:把手机用作区块链的支付终端时,借助 TEE 是不可略过的安全手段。
或许有人问,非接触式硬件钱包不是更好吗?确实,这类钱包确实很安全,但这一品类永远属于小众市场。本文只讲大众化的应用场景,现在大家用手机扫二维码觉得很自然,用隔离式硬件钱包试试?签名需一次通信,回传是另一次,扫码回传有障碍。
从三级分层转向四级
传统内置 TEE 的产品有三个层级,如下图:
其中,TEE 芯片商提供 TEE 硬件与基于 COS 的编程系统,设备生产商把 TEE 集成到自己生产的设备(如手机)中,并将自己用到的基础程序写入 TEE,然后终端用户无条件相信设备生产商,比如用华为的手机,就相信华为不会泄露个人密钥的。商业逻辑如此,用户也没别的选择,不过这种形态越来越难以适应区块链发展趋势了。
区块链场景下的安全控制应有四级,如下图:
增加一个级别是应用开发商,原先只有设备生产商在 TEE 内置程序,现在不够用了,有许多厂家要求在飞地环境跑程序。具体举例来说,一款区块链手机要跑如下多个 TA(Trusted Application):
手机制造商的 TA
区块链运营商的 TA
比如,使用 PoET 共识的区块链需在 TEE 中提供算法。链上数据服务商需 TA 提供加解密支持
这里数据还不是帐本数据(当然帐本数据也存在加解密需求),像 IPFS 宣称可以替换 HTTP 协议,公开数据分散到众多节点明文存贮自然没什么问题,但还有大量有安全要求的数据要先加密,然后才能分散存贮的,各大网站用户登录后才可操作的那些数据,大致与之对应。身份信息服务商的 TA
区块链在底层支持用户拥有数据主权的能力,与上层应用结合时,反映为众多替身在不同应用服务商获取相应服务,替身的 ID 是一长串经过加密的数字,各替身因加密隔离,从而防止应用服务商进行数据挖掘。替身 ID 的加解密需要 TEE 支持。终端设备上各种 APP 开发商也会用到 TEE
HTC新出一款所谓的区块链手机(Exodus),其最大特性是把TEE接口开放了,提供SDK给大家开发各种 APP。
总之,在区块链新发展形态下,TEE 的需求变得更加广泛,越发成为一种基础服务,我用两个词概括便是:多厂商、泛安全。
TEE 方案提供商的挑战
TEE 是硬件,TEE 中的 TA 是软件,硬件集成是一次性的,软件则可随时安装,所以,适应区块链生态的 TEE 须支持多厂家随时安装 TA,而不限于只在出厂前预装。
这好比芯片商原先只为单个银行独立提供 TEE,现在要求共用一款 TEE,然后多家银行在同一设备上安装各自的安全软件。
我相信技术上支种这种需求难度不大,问题可能出在信任机制上,目前市面上有 TEE 可借助通道隔离技术,让多个 TA 互不干扰,通道之间是否断开联系可配置。不过,做到这一步还不够,各厂商把身家性命都托付出去了,如何相信别人不留后门,如何相信其他厂商之间不会勾连串通。安全级别应再提升一级,这好比微信只需在 APP 层面保障安全,但将支付功能下移,用 SDK 封装 NFC 供许多人使用时,安全性要求就大不一样了。
据我们了解,市面上已有这类 TEE 解决方案,采用 JCVM 虚拟机,各厂商用 JAVA 编写 TA 程序下载到 COS,因 java 虚拟机具备良好的隔离性,各厂商之间能实现很好的隔离。该方案在金融社保卡领域已有应用,作为金融卡,金融机构会往卡里预装程序,作为社保卡,社保局也会往卡里预写程序,这是天然的多厂商应用场景。
随着区块链应用发展,TEE 多厂商的需求将进一步拓展。目前卡中 JCVM 运行性能普遍偏低,区块链所需的共识层加解密、数据层加解密,在性能上将提出更高要求;另外,当物联终端普遍上链,接入方式的要求也会更广泛。这个领域属于待开发新领域,谁率先杀入就先享受红利。
(本文完)