跳转到正文
buybitcoinsmart

术语表 /开发者参考

URI 二维码

URI 二维码是什么?
URI 二维码是编码 bitcoin: URI 的方形黑白图案,相机可以读取其中的地址和金额,免去手动输入。

扫描免去了手动输入,而差错正是出在输入环节。以大写字母书写的 bech32 地址适用二维码的字母数字模式,BIP173 指出该模式比字节模式紧凑约45%,因此大写的二维码模块更少,扫描也更可靠。二维码无法做到的是,告诉您其中的地址是否属于您以为的那个人。

运作方式

二维码是一种通用数据容器,标准为 ISO/IEC 18004,比特币只是在其中放入一段文本形式的 URI。

该格式提供多种编码模式。字母数字模式涵盖45个字符的字符集:数字、大写字母、空格和九个标点符号,每两个字符占11位。字节模式可容纳任何内容,但每个字符占用完整的8位。字母数字字符集不含小写字母,所以钱包常把整段字符串以大写形式呈现,如 BITCOIN:BC1Q...。URI 方案不区分大小写,bech32 地址只要不混用大小写,两种写法都有效,因此改用大写是安全的,还能缩小方格。

以1或3开头的 Base58 地址没有这个选项,因为其字符集区分大小写,改动一个字母就会改变地址。这是 bech32 一个细小而具体的优势,却很少被提及。

纠错级别在生成时选定。四个级别大约可恢复受损二维码的7%、15%、25%和30%。暴露在风雨中的印刷贴纸适合采用最高级别,屏幕则无此必要。容量在这里从来不是限制因素:最大版本的二维码可容纳4,296个字母数字字符,而典型的比特币 URI 长度在50至120个字符之间。

在哪里会遇到它

每天有四种场景会生成比特币二维码,其可信程度并不相同。

交易所的充币页面会为其希望您充币的地址生成一个二维码。硬件钱包自带的屏幕会为其内部派生的地址生成一个二维码,这是唯一能核实来源的版本。商户结账页面会印出一个统一二维码,同时包含链上地址和闪电网络发票。比特币 ATM 在购买时显示一个二维码,通常附有倒计时。

第二种场景与其余几种的区别,正是硬件钱包安全论证的全部所在。控制了您屏幕的恶意软件可以重绘二维码,却无法重绘 Trezor 或 Ledger 屏幕上的那一个。请在设备上生成二维码,再核对设备同时印在其下方的字符。

实体二维码更容易成为攻击目标。FBI 的 Internet Crime Complaint Center 于2022年1月18日发布公共服务公告,提醒犯罪分子把自己的二维码贴纸贴在合法二维码之上,这种手法至今仍在。对于公共场所纸上印刷的任何二维码,在目标地址与您另行预期的信息相符之前,都应视为未经核实。

还有一种无害的用途值得了解。物理隔离的签名设备通过动态的二维码序列(每秒循环数帧)传入和传出部分签名的交易,因为相机和屏幕构成的数据通道没有线缆,也没有可供攻击的 USB 协议栈。

URI 二维码 vs 地址

地址是文本,URI 二维码则是一段更长文本的图像,其中碰巧包含一个地址。扫描只含纯地址的二维码,钱包得到的只有收款目标,金额仍需手动输入。扫描含完整 URI 的二维码,则会自动填入金额、标签,有时还有闪电网络发票。两者在肉眼看来完全一样,因此,扫描后显示已预填总额的钱包,是在向您说明它实际读到了什么。

请勿混淆

常见问题

为什么有些比特币二维码全部使用大写字母?

为了让二维码更小。二维码的字母数字模式没有小写字母,BIP173 指出该模式比字节模式紧凑约45%,因此把 bech32 地址和 bitcoin:方案改为大写,会得到更稀疏的方格,扫描也更可靠。

扫描二维码比复制地址更安全吗?

它避开了剪贴板恶意软件,但带来了自身的风险。印刷的二维码可能被欺诈性贴纸覆盖,FBI 曾在2022年1月对此发出警告。无论哪种方式,都请在硬件钱包的屏幕上核实目标地址。

接着阅读

相关术语

开发者参考中的更多术语

阅读本页英文版