為了保護網路帳號的安全,除了要有強悍、難破解、不共用的密碼之外,許多網站也會要求必須開啟「2FA」雙因子認證保護機制。
雙重認證(英語:Two-factor authentication,縮寫為2FA),又譯為雙重驗證、雙因子認證、雙因素認證、二元認證,是多重要素驗證中的一個特例,使用兩種不同的元素,合併在一起,來確認使用者的身分。(維基百科)
2FA認證最常見的兩種方式:SMS簡訊驗證與TOTP認證。
基於時間的一次性密碼演算法(英語:Time-based One-Time Password,簡稱:TOTP)是一種根據預共享的金鑰與當前時間計算一次性密碼的演算法。它已被網際網路工程任務組接納為RFC 6238標準,成為主動開放認證(OATH)的基石,並被用於眾多多重要素驗證系統當中。(維基百科)
簡訊驗證多數人較熟悉,但缺點是可能會隔很久才收到或沒收到簡訊,以至於超過驗證時效。而TOTP則是必須在啟用時先輸入「密鑰」,未來就只需要進入TOTP app中查看六位數的認證碼即可。最常見的TOTP app應該非Google Authenticator莫屬。
自從我開始使用Bitwarden後,解決了記憶密碼的問題,但輸入密碼後老是要再掏出手機查看Google Authenticator,著實有些麻煩。雖然我知道Bitwarden具備整合TOTP認證的功能,但一想到要逐個網站去申請新「密鑰」就感到懶惰。(註:若是使用bitwarden.com的免自架服務,需付費升級至Premium等級才能使用TOTP整合服務;自架則無此限制)
然而,一切在Google大神的幫助下有了轉機。以下是我一次性匯出Google Authenticator中「密鑰」的過程,希望對於申請新「密鑰」感到卻步的人,可以無痛用Bitwarden取代Google Authenticator。
進入Google Authenticator的選單,找到「移轉帳戶」選項,並選擇「匯出帳戶」。
選擇匯出帳戶後,會得到幾個QR code,QR code的內容便是密鑰。但Google Authenticator將這些密鑰以Base64演算法編碼,因此還必須先進行解碼。
我在GitHub上找到一個開源的解碼專案「extract_otp_secrets」,下載安裝後會啟動相機掃描Google Authenticator的QR code,再自動將密鑰解碼出來。因此建議操作時使用筆電或帶有視訊鏡頭的電腦會比較方便。當然,也可以使用文本的方式輸入,由於操作門檻較高,可以參閱原作者的說明文件進行操作。
開啟extract_otp_secrets後,電腦會開啟鏡頭,並在右上角顯示目前已掃描幾個QR code、有幾組TOTP被成功解碼。
掃描完成後,按下「Shift+T」即可將解密結果存成純文字檔。
得到上面的純文字檔後,就可以進入Bitwarden輸入TOTP密鑰。可以將密鑰複製到電腦版Bitwarden的TOTP欄位,或使用Bitwarden的手機app直接掃描純文字檔中的QR code。(此QR code即為密鑰明碼,請小心使用,使用完畢請徹底刪除)
如果你已經使用Google Authenticator一段時間,肯定會和我一樣有許多TOTP認證碼,逐一轉移到Bitwarden實在是痛苦又冗長的過程。
透過Google Authenticator轉移帳戶的功能,可以一次性的提取所有TOTP密鑰,加快整合TOTP到Bitwarden的過程。整合完成後,不論是輸入帳號密碼或是輸入TOTP認證碼,都只需要Bitwarden即可搞定,在安全性和方便性取得平衡。
雖然將TOTP整合至Bitwarden非常方便,但這也代表Bitwarden資料庫中保有TOTP密鑰,也就是說,如果Bitwarden的資料庫外洩,帳號幾乎可以說是沒救。
我的想法是,Bitwarden資料庫不是以明碼方式儲存資料,縱使資料庫整個被盜走,小偷也必須解密資料庫才能獲得密鑰。此外,由於我是自行架設Bitwarden,資料庫是由我自己管理,沒有管理人員外洩給他人的危險,唯一的問題只有伺服器的安全性風險。然而,我並非什麼政商名流,我自己管理的伺服器被攻擊的機率本就沒有那麼高(參閱:LassPass遭駭事件),這也是我選擇自架Bitwarden的原因之一。
有連網的設備就有被攻擊的風險,我想這是身為網路使用者應該有的認知。怎麼在方便性和安全性之間取得平衡,是我們永遠的課題。