使用越來(lái)越廣泛的2FA雙因素認(rèn)證,緣何越發(fā)受到推崇?
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
隨著互聯(lián)網(wǎng)在生活方方面面的應(yīng)用,日常少不了要登錄各個(gè)網(wǎng)站或者應(yīng)用、或者是銀行轉(zhuǎn)賬等需要驗(yàn)證自己身份的場(chǎng)景。從早期的輸入賬號(hào)密碼來(lái)登錄,到后來(lái)普遍開(kāi)始通過(guò)手機(jī)驗(yàn)證碼進(jìn)行登錄、或者APP掃碼進(jìn)行登錄,身份校驗(yàn)的操作方式經(jīng)歷了一輪又一輪的迭代演進(jìn)。 近年來(lái),有越來(lái)越多的網(wǎng)站開(kāi)始推廣并引導(dǎo)用戶啟用所謂的2FA雙重登錄驗(yàn)證,比如Github就早在2022年的時(shí)候就開(kāi)始引導(dǎo)用戶啟用2FA,近期還發(fā)出警告若用戶在2024年10月22日前未啟用2FA將被限制部分功能。而科技巨頭Apple在最近發(fā)布的IOS18中,也亮相了全新的密碼APP并提供對(duì)于2FA場(chǎng)景的臨時(shí)鑒權(quán)碼(IOS中稱為 這個(gè)2FA究竟是何方神圣?為什么越發(fā)得到各大公司的青睞、甚至是Apple也要親自入局?本篇文章我們就來(lái)一探究竟。 初識(shí)2FA所謂2FA,也即雙因素認(rèn)證( 想要驗(yàn)證一個(gè)人是否為本人,用戶提供的證據(jù)(認(rèn)證因素)大體可分為3類:
任一認(rèn)證因素都可以作為個(gè)人身份的認(rèn)證,但又都有各自的缺點(diǎn),無(wú)法做到100%可靠精準(zhǔn)。
所以,為了盡可能的提升認(rèn)證結(jié)果的可信度,彌補(bǔ)單一認(rèn)證因素存在的弊端,2FA認(rèn)證方案應(yīng)用而生。通過(guò)同時(shí)使用2種認(rèn)證因素進(jìn)行綜合識(shí)別,來(lái)提升識(shí)別結(jié)果的可信度,保障身份認(rèn)證的安全性。 話說(shuō)到這里,既然單一認(rèn)證有風(fēng)險(xiǎn),2FA可以將風(fēng)險(xiǎn)降低,那為啥不直接搞個(gè)3FA呢?豈不是更加安全嗎?這其實(shí)是軟件實(shí)現(xiàn)中常見(jiàn)的一種取舍,畢竟軟件最終是要服務(wù)于用戶使用的,還是需要關(guān)注下用戶使用的便捷度與使用體驗(yàn),所以2FA相對(duì)而言,就是在安全和便捷之間取了個(gè)折中。 2FA的形態(tài)演進(jìn)
下面舉幾個(gè)2FA的實(shí)際應(yīng)用,感受下這些年2FA技術(shù)的變革。
早些年的時(shí)候,開(kāi)通網(wǎng)上銀行的時(shí)候,銀行會(huì)提供一個(gè)類似U盤(pán)形狀的 這種2FA的應(yīng)用場(chǎng)景中,分別使用了密碼和獨(dú)立物理設(shè)備進(jìn)行綜合認(rèn)證。有效的規(guī)避了密碼泄露或者U盾丟失帶來(lái)的風(fēng)險(xiǎn)(當(dāng)然,U盾和密碼同時(shí)被另一個(gè)人拿到的話,就回天乏術(shù)了),保障個(gè)人資金的安全。 這種方式,雖然達(dá)到了賬號(hào)安全性的要求,但是弊端也很明顯:
也是由于上述的原因,現(xiàn)在幾乎已經(jīng)看不到U盾的身影了。
這個(gè)是目前比較常見(jiàn)的一種2FA的應(yīng)用形態(tài)。比如某度網(wǎng)盤(pán),輸入賬號(hào)和密碼驗(yàn)證通過(guò)后,還會(huì)要求向手機(jī)發(fā)送驗(yàn)證碼,基于驗(yàn)證碼進(jìn)行二次身份認(rèn)證通過(guò)之后,方可正常登錄到系統(tǒng)中。 這種形態(tài),其實(shí)算是早期的 基于密碼+手機(jī)驗(yàn)證碼的方式,在提升認(rèn)證安全性的同時(shí),打破了對(duì)特定配套物理設(shè)備的依賴,降低了2FA方案的落地成本與用戶使用體驗(yàn),被廣泛的應(yīng)用到了各種在線身份認(rèn)證的場(chǎng)景中,成為了當(dāng)前最為主流的一種2FA認(rèn)證方式。 但是利用手機(jī)驗(yàn)證碼進(jìn)行驗(yàn)證,依舊會(huì)存在一個(gè)成本問(wèn)題,畢竟發(fā)送短信也是要錢(qián)的,尤其是對(duì)于一些幾億用戶體量的系統(tǒng)而言,即使每個(gè)用戶1個(gè)月只發(fā)送一條短信,算下來(lái)也是一筆不菲的費(fèi)用啊。
apple用戶如果登錄過(guò)網(wǎng)頁(yè)版iCloud,應(yīng)該都有見(jiàn)過(guò)iCloud的2FA實(shí)現(xiàn)思路,它在驗(yàn)證完用戶的賬號(hào)和密碼之后,并非是發(fā)送短信驗(yàn)證碼,而是向登錄了此賬號(hào)的iphone設(shè)備推送了一條彈窗通知,里面顯示了一串隨機(jī)碼,用戶輸入iPhone接收到的隨機(jī)碼,完成身份驗(yàn)證并進(jìn)入到系統(tǒng)重。 蘋(píng)果的這種實(shí)現(xiàn),借助自身iPhone設(shè)備的廣泛應(yīng)用,構(gòu)建了服務(wù)端與iPhone設(shè)備之間的專有推送通道,完美的省掉了短信驗(yàn)證碼發(fā)送的費(fèi)用。但,這種方案,就像網(wǎng)上很多人調(diào)侃蘋(píng)果的那句 總體而言,iCloud的這種做法,是一種更加經(jīng)濟(jì)的2FA方案,但是技術(shù)門(mén)檻與推廣門(mén)檻極高,不具備普遍性。
并不是所有公司都是手機(jī)廠商。所以是否有一種通用的、成本更低廉的2FA實(shí)現(xiàn)方案呢?在這個(gè)背景下,一種基于 看下GitHub的2FA登錄實(shí)現(xiàn)。在開(kāi)啟2FA功能的時(shí)候,需要在提前在手機(jī)上安裝一個(gè)APP并綁定到GitHub賬號(hào)上。這樣后續(xù)在輸入賬號(hào)密碼之后,還需要打開(kāi)APP并將APP中生成的鑒權(quán)碼填入到界面上進(jìn)行二次驗(yàn)證,驗(yàn)證通過(guò)之后方可進(jìn)入系統(tǒng)。 這里的手機(jī)上安裝的APP,也是基于TOTP協(xié)議進(jìn)行開(kāi)發(fā)的密鑰生成器。這一方案接入成本相對(duì)較低、更容易推廣,目前正在逐步被各類系統(tǒng)所支持。值得一提的是,正如本文開(kāi)頭提及的消息,在9月中旬剛剛發(fā)布的IOS18系統(tǒng)中自帶了一款名為密碼的APP,其中提供了一個(gè)驗(yàn)證碼功能,也正是基于TOTP協(xié)議的鑒權(quán)碼生成器,使用它生成的驗(yàn)證碼也可以正常完成2FA認(rèn)證。 基于TOTP的2FA在上面介紹GitHub的2FA方案的時(shí)候,有提過(guò)其采用的是基于
基于上面介紹,可以看出,基于TOTP算法生成驗(yàn)證碼有兩個(gè)輸入因子:時(shí)間和用戶密鑰。服務(wù)端和客戶端除了需使用相同的加密算法,還需要保證傳入相同的時(shí)間戳和用戶密鑰,才能保證生成的校驗(yàn)碼相同。如何保證服務(wù)端和客戶端設(shè)備,可以獲取到相同的參數(shù)值呢?下面簡(jiǎn)單介紹下。
服務(wù)端和客戶端在計(jì)算生成驗(yàn)證碼的時(shí)候,各自取自身設(shè)備本地當(dāng)前時(shí)間作為時(shí)間參數(shù)。因?yàn)槿缃竦闹悄苁謾C(jī)和服務(wù)器都支持基于網(wǎng)絡(luò)的時(shí)鐘校準(zhǔn)能力,所以可以很輕松的保證手機(jī)終端與應(yīng)用服務(wù)端本地時(shí)間的基本一致。
用戶密鑰因子是服務(wù)端為用戶生成的授權(quán)密鑰,計(jì)算生成驗(yàn)證碼的時(shí)候,服務(wù)端和客戶端都要使用同一個(gè)密鑰進(jìn)行計(jì)算,所以服務(wù)端為用戶生成密鑰后,除了服務(wù)端要保存該密鑰與用戶的綁定關(guān)系,還需要將此密鑰提供給用戶、由用戶將其綁定到手機(jī)上的TOTP軟件中(所謂綁定,本質(zhì)上就是將服務(wù)端生成的密鑰存儲(chǔ)到手機(jī)的TOTP軟件中)。綁定完成后,服務(wù)端和客戶端就都擁有相同的用戶密鑰信息了。 至此,TOTP算法所需的2個(gè)關(guān)鍵參數(shù)都已具備,就可以使用TOTP應(yīng)用生成的驗(yàn)證碼進(jìn)行身份二次認(rèn)證咯。 講到這里,小伙伴們可能會(huì)有個(gè)疑惑,假如用戶更換了新手機(jī),新手機(jī)上安裝的TOTP軟件并沒(méi)有綁定對(duì)應(yīng)的用戶密鑰信息,那不就沒(méi)法登錄了嗎? 這就要再回到開(kāi)啟2FA認(rèn)證的時(shí)候,服務(wù)端除了會(huì)生成一個(gè)密鑰(類似公鑰)提供給客戶端進(jìn)行綁定,還會(huì)同時(shí)提供一份 目前市面上主流的基于TOTP的客戶端軟件,主要有2個(gè):
當(dāng)然,現(xiàn)在又多了個(gè) 服務(wù)中集成2FA能力如果需要在服務(wù)端開(kāi)啟2FA能力,需要集成實(shí)現(xiàn)對(duì)應(yīng)的TOTP密鑰算法即可。以JAVA為例,可以通過(guò)集成現(xiàn)有的第三方庫(kù)來(lái)快捷實(shí)現(xiàn),常用的有
代碼中直接使用其提供的api接口即可,下面代碼演示下api接口的使用方式:
?轉(zhuǎn)自https://www.cnblogs.com/softwarearch/p/18562876 該文章在 2025/2/14 10:54:46 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |