忽如一夜春風來,智能手機來到每個人的手上,我們用它支付、理财、娛樂、工作、記錄生活、存儲私密資訊、乘坐公共交通、開啟家門、控制汽車...。智能手機是如此的重要,不知天天把它拿在手上的你,是否關心過它是否足夠安全。
本文從Secure Element(安全單元)說起,介紹手機裝置上若幹重要的安全角色和概念。為後續文章介紹如何基于手機安全地實作認證、支付、DRM等業務流程打下基礎。
SE(Secure Element)
按照Global Platform的定義:安全單元提供私密資訊的安全存儲、重要程式的安全執行等功能。其内部元件包含有:CPU、RAM、ROM、加密引擎、傳感器等,大緻如下圖所示:
外在表現上SE是一塊實體上獨立的晶片卡。從外在表現上可以分為三種:
- UICC 通用內建電路卡,由電信營運商釋出和使用。就是大家購買手機号時的手機SIM卡;
- Embedded SE 雖然也是獨立的晶片,但普通使用者看不到,由手機制造廠商在手機出廠前內建在手機内部;
- Micro SD 以SD存儲卡的形式存在,通過插入SD卡槽內建到手機上。由獨立的SE制造商制造和銷售;
SE實體上獨立,采用安全協定與外部通訊。具有自己獨立的執行環境和安全存儲,軟體和硬體上防篡改。軟體通過簽名等方式防篡改很多人都了解,說下硬體防篡改,簡單說就是實體拆改SE,它會自毀。最簡單的硬體防篡改的例子,大家可以參考大家給自己車安裝車牌時所使用的單向螺絲和防盜帽。
SE固若金湯,但儲存在其中的資料和程式需要有更新機制,這通過TSM(Trusted Service Manager)來實作,以保證安全。
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如此的重要,成為電信營運商(移動、聯通、電信等)、手機廠商(華為、小米等)、作業系統廠商(谷歌、蘋果等)的兵家必争之地。
HCE(Host Card Emulation)
因為不涉及硬體制造,在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實作的,更安全一些。
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廣泛應用在支付、身份認證、内容保護等領域。舉例來講,視訊廠商往往需要DRM(Digital rights management)系統來保護版權内容能夠順利得在使用者裝置上播放,而不被洩露。TEE天然适合用來完成這種需求,其安全存儲的能力可以用來儲存解密版權内容所需密鑰,這樣,TEE Application通路可信的服務端擷取已加密的版權視訊後,使用安全密鑰解密,然後利用安全通路外置裝置的能力,鎖住顯示卡和聲霸卡,将解密後的視訊送往顯示卡和聲霸卡播放。整個過程中,不管是加密密鑰還是視訊内容都沒有離開過TEE,保護了版權視訊的安全。尤其值得一提的,因其鎖定外置裝置的能力,想通過錄屏來竊取内容,也是不可能的。
Android Fingerprint
Android裝置的指紋識别,依賴TEE來實作使用者指紋認證,要求指紋采集、注冊和識别都必須在TEE内部進行,已保證安全。
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的證書鍊,來确認密鑰的确儲存在了安全硬體中 |
總結
能被業界接受的,就是好方案。