為什麼銀行 App 的安全鍵盤並不能守護你的賬戶安全?
1Password 開發團隊的最新壹期播客節目談了很多有關網絡安全相關的暴論(Hot takes),例如發往郵箱的登錄鏈接到底安不安全、口令會不會在 2026 年式微,以及 VPN 到底能不能保護好安全等。
如果讓我提出壹個有關網絡安全的暴論,我會提出「安全鍵盤並不能守護你的賬戶安全」。這句話裡的「安全鍵盤」,泛指包括中國大陸在內的、部分國家或地區的手機銀行 app 中,普遍性地在密碼輸入框中使用的那套自己實現的觸屏軟鍵盤。
如果要讓我評價中國大陸金融機構近拾年以來最抽象的幾個網絡安全操作,它應該能排進前叁位。
▍安全鍵盤是怎麼來的?
讓我們把時間往回撥 30 年,來到個人電腦甚至還沒有完全普及的年代。早在 1997 年,招商銀行就推出了面向零售和個人的網上銀行服務「壹網通」。
這應該比大多數人想象的要早得多,畢竟彼時距離發出那封著名的「越過長城走向世界」郵件只過去了拾年,彼時的 QQ 也還叫做 OICQ。這個時候個人電腦普及率沒那麼高,基本上得是「萬元戶」可能才會有壹台家人共享的電腦。但包括即時通訊、網絡游戲和網上銀行在內的互聯網應用的興起,依然促成了壹波對互聯網需求的高峰,而彼時基礎設施和個人電腦普及就顯得像是個「遠水」,解不了人民群眾的「近火」,因此催生出了「網吧」,也就是提供公共互聯網接入的服務。

現在我們知道,在公共設備上登錄自己的互聯網賬戶有很多安全上需要注意的地方,例如用完電腦需要將登錄狀態移除(退出登錄),或者要使用瀏覽器的「訪客模式」或「隱身模式」等等。但有壹種原始但有效的「中間人攻擊」方式在彼時頗為流行,就是在鍵盤和計算機的 PS/2 接口中間,添加壹個鍵盤記錄器。
鍵盤記錄器的作用,就是記錄使用這台電腦的所有用戶的鍵盤操作記錄,你輸入什麼字符、按下什麼按鈕,它統統都記下來。而且,為了(在視覺上)隱蔽鍵盤記錄器,它通常都會被做得很小,以便隱蔽在電腦機箱後側。
設想壹下,如果你在網吧上網,選了壹台被人設置了這種鍵盤記錄器的電腦,然後在電腦上打開了 QQ,通過鍵盤輸入了你的 QQ 號和密碼。你離開網吧之後,設置鍵盤記錄器的人回收了記錄著你輸入過的所有字符的記錄器,然後在你和網上的 GG 或者 MM 糖分超標的曖昧聊天記錄之間找到了你的 QQ 號和密碼。叁天後,你的 QQ 就被盜了。

