你的加密钱包会不会被破解?

话李话外
2024-07-24 19:01:20
收藏

如果使用过加密钱包,那么你肯定对助记词不会陌生,助记词是明文私钥的另一种表现形式,最早是由 BIP39(诞生2013年、比特币第 39 号改进提案)提案提出。在 BIP-39 标准中,每对密钥都对应一组独特的助记词,其目的是为了帮助用户记忆和抄写复杂的私钥。

而除了 BIP39(通过定义助记词让种子的备份更友好)概念外,其实还有 BIP32(为了避免管理一堆私钥的麻烦提出的分层推导方案)、BIP44(给 BIP32 的分层路径定义规范)等概念。比如我们熟悉的 MetaMask(小狐狸钱包)就是使用 BIP44 标准进行密钥派生,使用户能够使用多账户钱包,且每个账户都有自己的一对独立的公钥(即你用于接收/转账的公开的钱包地址)和私钥,但这些账户(子账户)又都是源自同一套助记词。MetaMask 的多地址涉及到一个 HD(分层确定性)功能,这个我们后文会介绍。至于关于 BIP 方面的概念这里我们不做过多的介绍,感兴趣的小伙伴可以自行 Google 查找相关的资料。

接下来我们仅基于 BIP39 做些简单的介绍。你在创建钱包时生成的 12 个助记词(或24个)就等于对应钱包的所有资产,如果 12 个助记词丢失,那么也就意味着你加密钱包中的所有资产将不再是你自己的。换句话说就是,谁拥有助记词,谁就等于拥有了该加密钱包的所有资产。

另外,因为目前的大部分主流钱包都是兼容 BIP 标准的,所以一套助记词,几乎可以导入任意的加密钱包进行使用,比如同一套助记词你既可以导入 MetaMask 使用、也可以导入 Rabby Wallet 使用、也可以导入 OKX Web3 钱包使用……等等,总之,钱包仅仅是一个工具,它本身并不保存你的加密资产,你钱包中(严格来讲是你的助记词)的加密资产是保存在链上的。

但这里需要提醒的一点是,目前网上有不少假冒的钱包要注意一下、同时也不要随时使用那些不知名或者口碑不好的加密钱包,以免钱包开发人员监守自盗。

我们继续说回助记词的问题。加密钱包的助记词是从 2048 个英语单词的特定列表(BIP39 单词表)中提取出来的,也就是说,任何工具或钱包 DApp 生成的助记词,都包含在这 2048 个单词里面。如下图所示。

而且,为了确保助记词的唯一性,BIP39 单词表里面是不存在前 4 个字母一样的情况的。举个例子,apple 和 appl 因为前 4 位相同,所以这两个词就不被包含在这 2048 个单词列表中。也就是说,如果你知道单词的前 4 个字母,那么通过 BIP39 单词表就可以查找并知道对应单词的剩余部分,这也是为什么,有时候你通过某些钱包应用导入助记词的时候,输入前 4 个字母后,软件就会替你完成自动输入。如下图所示。

这时候,也许有些新伙伴就会产生一个疑问,既然助记词是从固定的 2048 个单词里面随机挑选出 12 个单词组成的,那么加密钱包岂不是很容易被破解吗?或者随便从里面挑选出 12 个单词试着导入一下,是不是就可以进入一个存放加密资产的钱包呢?

1.关于随便输入 12 个单词就可以进入一个钱包的问题

助记词的生成顺序是按照一定算法而来的,所以你没必要担心别人随便输入 12 个单词就可能会进入你的钱包。生成助记词的算法的大致过程如下:

2.关于加密钱包是否会被破解的问题

从概率的角度来考虑这个问题的话,确实是有可能的。

但如果从实际操作的角度来考虑的话,这种概率发生的可能性是极低的。这里我们可以做个计算列表先看一下(如下图所示):

缺少 1 个单词、破解的话有 2048 种可能性 (2048¹)

缺少 2 个单词、有 4,194,304 种可能性 (2048²)

缺少 3 个单词、有 8,589,934,592 种可能性 (2048³)

缺少 4 个单词、有 17,592,186,044,416 种可能性 (2048⁴)

假如你想破解加密钱包,并且也购买了目前最强大的 CPU — — Intel Core i9–14900K,该 CPU 每秒可以处理多达 5760 亿次的计算。如下图所示(我直接问的ChatGPT)。

那么理论上,借助该 CPU 想要破解全部 12 个助记词组合需要进行 9.45 x 10²⁷ 次计算。如下图所示。

那么对应需要计算多少年呢?我们可以继续借助 ChatGPT 计算一下。如下图所示。

通过上面的计算结果来看,如果想利用上面的 CPU 算力去完整破解 2048 个助记词需要 299,700,000,000,000,000,000 年,这个看起来几乎是不可能的。

但如果只是缺失了 12 个助记词中的几位,那么破解是有可能的,具体破解计算需要付出的时间和成本,感兴趣的小伙伴可以按照上面的方式去问一下 ChatGPT 即可。而且,目前其实也已经有一些可以用来破解或恢复助记词的工具可以使用,比如话李话外之前文章中已经给大家介绍过的 Seed Saviour(适用于恢复/破解丢失 1 个单词的情况)、Btcrecover(适用于恢复/破解丢失 2 个或以上单词的情况)。如下图所示。

综合来看,目前加密钱包资产丢失的主要原因可能并不在于被破解的问题,而主要是因为钱包持有人使用或备份不当所造成的,比如将助记词随便存放到联网的手机/电脑中或在线云盘里、随便把助记词发给别人、下载了假冒的钱包软件、授权了有问题的钓鱼网站、等等。

3.选择12个助记词还是24个助记词?

12 个的助记词使我们最常见的,其实还有 24 个的助记词。从技术角度讲,12 个单词就相当于是 128 位、24 个单词就相当于是 256 位。目前,我们常见的诸如 MetaMask(软件钱包)、OneKey(硬件钱包)这样的钱包默认生成的助记词就是 12 个,而 Ledger(硬件钱包)、Trezor(硬件钱包)这样的钱包则默认生成的助记词是 24 个。

12 个助记词和 24 个助记词生成的钱包没有什么区别,它们的主要区别是安全级别方面的,也就是说,12 个助记词可以提供 128 位的安全级别,而 24 个助记词可以提供 256 位的安全级别。

但实际上,128 位的安全级别已经足够高了,通过上面的计算我们也已经有所了解,所以,选择12个助记词还是24个助记词,这个就看你自己的考虑和偏好吧,对于普通个人而言,完全没必要为了这个原因去生成 24 位的助记词,因为记忆和管理太多的单词反而会比较困难和麻烦。

4.钱包主要分为哪几类?

平时我们听到比较多的说法就是所谓的各种热钱包、冷钱包、硬件钱包、纸钱包等等,但如果按钱包自身的特性进行划分的话,现在常见的钱包类型主要包括 EOA 钱包、MPC 钱包 和 AA 钱包几种。其实这个话题话李话外之前的文章也有过相关的梳理,这里我们可以简单再来回顾一下:

1)EOA钱包

EOA钱包指助记词钱包。提到助记词,有些人可能也会提到私钥的问题,简单来说,私钥就 = 助记词,私钥通常由一长串数字和字母组成,这个是不便于我们(人类)进行记忆的,所以后来使用助记词来“替代”了私钥,我们只要简单记住或备份好12/24个英语单词(助记词)即可。

而且,助记词和私钥之间也是可以利用一些在线转换工具进行互相转换的,如下图所示。但这里需要提醒的是,为了安全起见,不要轻易使用一些不知名的工具和网站去生成助记词或进行转换操作,以免发生助记词泄露的问题。

2)MPC钱包

MPC钱包指无私钥钱包。即私钥会进行分片处理,平台会保存1份、用户设备保存1份、用户云盘(比如iCloud)备份1份。

现在很多人在用的 Binance Web3 钱包、OKX Web3 钱包都是这种。当然,他们也同时支持你导入已有的助记词创建EOA钱包。

3)AA钱包

AA钱包指智能合约钱包、也叫账户抽象(Account Abstract)钱包。这种钱包没有私钥,不能单独创建,由代码逻辑控制,且需要建立在现有钱包基础上进行创建(生成)。也就是说,每个无私钥钱包或私钥钱包仅能创建一个 AA 智能合约账户,而助记词钱包下的每个账户(比如同一套助记词下的 MetaMask 可以生成 N 个不同的钱包账户地址),则可以创建对应的 AA 智能合约账户,如钱包 A — 账户 01,对应的就是钱包 A — Smart 01。

智能合约钱包一般会有一些特殊的功能,比如具有批量交易、代付 Gas、密钥恢复等更多自定义和扩展功能,我们上面提到的 Binance Web3 钱包、OKX Web3 钱包同时也支持 AA 钱包的创建。

但这种钱包模式目前阶段市场的采用率还相对比较低,很多链(包括对应的DApp)暂时还不支持。所以,有时候你在使用 AA 钱包进行 Swap 操作的时候可能会看到“你当前连接的免私钥钱包暂不支持XXX链”这样的提示。

5.多签钱包方面的问题

除了上面提到的之外,涉及到加密钱包的时候,你也许经常会听到多重签名(Multi-Signature)的这个概念。多重签名主要是指通过多个不同的私钥来授权一笔交易,而不仅仅是单个私钥,这个主要是为了增加了交易的安全性。

一般情况下,多重签名主要涉及到几个问题:

1)多个私钥的问题

即多签钱包通常包含多个私钥,每个私钥都与一个特定的授权者相关联。

2)签名阈值的问题

即在多签钱包中,可以定义一个签名阈值,表示必须有多少个授权者的签名才能执行交易。它的工作机制涉及多个密钥和 M-of-N 签名的概念。在 M-of-N 设置中,只有 N 个密钥中的 M 个对交易进行了签名,才能授权该交易。例如,在 2-of-3 多签钱包中,存在三个私钥,至少需要两个私钥(授权者)才能执行交易。

3)多签交易的问题

即要执行一笔交易,必须满足签名阈值,即得到足够数量的授权者签名,以便交易被广播并确认。

但在具体的应用方面,多签这种方式主要是企业/机构方面可能会使用的比较多,个人当然也可以用,比如你可以把一个私钥保存在自己的手机里,另一个私钥保存在自己的电脑里,交易的时候需要两个私钥一起使用才能转移资金。

而关于多签钱包的创建和使用例子,话李话外之前的文章已经有过相关的介绍,这里我们就不再赘述了,感兴趣的小伙伴可以回看历史文章。如下图所示。

6.比特币钱包方面的问题

这方面的问题我之前在群里分享过,这里我们简单再做个回顾:

1)从编码角度来讲

比特币钱包地址的私钥(注意是私钥)可以分为多种格式,比如 WIF、WIFC、HEX,、B64,、MINI、BIP38 等等,也就是一套私钥可以基于不同的编码方式生成(不同格式私钥也可以相互进行编码转换的)。这里就以 WIF 和 WIFC 为例:

WIF 是 Wallet Import Format 的缩写,是私钥的一种编码方式。该方式又可以分为压缩和非压缩两种形式,压缩即 WIF compressed(简写为WIFC),非压缩 WIF uncompressed(简写为WIF)。

他们的区别也只是技术角度的,比如:

WIF 编码指的是,给私钥前面加上 0x80 这个前缀,再对这个新生成的值继续做两次 sha256 的操作,再将这个计算结果的前四个 4 节作为验证位,再做一个 base58 编码的结果,最后生成的是以 5 开头的私钥地址。

