原子交换和哈希时间锁

一、哈希时间锁
哈希时间锁(Hash Time Locked Contract,简称HTLC)是一种加密货币技术,用于在跨链原子交换(Atomic Swap)和闪电网络(Lightning Network)等场景中实现安全的交易。HTLC 在比特币上早已有,而在支持智能合约的区块链上就更容易实现了。关键的概念是哈希锁和时间锁。
1.1 哈希锁:
哈希密钥锁,就是利用非对称加密的哈希函数,把一串输入的密文转换成 256 位固定长度的输出,并在交易脚本里设置必须输入正确密文才可以解锁交易。例如 Alice 收到了一笔 2BTC 转账,但是对方设定了哈希值锁定,所以 Alice 必须得到交易方的密文(Pre-image,原像),同时配合自己的密钥签名才能签署交易。
哈希锁应用场景:
- 资助发现哈希碰撞:由于哈希函数的单向性,矿工只能使用暴力搜索的方法不断尝试,这就等于是在寻找一个与你手中的原像产生相同哈希值的东西,也就是在搜索哈希碰撞。
- 原子交换 / 潜水艇互换
- 闪电网络:闪电通道利用了我们已知的所有模块:多签名、时间锁、哈希锁
1.2 时间锁:
哈希时间锁,就是在交易脚本里设置时钟,必须要等待设定时间后才能私钥签名解锁地址里的比特币。例如 Alice 收到了一笔 2BTC 转账,但是对方设定了 1000 个区块之后才能解锁,所以 Alice 必须等待 1000个 区块之后才能用自己的私钥签署交易,花费其中的 BTC 转给 Bob 。
时间锁应用场景:
- 个人的强制储蓄:一旦用户的比特币资金使用这种方式锁定,就不可能在 TA 自己设定的时间点之前花费。
- 灾备措施/意外应对:一些风险不能仅靠多签名(分散资金的控制权)来消除,配合时间锁可以避免资金赎回问题。
- 资金的社交恢复
1.3 工作原理:
- 两个参与者(通常是交易的发起者和接收者)之间达成协议,确定交易的条件和参数。
- 发起者生成一个随机数(preimage)并计算其哈希值(hash),这个哈希值被称为哈希锁(hash lock)。
- 发起者将带有哈希锁的交易信息发送给接收者。
- 接收者收到交易信息后,可以验证哈希锁的有效性,即通过计算哈希函数确认哈希锁的哈希值与接收者期望的哈希值是否匹配。
- 如果哈希锁有效,接收者可以执行交易,并生成自己的随机数和哈希锁。
- 接收者将包含自己随机数和哈希锁的交易信息发送给发起者。
- 发起者验证接收者的交易信息中的哈希锁是否有效。
- 一旦发起者确认接收者的交易信息有效,交易就完成,发起者可以使用接收者提供的随机数解开哈希锁,完成交易。
HTLC 通过引入时间限制,确保在一定时间内完成交易,否则交易将自动取消并回退。这种时间限制保证了交易的及时性和公平性,避免了一方恶意中止交易而不履行承诺。
总之,哈希时间锁是一种基于哈希函数和时间限制的机制,用于确保在不信任的环境下进行安全的交易。它在加密货币领域的原子交换和闪电网络等技术中起到了重要的作用。
二、原子交换
原子交换(Atomic Swap),就是去中心化(无第三方参与)下,两个人实现原子性的跨链公平交易。原子交换的思想提出很早,在 2013 年 bitcointalk 上就有人提出。它的实现条件使用了 HTLC 和博弈论思想。
- 原子性
- 公平交易
2.1 工作原理
原子交换机制依赖于哈希时间锁定合约 (HTLC),可以被理解为是一个带有“哈希锁定”(HashLock) 和“时间锁定”(TimeLock) 两项特殊保障的虚拟保险箱:
- 哈希锁定:在交易发起方将用于解锁 HTLC 合约的密钥发给另一方之前,确保资金被锁定在合约中。
- 时间锁定:如果交易未在指定的时间段内完成,则将交易的加密货币退还给交易者。
一旦双方都提交了合约密钥,交易就完成了。如果双方未在规定时间内提交,则交易将被取消,确保没有人蒙受损失。
2.3 原子交换的升级版 - 潜水艇交换(Submarine Swap)
潜水艇互换可能是人们尝试闪电网络支付最简单的手段。虽然你还是要支付链上手续费,整个支付流程也很像链上支付,但收款方可以是即时到账的(跟具体的实现有关)。如果你想开一个闪电网络通道,也需要发起一笔链上交易。考虑到我们现在还在闪电网络早期,有一个易于上手的玩法是很重要的。这也是为什么我们在Muun Wallet中实现了潜水艇互换。
三、原子交换和跨链
3.1 Vitalik 关于跨链的思考:
- 以太坊就算遭受 51% 攻击,非法交易会被审查和回滚,保证链上原生资产(ETH、DAI)的安全,保证 L2 资产(OP、Arbitrum资产)的安全。
- 对于跨链应用来说,51% 攻击不可以恢复映射资产(solana-weth、ethereum-wsol)。跨链活动具有反网络效应:跨链应用越少越安全,跨链应用越多越存在安全风险。
- 对多链(multi-chain)保持乐观,对 cross-rollup 保持乐观,对跨链(cross-chain)保持悲观。
- rollup 不能使用与原生资产不同的链作为数据层。
3.2 原子交换的缺陷:
- 缺陷一:可以看出,不管交换成功或失败,总会有 4 个交易被上链。如果按照比特币现有的拥堵状态和高手续费,原子交换是基本行不通的,代价过高且会有损失钱的风险。
- 缺陷二:在考虑外部市场后,会存在对手风险,原子交换是不适用的。如在上面的协议描述里,Alice 和 Bob 已经将 tx1 和 tx2 上链。则这之后,原子交换的成功与否取决于 Alice 是否要抛出 hash(a) 的原像,她有 24h 的考虑时间去决定。那在这 24 小时内,Alice 大可在对比交易所和原子交换的比率差别,如果交易所的汇率对自己有利,那就去交易所交易,抛弃原子交换。在这种情况下,Alice 除了会锁定 48h 的币,没有其他风险,风险全部转嫁给了 Bob。那么有人说,缩短 24h 和 48h 的参数设定就好了啊。但无论怎么缩短,这个风险都不能消除。且缩短锁定时间还可能带来安全风险。
- 缺陷三:除此之外,还有一种攻击。在 tx1 和 tx2 上链后,Bob 完全封锁 Alice 的网络(由于存在点对点通信,会增加这种风险)。Alice 发出的 tx22 无法广播到网络里,但 Bob 可以截取到。Bob 因此可以得到 Hash(a) 的原像,从而上链 tx12(满足 tx1 的解锁条件2)拿到 1BTC。之后,Bob 再封锁 Alice 的网络 24 小时,他就又可以上链 tx21(满足 tx2 的解锁条件1)拿到 3ETH。那有人说,只要 Alice 迟迟发现自己发出的 tx22 不上链,那就去找个网吧重新发交易啊。Bob 总不能连人去哪都可以追踪吧。这确实是最简单的抵御方法。但也说明,原子交换需要人类来监控,在完全程序自动化的条件下完成仍存在风险。