收起
1分钟1小时1天1周1个月

比特币需要账户吗?这个开发者认为需要,还花了1年的时间来设计系统

为了解决这个问题,在过去的一年里,这位开发者想出了如何在比特币上安装一个账户系统。

2019年12月3日 17:18 比特币 区块链

来源 / 巴比特

比特币没有传统意义上的“账户”。相反,每次支付时,资金都被发送到一个唯一的“交易输出”。在这样的输出中,比特币地址可能会被重复使用,在这种情况下,地址的作用有点像比特币账户。然而,以这种方式重复使用地址会导致不同的币和交易对应到同一个用户变得很简单,这对隐私来说是很糟糕的。因此,在每次支付后,比特币用户都会被建议生成一个新地址。

虽然这是为了保护隐私,但西班牙开发者José Femenías Cañuelo认为这对用户来说并不友好。

bitcoin

Cañuelo说:

“在某种程度上,我们已经习惯了比特币支付的方式,但确实是太粗暴了,就像使用没有域名的互联网,只依赖于IP地址——而且更糟,因为密码地址更长,更难辨认,而且不断变化。”

为了解决这个问题,在过去的一年里,这位开发者想出了如何在比特币上安装一个账户系统。Cañuelo在白皮书中详细阐述了这个想法,并且提出了他的layer 2协议:Easypaysy。

虽然保留了比特币最有价值的属性——如隐私和自主(不需要依赖托管)——但Cañuelo相信,他的提议将显著改善比特币的用户体验:它将让支付变得不可否认,且频率更高。

 

Easypaysy比特币账户

 

Easypaysy作为这个方案的主要特性,不需要依赖任何外部资源。无论是建立账户还是使用账户都是在比特币区块链上进行的。

该提案描述的比特币账户是通过特定交易创建的。这类交易有一个输入(交易的“发送”部分),其中包括两个多签(multisig)地址。这意味着将显示两个公钥,并对交易进行签名。交易还有一个输出(“接收”部分),即OP_RETURN输出。在这种情况下,输出实际上没有收到任何资金;只包含了一点点数据。

输入中使用的两个公钥属于创建交易的账户所有者,这两个密钥都有各自的功能。第一个公钥称为“身份密钥”,它本质上是账户所有者的数字身份。任何想要私下与他通信的人都必须使用这个公钥加密消息。第二个公钥称为“价值密钥”,用于接收支付。

采用两个不同的公钥是因为价值密钥比身份密钥更有价值:后者用于消息,前者用于资金。Cañuelo 解释说:

“身份密钥必须是‘在线’的,这就容易出现漏洞,就像网上钱包比线下钱包更容易暴露一样。将价值密钥保存在冷存储中可能是明智的,而身份密钥可以更活跃,用于通信。”

输出中的OP_RETURN文本也有它的作用。它是一个小的JSON文档(一种机器可读的数据格式),名为“Rendezvous descriptor”。这份文件包含了账户信息。具体来说,它详细说明了账户所有者愿意接受的支付类型和方式。(事实上,Cañuelo的提案支持各种支付方式;下文会详细介绍。)

这两个公钥和Rendezvous descriptor是账户需要包含的所有信息。在设计这个特殊的用来创建账户的交易时,需要添加一笔费用(因此,多签地址必须已经被最低限度地提供了资金),然后将其广播到比特币网络中,并将其包含在一个区块中。

 

Easypaysy比特币账户ID

 

到了这一步,人们需要查找账户。

这就是Cañuelo的提案巧妙的地方。一旦交易包含在一个区块中,该账户将根据其在区块链中的位置自动分配一个账户ID。具体来说,账户ID包含交易所在的确切区块,以及交易在该区块中的位置——即一个区块链标识符和一个校验和的结合。

就像这样:blockchain@block.transaction/校验和

让我们用一个随机的例子,一步一步地研究这个问题。

假设我们在使用比特币。那么,区块链标识符就是“btc”。

假设这个交易包含在第543847区块中。(这是一个真正的比特币区块,产出时间是2018年10月——但这并不重要;我们现在只是在举例子。)

假设这个交易是该区块中的第636笔交易。

最后,校验和是一种用于额外安全的加密技巧。

Cañuelo说:

“它包含了三个哈希:账户区块的哈希、该区块的Merkle根和账户交易本身的哈希。因此,如果有人试图向你发送错误的账户数据,你可以很容易地检测到。”

在这个例子中,校验和是577。

因此,比特币区块543847中包含的第636笔交易将生成账户ID:btc@543847.636/577。更具体地说,这将是“规范ID”,因为区块、交易和校验和都以数字表示。

考虑到实用性,这个规范ID——btc@543847.636/577也可以表示为一个“助记符ID”。利用BIP39的比特币钱包种子格式,这个账户ID的数字可以被转换成几个词(或者单词的组合)。这应该更容易记。

这个示例中的账户ID中的数字可以分成三个数据块。

543847 = cancel-mind

636 = exhibit

577 = motion

因此,这个案例中的助记符ID为:btc@cancel-mind.exhibit/motion。

最后,Easypaysy白皮书还提出了“域名ID”,这将取决于域名系统(DNS)。简而言之,这样的ID将包括一个实际的域名、一个区块链标识符和一个校验和,并通过DNS系统将其链接到一个账户ID。这里给出一个域名ID的例子:btc@bitcoinmagazine.com/561。

这类ID将依赖于外部资源(即DNS),并且需要花费金钱和一些维护工作。Cañuelo预计可能只会有一些商业团体对它们感兴趣。

 

支付

 

我们有了一个账户和一个账户ID。现在,有人——我们就叫他“付款人”——想要支付给账户的所有者,我们称他为“收款人”。付款人有收款人的助记符ID。(账户ID,无论以何种形式,都可以简单地与任何人共享,就像邮件地址或电话号码一样。)

要进行付款,付款人的第一步是将助记符ID转换回规范ID。使用BIP 39格式,付款人只需将助记符ID中的单词转换回数字,并得到规范ID:btc@543847.636/577。

使用规范ID,付款人可以使用校验和来确保区块高度和交易序号匹配。这并不是必须的,但可以作为一项额外的检查,以确保没有打字错误,或者防止有人恶意提交一个类似的账户。

付款人现在知道到哪里去找账户了:这是543847区块的第636笔交易。所以他查了一下。

该交易包含Rendezvous descriptor:OP_RETURN输出中的JSON文档。Rendezvous descriptor指定账户愿意接收哪种类型的付款以及如何接收,可以是协议支持的所有类型,也可以任意进行选择。

在收款人接受的付款类型中,付款人选择他喜欢的付款方式并进行付款。这笔交易就完成了。

 

支付类型

 

那么这个提案中包含了哪些支付方式呢?

类型0

第一种支付类型——类型0——是最简单的类型,但也是隐私方面最糟糕的类型。类型0的支付基本上只是对价值密钥的支付,因此涉及到重复使用相应的地址,就像今天许多捐赠地址所做的那样。Cañuelo实际上不鼓励使用这种支付类型,但是他仍然尊重用户的选择。

类型1

第二种支付类型——类型1——需要互动。对于这种类型,付款人联系收款人要求一个新的比特币地址。Easypaysy协议在如何建立联系人方面的设置很灵活;可以通过邮件、网页、聊天应用或其他方式。

在提供地址(假设通过邮件)时,收款人也使用他的身份密钥签署地址。这代表向付款人确认该地址实际上是收款人的地址,而不是一个属于黑客的非法地址。

类型2

第三种支付类型——类型2——不需要互动。类似于之前用于秘密地址(stealth address)的技巧,类型2支付允许付款人为收款人生成一个新的比特币地址,收款人(且只有收款人)可以在这个地址进行花费。

为此,付款人需要生成一个单次使用的公钥对。使用该密钥对的私钥,结合收款人的价值密钥,付款人生成一个新的公钥和相应的比特币地址。付款人将资金发送到这个新地址,并且——重要的是——将单次使用的公钥添加到与OP_RETURN输出相同的交易中。

