Randpay

返回最新动态

Emercoin加密货币的大规模支付子系统

本文描述了一个基于零信任彩票协议的聚合支付系统。我们证明它适用于每年达数万亿笔交易的超大规模定居点。根据该协议,付款接收者创建一个唯一的付款地址,并定义一个可能的付款地址空间,其中包括此地址。付款人从指定的空间中选择一个随机地址,创建一个到所选地址的支付交易,然后将该交易发送给付款收件人。如果在接收的事务中指定的地址与先前创建的地址匹配,则接收方签署事务并将其发布到区块链,然后转移付款。如果地址不匹配,事务处理将被视为无效并被忽略。在典型的Randpay场景中,不太可能在每个特定的“彩票”实例中进行支付。但是,由于这种情况的数目很多,所有参与者的余额都将以公平的方式得到更新。本文给出了一个数学模型,证明了对于所有参与者来说,Randpay将在统计上收敛到他们在不使用这个子系统的情况下会收到或发送的公平数量。此外,Randpay降低了付款人的交易成本,使其在经济上可行,特别是在小额支付方面。



缩放问题

基于区块链的分散支付系统正变得越来越流行。乐观主义者和密码爱好者甚至辩称,所有银行系统都将很快过时,因为企业将使用比特币或其他加密货币进行直接结算。但是,由于其体系结构,区块链系统最初在可伸缩性方面受到限制,因为区块链必须包含所有曾经发生过的事务。以电信行业为例,您可以轻松地计算出,如果每个电话呼叫都以和解方式结束,那么在整个全球电信行业中,以200字节的 - (通常是更多的 - )2万亿个呼叫的交易规模,区块链将以每年400TB的速度增长。这显然是不可接受的。减少事务大小的机制确实存在。例如,Segwitt将事务大小减少了近一半。但是,即使是200TB/年的 - ,而不是400TB,在电信行业 - 中仍然是使用加密货币的一个不可克服的障碍,如果每个呼叫都是付费的,那么在需要大规模支付的其他领域也是如此。

即使在今天,在加密货币支付远远不是主流的时代,主要的加密货币区块链已经占据了数百GB的空间,并且维护一个完整的加密货币节点正变得相当昂贵。想象一下,当加密货币支付开始大规模发生时,将会发生什么情况。

此外,这种分布式系统的每个节点实时接收所有网络参与者的所有事务。由于事务流量很大,这可能会导致网络带宽问题。

我们不能说这个问题被加密货币开发人员忽视了。我们不时会看到一些说法,即一些加密货币将有“与VISA相当的带宽”或关于分片的想法,即在参与者之间划分区块链数据库。但我们还没有看到任何真正起作用的东西,即使是作为原型。无论如何,我们祝愿这些开发商成功地使这些主张成为现实。

至于我们,在这里,我们将集中于已经存在的,有效的,并可以应用在这里和现在。

我们提出了一个现实的系统,通过聚合来解决可伸缩性问题,即用少量的最终支付代替大量的小额支付,这些最终支付将包含在区块链中。此外,使用聚合,您只需为聚合的事务支付交易费。换句话说,聚合不仅使支付系统具有可扩展性,而且降低了每次支付的交易成本。

闪电网络

闪电网络支付聚合系统由通过支付渠道连接的代理组成一个单独的网络。两个代理可以通过将它们的硬币链接到“开放通道交易”来创建通道。在彼此之间进行独家支付后,他们通过向区块链发送“关闭渠道交易”来关闭渠道。因此,在整个渠道生命周期中只创建了两个区块链交易(开放渠道和关闭渠道),并且支付直接发生在代理之间,而不影响区块链网络。这一制度有其优点和缺点:

优势

FAST Transaction - 无需等待块链确认。
Absolute Accuracy - 收件人在每个付款实例中收到的确切金额。

缺点