收到你和其他用戶對這種問題反饋的騰訊和其他公司不得不向自家用戶發出大量提醒,包括在網吧上網需要時刻檢查機箱背面插鍵盤 PS/2 的地方是否有什麼奇奇怪怪的東西,但投訴依然像雪片般飛來。這時候,有個工程師想到了壹個主意:鍵盤記錄器只能記錄鍵盤的輸入、但不能錄制屏幕的顯示,那我們設計壹個能繞過鍵盤記錄的「軟鍵盤」供用戶輸入,不就能繞過鍵盤記錄器了嗎?
這裡的「軟鍵盤」,實際上指的就是軟件實現的鍵盤。通過在電腦屏幕上顯示壹個鍵盤 UI 然後通過鼠標點擊這個鍵盤上的按鍵,來實現字符輸入功能。由於通過鼠標輸入文本繞過了鍵盤記錄器,因此包括 QQ 在內的許多軟件都提供了軟鍵盤功能。更進壹步,為了避免其他人拍照、錄像而不小心將通過軟密碼輸入的過程錄制下來,壹些軟件還會推薦在輸入密碼的時候,用鍵盤輸入幾位、再用軟鍵盤輸入幾位。
在電腦時代的「軟鍵盤」,其實就是現如今手機銀行 app 普遍采用的「安全鍵盤」的前身。更具體地說,現今手機銀行 app 會在用戶輸入密碼的時候,將系統或用戶指定的第叁方鍵盤替換成自己實現的壹個鍵盤。在中國金融業業界中有壹份編號為 JR/T 0068-2020 的標准,名為《網上銀行系統信息安全通用規范》。其中第 6.2.1.1 條中是這樣描述的:
j) 客戶端程序應提供客戶輸入支付敏感信息的即時防護功能,並對內存中的支付敏感信息進行保護,例如,采取逐字符加密、自定義軟鍵盤、防范鍵盤竊聽技術等措施。
還有 6.2.4.3 條:
a) 應使用即時加密等安全措施降低惡意軟件竊取用戶支付敏感信息的風險,使用軟鍵盤方式輸入密碼時,應采取自定義鍵盤等措施防范密碼被竊取。
另外,還有壹份 JR/T 0092—2019 標准中的 5.1.2.1 壹節也規定了金融業相關 app 需要在密碼輸入中提供「替換原文」、「逐字加密」、「自定義鍵盤」等措施來提供針對密碼的安全防護。
很明顯,這些描述對應的就是金融 app 中普遍使用的「安全鍵盤」。不過,你需要注意兩件事情:首先,這些標准編號開頭是 JR/T,其中的「T」代表這是壹份「推薦性標准」而非強制執行標准;其次,這份標准只規定了 app 的最終表現,但具體如何實現,各大銀行可以說是八仙過海,怎麼弄的都有。
位於善良守序陣營坐標的銀行 app,會利用 Custom Input Views 功能,用接近原生或第叁方鍵盤的體驗來實現;壹些絕對中立的銀行會繪制壹個假的輸入框,然後用戶點擊時顯示壹個 z 軸比較大的 UI,以此來「模擬」鍵盤的效果。
如果說這些好歹還算是「輸入什麼,框裡就有什麼」的正常人范圍的話,那麼銀聯雲閃付 app 可謂是混亂邪惡的典型代表:雖然雲閃付的密碼輸入框用的也是類似 SecurityField 的實現,甚至按住密碼輸入框還能顯示「粘貼」按鈕,但你真的從 1Password 復制密碼之後粘貼進去,會發現提示密碼錯誤,但是純用安全鍵盤輸入的密碼是沒有問題的——我猜測他們要麼是在邏輯層實際記錄安全鍵盤的輸入、UI 只是顯示壹個點點而已;要麼實際上每輸入壹個字符實際上在邏輯層被轉換成了另壹種 Unicode 字符,然後再放到輸入框裡……
但是,這壹頓操作猛如虎,它到底是真的有用,還是僅僅只是壹個人為設限的賽博安慰劑?
▍「安全鍵盤」正在鼓勵「不安全」
之所以前文盤了很久安全鍵盤的歷史,就是為了說明它其實是壹個歷史產物——在公共設備上網是那時候人們接觸互聯網的重要渠道。拋開鍵盤記錄器不談,如果那時候真有人有心,別說硬件層面了,就古早電腦那個「我家大門常打開」的勁兒,沒准你去什麼小網站中個毒,分分鍾你就在黑客面前裸奔。
但現在我們早就過了上網要專門跑去網吧的年代。個人電腦的普及,至少讓硬件被篡改的風險降低了許多;安全啟動、內存校驗等硬件上的措施,以及互聯網用戶對於網絡衛生知識的提升和黑客攻防知識的普及,也進壹步地降低了漏洞出現概率以及出現後的暴露窗口時間。更進壹步,人手壹台手機的年代,想探測記錄觸摸屏幕上的鍵盤輸入基本不太可能。硬件層面上,做到同樣的效果需要對屏幕的顯示或觸摸排線信號進行攔截,但真這麼做,(無痕地)改造手機幾乎是不可能的,這從根本上扼殺掉了鍵盤記錄器這類硬件的存在空間;雖然我們還是會被諸如 O.MG Cable 這類硬件教導「不要亂用公共場所的充電器」,但這類攻擊已經和「安全鍵盤」要解決的事情完全沒有關系了。
硬件探測不可能,那麼軟件呢?
隔壁「豆包手機被網銀封殺」事件已經證明了,即使是貴為系統層級的 app 也不可能輕易地通過屏幕錄制接口獲取屏幕輸入。如果用戶使用第叁方鍵盤呢?對於 iPhone 用戶而言,即使在正常輸入框中使用第叁方鍵盤,在密碼輸入框也會被強制換回 iOS 系統內置鍵盤。部分國產 Android 手機默認會開啟「密碼鍵盤」功能,即使用戶日常使用第叁方鍵盤,在激活 SecurityField 的時候也會被強制更換成系統的密碼鍵盤。雖然這個功能可以被主動關閉、轉而使用第叁方鍵盤來輸入密碼,但由於這個開關非常深,以至於你真的關閉它通常是會在「知道自己真的在做什麼」的前提下關閉的。
聰明的你在這時候壹定想到了通過陀螺儀檢測手機擺動方向和幅度來倒推鍵盤輸入,也的確有相關的學術論文。但是兄弟,普通手機輸入法是軟鍵盤,你自己實現的鍵盤難道就不是軟鍵盤了嗎?真的利用陀螺儀探測的話,人直接壹個 AOE 打擊,哪管你是哪來的軟鍵盤神仙。除非你真的實現前文推薦標准中提到的「安全隨機鍵盤」,即將所有按鍵全部打亂,而且是每次都打亂,這樣即使真的有壹個驚天地泣鬼神的惡意 app、本著你有這本事幹點啥不好的精神、突破系統重重安全封鎖、在後台持續監聽陀螺儀而且不拖慢手機、不被系統殺掉……也很難真正探測用戶輸入的內容了。
但真做到這壹步,手機銀行 app 們就能高枕無憂了嗎?
我們先來看看另壹個與密碼有關的策略的反例。在早先許多網站上,有壹種拾分復雜的密碼策略。在注冊或修改密碼的時候,密碼輸入框附近會有壹組檢查列表,例如密碼至少有壹個小寫字母、壹個大寫字母、壹個數字、壹個特殊符號、多少位……
看上去這個邏輯是說得通的:通過強制的復雜性要求來鼓勵用戶提高密碼的隨機性,進而令密碼更難被猜測。但在密碼世界,高隨機性和高熵值(這才是安全的密碼需要追求的)並不能直接劃上等號。和 Enigma 機後期限制密鑰組合反而減少了猜測難度壹樣,限制密碼的格式等於是在「可能的密碼組合」這個集合中,排除了「不符合的條件」。從數學上來說,減少的這批數量在總可能密碼數量的占比中相當可觀,對於使用暴力破解手段的攻擊者而言,這無異是在減輕暴力破解的負擔。

同時,額外的限制反而讓用戶設置的密碼「坍縮」到人更容易記憶的密碼組合,例如P@$$w0rd1。更危險的是,壹些用戶會刻意設置壹個「能符合所有地方要求的密碼」,來避免額外的密碼記憶。如此壹來,所謂的「復雜密碼條件」的設置,完全變成了壹個形同虛設的用戶體驗障礙。你可以在微軟研究室的這篇博客文章中,看到更詳細的解釋。
打亂的「安全鍵盤」實際上也是壹樣的道理:為了在被打亂的、無規律的鍵盤上提升那麼壹點輸入體驗,用戶更傾向於使用自己熟悉的密碼,以換取壹點點的效率和體驗提升。說白了,不管是復雜密碼策略,還是打亂的安全鍵盤,本質上是在與人的懶惰作斗爭。常年和拖延症打交道的朋友們都能明白,在壹些場合,面對壹些反人性的、甚至是不必要的限制下,人類通常的行為是繞過它,而非采用與限制設置者預期中的方案來解決。很不幸密碼的設置和輸入就是這樣壹個場合。
更進壹步地,壹些「安全鍵盤」功能的實現從系統底層禁止了密碼管理器的介入。簡單來說,包括 macOS、iOS 和 Android 在內的系統,支持從密碼管理器 app 中直接傳輸密碼到用戶名和密碼輸入框。這種系統層面的行為不僅可以有效避免物理和軟件層面的直接探測,陀螺儀分析猜測法對它也是束手無策(畢竟不需要直接輸入密碼)。而大多數「安全鍵盤」要麼魔改了鍵盤、輸入框,要麼就像雲閃付那樣替換用戶實際輸入字符,令用戶最終只能手動輸入密碼。最終的結果就是,不僅陀螺儀探測法有機會探測到輸入,在事實上采用「安全鍵盤」,實際上在鼓勵用戶使用更容易輸入、記憶的低熵密碼——相對於使用密碼生成器生成的高熵密碼而言,安全性反而是下降的。
▍方便從來不是安全的敵人,麻煩才是
早期的網絡安全中流傳著這樣壹句話:安全和方便總需要犧牲壹方。但在網上沖浪這麼長時間,我逐漸開始認為,這句所謂的「絕對真理」可能就是在放屁。
這句話出現在「密碼管理器」之前的密碼身上可能是正確的:人類是真的不擅長生成、記憶壹個高熵的密碼。別說高熵了——就連壹百多個在線賬戶、每個用壹個獨立的密碼這件事,人類也是極其不擅長的。
因此我們才會發明壹種叫做「密碼管理器」的東西。
從通行密鑰產生的當下回過頭去看密碼管理器這個東西,會發現理想情況下兩者在用戶體驗上並沒有什麼差別:都是密碼管理器生成壹組信息(可以是密碼、也可以是壹個密鑰對),然後存儲起來。當用戶需要使用的時候,只需要用某種方法確認是用戶本人在請求,然後直接完成授權。
而在底層,使用密碼管理器管理密碼和直接使用通行密鑰,理想情況下贰者唯壹的差別,也只是非對稱加密和對稱加密在安全性上的壹點點可能的潛在的妥協。在用戶使用習慣(為每個賬戶設置獨立的高熵值密碼)、密碼管理器(做好基礎密碼存儲與使用安全操作)、操作系統(提供安全和良好的填充接口)、傳輸鏈路(避免被中間人監聽)、密碼存儲設施(使用 Pufferfish2 或 bcrypt 等算法哈希)都稱得上良好的情況下,很難說高熵密碼會比安全密鑰差多少。可能唯壹有差別的地方是,對於通過「社工學」和釣魚詐騙模式來騙來偷襲的情況,你情急之下有可能會把密碼交給跨國騙子,而安全密鑰背後那個必須通過附近設備認證機制,以及非對稱加密的數學力量,可以有效避免腦袋壹熱給騙子交了密碼的問題。
但是我們都知道,真正的制約力量從來都不是標准規范,而是既成事實。密碼時代的在線網絡身份認證的整個流程已經完美體現了這句話:用戶、鏈路、服務商,這叁方都能 100% 按照理想情況部署安全設施的情況無異於叁日凌空:即使你我都是拾年資深 1Password 老用戶,時不時發生的「拖庫事件」都在提醒著我們,實際上有太多太多的網站還在使用明文密碼存儲到數據庫中;反過來,互聯網服務們即使真的能做好壹整套基建安全流程,也抵不住太多的用戶使用越來越簡單、越來越有規律的密碼。更糟糕的是,諸如「安全鍵盤」的措施,看似是對密碼偷窺和探測的壹種有效反制手段,但在事實上正在鼓勵用戶使用更不安全的低熵密碼。
說到底,密碼的問題從來不出在密碼本身,而是圍繞它出現的壹系列的延伸問題:如何管理密碼、如何加密密碼、如何傳輸密碼。但是密碼是壹個「管生不管養、管殺不管埋」的小妖精,它只負責認證,卻把其他壹系列復雜問題交給了使用密碼的人。而人的懶惰性會讓我們嘗試繞過這些問題,用壹個「差不多就得了」的方式來交差,再回過頭看又因為密碼而衍生出如此多的(人為)事故,最終人們又怪罪上了密碼。
從這個角度再回看通行密鑰和它背後的 FIDO,他們希望解決的問題就是,將互聯網認證過程中最復雜的問題都提供壹個標准化的解決方案。你不是嫌設密碼麻煩嗎?那我幫你設,打個臉卡就行。你不是嫌哈希密碼太麻煩嗎?那我有開源庫,我來幫你處理這壹套流程。你怕傳輸鏈路有問題?沒問題,數學先生的非對稱加密很可靠。
FIDO 期望通過各種標准設計,將所有背後麻煩的壹套東西封裝起來,降低使用這壹套流程的所有人的心智負擔,只要你按照標准走,那麼你就可以擁有世界上最安全、最好的認證流程體驗。唯壹的問題是,對於用了接近壹百年密碼的人類來說,想要壹夜之間所有網站都使用通行密鑰,那還是有點異想天開——畢竟,真正的制約力量從來都不是標准規范,而是既成事實。
除了密碼和安全密鑰,事實上也有很多東西都在「更方便」的前提下變得「更安全」。例如手機 NFC 支付錢包。從體驗上來說,Apple Pay 使用起來拾分絲滑,只需要雙擊側鍵、打個臉卡,然後往 POS 機壹刷,就能完成刷卡動作。但是在這背後也利用了非對稱加密的力量:在打臉卡的瞬間,你的手機會用安全芯片中的獨特密鑰簽發壹個授權證明,隨 NFC 發送給銀行;銀行再直接用公鑰確認授權來確認支付請求確實是來自你本人,完成授權交易。這顯然不僅要比通過實體卡更安全、更難盜刷,而且在事實上也更方便:出門你可以不帶銀行卡,但是你壹定會帶壹台手機。
從各種意義上來說,方便從來都不是安全的敵人,復雜才是;或者說,脫離人參與的安全策略,從來都不是壹個好的安全策略。當人的體驗和主觀能動性被安全流程設計排除在外的時候,這個安全策略注定會失敗。密碼如是,「安全鍵盤」也是,所有其他網絡安全流程亦是。
[加西網正招聘多名全職sales 待遇優]
還沒人說話啊,我想來說幾句
如果讓我提出壹個有關網絡安全的暴論,我會提出「安全鍵盤並不能守護你的賬戶安全」。這句話裡的「安全鍵盤」,泛指包括中國大陸在內的、部分國家或地區的手機銀行 app 中,普遍性地在密碼輸入框中使用的那套自己實現的觸屏軟鍵盤。
如果要讓我評價中國大陸金融機構近拾年以來最抽象的幾個網絡安全操作,它應該能排進前叁位。
▍安全鍵盤是怎麼來的?
讓我們把時間往回撥 30 年,來到個人電腦甚至還沒有完全普及的年代。早在 1997 年,招商銀行就推出了面向零售和個人的網上銀行服務「壹網通」。
這應該比大多數人想象的要早得多,畢竟彼時距離發出那封著名的「越過長城走向世界」郵件只過去了拾年,彼時的 QQ 也還叫做 OICQ。這個時候個人電腦普及率沒那麼高,基本上得是「萬元戶」可能才會有壹台家人共享的電腦。但包括即時通訊、網絡游戲和網上銀行在內的互聯網應用的興起,依然促成了壹波對互聯網需求的高峰,而彼時基礎設施和個人電腦普及就顯得像是個「遠水」,解不了人民群眾的「近火」,因此催生出了「網吧」,也就是提供公共互聯網接入的服務。

