簡訊驗證碼:是時候說再見了

大約在 2015 年底開始,中國互聯網開始流行起使用短信驗證碼的方式進行用戶鑑權。

雖然已經無法深究是什麼原因或是哪家公司開始的這個潮流(實際上這樣的深究也是毫無意義的),但短信驗證碼已經成為了中國互聯網的「標配」,甚至和其他國民級應用配合後,它幾乎已經完成了中國互聯網和國際互聯網分道揚鑣的歷史性轉折:在中國本土,他們使用的非常好,但對於非中國大陸的居民,或非中國籍居民來說,服務幾乎無法使用。

然而,與大部分人的認知不同,短信驗證碼並不能提供更好的安全性。

愛範兒之前的文章中已提到過關於使用 GSM snooping 方法進行短信驗證碼的終端竊聽的實例。這篇我在兩年前寫的文章也有更多的信息。除了最後一英里的安全性存疑之外,由於骨幹網分光設備及 Lawful Interception 設備的安裝已成為常態,如果「服務商 —— 短信服務商 —— 運營商」的鏈路中任何一個環節若未使用工業級標準進行加密傳輸,或無法保證實施前向安全 (Forward Secrecy),則整個鏈路是不可信任的。

同樣的,短信服務商若沒有良好的安全意識,那麼別有用心的人可能在此處潛伏,竊取驗證碼。除此之外,來自短信服務商以及運營商的內部威脅 (insider risk) 是不可小覷的。

簡單的說,由於一般的短信傳輸路徑存在過多的薄弱之處,其安全性是值得懷疑的。

使用短信驗證碼除了有安全性問題之外,還存在著個人信息洩露的極大風險。可能由於攜號轉網並未達成,而大部分運營商的新用戶優惠遠好於老用戶優惠(從商業角度 bait-and-switch 是個不錯的策略),頻繁更換手機號已成為了一種常見行為。某些國民級聊天軟件的普及更是讓手機號交換的需求大大降低 —— 實際上我在最近一兩年鮮有與其他人交換手機號的情況。

更換手機號帶來的問題則是原有的號碼所有者經常忘記取消手機號與賬戶的綁定,不少服務甚至無法更換號碼綁定。因此,一旦號碼被再次循環利用,存心不良的攻擊者可以利用此問題針對防護不佳的平臺作出攻擊,以取得用戶資料。有些情況下,甚至可以取得足夠多的資料,進行身份盜竊 (identity theft)。

這對用戶的隱私是極大的威脅。

即便是使用了極佳的安全手段(提示:這種手段並不存在),一旦手機號被送出,用戶的隱私可能受到極大的威脅。在諸多公司缺乏合理的隱私策略的前提下 ,用戶的個人信息可能會與信用性受懷疑的第三方公司共享,甚至可能被出售。(愛範兒讀者不必擔心,我們有詳細的隱私策略供君研究。)對於用戶而言,這意味著更多的追蹤器 (不要忘記大部分 DSP 均支持使用手機號做為用戶標識符),以及更多的垃圾短信(這畢竟是手機號碼)。這對於大部分讀者來說也已經不陌生了。

短信驗證同樣無法完全提供運營商想得到的用戶實名認證的功效。下面一張來自國際互聯網的截圖便已經足夠說明問題。當然了,這樣的信息甚至可能洩露於上面描述的方式。

短信驗證碼:是時候說再見了


短信驗證碼洩露造成實際損失的例子,海內外皆有。較為人所知的是近期豆瓣網友「獨釣寒江雪」的例子,以及 Coinbase.com 用戶由於 Verizon 的安全漏洞導致數千元的 Bitcoin 被盜取的例子。

既然有如此之多的問題,為什麼依然有諸多公司選擇使用短信認證,甚至選擇短信認證為唯一的認證方式呢?

大概有兩個解釋 —— 若不是無知,便是真的壞。無知不算可恥,互聯網安全本身是中國研究極少而美國相對發達的學科,如果本文可以讓更多從業者瞭解到這個事實,便已推進中國互聯網進了一小步;而壞則是更大的問題。發垃圾短信是可以帶來短期的收益的,不尊重用戶隱私是可以成就諸多「模式創新」的,但「模式創新」帶來的惡評,相信各位讀者也從各大媒體中沒少讀到。甚至有 Twitter 用戶提到,“Web experience in China is like a bowl of shit being served by a scar-faced, slick-haired waiter with nothing beneath his suit jacket, who just learned to bow politely with an ugly and hideous grin. Utterly unbearable.” (編者譯:中國網站不僅難看還難用,刀疤臉梳油頭,赤膊穿西裝,端一盆屎到你面前,微微欠身冷笑著請你吃的那種。 )

除了短信驗證,作為身份驗證的方式可能還有什麼呢?

傳統的基於用戶名密碼的驗證方式當然沒錯,但是大部分人都不對密碼安全有深入的瞭解,畢竟互聯網用戶並非網絡安全專家。除了老生常談的不應重用密碼(真相是大家都在重用密碼)、使用強密碼(但強密碼逃不過弱加密方式甚至明文密碼的威脅)、使用密碼管理器(唯一問題是 LastPass 的 bug 多如牛毛且界面醜到天際、1Password 的價格令人驚歎、iCloud Passphrase 的使用方式費解且不跨平臺)之外,有什麼真的解決問題的方法?

OpenID 的嘗試已經事實上失敗了 (這個名詞可能也只有少部分讀者仍有印象),Mozilla Persona也宣告失敗。標準的 OIDC (並非私有的 OAuth 2.0)雖然作為一個標準來說較為成功,但更多的被用於企業級的 SSO 解決方案,而為面向客戶端的解決方案。基於巨頭的(使用 OAuth 2.0 或類似技術的)認證方式雖然提供了更好的便利性,但它並不可打消用戶作為一個普通公民對隱私的顧慮 —— 個人信息多多少少被共享了出去。

我們有什麼選項?這可能是最難回答的一個問題。

從用戶隱私角度出發,任何一個人都希望儘快能少的提供信息給任何商業公司;從用戶體驗的角度出發,任何一個產品都應需要最少代價完成「登錄」以及合規性的要求,並儘可能少的將用戶暴露在風險面之下。最好的策略,目前看起來似乎仍然是基於傳統的用戶名密碼方式的認證,但用戶是否埋單、是否懂得保護自己,這是個很值得研究的話題。或許使用巨頭提供的登錄權衡下來,仍然是折衷的選擇:避免巨頭的追蹤已經十分困難。

但不管怎樣,是時候對短信驗證碼說再見了 —— 一個漏洞百出的方案,絕對不應被理所當然的認為「這就是做事情的方法」。

(題圖來自 Thought Catalog)


分享到:


相關文章: