为何银行App的安全键盘不能守护你的账户安全?少数派

1/3/2026

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、本着你有这本事干点啥不好的精神、突破系统重重安全封锁、在后台持续监听陀螺仪而且不拖慢手机、不被系统杀掉……也很难真正探测用户输入的内容了。

Scroll for more