您需要创建和维护处理基础设施(ProcessingInfrastructure - ),这是一个由始终在线的渠道运营商组成的网络。
渠道运营商最终可能希望像VISA/Mastercard一样,在他们的渠道中获得转账服务的报酬。
付款只可能在渠道网络 - 中进行,您不能像今天的加密货币那样将付款“发送到任何地址”。
如果频道运营商关闭或故意拒绝服务,付款就变得不可能。
创建通道时,您必须向其提交一定数量的钱币。如果对方不合作或拒绝服务,这笔金额可能会被阻止很长一段时间,可能几年。
如果渠道中没有钱,就有可能拒绝服务。这可能发生在减价销售期间,或者在围绕许多人想要快速购买的新产品大肆宣传的情况下发生。
闪电是一种状态驱动的协议:一旦您创建了一个通道,您必须在某个地方记住它的状态,并且只有在它关闭之后才能忘记它。如果双方都输掉了州政府,渠道里的钱可能就会输掉。

因此,闪电网络在目的和结构上与VISA/Mastercard等支付处理系统相似,但它绑定的是普通加密货币持有人,而不是银行。

Randpay

Randpay支付聚合系统使用一种基于RC4RSA和其他密码系统的创建者RonRiVest提出的彩票支付思想的概率方法。

理念

我们的想法是,我们不是以100%的概率在区块链上记录支付交易,而是发行一张“彩票”,它只在付款人“输”和受款人“赢”彩票时才被记录下来。在后一种情况下,只有中奖的彩票作为交易发送到区块链。“空白”门票将不会记录在区块链上,可能会被丢弃。同时,每个彩票支付动作的转账金额的期望值等于正常支付交易本应发送的金额。使用这种方法,付款的数量(中奖门票)将相当大,但付款本身将不太频繁地记录在区块链中。



例子

假设你必须为一项电信服务每分钟支付0.01美元。但是,交易成本和加密货币的限制使这种支付无利可图,或者在数额很大的情况下是不可能的。使用抽签的方法,客户(付款人)支付的金额要高得多,比如100美元, - ,但概率是1/10000。因此,一次付款行为平均每分钟0.01美元。

换句话说,客户(付款人)玩俄罗斯轮盘赌的左轮手枪有9999个空插槽和一个装满了付款。在付款行为中,如果没有触发付款(发生10000次中的9999),客户“赢”并免费获得一分钟的服务。如果触发付款(概率为1/10000),则服务器(服务/产品提供商)获胜,并且在区块链上记录100美元的交易。

因此,在某些情况下,客户会收到完全免费的会话,而其他情况下,客户会为一分钟的时间支付过高的费用。但平均而言,如果客户不一定定期使用来自同一提供商 - 的服务 - ,则付款金额将接近公允价值,即实际每分钟付款的金额。同时,实际交易的数量减少了99.99%(在本例中),按比例降低了交易成本。

因此,在具有上述参数的电信系统中使用Randpay只会使每年2万亿次呼叫的区块链增长40 GB。这一数额不是很小,但在实际使用中是可以接受的。增加聚合系数(例如,当每分钟的汇率降到0.01美元以下时)可以进一步降低区块链通货膨胀。这可以与其他防止区块链膨胀的方法相结合,例如Segwit和事务优化。

不确定性

显然,由于随机支付过程的随机性,实际收款人收到的金额将等于中奖彩票的总和。这笔款项将不同于每分钟实际支付的公平数额。但是,随着服务的提供,收到的金额将呈线性增长,而偏差将以平方根的形式增长。换句话说,当服务被积极使用时,相对误差将接近于零。如果需要,您可以在“意外运营费用”下的会计文档中输入这种不准确信息,或者只需指定实际金额即可。

让我们来考虑与闪电网络相比,Randpay系统的优点和缺点:

优秀

无需创建和维护单独的渠道运营商网络。你只需要一个普通的Emer钱包就可以使用Randpay了。
因此,无须向这些网络营办商支付费用。
这意味着没有与这些运营商相关的风险因素。
不受限制的点对点交易,就像最初计划的加密货币一样。
每个操作的最终(平均)支付金额可能小于加密货币的最小单位(Satoshi)
不需要在几个月或几年的时间里把钱绑在渠道里。该票是否“中奖”通常在一分钟内就会变得清楚,如果没有,付款人可以将这笔钱再用来买另一张票。
拒绝服务是不可能的,即使渠道里没有钱。
与闪电网络不同的是,闪电网络分别为通道的打开和关闭创建了两个事务 - ,而 - Randpay则创建了一个事务,因此在相同的聚合因子下效率是原来的两倍。
Randpay是一种无状态协议。换句话说,您不需要建立渠道,不需要与交易对手达成任何形式的财务安排,不需要记住渠道的状态,也不需要以特定的方式关闭渠道。这是一个“付钱就算了”的案子。
您也不需要单独完成付款。如果您的网络连接不可靠,这一点尤其有用。任何一方都可以随时断开连接,这不会影响付款。.

缺点

要使付款安全,您需要等待通过块结算的交易确认,就像常规加密货币付款的情况一样。可以在没有确认的情况下使其发挥作用,但这将需要采取额外的欺诈保护措施。见下文“安全”。
实际支付的数额将不等于“公平”的数额,虽然它将接近它,因为服务是持续使用的。

协议背后的思想和一个朴素的算法

尽管Randpay协议在设计上是原创的,但它源于两个已知的加密协议背后的思想:

通过电话秘密协议抛硬币。
CHAP身份验证协议。

Randpay协议中,服务器(受款人)为客户端提供“质询”,而客户端必须提供解决方案。该协议不依赖于客户端和服务器之间的任何信任,所面临的挑战是选择一个地址。协议使用以下算法:

收款人创建一个新的P2PKH支付地址和相应的私钥。
收款人然后生成一个彩票请求(addrCHAP地址质询),即一个可能的地址空间,其中一个地址是他们拥有私钥的地址[1]。这是收款人的得奖地址,也是付款人的挂失地址。收款人将请求直接发送给付款人,即不涉及加密货币或区块链。
付款人在指定的空间内生成一个随机的支付地址,创建一个支付事务到该地址 - 彩票, - 和发送交易私下响应收款人。
收款人验证交易,如果交易是正确的,则向客户提供产品或服务。
如果付款人没有猜到地址,即向收款人没有私钥的地址付款,受款人无法获得资金,被迫拒绝支付交易,即付款人免费获得产品或服务。如果付款人确实猜到了地址,接收方将在区块链中发布交易,从而收集付款人的资金。
有趣的是,在Randpay中,付款人通过选择收款人不拥有的地址(即猜测错误)而获益,而在经典CHAP方案中,客户试图给出正确的答案(即猜测正确)

从数学上讲,收款人通过在地址空间中均匀分配获胜地址而获益最大,付款人通过从建议的空间中选择一致随机地址而获益最大。在这种情况下,平均支付额等于数学期望,即公平。如果任何一方试图以任何方式操纵分配,它就允许另一方提出一种策略,利用这种操纵为自己的利益服务。例如,如果收款人总是在步骤1中创建偶数地址,则付款人可以发现(或假设)此地址,并在步骤3中开始总是选择单数地址,因此无需支付。如果付款人试图以某种方式“优化”他们的猜测,情况也是如此。在这种情况下,收款人可以想出一个特殊的谜题,让付款人尽可能多地猜对。因此,当双方都遵循协议中指定的均匀分布时,就达到了Nash均衡,如果他们中的任何一个试图操纵该分布,这不仅是无用的,而且对操纵器来说是潜在的损害。

其他欺诈策略,如减少交易金额、不签署交易、UTXO双重支出或使用指定空间以外的地址等,都很容易检测到,收款人可以停止为此类欺诈性客户提供服务。

上述朴素的算法是可行的,但它有一个严重的缺点,使得它很难在实践中应用。缺点是,无论付款人是否已经猜到地址,在步骤5中,收款人总是将事务发送到区块链,从而表现出不合作的行为。请注意,收款人将无法使用交易中的钱,因为他们或其他任何人都没有使用该交易所需的私钥。在这种情况下,钱就永远失去了。换句话说,不合作的收款人不能把钱据为己有,而是可以通过毁坏付款人的钱来伤害付款人,即使这些钱对他们没有用处。

实际算法

真正的算法通常类似于朴素的算法,但是包含了一种防止收款人以上述非合作方式行为的机制。其目的是让受款人证明他们拥有支付地址的私钥,即付款人从质询中猜测出实际地址。它是这样运作的:

块链的UTXO集有一个特殊的虚拟输出编号0,该编号来自一个不存在的事务,该事务具有TXID=ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC.

此特殊输出(以下称为RandpayUTXO)具有以下属性:

它可以被花费多次,也就是说,它不会被标记为花费后的花费。
你只能从里面花0个硬币,也就是说什么都不能花。
UTXO只能在事务的输入中出现一次。从此以后,它被称为“随机支付”。
此随机支付使用来自当前事务的vout[0]地址的私钥进行签名。换句话说,在检查和生成签名时,RandpayUTXOscriptPubKey的实际支付地址取自当前事务的vout[0]脚本。
当付款人在步骤3创建RandpayTransaction时,他们会将虚构的RandpayUTXO的一项支出添加到vin输入数组中,即添加随机支付输入。通过这样做,付款人可以对所有事务输入进行签名,但这一项除外。如果收款人能够的话,它将在事后由收款人签字。付款人将要猜测的付款地址放在待交易的vout[0]中。

如果受款人收到了一笔成功的交易(付款人猜到了地址),他们必须在将交易发送到步骤5中的区块链之前,使用他们将接收资金的地址的私钥(vout[0]中指定的地址)签署他们的随机支付协议。收款人因此证明他们拥有vout[0]地址的私钥,并有权接收付款,即在区块链上发布交易。

如果付款人尚未猜到地址,则受款人无法签名,因为他们没有vout[0]的私钥。块链就是不接受未签名的事务。因此,收款人只需忽略交易,而不能伤害付款人。

数学应用

与闪电和其他支付系统不同的是,兰帕伊有一个额外的自由度 - 聚合系数。它确定将多少付款卷积/合并为发送到区块链的实际付款交易。在上面的示例中,聚合系数为10000。换句话说,10000笔平均每笔0.01美元的付款被折算成一笔100美元的交易(让我们称之为这笔金额)。因此,它也是实际交易量增长的次数。我们将把这个聚合系数称为风险,因为它在随机支付法案中乘以付款人的风险。因此,在我们的示例中,付款人冒着100美元的风险,这笔钱将以与风险相反的概率从他们手中拿走:

因此,对一笔付款的期望值是:

让我们假设序列中的所有事务都有参数(p,金额),从而简化模型。我们可以这样做,因为RandpayPayments是相互独立的,可以根据这些参数分组,之后我们可以将以下内容单独应用于每个组。

由于Randpay支付序列遵循二项分布,因此序列中具有统计意义的支付n可以用正态分布来近似

数学等待:

和方差:

位置

那么,与公平金额相比,实际支付/收到的金额的标准偏差(误差):

相对误差(偏差与超过n次付款的金额之比):

很容易看出,当n接近无穷大时,相对误差接近于零:

换句话说,Randpay使用的时间越长,平均支付金额就越接近经典支付的情况,即每笔交易都进入区块链。在Randpay中,与进入区块链的每个交易相距甚远,因此它的风险时间增长较慢,从而相应地降低了实际交易成本:

看起来,通过增加风险,我们可以轻松地几乎无限期地提高系统的效率,因为随着风险的增加,区块链膨胀和交易成本都会降低。但是,风险的增加会自动导致交易金额的增加和交易数量的减少。这可能是个问题:

付款人可能根本没有足够的钱来创建彩票支付交易。
增加金额会鼓励付款人以欺诈方式(例如双倍支出)取消付款。
对付款人来说,多付那么多钱可能会让人感到不舒服,即使可能性很小。没有人愿意为一项价值0.01美元的服务支付1万美元。
另一方面,在报告所述期间,该系统必须经历几次实际付款:如果风险过高导致卖方在10年内平均收到一笔付款,这些付款很可能在发生之前破产。
换句话说,该系统将风险增加限制为付款人已准备好承担风险的金额。有趣的是,该系统并没有限制其向下移动,也就是说,它允许几乎无限制地增加纳米支付的风险参数。例如,您可以想象一家企业逐个销售有关当前股票报价的信息,例如每个报价的价格为0.00000001美元。或者人工智能回答一些问题。或新闻文章、数据库样本等。这使得有利可图的商业模式在其他支付系统中是不可行的,因为与支付的金额相比,交易成本很高。

交互协议

这里考虑的一般协议是关于付款人-受款人交互的建议。具体的实现取决于使用此协议或类似协议的系统的开发人员。我们强调,这些建议适用于代理之间的交互,而不是代理和Emer节点之间的交互。后者将在下面的RandpayAPI规范中讨论。

  1. WANTPAY(double amount, uint32_t risk) [此步骤是可选的,但强烈建议]
    客户端(支付方)将此请求发送到服务器(受款人),通知他们希望以p=1/Risk的触发概率进行金额的随机支付。因此,一次付款的实际平均金额是金额/风险。例如,WANTPAY(100100000)表示客户愿意以1/100000的概率支付100EMC,因此平均付款为0.001 EMC。客户决定金额和概率的基础上,在他们的钱包可用的钱和他们愿意承担相应的风险,一大笔总付。平均来说,增加风险参数对客户是有利的,因为它降低了交易费用的百分比。另一方面,他们受到在“彩票”期间被冻结的金额和支付这笔金额的风险的限制。

  2. NEEDPAY(double amount, uint32_t risk, char [] addrchap)

通过将此响应发送到WANTPAY,服务器通知它希望以p=1/Risk的概率接收金额付款,为此,它向客户端提供基于(RiskaddrCHAP)对从地址空间猜测地址的功能。服务器传递给客户端的(金额、风险)参数可能与客户端在WANTPAY中提供的参数不同。如果服务器决定金额太大而概率太低(风险太高),或者它不喜欢平均支付金额,或者由于其他原因,可能会发生这种情况。

 

  1. PAYMENT(uint32_t risk, char[] rawtx)

客户端根据NEEDPAY要求向服务器发送Randpay事务。服务器将其发送到钱包进行验证,如果钱包批准(未检测到欺诈,金额足够),它将向客户端提供产品或服务。如果客户已经猜到了地址(概率为p=1/Risk),钱包就会自动签署交易并将其发布到Emercoin区块链上。

Randpay API

APIEmerstoneJSON/HTTP API的扩展,支持Emer节点生成和处理Randpay事务。应用程序可以使用此APIEMER节点交互以进行付款或接收付款。如果API方法按预期工作,它们将返回下面指定的值。如果出现不正确的输入、欺诈尝试或运行时错误,它将返回一个标准错误代码,并附带一条文本消息。

randpay_createaddrchap (uint32_t risk, int timeout)

Emer节点方法(由受款人调用)为付款人创建一个风险大小的可能地址空间。此结果可用于NEEDPAY协议步骤。

它为指定的风险创建私钥/公钥对,并基于公钥为付款人形成“原始”地址的addrCHAP空间:

它不会对钱包(wallet.dat)或区块链进行任何更改,但会保留以下一对:

addrCHAP->;共享密钥。

RAM中设置超时秒数。当收到Randpay_submittx调用中的Randpay付款时,此对受款人非常有用。

返回值:

十六进制编码的addrchap - 160bit
NEEDPAY步骤中,受款人将生成的addrCHAP传递给付款人。



randpay_createtx (double amount, char[] addrchap, uint32_t risk, int timeout, bool naive=false)

付款人调用此方法将金额创建为从addrCHAP随机生成的受款人地址的金额(彩票)。事务中使用的输入被阻塞超时(通常在30-60秒左右)。屏蔽意味着这些UTXO在超时秒内不能用于来自同一钱包的其他付款。服务器必须在此期间付款并取钱,否则这些钱将可用于其他付款。如前面所述,可选Naive参数启用NaiveRandpay事务。在这种情况下,事务是一个较短的输入。如果支付方对收款人的合作行为有信心,则朴素的RandpayTransaction对于调试非常有用。.

算法:

  • 算法:

    addrchap从十六进制转换为二进制。
    (RiskaddrCHAP)生成原始地址:

uint160 pay_addr = risk * addrchap + GetRand(risk);

创建到rand_addr的付款事务,确保在vout[0]中存储到上述地址的付款。
阻止使用的输入。
签署所有交易记录输入。.

  • 如果这不是一个幼稚的事务,请通过从RandPayUTXOvin[0]添加支出来创建随机付费输入:EC...EC:0

 

返回值:

  • Randpay_tx_hex - hex raw transaction

此方法的结果是支付人在支付步骤中发送给收件人的Randpay支付交易。



randpay_submittx(char[] Randpay_tx_hex, uint32_t risk)

在这里,受款人的节点首先验证RandpayTransaction,然后通过将其与以前存储的addrCHAP->sql密钥对进行比较,检查付款人是否猜到了地址。如果付款人运气不佳且地址相同,则:

把钥匙转移到钱包上,这样收款人就可以把收到的钱花掉。
登录(对于非朴素事务)并将事务发送到网络。
该方法支持Risk=0的特殊值。这是轻型客户端事务的特殊情况。它告诉Emer节点验证事务,如果已签名了RandPay-in,则将其发送到区块链。在此过程中,节点不使用addrchap->ShareKey对,不进行任何签名,也不将任何DB2Key转移到它的钱包中。这是假设,轻钱包将做这些事情本身。

返回值:

  • 来自vout[0]的金额。
    Won - 表示彩票是否有效

RandpayURI接口
除了上述API之外,Emerstone钱包还包含一种机制,用于通过外部应用程序(Web浏览器)通过URI调用来发送Randpay付款。这类似于比特币的BIP21机制,也得到Emerstone的支持。它允许网站通过在网页上创建一个特定的URI,通过用户的浏览器请求Emersing微支付。一旦用户点击链接,用户的钱包就会立即支付给网站(当然是在确认之后)

网站可以使用此界面销售对文章或内容(视频、音乐等)的访问。例如,网站可以通过创建参数为“金额=10000和风险=10000”RandPay请求,请求0.001 EMC访问文章。以下是此类请求的URI示例:

emercoin:randpay?amount=10.0&chap=00deadbeef&risk=10000&submit=http%3A%2F%2Frandpay.news.com%3Fid=777%26article=666

让我们详细研究RandpayURI结构。看起来是这样的:

