作為生物識別技術的一種,指紋支付的安全性肯定比現在的數字密碼要高得多。當然作為一種全新的技術應用,很多人看到了肯定會擔心,這個跟個人對新技術的接受程度有關,而跟技術是否安全本身無關。為什麼這麼說呢?先來八一段,當年我們鄉下的老太太看見高壓鍋都不敢用,因為聽說高壓鍋爆炸會炸死人,看見高壓鍋噝噝冒氣,太危險了,這東西這麼危險,誰敢用,哈。

言歸正傳。

很多人會擔心指紋會不會被人家拿指模複製,事實上,現在好的指紋感測器廠商都已經採用了第二代指紋識別技術。這一代的指紋識別技術利用電容感測器具有生物電識別的特性,能識別到真皮層,冰冷的假指模和斷指無法通過驗證。也有用戶擔心自己錄入的指紋數據被竊取,尤其是很多安卓機用戶,其實這種擔心也是多餘的。現在,指紋特徵值的本地存儲正在成為行業的一種共識。像支付寶和三星推的指紋支付,指紋特徵值都會存在手機的TEE區域,這個區域是一個隔離的環境,和手機主操作系統相互區隔。所以,安卓用戶即使中了木馬和病毒,這些指紋數據也不會被讀走。而且還有一點非常關鍵的是,這種本地存儲的方式,可以防止指紋數據在傳輸或者伺服器端被盜,造成大面積的安全事故。指紋在支付領域的應用肯定會越來越廣,作為一種業界普遍看好的新技術,它的前途會比較廣泛。對於一般用戶來說,初期的擔憂也會隨著使用的普及慢慢消除。

目前來說,指紋支付最大的危險就是把你打暈或者趁你睡著,直接用你的指紋開鎖。不過只要在網上支付,就一定有痕迹,就看你能不能及時追回來。


我覺得隱患很大,現在上班指紋打卡都可以在淘寶上買指紋膜替代,如果有心人提取了自己的指紋,做成指紋膜,再拿走自己的手機,那就很可怕了。我的指紋到處都是啊,比如辣條袋子上

假如我被劫匪綁架了,以前是逼問我支付密碼,現在簡單多了,拉過手來按一下,OK。

劫匪:「買賣越來越好乾了!」


2018年11月底的時候,外媒曝出這樣一條新聞:來自紐約大學與密歇根州立的研究人員,通過深度學習分析了大量人類指紋後,生成了一組「萬能指紋」。這組指紋就像萬能鑰匙一樣,能騙過76.67%的指紋識別。當然,這個數字裡頭是有水分的,我們正文里會再細講一下。

出於好奇,我在知乎上簡單翻了翻之後,發現知乎上至今為止似乎沒有一篇回答細緻地討論過指紋識別的安全問題。今天恰逢北美這邊的平安夜,國內的平安夜也剛剛過去,周末沒什麼正事兒可做,就讓我寫篇長文,聊聊你手機上的指紋識別到底平安不平安吧。

由於這是一篇科普性質的文章,所以在寫得通俗的情況下可能難免會損失一點技術上的嚴謹。另外,由於這個領域發展速度快、保密性高,我的答案里可能會出現過時的細節。屆時煩請在評論區加以指正。


第一部分:廠商如何保護你的指紋?

指紋採集的具體原理比較繁瑣,不在本文的討論範疇里,所以這個地方我們就簡化一下:你的手機上裝著一個神奇的小玩意兒,叫指紋感測器,你把指頭按上去,感測器就能掃描到你的指紋圖像。

那麼講到這裡,一定就會有人開始焦慮了。廠商把用戶的指紋採集走了,存在手機裡頭,會不會被黑客或者廠商自己拿去濫用啊?

關於這個問題,目前我們能給出的答案是:可能性很低。你的指紋此刻正受著多重保護,從手機內部竊取你的指紋難度很高,還不如直接去偷你平時喝水用的杯子。

那麼「多重保護」具體是哪些保護呢?我們可以從軟體硬體兩個方向展開來講:

軟體保護:特徵點提取演算法

對用戶指紋的保護,從設計「指紋識別演算法」的時候就已經開始了。

目前主流的指紋識別演算法,是通過提取和對比關鍵的特徵點實現的,比如指紋的整體結構(Level 1),局部出現的分岔點、端點、斷點等等(Level 2)。

如果打個形象的比方的話,就好比你手裡有一本中文版的《戰爭與和平》,你把其中每一個漢字的拼音首字母都提取出來,抄寫到一張紙上。接下來,我拿到這張寫滿字母的紙,是猜不出來原作是《戰爭與和平》的。但是你給我另一本書,我能通過拼音首字母判斷我拿到的是不是原作。這,就是特徵點識別的原理。

當然,如果特徵點泄露的話,也足以造成一定的安全問題。比如說一個黑客拿到了之前提到的那張紙之後,完全可以精心偽造一本原作,在語句基本通順的基礎上,把拼音首字母都對上,這樣就能騙過原本的識別演算法了。但是這本偽作遇到另一種不同的特徵點演算法的時候(比如取第三個拼音字母),大概率會抓瞎,所以威脅有限。

然而有限的威脅也是威脅啊,於是喪心病狂的安全工程師們又加了一層更硬的保護。

硬體保護:可信計算環境與資源隔離

眾所周知,從事信息安全研究的從業人員一般都有些被害妄想的傾向。

早在不記得多久之前,手機行業就有人提出過這麼一個問題:如果咱們的手機系統被黑客黑掉了,整個手機全都淪陷了,在這種極端情況下有沒有可能保住一些最機密的敏感信息不被竊取?

目前,主流手機廠商給出的答案是:在手機系統的內部建立一個可信計算環境(TEE)

它就相當於一個擁有超然權力的安全中樞,一個獨立自轄的「國中之國」。這個可信計算環境擁有自己獨有的操作系統,獨立的計算資源、存儲資源,理想情況下還應該獨佔指紋感測器、面部識別感測器等敏感元件。主系統無權對它進行任何干涉,只能提交一個申請然後老老實實地等結果。部分廠商甚至會給可信計算環境開一條單獨的接線接到顯示屏上,這樣TEE想顯示任何內容主系統都不可能阻攔。除非主系統能自己長出一雙手來,拆開手機剪電線。

理論上講,廠商是有可能在可信計算環境裡面內置後門的,但是現實中應該不可能有廠商這麼做。因為風險實在是太高了,和收益不成正比。TEE牽扯到了包括DRM、金融、保密通信在內的各種敏感應用,一旦被第三方查出內置後門,那真的是足以身敗名裂的醜聞。這個廠商會在一夜之間失去所有政府級、企業級用戶,以及相當一部分個人消費者,基本等於判死刑。

這個設計的好處和壞處都是顯而易見的:加裝上這玩意兒之後,所有的敏感數據(比如指紋特徵點)和關鍵計算(比如指紋識別)都可以安心地鎖在裡面,安全性強到升天。但是廠商需要在寸土寸金的手機結構里,擠出大量額外的硬體成本來實現這個TEE。而且這個TEE的運算速度還不能太慢,不然手機主系統就會為了等結果而不停地出現卡頓。如果用戶不太懂或者不太在意信息安全的話,那這個性價比就有點難受了。

於是,雖然理論很美好,但在具體的技術實現上,廠商們做出了一個微妙的妥協:既然物理隔離成本很高,我能不能做一個虛擬隔離出來?其中比較成熟也比較有代表性的技術,就是ARM的TrustZone架構。

TrustZone的基本原理也很簡單,還是打個比較通俗的比方:排球隊和羽毛球隊需要用同一塊草地做訓練,於是他們就拉來了一個計時的老大爺。大爺每過2小時吹一次哨,吹哨之後上一隻隊伍就要收拾東西離開,讓另一隻隊伍進來訓練。這樣一來,同一塊草地(硬體資源),就可以讓兩個不同的隊伍(主系統和可信系統)分別不受干擾地使用了。

然而虛擬隔離做得再好,終究是虛擬的,留下了一定的攻擊面,也曾爆出過一些安全問題。這些細節我們留在第二部分再細講,目前知道虛擬隔離不完美就可以了。

接下來的內容涉及到一部分技術細節了,不喜歡的讀者可以從這裡開始跳第二部分。

在TEE隔離上,由於各家廠商採取了不同的策略,所以也就拉開了上中下三個檔位:

第一檔的玩家有四家:Apple、Google、華為、三星,採用的是物理隔離+虛擬隔離並用的策略。

  • 蘋果從自家的A7處理器開始,採用一套自研的名為Security Enclave的隔離架構。目前這套架構的細節披露的不是很多,主要來自於這項蘋果公司公開的專利。目前已知的信息有:蘋果公司在自己的處理器內部專門分割出一塊小核,用來負責可信計算。剩下的其他核心稱作AP(Application Processor),線路分隔出來的那個核心稱作SEP(Security Enclave Processor)。SEP有一塊很小的獨立內存,還有各種獨立的外部設備接線(指紋識別、面孔識別等)。外面那塊大內存是AP和SEP共用的,但是SEP用的那部分會額外加一層加密。
  • 谷歌從自家的Pixel 3手機開始,往裡面加入了一塊獨立的安全晶元——Titan M。這塊晶元的原型是2017年GCP團隊對外披露的Titan晶元,當時那塊Titan晶元是用在Google自家伺服器上做安全運算的,而2018年的這塊Titan M則是Titan晶元的「Mobile版」。比較遺憾的是,Titan M由於是獨立的一塊晶元,受限於性能不足,只承擔了很小一部分關鍵工作(比如安全啟動和Android 9新增的StrongBox介面),更多計算量繁重的任務還是留給了TrustZone來實現。
  • 華為從自家的麒麟960開始,採用一套自研的名為inSE的隔離架構。這套架構對外公開的信息極少,不過通過公開的報道來看,似乎是把獨立的安全晶元封進了處理器內部。目的是兼顧性能的同時,杜絕被黑客直接改線的風險。我個人的感覺是,這個技術好像就是在和蘋果的SE技術正面叫板?
  • 三星的設計就相當奇妙了。它似乎沒有增加額外的處理器,仍然依賴TrustZone進行可信計算,但是它增加了一套名為Knox的架構,把敏感數據給隔離起來了。在敏感數據存儲器和主系統之間,三星設計了一個名叫e-fuse的保險絲。一旦檢測到用戶root或者刷機,就會馬上熔斷這根保險絲,你設備上的敏感數據(比如指紋什麼的)就拜拜啦。這樣一來,就保證了「敏感數據」永遠存在於可信的系統里,變相實現了「物理隔離的可信計算環境」,有點滑頭。

第二檔的玩家就是剩下的主流安卓廠商了:小米、OV、OnePlus等等。他們由於不具備晶元自研的能力,所以只能將就著用一下高通提供的TrustZone虛擬隔離。

第三檔的玩家基本只剩山寨機廠商了,拿著TEE相關文檔都不太懂怎麼開發,只能裝模做樣劃划水。不過其實我個人有點懷疑某家屏幕都能做開膠的廠商也在第三檔里,畢竟TEE涉及的專業知識不比選膠水簡單。


第二部分:黑客如何攻擊指紋識別?

哎呀呵,來到比較激動人心的部分了。

你說我剛剛寫了這麼大一段,為什麼突然要開始打臉啊?

不好意思,目前指紋識別指紋支付的安全性高是不假,但這個世界上畢竟沒有完美的鎖。上述的各種防護,仍然有被攻破的可能。接下來容我再詳細聊聊,剛才的那套銅牆鐵壁,會在什麼樣的情況下潰於蟻穴。

遠程攻擊:外寇或御,內敵難防

我們先來討論一下危害比較大的遠程攻擊——無需物理接觸手機就能完成一次指紋支付的攻擊。

有人可能會講了,你不是說什麼主系統被黑了也沒法干涉指紋識別的過程嗎?那還怎麼遠程攻擊?

不好意思,沒法干涉指紋識別的過程是不假,但是指紋識別的結果,終究還是要交給主系統以及微信/支付寶自己處理的啊。如果這個系統已經淪陷的話,那麼它完全可以中途篡改指紋驗證的結果,讓微信/支付寶誤以為指紋驗證通過了。或者在root過的設備上,可以在微信/支付寶內部注入惡意代碼,讓它們自己無視指紋驗證的結果。

在一台root過的設備上保護用戶的信息安全,就好比在敵軍的大本營裡面客場作戰。你的糧食是敵軍給的,武器是敵軍給的,連看到的東西都是敵軍演給你看的。所以微信和支付寶目前的策略很直接,既然保護不住,那就直接拒絕在root過的設備上啟用指紋支付功能。

不過萬幸,用戶是黑客最貼心的夥伴,想黑客之所想,急黑客之所急。不用黑客動手,他們自己就會去主動刷Fingerprint-Pay之類的插件,騙微信和支付寶開啟指紋支付,真的令人潸然淚下。

另外,除了上述這種比較微妙的情況之外,還有一種可能就是TrustZone或TrustZone裡面運行的獨立操作系統出現了安全缺陷。

前文提到過,TrustZone的基本原理就是兩個隊伍分時換場。這種時候就有可能出現這樣一種情況:籃球隊走了,排球隊進來,發現計分板上留著沒擦乾淨的筆跡,地上還有一些黑黑的球印。通過這些殘跡,就能在一定程度上推斷出剛才比賽中大概是誰輸誰贏。這種並不是直接竊取信息,而是通過蛛絲馬跡推斷敏感信息的行為,被稱作側信道攻擊(Side Channel Attack)

這方面的研究已經非常之多了,Google一搜就能搜到,在這裡隨便貼兩篇相關論文吧:

TruSpy: Cache Side-Channel Information Leakage from the Secure World on ARM Devices?

eprint.iacr.org

Cache-Attacks on the ARM TrustZone implementations of AES-256 and AES-256-GCM via GPU-based analysis?

eprint.iacr.org

我記得去年還有一個哥們另闢蹊徑,在TrustZone上實現了臭名昭著的Row Hammer攻擊,也是個挺有意思的方案。

