摘要:閱讀本篇文章你可以了解到谷歌驗證器的實現原理,并且可以自己使用實現支持谷歌驗證器的兩步驗證。并且發現,除了的兩步驗證之外,其它兩步驗證很多能看到谷歌驗證器的身影。
閱讀本篇文章你可以了解到谷歌驗證器的實現原理,并且可以自己使用node.js實現支持谷歌驗證器的兩步驗證。
這兩年發現身邊的很多應用和網站紛紛支持兩步驗證,并且呼吁用戶使用兩步驗證。
并且發現,除了Apple ID的兩步驗證之外,其它兩步驗證很多能看到谷歌驗證器(Google Authenticator)的身影。
這讓我產生了濃厚的興趣,到底谷歌驗證器的原理是什么,我自己能實現一個類似的驗證器嗎?
什么是兩步驗證兩步驗證就是當用戶輸入賬號密碼并驗證成功之后,需要額外輸入一串一次性隨機密碼(一般是4-6位的數字),服務器以此確認登錄者是用戶本人。
兩步驗證的類型短信驗證
短信驗證也是我們最熟悉最常用的兩步驗證,但是我認為短信驗證有有以下幾個缺點:需支付運營商短信費用、短信到達延遲、短信壓根就沒到達而網站不允許你立刻再次重發。相信你也有過等一條短信讓你抓狂的經歷。
動態密碼器
玩過網易游戲的同學應該知道網易將軍令,還有部分銀行提供的動態密碼器。我記得我以前第一次見到這個東西的時候就覺得很神奇,這東西不用聯網居然就能驗證用戶。實際上它的實現原理和Google驗證器的實現原理差不多,后面我們會詳細講到。
口令卡
口令卡是我認為最反人類的設計。曾經辦工商銀行網上銀行的時候就有過一張,它上面是以矩陣的形式排列若干個字符,系統會給你一些坐標,要求你根據坐標找出相應的字符輸入到系統。?%&¥#……(*#)我從來沒用過。不可能的,這輩子不可能用口令卡的。。
兩步驗證從用戶體驗的角度來說肯定是不友好的,因為用戶登錄或者操作一個開啟兩步驗證的網站時,用戶需要額外輸入一串隨機密碼以確認用戶是本人操作。對于大多數人來說可能覺得這操作就是多余的,麻煩的。這么麻煩不如關掉。
我建議對于比較重要的賬號,如果該應用提供了兩步驗證,最好開啟。安全第一。
我舉一下我身邊的一個栗子?
大概是2016年,我女朋友的Apple ID被盜。盜號者解綁了她的郵箱,改用盜號者的郵箱,導致女朋友iPhone被鎖。盜號者還發郵件勒索500元解鎖,我還加了盜號者qq和他砍價,砍到了200元。最后當然是找蘋果客服解鎖,提供了各種照片、單據和電話確認,歷時2天才解鎖??傮w沒什么損失,就是給自己生活帶來一些不便??纯粗跎媳槐I號并且盜刷信用卡支付寶的,那才叫慘烈。
如果被盜者開啟了兩步驗證,即使別人有你的Apple ID的賬號密碼,也登錄不了你的賬號。
另外,可能很多用戶喜歡在多個網站上使用相同的密碼,這樣是很危險的。如果用戶一個網站上的賬號被盜了,其它平臺的賬號可能也要遭殃。畢竟“某某平臺的賬號系統被盜”這種事也是時有發生的。這種情況開啟兩步驗證也是能保護其它平臺的賬號不被不法分子利用。
HOTP 和 TOTP OTP兩步驗證中使用的密碼是一次性密碼(One-Time Password 簡稱OTP),也稱為動態口令。是使用密碼技術實現的在客戶端和服務器之間通過共享密鑰的一種強認證技術,是增強目前靜態口令認證的一種非常方便技術手段,是一種重要的兩步驗證認證技術。Wikipedia解釋
HOTP (HMAC-Based One-Time Password Algorithm)HOTP 是基于 HMAC 算法生成的一次性密碼,也稱事件同步的動態密碼,是 ITEF RFC 4226 公開的算法規范, 偽代碼如下:
TOTP 是 HOTP 的改良版,使用時間替換掉 HOTP 的事件計數器 C,也稱時間同步的動態密碼。詳細規范見 RFC 6238,偽代碼:
了解完了規范后,擼代碼就簡單了。
上面的算法除了HMAC-SHA-1之外就是Truncat了,貼一段Truncat的JS代碼:
// 將20字節的hmac結果轉為6位數字,不夠6位前面補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; }
在線預覽地址
代碼已上傳npm,支持node.js和瀏覽器執行
完整代碼請移步我的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
歡迎轉載,轉載請附上原文鏈接
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/11342.html
摘要:閱讀本篇文章你可以了解到谷歌驗證器的實現原理,并且可以自己使用實現支持谷歌驗證器的兩步驗證。并且發現,除了的兩步驗證之外,其它兩步驗證很多能看到谷歌驗證器的身影。 showImg(https://segmentfault.com/img/bV6UIW?w=540&h=238); 閱讀本篇文章你可以了解到谷歌驗證器的實現原理,并且可以自己使用node.js實現支持谷歌驗證器的兩步驗證。 ...
摘要:下面就是對這種攻擊原理的介紹以及預防方法。針對該漏洞的特點,通過覆蓋數組構造函數以竊取暴露返回數組,而現在大多數瀏覽器還無法防范這種攻擊。在上周的挪威開發者大會上,我做了一個針對劫持漏洞的演示。 注:作者發表這篇文章的時間較早,某些方法可能并不是最好的解決方案,但針對這種漏洞進行的攻擊還依然可見,如早期的:QQMail郵件泄露漏洞。直到現在,你在某些郵箱打開一個外部鏈妝,依然會有安全警...
摘要:谷歌思科華為等等均是的貢獻成員。其中谷歌云平臺和等大型云提供商成功在生產環境中使用了。它為良好穩定的生產部署提供了一個良好的起點。預先準備在繼續之前,我們需要準備一個谷歌云平臺的賬號免費的應該足夠了。我們將為部署配置。 本文將帶你充分了解Etcd的工作原理,演示如何用Kubernetes建立并運行etcd集群,如何與Etcd交互,如何在Etcd中設置和檢索值,如何配置高可用等等。 sh...
摘要:明文協議的缺陷是導致數據泄露數據篡改流量劫持釣魚攻擊等安全問題的重要原因。也就是說加上加密處理和認證以及完整性保護后即是。數字簽名能確定消息的完整性證明數據是否未被篡改過。 前言 近幾年,互聯網發生著翻天覆地的變化,尤其是我們一直習以為常的HTTP協議,在逐漸的被HTTPS協議所取代,在瀏覽器、搜索引擎、CA機構、大型互聯網企業的共同促進下,互聯網迎來了HTTPS加密時代,HTTPS將...
摘要:明文協議的缺陷是導致數據泄露數據篡改流量劫持釣魚攻擊等安全問題的重要原因。也就是說加上加密處理和認證以及完整性保護后即是。數字簽名能確定消息的完整性證明數據是否未被篡改過。 前言 近幾年,互聯網發生著翻天覆地的變化,尤其是我們一直習以為常的HTTP協議,在逐漸的被HTTPS協議所取代,在瀏覽器、搜索引擎、CA機構、大型互聯網企業的共同促進下,互聯網迎來了HTTPS加密時代,HTTPS將...
閱讀 1336·2023-04-25 23:47
閱讀 912·2021-11-23 09:51
閱讀 4431·2021-09-26 10:17
閱讀 3706·2021-09-10 11:19
閱讀 3253·2021-09-06 15:10
閱讀 3546·2019-08-30 12:49
閱讀 2420·2019-08-29 13:20
閱讀 1730·2019-08-28 18:14