close
科技專欄資訊保安

從 Substack 的登錄設計了解 2FA 雙因子認證

我經常談區塊鏈和其他 web3 相關技術,即使有人認為沒事找事,甚至全是一場騙局,web2 和中央管治才是王道,相信也必然同意,資訊安全非常重要。

在當今資訊社會,資安已經成為顯學,不學上一招半式,只有吃虧的份。接下來我會寫一下資安相關的話題,讀後你會發現,是否認同 web3 都好,資安跟密碼學的關係,密不可分。


資安低掛水果:2FA

如果有人問我,想要做好資安首要工作是甚麼,我會毫不猶豫地回答是 2FA,即 Two-Factor Authentication,雙因子認證。

是的,相較於擁有一個很強的密碼但缺乏第二重防禦,我寧願用戶的密碼是「123456」,但受到第二層驗證碼保護。當然,我只是說非得二選一的話我會這樣選,而絕非建議弱密碼,讀者可不要輕率看待密碼,被駭之後找我晦氣。不妨這樣說,2FA 是資安的「low hanging fruit」,花個五分鐘打開 2FA,保安程度馬上大幅提升,被駭的機會率至少降低九成。

近年生成式 AI 突飛猛進,每當有個 Alice 說擔心人類會被 AI 淘汰,就會有個 Bob 跑出來指正,其實我們不需要勝過 AI,只需要比其他人多懂一點 AI,被淘汰的就會是其他人。會否被駭也是同一道理,作為普通用戶,你不需要比駭客技勝一籌,只需要防禦贏過其他用戶就足以幸免於難——當大把沒打開 2FA 的帳號等著駭客予取予攜,他們何必大費周章去駭你的帳號?這就是我有信心說只要打開 2FA,被駭機率隨即大降九成的原因。

不過請注意,以上說的是「普通用戶」,如果你「上頭」被特別關照,以上邏輯並不適用。數位入侵有是否目標性攻擊之分(untargeted attack vs targeted attack),進行非目標性攻擊,駭客會選方便就手的,就好像街頭有一大堆單車,要偷當然選車鎖最弱的,你的鎖只要比別人好上一點,單車就不會被盜;目標性攻擊卻是另一回事,你的單車是輛林寶堅尼,賊人非要偷到手不可,這就變成貨真價實的攻防戰,你的盾必須擋得住對方的茅,單純贏過其他用戶可保不住你。

只要花少許時間讀我的一兩篇文章並且「弄髒雙手」跟進,我敢說已經足以應付非目標性攻擊。然而,萬一你因為某些原因被盯上,對手可能來自矽谷、五角大樓、特拉維夫、莫斯科、平壤或中南海,我一介小薯可招架不住,只能盡量小心,至少提高破解的門檻,避免死得太難看。

2FA 的最重點是 F

顧名思義,2FA 是以兩個不同因子認證,用戶必須先後通過,才能取得服務使用權。

所謂「因子」,可分為三類:

  1. What you know:你知道甚麼;如密碼、出生日期、身分證號碼等。
  2. What you have:你持有甚麼;如手機、鑰匙、IC 卡等。
  3. Who you are:你是誰;即生物認證,如指模、臉、虹膜等。

當服務要求用上以上三種方式中的兩種來認證,就符合 2FA 原則。換言之,只要密碼就能進入,不算是 2FA;即使靠雙重密碼才可進入,也不是 2FA,因為儘管用上兩組密碼,還是同一種因子,也因此,有人把 2FA 翻譯為雙重認證,不是太準確。當然,雙重密碼怎麼說都比單個密碼保險一些,只是差別比較有限,有能力破解一個密碼,往往就能破解第二個密碼,只是多花點時間;2FA 就不一樣,用上另一種因子有如打開一個新維度,從一維變成二維,保安程度大大提升。2FA 的最重點不在「2」,而在「F」。

傳統上,2FA 最典型的組合是「密碼 + 驗證碼」,前者記在腦袋,後者以用戶手持的編碼器生成,或者透過短訊獲取,即用上「what you know」和「what you have」兩個因子,要破解前者往往並不困難,尤其是靠用戶腦袋記的密碼,通常強不到哪裡去,但一旦加上後者,駭客就需要另一套破解的技巧,等於打開一個全新維度,難度大幅提升。留意以上只是最常用的 2FA 組合,絕非我的建議,我一則反對用腦袋記密碼,二則反對用短訊作為第二因子,短訊容易被盜,尤其是在某些國家,我就曾第一身遇過有能力把我的短訊看光光的駭客。

說到這裡我要自打嘴巴,一開始說資安的低掛水果是 2FA,其實並不精準,真正的意思是在那些只使用密碼登錄的帳號打開驗證碼機制,下載 Google Authenticator,掃描指定的二維碼,從此以 Google Authenticator 生成的驗證碼作為第二因子作登錄。Google Authenticator 會鼓勵你把驗證碼同步到雲端,好處是這台手機壞了或者丟了還能如常登錄,但也意味著萬一你的 Google 帳號被駭,其他以此作 2FA 的帳號很可能會被牽連,因此建議不要打開雲端同步的選項。

本文先不討論更多進階的細節,比如哪家的 Authenticator 最好,作為起步,先按照以上的標準方式實行就已經不錯。我更希望先集中把 2FA 的概念說清楚,務求做到一理通,百理明。

重門深鎖但保安員輕率

「密碼 + 驗證碼」是最為典型的 2FA 組合,當涉及的服務、對資安的要求和使用的設備不同,登錄的方式也會隨之改變,比如有些服務不依產業標準,硬要自行設計「安全」守則,如強迫用戶每三個月修改密碼,密碼卻只能八位之類;比如對資安要求較高的,願意購買專門用作第二因子的登錄硬體 Yubikey;又例如電腦不一定有生物認證,智能手機則多數有,這些因素全都會影響登錄方式。不過,萬變不離其宗,要判斷個別服務的登錄方式是否安全,只需靈活套用 2FA 原則,看是否應用上兩個因子,就能知道個大概。

以下讓我們玩個遊戲,以現實例子考考大家。且看我們挺熟悉的 Substack,帳號設定裡關於 account security 的部份:

如果讀者按文章初段的建議,嘗試在 Substack 打開帳號登錄的驗證碼以收 2FA 之效,Substack 會要求你首先打開 recovery questions,設定幾條私密問題及答案,萬一丟失電郵登錄或者安裝 authenticator 的裝置時,透過回答 recovery questions 恢復帳號。

問題一:你會打開 Substack 的 2FA 嗎?

心水清的你或許早就看穿,第一張截圖已經「劇透」,Substack 是極少數我沒有打開驗證碼的線上服務之一。我明白 Substack 的好意,但 recovery questions 可說是最糟糕的登錄方式,很容易透過「社交工程」破解,比如駭客只需要友善地跟你年邁的父母聊聊天,就能得知他們在哪裏相遇。

一個系統的防禦能力等於所有攻擊面中最弱的一環,沒錯,輸入密碼後還要驗證碼才能登入符合 2FA,可是只要跟系統說丟失,你就能透過回答「私密」問題恢復帳號,這就好像你家的大門堅固而且安裝了鐵閘,不過持有兩條鑰匙的保安員熱心助人,只要穿得端莊一點跟他攀談,自稱屋主的朋友且能說得頭頭是道,就會乖乖替你開門。

Substack 的產品設計都非常用心,就連登錄也是,大概是考慮到文字創作者對資安不熟悉吧,特別使用上 recovery questions,我只能說,好意心領,但我寧可單用一組 40 字長,包含大小寫字母、數字和標點的密碼。

問題二:我的 Substack 帳號是單因子認證嗎?

這也太簡單了吧,當然啦。且慢——

當你知道、記得你的密碼,只靠密碼登錄,那就是單靠「what you know」這個因子的認證方式,這沒錯。可是,我在 Substack 用的密碼由密碼管理器 Proton Pass 生成,我記不住甚至沒看過,平時要填密碼得請 Proton Pass 代勞,而 Proton Pass 安裝在 MacBook 和安卓手機,也就是說,要密碼就需要拿到我的 MacBook 或手機,並使用指模解鎖設備才可,從這個角度看,雖然我只用密碼,但已經用上了「what you have」和「who you are」兩個因子,稱得上是 2FA。

真的該這樣理解麼?還是說,一重關卡就必然是單因子認證,我不過是強詞奪理,混淆視聽?

高重建

高重建

The author 高重建

Founder of LikeCoin & #decentralizehk