Tangem Wallet 如何备份私钥
为了防止因丢失加密钱包而失去对加密资产的访问权限,你需要通过创建副本来备份私钥。通常,这一步是通过助记词完成的。但问题在于,助记词极其不安全,因为任何人只要获得它就能访问你的资产。
这也是 Tangem Wallet 提供安全私钥克隆方案的原因。你可以将私钥克隆到一张或两张备份 Tangem Card,无需担心其中某一张丢失或被盗。
那么,这种备份方式到底有多安全?下面来详细解析 Tangem Wallet 是如何实现这一点的。
私钥的生成
在激活前,Tangem Wallet 并没有私钥(如图中的 Kpriv)。当你购买 Tangem Wallet 时,收到的产品尚未激活,也没有生成私钥,因此可以完全确定全球范围内不会有任何该私钥的副本存在。毕竟,无法复制一个尚未存在的东西。
在钱包激活过程中,Tangem 芯片会通过认证的硬件真随机数生成器(TRNG)生成一组数字序列,并据此生成新的私钥(如图所示)。想了解详细流程,可阅读我们的文章 如何为加密钱包生成私钥(含/不含助记词)。
在此阶段,只有唯一一份私钥。之后,你需要安全地创建一到两份备份副本。
备份前的准备
在备份过程中,私钥需要以防止被窃取的方式传输到其他卡片上,并且用户必须始终掌控私钥副本的数量。
因此,私钥备份流程包含两个关键环节:
- 首先,确保私钥被转移到另一张 Tangem Card 上。
- 传输过程中,私钥必须防止被拦截,即必须加密,只有接收卡才能解密。
在卡片生产时,芯片会生成一对专属密钥对:Kcardpriv(私钥)和 Kcardpub(公钥)。这些密钥仅用于每张卡的身份认证,与未来用户的钱包无关。它们的作用是让卡片证明自身为 Tangem 原厂产品。
该密钥对中的公钥会由 Tangem 使用厂家私钥 KTangempriv 进行签名,生成 Cert_Card 证书,用于卡片验证。
厂家公钥 KTangempub 也会写入芯片。此密钥对所有卡片都相同,是源卡与目标卡之间“信任链”的起点。

第一步挑战:双向认证
为了让每张卡在备份过程中都能“确认”对方也是正品 Tangem Wallet,需要通过卡片密钥和签名建立加密“信任链”。
激活时,每张卡会生成一对一次性通讯密钥对——Klinkpub 和 Klinkpriv,并用自己的 Kcardpriv 私钥对该公钥签名,生成 Sign_Attest 签名。

随后,卡片会将 Sign_Attest、Klinkpub 和 Kcardpub 信息发送给另一张卡。
这样就形成了如下信任链:KTangempub — Kcardpub — Klinkpub。所有卡片都知道厂家公钥 KTangempub,并用它验证 Cert_Card 证书。如果匹配对方的 Kcardpub,则用该公钥验证 Sign_Attest 签名。
如果 Sign_Attest 能验证对方的 Klinkpub,就说明通讯另一端的卡确实由 Tangem 生产,且 其Klinkpub 密钥未被篡改,可用于计算共享的 Ktrans 备份密钥。

第二步挑战:生成共享加密密钥
此时,两张卡需要生成一个共享对称密钥 Ktrans,源卡用它加密用户私钥,目标卡用它解密。由于它们之间的通讯通道是由不可信设备提供,无法直接在一张卡上生成密钥后传给另一张卡。这个问题通过 Diffie–Hellman 密钥协议解决。
卡片刚刚交换了已验证且可信的 Klinkpub 密钥,每张卡用自己的 Klinkpriv 和对方的 Klinkpub 共同生成对称 Ktrans 加密密钥,最终两张卡得到的 Ktrans 完全一致。这正是 Diffie–Hellman 协议的精妙之处。
如果攻击者控制了用户手机并试图“窃听”卡片交换过程,他们只能 获得 Klinkpub 和 Kcardpub 公钥,因为卡片只会传输这些内容。Klinkpriv 密钥不会泄露,攻击者无法生成相同的 Ktrans。

加密密钥交换
利用获得的 Ktrans 对称密钥,第一张卡会加密一组数据,其中包含用户私钥、访问码以及私钥备份数量(2 或 3 张卡)。
卡片将加密后的 ENC 消息发送给第二张卡,后者用同一个 Ktrans 解密。如果此时有人截获了 ENC,没有 Ktrans 密钥也无法解密包内内容。

为第三张卡完成备份的流程完全相同,只是卡片会生成新的 Klink 密钥对,因此 Ktrans 密钥也与备份第二张卡时不同。
Tangem 芯片固件允许只进行一次备份。无论是给出还是接收私钥后,卡片都将停止启动备份流程,且该私钥无法恢复。
如果你对 Tangem Wallet 执行恢复出厂设置,芯片会遗忘 Kpriv 密钥。此时可重新激活钱包,生成新密钥并完成新备份。但请注意,旧密钥在重置后会被销毁。