WIFC 的计算与 WIF 相似,但又有些区别,不仅要加 0x80 的前缀,还需要在结尾增加一个压缩标志后缀,即 0x01,剩下的结果就与之前没有区别了,然后做两次 sha256,再取前四个字节为验证位,最后生成的是以以 K 或 L 开头的私钥地址。

那么对应上面的压缩及非压缩私钥,比特币的地址就会分为 Bitcoin Address Uncompressed(比特币非压缩地址)和 Bitcoin Address Compressed(比特币压缩地址)。

也就是说,这样以来,一个比特币就对应了两个地址(即Compressed/Uncompressed 地址),但这两个地址都是“合法”的,且使用上也没有什么区别。而 Compressed 地址其实是我们最常见和使用的地址(1开头的比特币钱包地址),目前绝大部分的钱包工具默认生成的应该都是这个地址。

总之,不管基于什么工具生成的钱包地址,生成出来的钱包地址和私钥肯定是一一对应关系的,记录好这两个东西即可,日常的使用过程不用纠结什么压缩不压缩的问题,也不用纠结里面的技术问题,只要记住这一点就行:一旦你的私钥泄露、那么你的所有资产就可能会丢失。

2)从地址格式来讲

常规来讲,比特币钱包地址主要分为四种格式,分别是:

普通地址(即 P2PKH 地址、Pay-to-Public-Key-Hash):是最早出现的比特币地址格式,这种地址以“1”开头,由 26 到 35 个字符组成,包括数字和大写字母。

原生的隔离见证地址(即 Native Segwit Address、也叫 P2WPKH 地址):这是一种新的地址格式,以“bc1q”或“tb1”开头,由 41 到 62 个字符组成,包括数字和小写字母。

兼容的隔离见证地址(即 Nested Segwit Address、也叫 P2SH-P2WPKH 地址):这是一种混合了传统普通地址和原生隔离见证地址的新地址格式。它以“3”开头,由 26 到 35 个字符组成,包括数字和大小写字母。

Taproot 地址:Taproot 是比特币协议的一个重要升级(于 2021 年 11 月被激活),旨在提高比特币的隐私性、安全性和可扩展性。Taproot 地址通常以“bc1p”开头。

简单来说,以上这四种地址都是可以从同一套助记词推导生成。目前 SegWit/Taproot 地址用的相对比较多点,也是不少主流的钱包默认的地址格式(有些钱包则可能只支持4种地址中的1–2种),因为 bc1 地址包括了更多的优点,比如更高的容量和更低的交易费用。而虽然比特币有不同的地址,但各地址之间是可以互相进行转账的,因为它们都使用相同的基础加密技术和底层协议来进行交易。不同地址唯一的区别就是,Gas 费方面会有所差异,用 SegWit 地址相对会便宜一点。至于 SegWit 和 Taproot 的区别,前者主要是简化交易数据,后者主要是提升隐私和效率。

8.HD 钱包方面的问题

HD钱包即分层确定性(Hierarchical Deterministic)钱包,这个概念大家在一些钱包应用里面应该会见到过,简单来讲,我们可以把 HD 看做是一种钱包结构,它使用分层结构来管理和生成密钥对。基于这种框架,用户可以方便地通过同一套助记词创建几乎无限多个地址(子地址),而不需要备份每个地址的私钥。

这种钱包模式的优点在于我们只需要一组助记词,就可以生成出任意数量的新钱包地址,不同的地址你可以用于不同的用途,比如有些地址用户撸空投、有些用于转账、有些用于测试等等,这样就可以起到更好的匿名性和隐私性。但缺点也显而易见,一旦你的助记词丢失或泄露了,那么对应的所有地址下的资产也会丢失。

所以,要方便、还是要安全,这个自己来决定即可。

链捕手ChainCatcher提醒,请广大读者理性看待区块链,切实提高风险意识,警惕各类虚拟代币发行与炒作, 站内所有内容仅系市场信息或相关方观点,不构成任何形式投资建议。如发现站内内容含敏感信息,可点击“举报”,我们会及时处理。
ChainCatcher 与创新者共建Web3世界