闪电网络-哈希锁定

1.哈希锁定

哈希锁定模式是一种较易实现的跨链方案,该方案链不会因跨链而受到51%攻击 ,哈希锁定想法最早来源于BitCoinTalk论坛中TierNolan的帖子[1]。在该方案中,提出了哈希锁定模式的实现思路。

但是在单纯哈希锁定的交易中,某一方将拥有绝对的主动权,控制何时将hash(x)中的x提供给对方,例如在币价波动较大时候,发起交易的该方可以选择最合适的比例时,提供x给对方,进行交易,这样会对交易的另外一方的利益造成损害。

有鉴于此,可以配合状态通道,如通过链下交易策略(off-chain),进行加快交易速度,从而避免以上问题。

1.1闪电网络

闪电网络(The Bitcoin Lightning Network:Scalable Off-Chain Instant Payments)是以上技术综合的典型应用。闪电网络的目的是安全的实现链下可扩展的小型即时交易,提升了比特币网络链外的交易处理能力。交易双方在区块链下的支付通道进行多次、高效、双向的交易, 双方若无直接点对点的通道,只要网络中存在连通这两方的通道即可。其中涉及到的小交易均无需上链,只需在开启和关闭通道时,同步相关数据于区块链即可。闪电网络本质上是使用了哈希时间锁合约来安全地进行0确认交易的一种机制,哈希时间锁合约在此之后被越来越多的用到跨链技术当中。

闪电网络无需信任交易的对方并且无需依赖第三方进行即时交易网络的构建。闪电网络起源于比特币的扩容问题,基于微支付通道演进而来,创造性的设计出了两种类型的交易合约:RSMC(Revocable Sequence Maturity Contract)到期序列可撤销合约以及HTLC (Hashed Timelock Contract )哈希时间锁合约。其中,哈希时间锁合约使用了哈希锁定(hashlock和时间锁定 (timelock)。

1.1.1多重签名地址

多重签名就是多个用户对同一个消息进行数字签名,可以简单理解为一个数字资产多个签名。“用N把钥匙生成一个多重签名的地址,需要其中M把钥匙才能花费这个地址上的比特币,N>=M,这就是M/N的多重签名”。签名标定的是数字资产所属及权限,多重签名预示着资产可由多人支配与管理。拿比特币来说,如果要动用一个地址的币,那么需要多个私钥才能进行。

闪电网络中采用了2-of-2 multisignature address,这意味着交易双方各持有一份私钥对应该笔交易的地址,这个地址只有交易双方共同签名验证才可以取出这些比特币。

1.1.2 RSMC(Revocable Sequence Maturity Contract)

RSMC(Revocable Sequence Maturity Contract)到期序列可撤销合约。RSMC首先,构造了双向支付通道;其次,使得其中一方中止交易后,另外一方无需等待锁定时间可以即时拿到钱;最后,保证了双方交易的可信性,双方无法违约。

      1. HTLC (Hashed Timelock Contract )

HTLC (Hashed Timelock Contract )哈希时间锁合约。其中,哈希时间锁合约使用了哈希锁定(hashlock)和时间锁定 (timelock)。HTLC中的哈希锁定(hashlock)保证了只有提供原始密码才能从合约中拿到锁定的资产,可以允许存在多个无需信任的中间人;时间锁定(timelock)则保证了在有一方存在违约的情况下资产能安全退还给原所有者。

HTLC的作用主要有两个,一个是确保在链下完成RSMC中小额金额的再分配,另一个是通过HTLC确保了交易双方可以无需单独开通交易通道,可以通过多个中间人组成交易通道中,进而完成安全可靠的交易。

      1. 跨链交易实现

基于之前提到的HTLC,构建跨链交易通道。

准备阶段:

(1)Alice生成一个随机值s,提供hash(s)给Bob;

(2)Alice和Bob建立一个比特币支付通道(该通道可以仅包含交易双方,或者包含其他中间人),约定构建一个HTLC:Bob只要提供s来匹配对应的哈希值就可以领走Alice的1BTC,如果发生超时,1BTC还给Alice;

(3)Bob和Alice建立一个莱特币支付通道,约定另外一个HTLC:Alice只要匹配成功对应的hash值,就可以领走Bob的100LTC,超时则会返还给Bob。

结算阶段:

(1)Alice提供自己生成的密码s,得到Bob的100LTC;

(2)被广播出来的密码s同样被用来保证Bob得到Alice的1BTC。

 

 

 

 

 

 

 

 

 

 

 

 

 

适用于跨链货币交换。

发送方与接收方,分别在两条链上持有账户。

双方分别在不同链上构造特殊的交易。

如果发送方使用接收方提供的资金,接收方就有能力使用发送方的资金。

如果双方不希望继续交易,双方的资金会在超时后退回。

 

 

 

参考文献

[1] https://bitcointalk.org/index.php?topic=193281.msg2224949#msg2224949

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OkHttp可以通过证书锁定(Certificate Pinning)来增强安全性,它可以防止中间人攻击,即使攻击者拥有有效的证书也无法伪造服务器。证书锁定的实现方式是将服务器的证书指纹(SHA-256哈希值)硬编码到应用程序中,然后在建立连接时验证服务器证书的指纹是否与硬编码的指纹匹配。如果不匹配,则连接失败。证书锁定可以通过以下步骤实现: 1.获取服务器证书的SHA-256哈希值。 2.将哈希值硬编码到应用程序中。 3.在建立连接时,验证服务器证书的SHA-256哈希值是否与硬编码的哈希值匹配。 证书锁定可以通过以下代码实现: ```java public final class CertificatePinner { public static final CertificatePinner DEFAULT = new Builder().build(); private final Map<String, Set<String>> pins; private CertificatePinner(Builder builder) { this.pins = Util.immutableMap(builder.pins); } public void check(String hostname, List<Certificate> peerCertificates) throws SSLPeerUnverifiedException { Set<String> pins = findMatchingPins(hostname); if (pins == null) return; for (Certificate certificate : peerCertificates) { if (!(certificate instanceof X509Certificate)) continue; X509Certificate x509Certificate = (X509Certificate) certificate; if (pins.contains(sha256(x509Certificate))) { return; // Success! } } throw new SSLPeerUnverifiedException("Certificate pinning failure"); } private Set<String> findMatchingPins(String hostname) { Set<String> directPins = pins.get(hostname); Set<String> wildcardPins = null; int indexOfFirstDot = hostname.indexOf('.'); if (indexOfFirstDot != hostname.lastIndexOf('.')) { wildcardPins = pins.get("*." + hostname.substring(indexOfFirstDot + 1)); } if (directPins == null && wildcardPins == null) { return null; } else if (directPins != null && wildcardPins != null) { Set<String> pins = new HashSet<>(); pins.addAll(directPins); pins.addAll(wildcardPins); return pins; } else if (directPins != null) { return directPins; } else { return wildcardPins; } } public static final class Builder { private final Map<String, Set<String>> pins = new LinkedHashMap<>(); public Builder add(String hostname, String... pins) { Set<String> hostPins = new TreeSet<>(); Collections.addAll(hostPins, pins); this.pins.put(hostname, hostPins); return this; } public CertificatePinner build() { return new CertificatePinner(this); } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello World程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值