雙因素認證(2FA)工作原理簡介

雙因素認證-2FA

一蘑志、雙因素認證

什么是雙因素認證(Two-factor authentication,簡稱 2FA)

解釋一(引自百度百科)

雙因素身份認證就是:通過你所知道再加上你所能擁有的媒咳,這二個要素組合到一起才能發(fā)揮作用的身份認證系統(tǒng)英染。雙因素認證是一種采用時間同步技術(shù)的系統(tǒng)东羹,采用了基于時間帐我、事件和密鑰三變量而產(chǎn)生的一次性密碼來代替?zhèn)鹘y(tǒng)的靜態(tài)密碼许赃。每個動態(tài)密碼卡都有一個唯一的密鑰跟压,該密鑰同時存放在服務(wù)器端,每次認證時動態(tài)密碼卡與服務(wù)器分別根據(jù)同樣的密鑰塞茅,同樣的隨機參數(shù)(時間亩码、事件)和同樣的算法計算了認證的動態(tài)密碼,從而確保密碼的一致性野瘦,從而實現(xiàn)了用戶的認證描沟。---引自百度百科

解釋二(引自阮一峰的網(wǎng)絡(luò)日志)

一般來說,三種不同類型的證據(jù),可以證明一個人的身份吏廉。

秘密信息:只有該用戶知道蠢络、其他人不知道的某種信息,比如密碼迟蜜。
個人物品:該用戶的私人物品刹孔,比如身份證、鑰匙娜睛。
生理特征:該用戶的遺傳特征髓霞,比如指紋、相貌畦戒、虹膜等等方库。

這些證據(jù)就稱為三種"因素"(factor)。因素越多障斋,證明力就越強纵潦,身份就越可靠。
雙因素認證就是指垃环,通過認證同時需要兩個因素的證據(jù)邀层。
銀行卡就是最常見的雙因素認證。用戶必須同時提供銀行卡和密碼遂庄,才能取到現(xiàn)金寥院。

二、TOTP和Google authenticator簡介

TOTP是什么涛目?簡單的說秸谢,是一次性密碼;全稱是"基于時間的一次性密碼"(Time-based One-time Password)霹肝。它是公認的可靠解決方案估蹄,已經(jīng)寫入國際標(biāo)準(zhǔn)RFC6238。Google authenticator又是什么沫换?是一個基于TOTP原理實現(xiàn)的一個生成一次性密碼的工具臭蚁,用來做雙因素登錄,也是一個開源的項目苗沧。比如阿里的身份寶就是兼容Google authenticator的一個TOTP工具刊棕。

實現(xiàn)TOTP功能需要服務(wù)器端和客戶端的支持炭晒。服務(wù)器端負責(zé)密鑰的生成待逞、驗證一次性密碼是否正確⊥希客戶端記錄密鑰后生成一次性密碼识樱。

1、使用一次一密基本的流程:

1.在服務(wù)器端對每個用戶生成一個密鑰SecretKey,這個密鑰對于每個用戶是不同的怜庸。

2.用戶在自己的手機上安裝客戶端当犯。第一次使用這個系統(tǒng)的時候,將密鑰輸入到客戶端割疾。服務(wù)器和用戶的手機嚎卫,現(xiàn)在都有了同一把密鑰。這里有兩種輸入方式宏榕,可以手動的輸入拓诸,也可以由系統(tǒng)生成二維碼,客戶端可以直接掃描二維碼來讀取密鑰信息和帳號信息麻昼;同時可以設(shè)置一些參數(shù)奠支,比如一次一密的長度(默認為6),時間步長(默認為30s)等抚芦。注意倍谜,密鑰必須跟手機綁定。一旦用戶更換手機叉抡,就必須生成全新的密鑰尔崔。

3.客戶端每隔一段時間為系統(tǒng)自動生成一個新的密碼。系統(tǒng)驗證的時候褥民,用戶輸入客戶端中的數(shù)字密碼來驗證您旁。

2、TOTP算法

其核心內(nèi)容包括以下三點:

一個共享密鑰(一個比特序列)轴捎;
當(dāng)前時間輸入鹤盒;
一個簽署函數(shù)。

對于同一個用戶侦副,服務(wù)器和客戶端共享了一個密鑰SecretKey侦锯,二是服務(wù)器和客戶端有相同的時間。

1.客戶端和服務(wù)端使用HMACSHA1 這個加密算法進行加密秦驯,首先客戶端和服務(wù)端會商量一個key尺碰,然后把這個key Base32之后當(dāng)作算法的加密key
2.然后客戶端和服務(wù)端需要維持一個long state一個值,如果服務(wù)端和客戶端不能夠通信译隘,那么其實用時間當(dāng)作這個state即可亲桥,當(dāng)然這個得保證估計幾十秒的容錯性,一旦時間誤差比較大就會驗證不通過固耘,這個就是TOTP的缺點题篷。
3.雙方通過加密這個long state 得到統(tǒng)一加密后的數(shù)據(jù)byte[] hash,首先取byte[] hash的最后一個byte& 0xF,那么就是去掉高位厅目,留下一個小于15的數(shù)字offset番枚,然后通過截取hash[offset:length]法严,這部分byte[]數(shù)組轉(zhuǎn)換成數(shù)字truncatedHash,最后根據(jù)設(shè)置的返回碼的位數(shù)葫笼,來決定取truncatedHash中的多少位深啤。

整個算法流程就是上面這三步,這里面有一個難點路星,就是保證時間的容錯性溯街,

GoogleAuthenticator流程
1、基于密鑰和時間計算一個HMAC-SHA1的hash值洋丐,這個hash是160bit的
2苫幢、將這個hash值隨機取連續(xù)的4個字節(jié)生成32位整數(shù),最后將整數(shù)取31位垫挨,再取模得到一個的整數(shù)韩肝。這個就是GoogleAuthenticator顯示的數(shù)字。
3九榔、在服務(wù)器端驗證的時候哀峻,同樣的方法來計算出數(shù)字
4、比較計算出來的結(jié)果和用戶輸入的是否一致哲泊。

3剩蟀、示例

創(chuàng)建二維碼或密鑰,添加到手機Authenticator中切威,用手機中得到的code與用戶和密鑰進行驗證即可育特。

<?php
require_once 'PHPGangsta/GoogleAuthenticator.php';
$ga = new PHPGangsta_GoogleAuthenticator();
$secret = $ga->createSecret();
//這是生成的密鑰,每個用戶唯一一個先朦,為用戶保存起來
echo $secret; echo '<br />';
//下面為生成二維碼缰冤,內(nèi)容是一個URI地址(otpauth://totp/賬號?secret=密鑰&issuer=標(biāo)題)
//例子:otpauth://totp/zjwlgr@163.com?secret=6HPH5373NXGO6M7K&issuer=zjwlgr
$qrCodeUrl = $ga->getQRCodeGoogleUrl('zjwlgr@163.com', $secret, 'kuaxue');
echo "Google Charts URL for the QR-Code: ".$qrCodeUrl."\n\n";
//下面為驗證參數(shù)
$oneCode = $_GET['code'];//用戶手機中獲取的code
$secret = '6HPH5373NXGO6M7K';//用戶唯一一個密鑰,上面生成的
//下面為驗證用戶輸入的code是否正確
$checkResult = $ga->verifyCode($secret, $oneCode, 2);    // 2 = 2*30秒 時鐘容差
echo '<br />';
if ($checkResult) {
    echo 'OK';
} else {
    echo 'FAILED';
}

此段程序這是一個PHP實現(xiàn)的調(diào)用方法喳魏,引用自https://github.com/PHPGangsta/GoogleAuthenticator棉浸,可以把這個clone到你本地使用。

三刺彩、雙因素認證總結(jié)

1迷郑、優(yōu)點

比單純的密碼登錄安全得多。就算密碼泄露创倔,只要手機還在嗡害,賬戶就是安全的。各種密碼破解方法畦攘,都對雙因素認證無效霸妹。

2、缺點

登錄多了一步念搬,費時且麻煩抑堡,用戶會感到不耐煩。而且朗徊,它也不意味著賬戶的絕對安全首妖,入侵者依然可以通過盜取 cookie 或 token,劫持整個對話(session)爷恳。

3有缆、帳戶恢復(fù)問題

這是雙因素認證最大的一個問題。

一旦忘記密碼或者遺失手機温亲,想要恢復(fù)登錄棚壁,勢必就要繞過雙因素認證,這就形成了一個安全漏洞栈虚。

除非準(zhǔn)備兩套雙因素認證袖外,一套用來登錄,另一套用來恢復(fù)賬戶魂务。

四曼验、參考

1、php使用谷歌驗證 (Google Authenticator) 的雙重身份驗證
2粘姜、使用google authenticator打造運維平臺的動態(tài)口令
3鬓照、google authenticator 工作原理
4、詳解Google Authenticator工作原理
5孤紧、谷歌驗證 (Google Authenticator) PHP版
6豺裆、基于Google 驗證器 實現(xiàn)內(nèi)網(wǎng)的雙因素認證
7、谷歌驗證:不懂備份号显,人財兩空【更新小程序使用方法】
8臭猜、Google Authenticator Question
9、雙因素認證(2FA)教程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末押蚤,一起剝皮案震驚了整個濱河市获讳,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌活喊,老刑警劉巖丐膝,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異钾菊,居然都是意外死亡帅矗,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門煞烫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浑此,“玉大人,你說我怎么就攤上這事滞详×菥悖” “怎么了紊馏?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蒲犬。 經(jīng)常有香客問我朱监,道長,這世上最難降的妖魔是什么原叮? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任赫编,我火速辦了婚禮,結(jié)果婚禮上奋隶,老公的妹妹穿的比我還像新娘擂送。我一直安慰自己,他們只是感情好唯欣,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布嘹吨。 她就那樣靜靜地躺著,像睡著了一般境氢。 火紅的嫁衣襯著肌膚如雪躺苦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天产还,我揣著相機與錄音匹厘,去河邊找鬼。 笑死脐区,一個胖子當(dāng)著我的面吹牛愈诚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播牛隅,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼炕柔,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了媒佣?” 一聲冷哼從身側(cè)響起匕累,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎默伍,沒想到半個月后欢嘿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡也糊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年炼蹦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狸剃。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡掐隐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出钞馁,到底是詐尸還是另有隱情虑省,我是刑警寧澤匿刮,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站探颈,受9級特大地震影響熟丸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膝擂,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一虑啤、第九天 我趴在偏房一處隱蔽的房頂上張望隙弛。 院中可真熱鬧架馋,春花似錦、人聲如沸全闷。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽总珠。三九已至屏鳍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間局服,已是汗流浹背钓瞭。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留淫奔,地道東北人山涡。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像唆迁,于是被迫代替她去往敵國和親鸭丛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理唐责,服務(wù)發(fā)現(xiàn)鳞溉,斷路器,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 前面兩篇文章中關(guān)于 HTTP 相關(guān)知識基本上介紹的差不多了鼠哥,這篇文章是對 HTTP 協(xié)議的補充熟菲,主要介紹以下三點內(nèi)...
    lijiankun24閱讀 1,302評論 2 3
  • 姓名:姚麗冰 學(xué)號:16050120089 原文鏈接 www.ruanyifeng.com 【嵌牛導(dǎo)讀】:所謂認證...
    小犽閱讀 1,075評論 0 0
  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族,HTTP屬于它內(nèi)部的一個子集朴恳。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,437評論 0 20
  • 一夢異時空閱讀 163評論 0 0