天天看點

從 Secure Element 到 Android KeyStore

忽如一夜春風來,智能手機來到每個人的手上,我們用它支付、理财、娛樂、工作、記錄生活、存儲私密資訊、乘坐公共交通、開啟家門、控制汽車...。智能手機是如此的重要,不知天天把它拿在手上的你,是否關心過它是否足夠安全。

本文從Secure Element(安全單元)說起,介紹手機裝置上若幹重要的安全角色和概念。為後續文章介紹如何基于手機安全地實作認證、支付、DRM等業務流程打下基礎。

SE(Secure Element)

按照Global Platform的定義:安全單元提供私密資訊的安全存儲、重要程式的安全執行等功能。其内部元件包含有:CPU、RAM、ROM、加密引擎、傳感器等,大緻如下圖所示:

從 Secure Element 到 Android KeyStore

外在表現上SE是一塊實體上獨立的晶片卡。從外在表現上可以分為三種:

  • UICC 通用內建電路卡,由電信營運商釋出和使用。就是大家購買手機号時的手機SIM卡;
  • Embedded SE 雖然也是獨立的晶片,但普通使用者看不到,由手機制造廠商在手機出廠前內建在手機内部;
  • Micro SD 以SD存儲卡的形式存在,通過插入SD卡槽內建到手機上。由獨立的SE制造商制造和銷售;
從 Secure Element 到 Android KeyStore

SE實體上獨立,采用安全協定與外部通訊。具有自己獨立的執行環境和安全存儲,軟體和硬體上防篡改。軟體通過簽名等方式防篡改很多人都了解,說下硬體防篡改,簡單說就是實體拆改SE,它會自毀。最簡單的硬體防篡改的例子,大家可以參考大家給自己車安裝車牌時所使用的單向螺絲和防盜帽。

SE固若金湯,但儲存在其中的資料和程式需要有更新機制,這通過TSM(Trusted Service Manager)來實作,以保證安全。

從 Secure Element 到 Android KeyStore

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如此的重要,成為電信營運商(移動、聯通、電信等)、手機廠商(華為、小米等)、作業系統廠商(谷歌、蘋果等)的兵家必争之地。

從 Secure Element 到 Android KeyStore

HCE(Host Card Emulation)

因為不涉及硬體制造,在SE的競争過程中,作業系統廠商相對弱勢,确切的說是谷歌弱勢,因為蘋果既是作業系統廠商,也是手機廠商。

早期Goole Pay是基于SE實作的,但由于在SE生态環境中弱勢的競争地位,導緻Google Pay适配的機型少,難以發展。從Android 4.4開始,谷歌獨辟蹊徑在Android系統中提供了HCE服務,用來繞過SE直接控制NFC Controller。大概的模式如下圖所示:

從 Secure Element 到 Android KeyStore

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方案。

從 Secure Element 到 Android KeyStore

TEE廣泛應用在支付、身份認證、内容保護等領域。舉例來講,視訊廠商往往需要DRM(Digital rights management)系統來保護版權内容能夠順利得在使用者裝置上播放,而不被洩露。TEE天然适合用來完成這種需求,其安全存儲的能力可以用來儲存解密版權内容所需密鑰,這樣,TEE Application通路可信的服務端擷取已加密的版權視訊後,使用安全密鑰解密,然後利用安全通路外置裝置的能力,鎖住顯示卡和聲霸卡,将解密後的視訊送往顯示卡和聲霸卡播放。整個過程中,不管是加密密鑰還是視訊内容都沒有離開過TEE,保護了版權視訊的安全。尤其值得一提的,因其鎖定外置裝置的能力,想通過錄屏來竊取内容,也是不可能的。

Android Fingerprint

Android裝置的指紋識别,依賴TEE來實作使用者指紋認證,要求指紋采集、注冊和識别都必須在TEE内部進行,已保證安全。

從 Secure Element 到 Android KeyStore

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的證書鍊,來确認密鑰的确儲存在了安全硬體中

總結

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