emercoin:[//]randpay?amount=DOUBLE&chap=chap_hex&risk=INT[&timeout=INT]&submit=CALLBACK_URI

方括号表示可选的URI元素。此接口的URI(金额、CHAPRiskTimeout)参数对应于Randpaycreatetx()调用。

金额 - 支付交易记录金额。如果票赢了,付款人会付这笔钱。
由收款人(网站)生成的CHAP - 彩票要求,采用十六进制编码。
风险 - 反向获胜概率。
超时 - 将阻止参与事务的UTXO输出的秒数。

Submit参数指定回调URI。这就是用户的钱包将通过HTTPPOST以十六进制编码发送生成的RandpayTransaction(彩票)的地方。RFC3986中保留的特殊字符(例如“/&”)必须采用百分制编码,以避免原始URI和回调URI之间发生任何冲突。

钱包用户可以在emercoin.conf中指定控制界面行为的参数(默认值在下面的“=”符号后给出)

  • rp_max_amount=0 - EMC中未经确认即可发送的最大交易量。.

  • rp_max_payment=0 -无需确认即可在EMC中发送。

  • rp_timeout=30 —秒数,用于阻止在RandPay事务中使用的输入

  • rp_submit=false —是否必须在付款确认窗口中自动选择“提交”按钮。默认选择是取消,即取消付款。



安全

下面我们将考虑付款人的一些可能的欺诈场景和打击它们的方法。我们还提供建议,允许收款人最大限度地减少可能的欺诈损失。

攻击Randpay子系统的方法有两种:形成无效事务以获得更少或根本不支付,或通过双倍开销(DS)取消交易来攻击区块链一致性。

交易攻击:

此处讨论的攻击场景在Randpay中是无用的,因为当前代码具有防止此类攻击的机制。不过,我们认为他们在这里是为了教育的目的。

尝试形成风险值不同于交易详细信息中指定的风险值的交易。
导致submittx中的addrCHAP提取不正确,导致错误代码。解包后的addrcahp与其他人匹配的概率非常低,可以忽略不计。即使发生这种情况,收款人也会得到这笔钱,这也是一件好事。

2。试图支付低于要求的金额。

分析Submittx返回的数量时检测到。

3。试图用不存在的或以前用过的硬币来支付交易费用。

在提交的验证过程中检测到。返回错误代码。

4。尝试提供属于收款人的地址作为输入,并通过更改窃取收款人的钱。

在提交的验证过程中检测到。返回错误代码。

5。尝试为RandpayUTXO重用从以前发布的事务中获取的其他人的签名。

这是没有意义的,因为交易和目标地址是由付款人创建的,因此他们使用带有其他地方找到的签名的随机支付是毫无意义的。他们还不如在没有任何随机支付的情况下创建一个天真的交易,让收款人不必证明自己拥有该地址。

共识攻击:

与任何其他支付交易一样,Randpay交易也容易受到双重支出(DS)的一致攻击。从这个意义上说,它并不比后者更好或更糟。对抗一致攻击的最有效方法是等待足够的区块链确认,就像任何区块链系统一样。但在某些情况下(例如在销售通话记录时),您没有时间等待确认,也没有其他选择,只能在没有确认的情况下工作。在这种情况下,Randpay的表现略好于传统的机制,因为是受款人决定是否取得胜利,以及是否在区块链上公布交易,即他们具有某种先发制人的优势。下面我们将考虑几种未经确认的RandpayTransactionDS一致性攻击场景。

  1. 付款人生成DS,发送RandpayPayment,然后立即将DS发送到区块链。结果是收款人接收DS和完成提交之间的逻辑竞赛。如果收款人是第一个收到DS的人,他们可以跟踪欺诈行为。由于支票是在任何时候进行的,无论它是否是中奖机票,在第一次实际付款之前,欺诈行为都会被检测出来。因此,付款人可以欺骗收款人的实际支付金额,即金额/风险。
    请注意,骗子越早启动DS,攻击成功的可能性就越大(DS最终会出现在区块链上),但收款人检测到欺诈的可能性也越大。

    但考虑到Randpay交易在大多数情况下都不起作用,这种欺诈很可能会在一张丢失的罚单上被发现。但是,如果网络拓扑未知,收款人平均会面临损失一半实际支付金额(即金额/风险/2)的风险。

 

为了打击这类欺诈,收款人的策略是在提供产品或服务之前等待大约0-10秒的随机时间间隔,同时监视区块链是否存在欺诈性DS交易。如果您看到一个,则无论哪个事务赢得逻辑竞赛,都不要提供该产品。

 

  1. 付款人生成一个DS,但只有当他们支付的RandpayTransaction到达他们的内存池时,才将它发送到区块链。换句话说,他们只有在看到兰帕伊赢得了他们的钱后才会发起攻击,从而试图把钱抢回来。在这种情况下,付款人几乎没有机会拿回它,因为他们收到了他们赢得的交易的副本,该副本已经在区块链上分发了,这很可能会拒绝DS

    而且,由于Emerstone根据收到的时间有严格的交易优先级,而且由于没有依赖于费用的优先级,骗子无法通过将原始交易“挤出”内存池来提高DS交易的优先级。

    为了将这种可能性降到最低,收款人服务器的连接设置必须只允许与几个已知可靠的对等点进行连接,以避免将获胜的Randpay交易直接交付给诈骗者,而是让它有时间在区块链上“扩散”:骗子通过区块链获得Randpay副本的时间越晚,他们的DS赢得竞争的机会就越小。当受款人获胜时,在持有金额的同时延迟产品的转移也是很有用的。

    对于新的、未知的付款人来说,限制风险是有意义的,这样他们就不会夸大赢取金额(请注意,如果攻击成功,它将赢得全部金额,而不是金额/风险)

 

  1. POS铸造骗局.

在这种情况下,scammer找到一个解析该块的内核事务,并立即将一个包含DS的块附加到它。但他们没有把区块送到区块链上,而是购买了兰帕伊(Randpay)的产品。收到产品后,骗子在区块链上发布块,从而收回资金,因为DS交易将有一个确认,而原始的Randpay交易将没有!但我们注意到,只要付款人保持阻止被公布,有一个机会,其他人将关闭它,付款人将失去Minter的奖励解决它。这里有两个选项,类似于上面描述的选项:

骗子总是发布延迟的阻止,从而暴露自己给收款人,即使兰帕伊没有被触发。
scammer仅在事务出现在块链上之后才发布延迟的块,从而将其从内存池中删除。
在这两种情况下,明特对该区块的奖励都有可能由于延迟而得不到,因为其他人可能会关闭该区块并获得奖励。平均风险为每延迟6秒金额的1%。这是每一个区块的情况,而不仅仅是那些收款人赢的情况。因此,损失额必须乘以风险:

损失=风险*BLOCK_REWRD*TIME_DELAY/600s

还要注意的是,为了进行这样的攻击,骗子必须有很多很长时间没有使用过的硬币,所以攻击并不总是可能的。总之,这不适合有系统的盗窃。

对卖方(收款人)的建议:

主要的建议是等待几次确认(至少一次),就像一般交易一样。它可以保护你不受骗子的伤害而不会造成太多的麻烦。

如果您确实需要实时销售,而无需等待确认:

维护客户端列表(至少按IP地址),不要让未经验证的客户端使用高风险值。
对于未经验证的客户,延迟产品或服务的交付。
通过另一个与主要钱包无关的收件人钱包跟踪DS
不要让任何人连接到你的主钱包, - 只为你信任的同伴保留连接设置(例如那些在种子池中的人)
最后,如果产品或服务对你来说不是很有价值,而且你可以在没有赔偿的情况下失去它,那么就接受因小偷小摸而失去它的风险,就像超市对小偷小摸所做的那样。

卖方的攻击

您可能会问:卖方是否可以通过提供具有多个“获胜”地址(即卖方拥有私钥的地址)addrCHAP地址空间来欺骗付款人?换句话说,卖家能否在地址空间中有两张或两张以上的中奖彩票给付款人?在这种情况下,付款的机会翻了一番,这也使平均支付金额的期望值翻了一番。

答案是:是的,这样的事件在理论上是可能的,但它的可能性是微不足道的,可以忽略不计。让我们仔细看看。

众所周知,Emerstone中的支付地址是一个160位的数字,是由公钥的加密稳定散列得出的,它均匀地分布在整个可能的值范围内。让我们在系统中采用位的平均风险,即大约1000000(实际值要低得多)然后,攻击者有2µ⁴⁰(14 0=16 0-20)*addrCHAP*选项来搜索并尝试为同一地址CHAP生成一对地址。使用基于生日悖论的策略,攻击者可以在大约2⁷⁰拾取中解决配对搜索任务,同时使用2⁷⁰存储单元存储密钥。假设一台现代计算机能够在10毫秒内生成一个密钥,我们得到的结果是,找到这对密钥需要超过3740亿年的时间。从这个角度来看,宇宙大约有120亿年的历史。即使我们假设攻击者拥有数百万台计算机的集群,每台计算机的功能都是现代PC1000倍,但搜索时间为374年。

总之,这种攻击在理论上是可能的,但组织它需要大量的时间和资源。这是更实际的简单的矿山应急硬币。

文档作者和Randpay创建者:OlegKhovayko

文档中文翻译者:Mr.Chiang Qun-li

返回最新动态
订阅
获得我们的新闻和活动资讯