有趣的是,收款人可以将这个单次使用的公钥与他的价值密钥结合使用,生成一个与新公钥对应的新私钥,从而生成相应的比特币地址。换句话说,如果收款人知道了单次使用的公钥,他(而且只有他)可以使用这个新比特币地址的资金。

要了解单次使用的公钥,要么由付款人将交易通知给收款人,要么由收款人用OP_RETURN输出检查所有新的比特币交易。对于每个OP_RETURN输出,他需要检查是否是一个公钥,以便与他的私有价值密钥组合使用该交易中包含的资金。但事实往往并非如此。但如果是这样的话,他知道他已经拿到钱了。

类型3

第四种支付方式——类型3——与第二种类似。然而,这一次,OP_RETURN输出必须以标识符“EP”作为前缀。这使得他们更容易被收款人发现,但他们确实需要为付款人多支付一些费用。

 

比特币账户的优势

 

作为layer 2提案,Cañuelo的账户系统不需要对比特币协议做任何修改,也不需要获得全行业的共识。个人钱包明天就可以采纳这个建议,之后用户可以立即使用它。

Cañuelo认为这将极大地提高比特币的可用性,为该协议开辟了一个全新的潜力。

“其中,不可否认性是一个重要因素。假设你去买兰博基尼,经销商会给你一个二维码,并告诉你把钱发送到那个地址。你同意了。但第二天,经销商的会计告诉你他们还在等待付款。你如何证明你付过钱?因为比特币地址是半匿名的,你无法证明你把钱转给了兰博基尼的经销商。”

有了Cañuelo的账户系统,这类风险将不复存在:付款人总是可以向特定的账户提供付款证明。对于类型0支付,这是显而易见的;这笔钱被发送到账户公开可见的价值密钥。类型1支付也很容易证明,因为提供的比特币地址是用收款人的身份密钥签署的。但即使是类型2和3支付,付款人也能证明支付已完成:一次性私钥可以通过密码学证明收款人所需的所有信息,判断交易是他的,计算私钥,然后让他花费资金。

另一个好处是,Cañuelo的账户系统将使定期支付变得更加可行:考虑到租金、订阅或其他对同一实体的定期交易。钱包软件可以用来接受来自特定账户的付款请求,特定时间段内最多可接受一定的金额。(例如,房东的账户每月最多可以收取0.1个比特币,如果这是月租房的话。)

此外,商家也将更容易返还资金。举个例子,当有人在付款之后,商家发现订购的产品缺货。有了账户系统,钱可以很容易地退回给客户,而不需要询问具体的退回地址。

最后,Cañuelo的账户系统将首次为比特币用户提供区块链身份。

“例如,这可能意味着当你登录到一个网站时,你使用的是Easypaysy ID,而不需要输入密码,该网站要求你使用私钥签署一条消息。即使网站被黑了,你也总是安全的,因为他们不会存储任何密码。”

 

比特币账户的缺点

 

然而,Cañuelo的账户系统最强大的功能之一可能也是它最大的缺点:它完全依赖于比特币区块链,将账户数据嵌入其中。然而,区块空间非常稀缺,可扩展性是一个挑战。

为了解决这一问题,Cañuelo在他的白皮书中建议可以大量开设账户:一笔交易可能包括数百甚至数千个账户,供相同数量的用户使用。在这种情况下,OP_RETURN数据将指向所有账户数据的外部资源,可能是一个网站。OP_RETURN还将包含所有这些账户数据的Merkle根,因此付款人可以根据Merkle根检查账户数据。虽然这种解决方案依赖于外部资源,但至少用户可以确保数据不被篡改。

另一种解决方案是使用其他区块链——比如莱特币——来开户。将索引号添加到引用莱特币或其他区块链的账户中。尽管这种解决方案可以说是足够安全的,但它当然也有明显的缺点,那就是比特币用户会在一定程度上依赖另一种加密货币。