离线密钥生成:气隙安全指南
在联网计算机上生成加密货币密钥会使其暴露于恶意软件、键盘记录器、屏幕捕获、剪贴板劫持和远程外传风险之下。对于计划长期冷存储的高价值钱包,黄金标准是气隙离线生成:在一台从未连接且未来也永不连接任何网络的设备上创建密钥。
本指南提供一套完整的离线密钥生成分步流程,涵盖硬件选择、操作系统设置、密钥生成、校验与安全清理。
为什么气隙生成很重要
威胁模型
- RAM — 系统中任意运行进程都可能访问。
- 磁盘 — 可能被操作系统虚拟内存机制交换到磁盘。
- 剪贴板 — 一旦复制粘贴,所有应用都可访问。
- 网络 — 如果机器已联网,恶意软件可瞬间外传密钥。
- 显示器 — 屏幕捕获恶意软件或旁观窃视。
- 键盘 — 键盘记录器(软件或硬件)会记录所有输入。
气隙计算机可彻底消除网络这一攻击向量。配合正确的操作安全措施,还能显著降低甚至消除其他向量。
谁需要气隙生成?
- 任何存储金额超过可承受损失范围的人。
- 长期“深冷”存储(数年或数十年)。
- 机构托管与资金库管理。
- 任何希望达到最高可实现安全标准的人。
对于余额较小的日常支付钱包,硬件钱包在不增加气隙流程复杂度的情况下已能提供足够安全性。
硬件选择
选项 1:专用笔记本电脑(推荐)
购买一台新的或恢复出厂设置的笔记本,仅用于密钥生成且永不联网:
- 移除或禁用所有网络硬件。 如可行,物理移除 Wi-Fi 卡和蓝牙模块;至少在 BIOS/UEFI 固件中禁用它们。
- 禁用摄像头和麦克风。 物理移除,或进行遮挡/断开连接。
- 使用不带蜂窝调制解调器的笔记本。
- 预算方案:二手 ThinkPad(X230、T440)— 价格低、Linux 支持好、易于物理改造。
选项 2:Raspberry Pi
Raspberry Pi(Model 3B+ 或 4)是低成本单板电脑;若使用无无线模块的 Pi Zero 或禁用网络,也可实现无 Wi-Fi:
- 从 microSD 卡启动。
- 除 SD 卡外无持久化存储(事后可销毁)。
- 使用合适型号可避免无线硬件。
- 成本更低(含配件约 $35–$75)。
选项 3:在现有硬件上使用 Live USB
在现有电脑上禁用所有网络后,启动专用 Linux live USB:
- live 环境完全在 RAM 中运行。
- 不会向内部硬盘写入数据(若配置正确)。
- 关机后 RAM 会被清空。
- 风险: 现有电脑可能存在跨系统启动持续存在的硬件级入侵(固件 rootkit、硬件键盘记录器)。专用设备可消除此风险。
操作系统设置
Tails OS(推荐)
Tails 是注重隐私、设计为不留痕迹的 Linux 发行版:
- 从 USB 启动并完全在 RAM 中运行。
- 默认所有网络经 Tor 路由,但在气隙使用中你不会启用任何网络。
- 为失忆式使用而设计:除非显式配置,否则无持久状态。
- 内置常用工具,可运行 Python 密钥生成脚本。
设置步骤:
- 在常规电脑上下载 Tails ISO。
- 使用 Tails 签名密钥验证 ISO 签名。
- 使用 Tails Installer、Etcher 或
dd将 ISO 写入 USB。 - 用该 USB 启动气隙电脑。
- 在 Tails Greeter 中,不要配置任何网络连接。
- 验证没有活动网络接口:
ip link show应显示所有接口为 DOWN。
Ubuntu Live USB(替代方案)
如果 Tails 不适用:
- 下载 Ubuntu ISO 并验证其校验和。
- 写入 USB。
- 在 BIOS 中禁用网络后启动。
- 在 Ubuntu 安装器中选择“Try Ubuntu”(不要安装)。
- 验证无网络连接。
验证气隙完整性
启动后,验证气隙状态:
# Check that no network interfaces are UP
ip link show
# Verify no IP addresses assigned
ip addr show
# Attempt to reach the internet (should fail)
ping -c 1 8.8.8.8
# Check for Wi-Fi and Bluetooth
rfkill list all
所有网络接口都应为 DOWN,不应分配任何 IP 地址,且 ping 应失败。若任一测试显示可能连通,请先停止并排查后再继续。
密钥生成流程
方法 1:离线使用 SafeSeed 工具
SafeSeed 的工具是客户端 Web 应用,即使无网络也可在浏览器运行。
SafeSeed Seed Phrase Generator 和 Paper Wallet Creator 可保存为离线使用。离线前,先保存完整网页(Ctrl+S / Cmd+S),通过 USB 传输到气隙电脑,并在浏览器中打开。所有加密运算都在本地 JavaScript 中执行,不需要服务器通信。
步骤:
- 在常规(联网)电脑上打开 SafeSeed 工具页面。
- 将完整网页保存到 USB 驱动器。
- 验证文件完整性(如有可用,比较校验和)。
- 将 USB 驱动器转移到气隙电脑。
- 在浏览器中打开保存的 HTML 文件。
- 生成助记词。
- 手写到纸上(不要在气隙机器上以数字形式保存)。
- 重新输入助记词并确认生成相同地址,以完成校验。
方法 2:使用 Ian Coleman 的 BIP-39 工具
Ian Coleman BIP-39 工具 是广泛用于离线密钥生成的开源独立 HTML 页面:
- 在联网电脑上从 GitHub 下载最新发行版。
- 验证 PGP 签名。
- 通过 USB 传输到气隙电脑。
- 在浏览器中打开
bip39-standalone.html。 - 生成或输入助记词。
- 选择币种和派生路径。
- 记录助记词和地址。
方法 3:基于骰子的熵
若要最大程度不信任所有软件 RNG,可用骰子手动生成熵:
- 使用赌场级骰子(边缘锋利的精密骰,而非圆角消费级骰子)。
- 单颗骰子掷 99 次可得到 256 位熵(每次约提供 2.585 位;99 次约 255.9 位)。
- 将掷骰结果转换为二进制字符串。
- 使用 BIP-39 工具(离线)将二进制熵转换为助记词。
- 或掷 50 次得到 128 位熵(12 词短语)。
骰子转换方法:
- Base-6 方法: 记录每次点数(1-6),将序列转换为二进制。
- 二进制掷币法: 抛硬币 256 次(正面=1,反面=0)。
- 骰子转二进制: 掷骰;1-3 记 0,4-6 记 1。重复 256 次。
第三种方法浪费最多熵,但最简单。关于熵质量的详细说明,参见我们的熵与随机性指南。
方法 4:命令行(Python)
对于熟悉命令行的用户,可用最小化 Python 脚本生成 BIP-39 助记词:
import hashlib
import os
# BIP-39 word list must be loaded from a file
with open('english.txt', 'r') as f:
wordlist = [w.strip() for w in f.readlines()]
# Generate 256 bits of entropy
entropy = os.urandom(32) # Uses OS CSPRNG
# Compute checksum
h = hashlib.sha256(entropy).digest()
checksum_bits = bin(h[0])[2:].zfill(8) # First 8 bits for 256-bit entropy
# Convert entropy to binary string
entropy_bits = bin(int.from_bytes(entropy, 'big'))[2:].zfill(256)
all_bits = entropy_bits + checksum_bits
# Split into 11-bit groups and map to words
words = []
for i in range(0, len(all_bits), 11):
index = int(all_bits[i:i+11], 2)
words.append(wordlist[index])
print(' '.join(words))
重要: 这是用于教学的简化示例。生产环境请使用经过充分审计的库,例如 python-mnemonic 中的 mnemonic。
校验
生成助记词后,在存入资金前务必校验:
1. 校验和验证
将助记词重新输入生成工具。若工具无报错并接受该短语,则校验和有效。
2. 地址派生验证
为目标加密货币和派生路径派生前几个地址并记录。随后在另一台设备上(或重启气隙机器后)重新输入助记词,确认生成地址一致。
3. 跨工具验证
如可行,在两个不同工具中验证助记词(例如 SafeSeed 生成器与 Ian Coleman 工具)。相同助记词、派生路径与口令下,两者应生成一致地址。
4. 小额交易测试
在存入较大价值前:
- 向第一个接收地址发送一小笔加密货币。
- 在另一台设备上用助记词恢复钱包。
- 确认能看到资金,并且可以签名一笔交易将其转回。
这可验证整条链路:熵生成、助记词编码、种子派生、密钥派生、地址生成均正确。
记录助记词
纸质
- 用防褪色墨水笔在无酸纸上清晰书写。
- 为每个词编号(1-24)。
- 不要在会留下压痕的表面书写(例如垫着多页纸写字导致下页显痕)。
- 存放于防火防水容器中。
金属
- 冲压或雕刻到不锈钢板上。
- 空间受限时可先测试前四字母缩写方案。
- 冲压后立即验证可读性。
- 金属可耐火耐水,推荐用于长期存储。
不要这样做
- 不要拍摄助记词照片。
- 不要在气隙机器上输入到任何文件。
- 不要打印(打印机有存储与网络能力)。
- 不要保存到 USB 驱动器。
安全清理
完成助记词生成和记录后,清除气隙设备上的所有痕迹:
1. 清空剪贴板与屏幕
- 关闭所有应用程序。
- 清空剪贴板(Ctrl+C 一段无关文本)。
2. 关机
- 关闭电脑电源。断电后 RAM 内容会在数秒到数分钟内衰减。
- 为进一步确保,至少保持关机 15 分钟(室温下 DRAM 保留时间更短,低温下更长)。
3. 存储介质
- 若使用 Tails live USB,不会写盘。该 USB 可重复使用。
- 若使用非失忆系统的 Raspberry Pi SD 卡,请安全擦除 SD 卡(
dd if=/dev/urandom of=/dev/sdX bs=1M)或物理销毁。 - 若误将内容保存到气隙机器内部硬盘,请进行安全擦除。
4. USB 驱动器
- 如果你按说明操作,用于传输生成工具的 USB 不应包含任何生成出的密钥材料。
- 验证 USB 仅含原始工具文件,无其他内容。
- 为最高安全性,使用后擦除 USB。
进阶:在气隙环境签名交易
气隙电脑不仅适用于密钥生成,也适用于持续的交易签名:
工作流
- 在线(只读监控)机器: 构造未签名交易。
- 传输: 通过 USB 或二维码将未签名交易转移到气隙机器。
- 气隙机器: 使用私钥签名交易。
- 传输: 将已签名交易传回在线机器。
- 在线机器: 向网络广播已签名交易。
二维码传输(推荐)
使用二维码可完全避免 USB,从而关闭一个潜在恶意软件向量(USB 设备可能携带自动执行载荷):
- 在在线机器上将未签名交易显示为二维码。
- 用连接到气隙机器的摄像头扫描该二维码。
- 对交易进行签名。
- 在气隙机器上将已签名交易显示为二维码。
- 由在线机器扫描。
支持基于二维码的气隙签名钱包包括 Coldcard、Keystone 和 Sparrow Wallet(配合摄像头设置)。
PSBT(Partially Signed Bitcoin Transactions)
Bitcoin 的 PSBT 格式(BIP-174)正是为气隙流程设计。PSBT 包含签名交易所需全部信息,无需签名设备具备任何区块链数据。
多重签名气隙方案
为获得最高安全性,可将气隙密钥生成与多重签名结合:
- 在三次独立气隙会话中生成三组独立助记词(理想情况下使用不同设备)。
- 设置一个 2-of-3 多重签名钱包。
- 将每组助记词存放在不同物理地点。
- 交易需在三台气隙设备中的两台上签名。
这可防护:
- 单一设备被攻破(仅暴露一把密钥)。
- 单一助记词丢失(剩余两把钥仍可签名)。
- 单一存储地点被攻破。
常见错误
错误 1:使用“干净但曾联网”的电脑
对曾联网电脑执行擦除并重装系统并不足够。固件级恶意软件(UEFI rootkit)可在重装后存活。专用、从未联网设备可消除此风险。
错误 2:让气隙机器“临时连一下网”
任何网络连接,即使很短暂,也会破坏气隙。恶意软件可在毫秒级外传私钥。一旦连接,该设备就不能再被视为气隙。
错误 3:使用打印机
打印机通常有自身存储(用于排队打印任务),且许多现代打印机具备 Wi-Fi 或蓝牙。打印助记词可能将其保存在打印机内存并潜在传输。请改为手写。
错误 4:以数字方式传输助记词
除在气隙屏幕短暂显示的瞬间外,助记词不应以数字形式存在。不要复制到 USB、保存为文件,或编码成二维码传输。应直接写在纸上或冲压到金属上。
错误 5:未验证生成工具
传输到气隙机器的工具在使用前必须验证。检查文件哈希、PGP 签名,或至少比对文件大小。被篡改工具可能生成攻击者已知的确定性密钥。
常见问题(FAQ)
为什么不直接用硬件钱包?
硬件钱包很优秀,对大多数用户已足够。对于超高价值存储,气隙生成能提供额外安全边际,因为它消除了对硬件钱包随机数生成器和固件的信任。气隙方案还允许用多个独立工具交叉验证,而硬件钱包是单点信任。
整个气隙流程需要多久?
首次配置通常需 2-4 小时,包括系统准备、验证、密钥生成和清理。后续在已准备好的设备上生成通常只需 30-60 分钟。
我可以用智能手机作为气隙设备吗?
智能手机很难完全气隙,因为其有多种无线电模块(蜂窝、Wi-Fi、蓝牙、NFC),并不总能物理禁用。移除网络硬件的笔记本更可信。某些专用设备(如 Keystone wallet)专门设计为气隙签名设备。
每个钱包都需要气隙生成吗?
不需要。对于小额日常支付钱包,可信硬件钱包甚至安全配置良好的软件钱包就足够。气隙生成更推荐用于长期冷存储的重要价值资产。
如何更新气隙机器上的软件?
不更新。气隙机器应长期运行同一软件。若确需更新版本,应在在线机器下载并验证,再经 USB 传输,并在气隙机器上使用前再次校验校验和。
如果气隙机器的随机数生成器坏了怎么办?
这正是基于骰子熵作为兜底方案的意义。如果你不信任所有硬件和软件 RNG,可用骰子手动生成熵并输入 BIP-39 工具。最终助记词的安全性仅取决于你的掷骰质量,而非任何电子组件。
恶意软件能跨越气隙吗?
理论上,复杂的国家级攻击者已演示过通过电磁辐射、声学信号或 LED 闪烁模式跨越气隙的技术。实践中,这类攻击需要物理近距、专业设备,远超普通加密盗窃者能力。对绝大多数用户而言,正确维护的气隙在现实中几乎不可攻破。