現在我們知道,在公共設備上登錄自己的互聯網賬戶有很多安全上需要注意的地方,例如用完電腦需要將登錄狀態移除(退出登錄),或者要使用瀏覽器的「訪客模式」或「隱身模式」等等。但有壹種原始但有效的「中間人攻擊」方式在彼時頗為流行,就是在鍵盤和計算機的 PS/2 接口中間,添加壹個鍵盤記錄器。
鍵盤記錄器的作用,就是記錄使用這台電腦的所有用戶的鍵盤操作記錄,你輸入什麼字符、按下什麼按鈕,它統統都記下來。而且,為了(在視覺上)隱蔽鍵盤記錄器,它通常都會被做得很小,以便隱蔽在電腦機箱後側。
設想壹下,如果你在網吧上網,選了壹台被人設置了這種鍵盤記錄器的電腦,然後在電腦上打開了 QQ,通過鍵盤輸入了你的 QQ 號和密碼。你離開網吧之後,設置鍵盤記錄器的人回收了記錄著你輸入過的所有字符的記錄器,然後在你和網上的 GG 或者 MM 糖分超標的曖昧聊天記錄之間找到了你的 QQ 號和密碼。叁天後,你的 QQ 就被盜了。

收到你和其他用戶對這種問題反饋的騰訊和其他公司不得不向自家用戶發出大量提醒,包括在網吧上網需要時刻檢查機箱背面插鍵盤 PS/2 的地方是否有什麼奇奇怪怪的東西,但投訴依然像雪片般飛來。這時候,有個工程師想到了壹個主意:鍵盤記錄器只能記錄鍵盤的輸入、但不能錄制屏幕的顯示,那我們設計壹個能繞過鍵盤記錄的「軟鍵盤」供用戶輸入,不就能繞過鍵盤記錄器了嗎?
這裡的「軟鍵盤」,實際上指的就是軟件實現的鍵盤。通過在電腦屏幕上顯示壹個鍵盤 UI 然後通過鼠標點擊這個鍵盤上的按鍵,來實現字符輸入功能。由於通過鼠標輸入文本繞過了鍵盤記錄器,因此包括 QQ 在內的許多軟件都提供了軟鍵盤功能。更進壹步,為了避免其他人拍照、錄像而不小心將通過軟密碼輸入的過程錄制下來,壹些軟件還會推薦在輸入密碼的時候,用鍵盤輸入幾位、再用軟鍵盤輸入幾位。
在電腦時代的「軟鍵盤」,其實就是現如今手機銀行 app 普遍采用的「安全鍵盤」的前身。更具體地說,現今手機銀行 app 會在用戶輸入密碼的時候,將系統或用戶指定的第叁方鍵盤替換成自己實現的壹個鍵盤。在中國金融業業界中有壹份編號為 JR/T 0068-2020 的標准,名為《網上銀行系統信息安全通用規范》。其中第 6.2.1.1 條中是這樣描述的:
j) 客戶端程序應提供客戶輸入支付敏感信息的即時防護功能,並對內存中的支付敏感信息進行保護,例如,采取逐字符加密、自定義軟鍵盤、防范鍵盤竊聽技術等措施。
還有 6.2.4.3 條:
a) 應使用即時加密等安全措施降低惡意軟件竊取用戶支付敏感信息的風險,使用軟鍵盤方式輸入密碼時,應采取自定義鍵盤等措施防范密碼被竊取。
另外,還有壹份 JR/T 0092—2019 標准中的 5.1.2.1 壹節也規定了金融業相關 app 需要在密碼輸入中提供「替換原文」、「逐字加密」、「自定義鍵盤」等措施來提供針對密碼的安全防護。
很明顯,這些描述對應的就是金融 app 中普遍使用的「安全鍵盤」。不過,你需要注意兩件事情:首先,這些標准編號開頭是 JR/T,其中的「T」代表這是壹份「推薦性標准」而非強制執行標准;其次,這份標准只規定了 app 的最終表現,但具體如何實現,各大銀行可以說是八仙過海,怎麼弄的都有。
位於善良守序陣營坐標的銀行 app,會利用 Custom Input Views 功能,用接近原生或第叁方鍵盤的體驗來實現;壹些絕對中立的銀行會繪制壹個假的輸入框,然後用戶點擊時顯示壹個 z 軸比較大的 UI,以此來「模擬」鍵盤的效果。
如果說這些好歹還算是「輸入什麼,框裡就有什麼」的正常人范圍的話,那麼銀聯雲閃付 app 可謂是混亂邪惡的典型代表:雖然雲閃付的密碼輸入框用的也是類似 SecurityField 的實現,甚至按住密碼輸入框還能顯示「粘貼」按鈕,但你真的從 1Password 復制密碼之後粘貼進去,會發現提示密碼錯誤,但是純用安全鍵盤輸入的密碼是沒有問題的——我猜測他們要麼是在邏輯層實際記錄安全鍵盤的輸入、UI 只是顯示壹個點點而已;要麼實際上每輸入壹個字符實際上在邏輯層被轉換成了另壹種 Unicode 字符,然後再放到輸入框裡……
但是,這壹頓操作猛如虎,它到底是真的有用,還是僅僅只是壹個人為設限的賽博安慰劑?
▍「安全鍵盤」正在鼓勵「不安全」
之所以前文盤了很久安全鍵盤的歷史,就是為了說明它其實是壹個歷史產物——在公共設備上網是那時候人們接觸互聯網的重要渠道。拋開鍵盤記錄器不談,如果那時候真有人有心,別說硬件層面了,就古早電腦那個「我家大門常打開」的勁兒,沒准你去什麼小網站中個毒,分分鍾你就在黑客面前裸奔。
但現在我們早就過了上網要專門跑去網吧的年代。個人電腦的普及,至少讓硬件被篡改的風險降低了許多;安全啟動、內存校驗等硬件上的措施,以及互聯網用戶對於網絡衛生知識的提升和黑客攻防知識的普及,也進壹步地降低了漏洞出現概率以及出現後的暴露窗口時間。更進壹步,人手壹台手機的年代,想探測記錄觸摸屏幕上的鍵盤輸入基本不太可能。硬件層面上,做到同樣的效果需要對屏幕的顯示或觸摸排線信號進行攔截,但真這麼做,(無痕地)改造手機幾乎是不可能的,這從根本上扼殺掉了鍵盤記錄器這類硬件的存在空間;雖然我們還是會被諸如 O.MG Cable 這類硬件教導「不要亂用公共場所的充電器」,但這類攻擊已經和「安全鍵盤」要解決的事情完全沒有關系了。
硬件探測不可能,那麼軟件呢?
隔壁「豆包手機被網銀封殺」事件已經證明了,即使是貴為系統層級的 app 也不可能輕易地通過屏幕錄制接口獲取屏幕輸入。如果用戶使用第叁方鍵盤呢?對於 iPhone 用戶而言,即使在正常輸入框中使用第叁方鍵盤,在密碼輸入框也會被強制換回 iOS 系統內置鍵盤。部分國產 Android 手機默認會開啟「密碼鍵盤」功能,即使用戶日常使用第叁方鍵盤,在激活 SecurityField 的時候也會被強制更換成系統的密碼鍵盤。雖然這個功能可以被主動關閉、轉而使用第叁方鍵盤來輸入密碼,但由於這個開關非常深,以至於你真的關閉它通常是會在「知道自己真的在做什麼」的前提下關閉的。
聰明的你在這時候壹定想到了通過陀螺儀檢測手機擺動方向和幅度來倒推鍵盤輸入,也的確有相關的學術論文。但是兄弟,普通手機輸入法是軟鍵盤,你自己實現的鍵盤難道就不是軟鍵盤了嗎?真的利用陀螺儀探測的話,人直接壹個 AOE 打擊,哪管你是哪來的軟鍵盤神仙。除非你真的實現前文推薦標准中提到的「安全隨機鍵盤」,即將所有按鍵全部打亂,而且是每次都打亂,這樣即使真的有壹個驚天地泣鬼神的惡意 app、本著你有這本事幹點啥不好的精神、突破系統重重安全封鎖、在後台持續監聽陀螺儀而且不拖慢手機、不被系統殺掉……也很難真正探測用戶輸入的內容了。
但真做到這壹步,手機銀行 app 們就能高枕無憂了嗎?
我們先來看看另壹個與密碼有關的策略的反例。在早先許多網站上,有壹種拾分復雜的密碼策略。在注冊或修改密碼的時候,密碼輸入框附近會有壹組檢查列表,例如密碼至少有壹個小寫字母、壹個大寫字母、壹個數字、壹個特殊符號、多少位……
看上去這個邏輯是說得通的:通過強制的復雜性要求來鼓勵用戶提高密碼的隨機性,進而令密碼更難被猜測。但在密碼世界,高隨機性和高熵值(這才是安全的密碼需要追求的)並不能直接劃上等號。和 Enigma 機後期限制密鑰組合反而減少了猜測難度壹樣,限制密碼的格式等於是在「可能的密碼組合」這個集合中,排除了「不符合的條件」。從數學上來說,減少的這批數量在總可能密碼數量的占比中相當可觀,對於使用暴力破解手段的攻擊者而言,這無異是在減輕暴力破解的負擔。

同時,額外的限制反而讓用戶設置的密碼「坍縮」到人更容易記憶的密碼組合,例如P@$$w0rd1。更危險的是,壹些用戶會刻意設置壹個「能符合所有地方要求的密碼」,來避免額外的密碼記憶。如此壹來,所謂的「復雜密碼條件」的設置,完全變成了壹個形同虛設的用戶體驗障礙。你可以在微軟研究室的這篇博客文章中,看到更詳細的解釋。
打亂的「安全鍵盤」實際上也是壹樣的道理:為了在被打亂的、無規律的鍵盤上提升那麼壹點輸入體驗,用戶更傾向於使用自己熟悉的密碼,以換取壹點點的效率和體驗提升。說白了,不管是復雜密碼策略,還是打亂的安全鍵盤,本質上是在與人的懶惰作斗爭。常年和拖延症打交道的朋友們都能明白,在壹些場合,面對壹些反人性的、甚至是不必要的限制下,人類通常的行為是繞過它,而非采用與限制設置者預期中的方案來解決。很不幸密碼的設置和輸入就是這樣壹個場合。
更進壹步地,壹些「安全鍵盤」功能的實現從系統底層禁止了密碼管理器的介入。簡單來說,包括 macOS、iOS 和 Android 在內的系統,支持從密碼管理器 app 中直接傳輸密碼到用戶名和密碼輸入框。這種系統層面的行為不僅可以有效避免物理和軟件層面的直接探測,陀螺儀分析猜測法對它也是束手無策(畢竟不需要直接輸入密碼)。而大多數「安全鍵盤」要麼魔改了鍵盤、輸入框,要麼就像雲閃付那樣替換用戶實際輸入字符,令用戶最終只能手動輸入密碼。最終的結果就是,不僅陀螺儀探測法有機會探測到輸入,在事實上采用「安全鍵盤」,實際上在鼓勵用戶使用更容易輸入、記憶的低熵密碼——相對於使用密碼生成器生成的高熵密碼而言,安全性反而是下降的。
▍方便從來不是安全的敵人,麻煩才是
早期的網絡安全中流傳著這樣壹句話:安全和方便總需要犧牲壹方。但在網上沖浪這麼長時間,我逐漸開始認為,這句所謂的「絕對真理」可能就是在放屁。
這句話出現在「密碼管理器」之前的密碼身上可能是正確的:人類是真的不擅長生成、記憶壹個高熵的密碼。別說高熵了——就連壹百多個在線賬戶、每個用壹個獨立的密碼這件事,人類也是極其不擅長的。
因此我們才會發明壹種叫做「密碼管理器」的東西。
從通行密鑰產生的當下回過頭去看密碼管理器這個東西,會發現理想情況下兩者在用戶體驗上並沒有什麼差別:都是密碼管理器生成壹組信息(可以是密碼、也可以是壹個密鑰對),然後存儲起來。當用戶需要使用的時候,只需要用某種方法確認是用戶本人在請求,然後直接完成授權。
而在底層,使用密碼管理器管理密碼和直接使用通行密鑰,理想情況下贰者唯壹的差別,也只是非對稱加密和對稱加密在安全性上的壹點點可能的潛在的妥協。在用戶使用習慣(為每個賬戶設置獨立的高熵值密碼)、密碼管理器(做好基礎密碼存儲與使用安全操作)、操作系統(提供安全和良好的填充接口)、傳輸鏈路(避免被中間人監聽)、密碼存儲設施(使用 Pufferfish2 或 bcrypt 等算法哈希)都稱得上良好的情況下,很難說高熵密碼會比安全密鑰差多少。可能唯壹有差別的地方是,對於通過「社工學」和釣魚詐騙模式來騙來偷襲的情況,你情急之下有可能會把密碼交給跨國騙子,而安全密鑰背後那個必須通過附近設備認證機制,以及非對稱加密的數學力量,可以有效避免腦袋壹熱給騙子交了密碼的問題。
但是我們都知道,真正的制約力量從來都不是標准規范,而是既成事實。密碼時代的在線網絡身份認證的整個流程已經完美體現了這句話:用戶、鏈路、服務商,這叁方都能 100% 按照理想情況部署安全設施的情況無異於叁日凌空:即使你我都是拾年資深 1Password 老用戶,時不時發生的「拖庫事件」都在提醒著我們,實際上有太多太多的網站還在使用明文密碼存儲到數據庫中;反過來,互聯網服務們即使真的能做好壹整套基建安全流程,也抵不住太多的用戶使用越來越簡單、越來越有規律的密碼。更糟糕的是,諸如「安全鍵盤」的措施,看似是對密碼偷窺和探測的壹種有效反制手段,但在事實上正在鼓勵用戶使用更不安全的低熵密碼。
說到底,密碼的問題從來不出在密碼本身,而是圍繞它出現的壹系列的延伸問題:如何管理密碼、如何加密密碼、如何傳輸密碼。但是密碼是壹個「管生不管養、管殺不管埋」的小妖精,它只負責認證,卻把其他壹系列復雜問題交給了使用密碼的人。而人的懶惰性會讓我們嘗試繞過這些問題,用壹個「差不多就得了」的方式來交差,再回過頭看又因為密碼而衍生出如此多的(人為)事故,最終人們又怪罪上了密碼。
從這個角度再回看通行密鑰和它背後的 FIDO,他們希望解決的問題就是,將互聯網認證過程中最復雜的問題都提供壹個標准化的解決方案。你不是嫌設密碼麻煩嗎?那我幫你設,打個臉卡就行。你不是嫌哈希密碼太麻煩嗎?那我有開源庫,我來幫你處理這壹套流程。你怕傳輸鏈路有問題?沒問題,數學先生的非對稱加密很可靠。
FIDO 期望通過各種標准設計,將所有背後麻煩的壹套東西封裝起來,降低使用這壹套流程的所有人的心智負擔,只要你按照標准走,那麼你就可以擁有世界上最安全、最好的認證流程體驗。唯壹的問題是,對於用了接近壹百年密碼的人類來說,想要壹夜之間所有網站都使用通行密鑰,那還是有點異想天開——畢竟,真正的制約力量從來都不是標准規范,而是既成事實。
除了密碼和安全密鑰,事實上也有很多東西都在「更方便」的前提下變得「更安全」。例如手機 NFC 支付錢包。從體驗上來說,Apple Pay 使用起來拾分絲滑,只需要雙擊側鍵、打個臉卡,然後往 POS 機壹刷,就能完成刷卡動作。但是在這背後也利用了非對稱加密的力量:在打臉卡的瞬間,你的手機會用安全芯片中的獨特密鑰簽發壹個授權證明,隨 NFC 發送給銀行;銀行再直接用公鑰確認授權來確認支付請求確實是來自你本人,完成授權交易。這顯然不僅要比通過實體卡更安全、更難盜刷,而且在事實上也更方便:出門你可以不帶銀行卡,但是你壹定會帶壹台手機。
從各種意義上來說,方便從來都不是安全的敵人,復雜才是;或者說,脫離人參與的安全策略,從來都不是壹個好的安全策略。當人的體驗和主觀能動性被安全流程設計排除在外的時候,這個安全策略注定會失敗。密碼如是,「安全鍵盤」也是,所有其他網絡安全流程亦是。
[加西網正招聘多名全職sales 待遇優]
| 分享: |
| 注: |
推薦:
為什麼銀行 App 的安全鍵盤並不能守護你的賬戶安全?