再談身份認證(一) 扒一扒你不知道的那些技術
來自專欄 北漂的安全狗
0x00 Who Am I ?
這是一個哲學三大「終極問題」之一,套用到今天的主角「身份認證」再合適不過了。由於互聯網開放、匿名的原則,我們實在是沒辦法判斷網線的另一頭到底是一個軟萌妹子還是一個摳腳大漢。尤其在嚴密的金融領域,明確地識別對方到底是「康師傅」還是「康帥博」是關係到國計民生的大事——康師傅是吧?親這裡有你存的100萬,你想要怎麼花呢親;康帥博是吧?對不起你不能從我這裡拿走你表親的100萬,出門左轉慢走不送。
So,在IT的世界中,你必須回答這個問題:我是誰?
現實生活中我們識別一個人,第一次時記住他的長相、名字等,之後碰到了,在腦海中一對應。這個過程可以說是基於一定的「特徵」的,這種特徵必須具備一個唯一屬性。於是我們在網路上也套用了這個方法——初次見面(註冊時),我(伺服器)記住你的特徵(賬號密碼)。等到下次你要過來的時候,直接使用賬號密碼來讓我對應。
可是這樣一來就有N多個叉子了。。。
首先是相當繁瑣,網路又不止一個系統,每個系統都要有自己身份認證機制,那每個用戶每次訪問一個系統時都得重複這個過程。
其次是對用戶不安全——現實生活中誰敢說自己沒認錯過人?何況在網路中,普通用戶要維持那麼多賬號密碼,你說如果都採用相同的,這樣便於記憶,那黑客也方便了。A網站被攻破了人家就會拿著你的賬戶密碼去登陸B網站——俗稱「撞庫」。
但是如果讓用戶在每個網站都採用不同的密碼,比如我。。。現在每次登陸已經不是點擊登陸了,而是點擊「找回密碼」。。
安全專家們也看到了這個問題——那既然短時間內,我們不能推翻傳統的「賬號密碼」驗證的模式,那麼我們就改良它的缺點。於是一個叫做「OAuth」的東西被造出來了。
簡單點說,就是用戶在A網站註冊過,填寫過個人資料,當用戶要訪問B網站的時候,不用浪費時間和記憶再註冊登錄了,直接告訴B網站:A認可我了,他知道我是誰,所以你去問A我是誰就好了!然後B就去問A:這個連賬號密碼都懶得輸的poor guy仔是不是你這邊的人?把他資料給我。
這時候A就犯難了,它想:憑什麼你要我用戶的資料,我就得給啊,不行我得問問用戶。於是用戶就會收到一個認證通知,如果點擊確定,就表示說,沒問題,是我讓B來問你要我的資料的。A說:好噠爸爸!然後就愉快地把資料給B了。
這個模型其實經過專家設計以後是沒有什麼問題的,這在我今後的文章中會專門出一個專題來分享Oauth相關的安全。可理想很豐滿顯示忒骨感——不是所有網站都像A和B一樣支持這種身份認證的,尤其是在金融行業裡面;並且B最終拿到了用戶的資料,它會在自己的系統內再新建一個用戶記錄,讓用戶再次填寫一個獨立的B網站的資料,就等於讓用戶換個花樣再註冊一次。。
再加上這套東西背後的實現其實略微複雜,早期負責實現這種認證方式的程序員寫代碼不嚴謹,出了很多安全漏洞,導致可以不用賬號密碼在B網站上面登錄他人賬戶,給這套體系帶來了不好的影響,因此這個模型目前處於一個不溫不火的狀態,畢竟它只是傳統身份認證體系的一個補丁。
好在搞數學的科學家們吊的飛起,用數字證書幫我們解決了尤其是嚴重依賴安全的金融領域的身份認證問題。
0x01 數字證書?加密解密?公鑰私鑰?
如果說密碼學是信息安全的基石,那麼數字證書就是由這些基石構建起來的堅不可摧的堡壘。在網路中,用戶持有一張被可信中心(類似於公安局)簽發的數字證書(身份證),裡面有個東西叫做「公鑰」(身份證號和照片)。數字證書是個文件,和一個人的身份證一樣,可以隨意給人展示,這樣公鑰就隨便是誰都可以知道;和公鑰對應的叫「私鑰」(你的長相,籍貫),它卻只有持有證書的人持有。
密碼學保證了一串信息通過公鑰加密可以用私鑰解開,同時用私鑰加密的內容也可以用公鑰解開,這套機制叫做非對稱加密。當伺服器A要認證用戶的時候,A說:我讓你用你的私鑰加密一下「磊哥帥無敵」這句話你敢加密嗎?
如果是真的用戶,那麼他擁有私鑰,自然可以加密,加密後傳遞給伺服器A,如果A能用公鑰解開,那麼自然表示這個用戶如同身份證「數字證書」描述的一樣,是真實可信的;如果是李鬼用戶,他不會擁有私鑰,就只能回復一個,呵呵你們聊我先走了。
然而,頒發數字證書的所謂「可信中心」是怎麼來的呢?李鬼也可以有一張數字證書,上書「此人乃正宗涼茶傳人王老吉,XXX公安局認證」,裡面描述的公鑰(照片和籍貫)也能夠和李鬼手中的私鑰(長相和口音等)相對應。這種情況下,正宗王老吉該咋辦?
其實也很簡單,基於同樣的非對稱加密機制,我們也能保證證書的可靠性。比如,證書(身份證)只能由可信CA機構(公安局)頒發,而可信CA的公鑰讓大家都知道的,不存在假冒的問題,就像現實生活公安局一樣,就坐落在市中心,只要不是通過百度搜索找地址的話,一般情況下是走錯不了的。。
可信CA用自己的私鑰給由它頒發的證書的特徵值加個密——我們也把這個過程叫做簽名,那麼當我們判斷一個證書是不是由可信CA機構頒發的時候,就用CA的公鑰去解密這部分簽名值,如果能解開,並且解開以後的特徵符合,那麼這張證書是可信的;否則,呵呵。。
其實我們的身份證也是這樣構成的,裡面的數據資料不是隨便一個NFC讀卡器都可以讀的,讀卡器必須內置公安局提供的SDK(內含公安局頒發身份證使用的加密的公鑰),這樣才能讀出正確的內容。而違法犯罪分子是沒有公安局的私鑰的,自然也就頒發不了真的身份證——雖然看起來貌似一樣,但是用身份證讀卡器一讀便知真假。
所以,數字證書是有用的,能夠確切地標註一個用戶的身份。然而,它卻是對用戶不友好的。沒有哪個人願意每次登陸上傳一張自己的個人證書,並且私鑰也不可能記住,隨身攜帶更是算了。。
However,金融領域裡面這個東西是真有用啊。我們去銀行辦卡,早期銀行是不是都會給我們一個所謂U盾的玩意兒對不對?沒錯,那裡面就存的咱們的數字證書和私鑰!以前每次交易的時候,我們插上U盾才能交易,就是銀行的伺服器在身份認證階段的最後一道關卡。
像這樣進行重要操作時,使用兩種以上技術來實現身份認證的,我們稱之為「多因子認證」,常見的就是銀行使用的雙因子。
So,單純地使用數字證書來進行身份認證,也只能作為傳統方式的補充。
0x02 生物特徵識別
還好這個世界的科學多種多樣,指紋和虹膜識別的技術都能在手機上實現了。我們知道這倆東西對於人來是基本上是獨一無二的,通過設備我們可以把指紋、虹膜甚至人臉轉化為實在的數據,就像賬號密碼一樣,它似乎是目前看來最好的能夠承載身份認證的載體了。
我們回想一下,賬號密碼機制和生物特徵機制有什麼異同點?
首先,它們確實可以作為一個人獨有的「特徵」,因此都可以用來身份認證。不同點呢?——它們之間最大的不同點在於,賬號密碼一旦泄露,用戶是可以自行修改的;而一個人的生物特徵數據一旦泄露,去韓國整容都救不了你!所以,作為一家對用戶隱私負責的企業,那麼:
用戶的生物特徵,是一定不能存儲在伺服器上的!
用戶的生物特徵,是一定不能存儲在伺服器上的!
用戶的生物特徵,是一定不能存儲在伺服器上的!
(重事說三系列。。。)
這可就犯難了,不放在伺服器,那麼怎麼比對特徵從而認證呢?
說這個問題之前,先介紹兩個聯盟——FIDO Alliance(Fast IDentity Online,線上快速身份認證聯盟)和IFAA(Internet Finance Authentiation Alliance,互聯網金融身份認證聯盟),他們都是由不同的硬體、軟體成員商組成的組織。FIDO是國際的非盈利性聯盟,IFAA是國內由阿里巴巴牽頭,依託於國民超級應用支付寶的和政府背景的。他們都聚焦於通過生物特徵進行統一身份認證,但目前看來各有側重。FIDO聯盟提出的標準重點發力在指紋和獨立硬體設備上,而IFAA重點發力人臉和虹膜。
就拿我比較熟悉的FIDO來說,對於支持指紋的設備如iPhone,小米,華為等手機,內置了一個叫做加密晶元(Trusted Execution Environment,可信執行環境,簡稱TEE)的東西,這個玩意兒裡面其實是一個獨立的運行環境,與手機操作系統環境互相隔離。我們在手機里錄入的指紋都是存儲在這裡面的。
除了存儲指紋,TEE還維護了一個和指紋模塊對應的公私鑰對,當某次指紋驗證通過時就允許調用介面使用私鑰進行加密。所以當用戶想要授權某個應用支持指紋支付的時候,會進行如下操作:
- 開啟指紋模塊,調用TEE中指紋模塊的公鑰發送給伺服器進行註冊
- 使用指紋支付時,伺服器返回一個隨機值(Challenge),要求客戶機使用指紋中的私鑰對其進行簽名(加密操作)
- 要想使用設備中的私鑰,用戶必須先經過指紋認證。當指紋認證通過後,調用TEE的介面堆Challenge加密
- 回傳加密結果,伺服器用註冊時的公鑰解開,確認無誤後表示本次身份認證通過。
這4個流程環環相扣,又是基於密碼學的非對稱加密演算法(向數學家們致敬)。這要求設備、用戶、用戶身份三者進行強綁定,更多詳細的內容,以後我也會專(kan)門(xin)來(qing)在我的公眾號里分享生物特徵認證的安全實現和現狀。
0x03 認證了就完事了嗎?
身份認證的目的是為了授權。十九大期間朋友圈來回刷這麼一句話:「不忘初心,方得始終」。那麼我們費盡周章地保證身份認證的安全、有效和可信,是為了什麼呢?
保障用戶的合法資產和權益,維護系統安全穩定地運行。從這個維度來看,光做好身份認證,還遠遠不夠,路長且艱,任重而道遠。
歡迎關注磊哥公眾號:聽磊哥說點金融安全,微信號:jinrong_anquan。
(借貴乎一步寶地,第一次打廣告)
http://weixin.qq.com/r/4SiNlYnEcNQPrc32933z (二維碼自動識別)
推薦閱讀:
※Apple Pay 能給銀行帶來什麼利益?
※Central bank independence, price stability and inflation
※金融從業者的樂趣在哪。
※這真的是一個看臉的世界,投行男女分析師的顏值排名
※為什麼富人說信用卡好,窮人認為信用卡是毒藥?