本地攻擊:難以實現,難以解決

這裡的本地攻擊,指的是用假指紋之類的手段直接騙開指紋識別。

第一步:如何搞到目標的指紋?

如果你生活在淳樸落後的舊時代的話,這個環節確實有點令人頭疼。你需要去找到受害者本人,偷TA的日用品,或者趁睡覺的時候按個清楚的手印,諸如此類的。

萬幸,你現在生活在一個技術發達的新時代,這個時代的攝影鏡頭像素十分之高。早在2014年的時候,就曾經有德國的黑客演示過,通過圖像處理技術,可以輕鬆地從照片中提取出德國國防部長的指紋。如果你需要竊取誰的指紋的話,趁他們出席公開活動的時候遠遠地拍幾張照就行了。

這也提醒了我們一點:拍照的時候不要隨便比剪刀手,一下就能偷走你兩枚指紋。出於信息安全方面的考慮,下次拍照還是豎中指吧?

除此之外,還有一個有點意思的攻擊方式就是文章最開頭提到的,通過深度學習製作的「萬能指紋」,以下鏈接為原始論文:

DeepMasterPrints: Generating MasterPrints for Dictionary Attacks via Latent Variable Evolution?

arxiv.org

之前我提過,新聞媒體報道76.67%的破解成功率是有水分的,為什麼這麼說呢,看論文中附上的這個表格你就知道了:

Deep MasterPrint 破解成功率統計

注意到表格里出現的FMR(誤識率)了嗎。這個誤識率,通俗來講就相當於考試及格線,過這條及格線的指紋才能通過驗證。FMR放寬到1%的時候,才能在電容式感測器上實現76.67%的破解率。當FMR收窄到0.01%的時候,破解率就已經一路下跌到1.11%了。

而目前商用級的FMR是個什麼水平呢?我目前手裡沒有詳細的數據,但我記得2014年國內廠商匯頂科技的GT66x8系列晶元,就已經把誤識率做到了0.002%以下了。也就是說,單論目前的Deep MasterPrint的話,這個攻擊的實用價值是有點微妙的。

但我為什麼還說這個攻擊方式有點意思呢?因為我草草看了一下這篇論文的思路和數據集之後,發現這裡面似乎還有改進的空間。

他們現在的思路很迷,似乎是打算直接生成一組萬能指紋來對應所有人的指紋的。老人的指紋和年輕人相比,理所當然會多出不少皺紋。斗型和箕型的指紋,結構上也會大不相同。混在一起生成萬能指紋的話,效果當然會很差。如果能根據不同的分類,有針對性地生成不同類型的萬能指紋的話,最後的攻擊效果也許會顯著提升?

第二步:如何用假指紋騙過感測器?

目前很多家用指紋鎖號稱實現了活體識別,說自己能夠分辨出真指紋和假指紋的區別。

不過,說實在的,如果手機已經落在攻擊者手裡的話,那攻擊者完全可以拆掉感測器,自己接條線上去。所以單拿活體識別這個技術放在手機上,感覺挺微妙的。

除非這個感測器額外做了一層認證,讓黑客的假感測器無法通過驗證,那樣會比較安全一點。

不過說回到活體識別的問題。

這方面可能我的知識有些落伍了,但是以我之前了解到的知識,這個活體識別應該不太現實啊?

畢竟所謂的真指紋,也只是皮膚上的一塊紋路而已。現在的假指紋膜完全可以做到透光、導電、等密度、傳遞體溫、無縫貼合,從物理性質上很難分辨吧?就算現在的假指紋膜能分辨出來,等將來醫學界製造出植皮用的人造皮膚之後,又該怎麼辦呢?

這個部分以我目前的理解,就是只要攻擊者拿到指紋,做出指紋膜,你就已經攔不住對方了。對方拿著你的手機想怎麼解鎖怎麼解鎖,想怎麼支付怎麼支付。萬幸,大部分人的指紋不值得攻擊者這樣瞎折騰,偷手機也不是說偷就能偷到的。

在這個攻擊方向上,我能想到的攻擊思路就只有:一個團隊負責偷竊手機,另一個團隊用做好的萬能指紋膜隨意瞎按一次。如果萬能指紋能有百分之一的成功率的話,那就是100台手機里能解開一台了,洗掉上面微信/支付寶/網銀里的所有財產……發家致富,牢底坐穿,豈不美哉?


簡單總結一下吧:你的指紋可以被攻擊,但是攻擊的難度要遠比你想像的要高得多,即使是廠商自己也很難把你的指紋挪作他用。

比起指紋被盜,你更需要擔心的是,2018年快過去了,你是不是又荒廢了一年啦?(笑)


不算很安全,指紋又不是不能複製(科幻諜戰片看多了!)


推薦閱讀:
查看原文 >>
相关文章