從 Secure Element 到 Android KeyStore


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

本文從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的證書鏈,來確認密鑰的確保存在了安全硬件中

總結

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM