摘要:閱讀本篇文章你可以了解到谷歌驗(yàn)證器的實(shí)現(xiàn)原理,并且可以自己使用實(shí)現(xiàn)支持谷歌驗(yàn)證器的兩步驗(yàn)證。并且發(fā)現(xiàn),除了的兩步驗(yàn)證之外,其它兩步驗(yàn)證很多能看到谷歌驗(yàn)證器的身影。
閱讀本篇文章你可以了解到谷歌驗(yàn)證器的實(shí)現(xiàn)原理,并且可以自己使用node.js實(shí)現(xiàn)支持谷歌驗(yàn)證器的兩步驗(yàn)證。
這兩年發(fā)現(xiàn)身邊的很多應(yīng)用和網(wǎng)站紛紛支持兩步驗(yàn)證,并且呼吁用戶使用兩步驗(yàn)證。
并且發(fā)現(xiàn),除了Apple ID的兩步驗(yàn)證之外,其它兩步驗(yàn)證很多能看到谷歌驗(yàn)證器(Google Authenticator)的身影。
這讓我產(chǎn)生了濃厚的興趣,到底谷歌驗(yàn)證器的原理是什么,我自己能實(shí)現(xiàn)一個(gè)類似的驗(yàn)證器嗎?
什么是兩步驗(yàn)證兩步驗(yàn)證就是當(dāng)用戶輸入賬號(hào)密碼并驗(yàn)證成功之后,需要額外輸入一串一次性隨機(jī)密碼(一般是4-6位的數(shù)字),服務(wù)器以此確認(rèn)登錄者是用戶本人。
兩步驗(yàn)證的類型短信驗(yàn)證
短信驗(yàn)證也是我們最熟悉最常用的兩步驗(yàn)證,但是我認(rèn)為短信驗(yàn)證有有以下幾個(gè)缺點(diǎn):需支付運(yùn)營商短信費(fèi)用、短信到達(dá)延遲、短信壓根就沒到達(dá)而網(wǎng)站不允許你立刻再次重發(fā)。相信你也有過等一條短信讓你抓狂的經(jīng)歷。
動(dòng)態(tài)密碼器
玩過網(wǎng)易游戲的同學(xué)應(yīng)該知道網(wǎng)易將軍令,還有部分銀行提供的動(dòng)態(tài)密碼器。我記得我以前第一次見到這個(gè)東西的時(shí)候就覺得很神奇,這東西不用聯(lián)網(wǎng)居然就能驗(yàn)證用戶。實(shí)際上它的實(shí)現(xiàn)原理和Google驗(yàn)證器的實(shí)現(xiàn)原理差不多,后面我們會(huì)詳細(xì)講到。
口令卡
口令卡是我認(rèn)為最反人類的設(shè)計(jì)。曾經(jīng)辦工商銀行網(wǎng)上銀行的時(shí)候就有過一張,它上面是以矩陣的形式排列若干個(gè)字符,系統(tǒng)會(huì)給你一些坐標(biāo),要求你根據(jù)坐標(biāo)找出相應(yīng)的字符輸入到系統(tǒng)。?%&¥#……(*#)我從來沒用過。不可能的,這輩子不可能用口令卡的。。
兩步驗(yàn)證從用戶體驗(yàn)的角度來說肯定是不友好的,因?yàn)橛脩舻卿浕蛘卟僮饕粋€(gè)開啟兩步驗(yàn)證的網(wǎng)站時(shí),用戶需要額外輸入一串隨機(jī)密碼以確認(rèn)用戶是本人操作。對(duì)于大多數(shù)人來說可能覺得這操作就是多余的,麻煩的。這么麻煩不如關(guān)掉。
我建議對(duì)于比較重要的賬號(hào),如果該應(yīng)用提供了兩步驗(yàn)證,最好開啟。安全第一。
我舉一下我身邊的一個(gè)栗子?
大概是2016年,我女朋友的Apple ID被盜。盜號(hào)者解綁了她的郵箱,改用盜號(hào)者的郵箱,導(dǎo)致女朋友iPhone被鎖。盜號(hào)者還發(fā)郵件勒索500元解鎖,我還加了盜號(hào)者qq和他砍價(jià),砍到了200元。最后當(dāng)然是找蘋果客服解鎖,提供了各種照片、單據(jù)和電話確認(rèn),歷時(shí)2天才解鎖??傮w沒什么損失,就是給自己生活帶來一些不便??纯粗跎媳槐I號(hào)并且盜刷信用卡支付寶的,那才叫慘烈。
如果被盜者開啟了兩步驗(yàn)證,即使別人有你的Apple ID的賬號(hào)密碼,也登錄不了你的賬號(hào)。
另外,可能很多用戶喜歡在多個(gè)網(wǎng)站上使用相同的密碼,這樣是很危險(xiǎn)的。如果用戶一個(gè)網(wǎng)站上的賬號(hào)被盜了,其它平臺(tái)的賬號(hào)可能也要遭殃。畢竟“某某平臺(tái)的賬號(hào)系統(tǒng)被盜”這種事也是時(shí)有發(fā)生的。這種情況開啟兩步驗(yàn)證也是能保護(hù)其它平臺(tái)的賬號(hào)不被不法分子利用。
HOTP 和 TOTP OTP兩步驗(yàn)證中使用的密碼是一次性密碼(One-Time Password 簡稱OTP),也稱為動(dòng)態(tài)口令。是使用密碼技術(shù)實(shí)現(xiàn)的在客戶端和服務(wù)器之間通過共享密鑰的一種強(qiáng)認(rèn)證技術(shù),是增強(qiáng)目前靜態(tài)口令認(rèn)證的一種非常方便技術(shù)手段,是一種重要的兩步驗(yàn)證認(rèn)證技術(shù)。Wikipedia解釋
HOTP (HMAC-Based One-Time Password Algorithm)HOTP 是基于 HMAC 算法生成的一次性密碼,也稱事件同步的動(dòng)態(tài)密碼,是 ITEF RFC 4226 公開的算法規(guī)范, 偽代碼如下:
TOTP 是 HOTP 的改良版,使用時(shí)間替換掉 HOTP 的事件計(jì)數(shù)器 C,也稱時(shí)間同步的動(dòng)態(tài)密碼。詳細(xì)規(guī)范見 RFC 6238,偽代碼:
了解完了規(guī)范后,擼代碼就簡單了。
上面的算法除了HMAC-SHA-1之外就是Truncat了,貼一段Truncat的JS代碼:
// 將20字節(jié)的hmac結(jié)果轉(zhuǎn)為6位數(shù)字,不夠6位前面補(bǔ)0 truncat(hmac_result) { const offset = hmac_result[19].charCodeAt() & 0xf; const bin_code = (hmac_result[offset].charCodeAt() & 0x7f) << 24 | (hmac_result[offset + 1].charCodeAt() & 0xff) << 16 | (hmac_result[offset + 2].charCodeAt() & 0xff) << 8 | (hmac_result[offset + 3].charCodeAt() & 0xff); let otp = (bin_code % 10 ** this.digit).toString(); while (otp.length < this.digit) { otp = "0" + otp; } return otp; }
在線預(yù)覽地址
代碼已上傳npm,支持node.js和瀏覽器執(zhí)行
完整代碼請(qǐng)移步我的Github https://github.com/wuyanxin/t...
npm install totp.js使用
const TOTP = require("totp.js"); // generate a base32 secret key const key = TOTP.randomKey(); // "GAXGGYT2OU2DEOJR" const totp = new TOTP(key); const code = totp.genOTP(); // "552179" totp.verify(code) // true // generate Google Authenticator supported URL totp.gaURL("handsome@totp.js", "Totp.js") // "otpauth://totp/handsome@totp.js?issuer=Totp.js&secret=GAXGGYT2OU2DEOJR" // OR const totp2 = new TOTP(TOTP.base32.encode("your key")); totp2.genOTP()參考
ITEF RFC 4226
ITEF RFC 6238
歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)附上原文鏈接
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/93737.html
摘要:閱讀本篇文章你可以了解到谷歌驗(yàn)證器的實(shí)現(xiàn)原理,并且可以自己使用實(shí)現(xiàn)支持谷歌驗(yàn)證器的兩步驗(yàn)證。并且發(fā)現(xiàn),除了的兩步驗(yàn)證之外,其它兩步驗(yàn)證很多能看到谷歌驗(yàn)證器的身影。 showImg(https://segmentfault.com/img/bV6UIW?w=540&h=238); 閱讀本篇文章你可以了解到谷歌驗(yàn)證器的實(shí)現(xiàn)原理,并且可以自己使用node.js實(shí)現(xiàn)支持谷歌驗(yàn)證器的兩步驗(yàn)證。 ...
摘要:下面就是對(duì)這種攻擊原理的介紹以及預(yù)防方法。針對(duì)該漏洞的特點(diǎn),通過覆蓋數(shù)組構(gòu)造函數(shù)以竊取暴露返回?cái)?shù)組,而現(xiàn)在大多數(shù)瀏覽器還無法防范這種攻擊。在上周的挪威開發(fā)者大會(huì)上,我做了一個(gè)針對(duì)劫持漏洞的演示。 注:作者發(fā)表這篇文章的時(shí)間較早,某些方法可能并不是最好的解決方案,但針對(duì)這種漏洞進(jìn)行的攻擊還依然可見,如早期的:QQMail郵件泄露漏洞。直到現(xiàn)在,你在某些郵箱打開一個(gè)外部鏈妝,依然會(huì)有安全警...
摘要:谷歌思科華為等等均是的貢獻(xiàn)成員。其中谷歌云平臺(tái)和等大型云提供商成功在生產(chǎn)環(huán)境中使用了。它為良好穩(wěn)定的生產(chǎn)部署提供了一個(gè)良好的起點(diǎn)。預(yù)先準(zhǔn)備在繼續(xù)之前,我們需要準(zhǔn)備一個(gè)谷歌云平臺(tái)的賬號(hào)免費(fèi)的應(yīng)該足夠了。我們將為部署配置。 本文將帶你充分了解Etcd的工作原理,演示如何用Kubernetes建立并運(yùn)行etcd集群,如何與Etcd交互,如何在Etcd中設(shè)置和檢索值,如何配置高可用等等。 sh...
摘要:明文協(xié)議的缺陷是導(dǎo)致數(shù)據(jù)泄露數(shù)據(jù)篡改流量劫持釣魚攻擊等安全問題的重要原因。也就是說加上加密處理和認(rèn)證以及完整性保護(hù)后即是。數(shù)字簽名能確定消息的完整性證明數(shù)據(jù)是否未被篡改過。 前言 近幾年,互聯(lián)網(wǎng)發(fā)生著翻天覆地的變化,尤其是我們一直習(xí)以為常的HTTP協(xié)議,在逐漸的被HTTPS協(xié)議所取代,在瀏覽器、搜索引擎、CA機(jī)構(gòu)、大型互聯(lián)網(wǎng)企業(yè)的共同促進(jìn)下,互聯(lián)網(wǎng)迎來了HTTPS加密時(shí)代,HTTPS將...
摘要:明文協(xié)議的缺陷是導(dǎo)致數(shù)據(jù)泄露數(shù)據(jù)篡改流量劫持釣魚攻擊等安全問題的重要原因。也就是說加上加密處理和認(rèn)證以及完整性保護(hù)后即是。數(shù)字簽名能確定消息的完整性證明數(shù)據(jù)是否未被篡改過。 前言 近幾年,互聯(lián)網(wǎng)發(fā)生著翻天覆地的變化,尤其是我們一直習(xí)以為常的HTTP協(xié)議,在逐漸的被HTTPS協(xié)議所取代,在瀏覽器、搜索引擎、CA機(jī)構(gòu)、大型互聯(lián)網(wǎng)企業(yè)的共同促進(jìn)下,互聯(lián)網(wǎng)迎來了HTTPS加密時(shí)代,HTTPS將...
閱讀 2648·2021-11-24 09:39
閱讀 1648·2021-11-24 09:38
閱讀 629·2021-11-22 14:44
閱讀 1888·2021-11-18 10:02
閱讀 2573·2021-11-18 10:02
閱讀 1158·2021-10-14 09:43
閱讀 4244·2021-09-29 09:35
閱讀 523·2021-07-30 15:30