区块链 白皮书 CryptoNote inside 注册

bitcoin · 发布于 2018年08月16日 · 最后由 bitcoin 回复于 2018年08月16日 · 1619 次阅读
本帖已被设为精华帖!

CryptoNote 设计哲学(Phylosophy)

CryptoNote 是一门技术,允许你创建完全匿名的加密货币。十多年来,我们的一些社区成员一直专注于研究与开发。我们的目标是改进当前金融衍生产品,影响当代经济学范式。

目前我们地球上的资源分配及经济状态,由少数人控制。几个世纪以来一直如此,间接使人类遭受瘟疫、战争和流血牺牲。尽管人类希望通过教育和国际化克服危机,但我们仍然没有充分决定我们的生活。

然而,随着计算机科学、数学和加密学的发展,极有可能颠覆这一现状。加密货币的出现是新世界即将到来的第一个迹象。充分利用现有技术手段,大众将制定新的透明原则,而加密算法将其保证其进行。

通过突破性创新,鼓励启蒙是我们的理念。让贫困的人员获得财务资源,让压迫者获得优质教育,饮用水和更美好生活的希望。 CryptoNote 不只是创造另一种数字货币。它携带的思想和观念,是恢复自由及和平繁荣的第一步。

环签名 Ring signatures: Untraceable payments

普通数字签名(例如(EC)DSA,Schnorr等)验证过程涉及签名者的公开密钥。 这是一个必要条件,因为签名实际上证明作者拥有相应的秘密密钥。 但并不总是充分的条件。

环形签名[1] 是一个更复杂的方案,实际上可能需要几个不同的公钥进行验证。 在签名的情况下,我们是一群人,每个人都有自己的私钥和公钥。 环形签名证明的是给定消息的签名者是该组的成员。 普通数字签名方案的主要区别在于,签名者需要一个密钥,但验证者无法确定签名者的确切身份。 因此,如果您遇到Alice,Bob和Carol公钥的环签名,您只能声称其中一个人是签名人,但您无法确定具体的他或她。

这个概念可以用于通过使用环签名中的其他成员的公钥将数字交易发送到网络,不可追踪,这将用于交易。 这种方法证明,交易的创建者有资格花费在交易中指定的金额,但他的身份与他在其签名中使用的公钥的用户无法区分。

应该指出的是,外围交易并不限制你自己花钱。 您的公钥可能会出现在其他数十个环形签名中,但只能作为混乱因素(即使您已经使用相应的秘钥来签署自己的交易)。 此外,即使两个用户创建具有相同公钥集的环形签名,签名也是不同的(除非他们使用相同的私钥)。

[1] Ronald L. Rivest, Adi Shamir, and Yael Tauman. How to leak a secret. In ASIACRYPT, pages 552–565, 2001

一次性地址 One-time keys: Unlinkable transactions

通常,当您发布公开地址时,任何人都可以检查所有交易的收入,即使它们隐藏在环形签名之后。 为了避免交易链接,您可以需要创建数百个密钥,并将其发送给您的付款人私人,但这剥夺了您使用单个公开地址的便利。

我们协议的一个重要部分是发送者使用随机数据。 即使发件人和接收方对于所有交易都保持不变,这也总是导致不同的一次性密钥(这就是为什么密钥称为“一次性”)。 此外,即使这两个人是不变的,所有的一次性钥匙也将是绝对独一无二的(每次交易,都会生成新的一次性地址,即使交易双方之前已经有过交易)。

[1] Whitfield Diffie and Martin Hellman. New directions in cryptography. IEEE Transactions on Information Theory 22 (6): 644–654, 1976.

双花问题的解决 Double-spending proof

完全匿名是否会产生双花问题,发送方将同一款项花费了多次?当然不是这样的,这与任何支付系统原则都不相容,问题可以解决如下:

环签名实际上是一类具有不同特征的密码算法。CryptoNote 使用修改过的“可追溯环签”[1]。事实上,我们将可追溯性转化为可链接性。该属性限制签名者的匿名性,如下所示:如果他使用相同的私钥创建了多个环形签名(外部公钥的集合是无关紧要的),这些签名将链接在一起,这表示双重花费尝试。

为了支持可链接性,CryptoNote 在签名时引入了一个由用户创建的特殊标记,我们称之为密钥镜像。秘钥的密码单向函数的值,在数学上它实际上是这个密钥镜像。单向性意味着只给出密钥镜像是不可能逆推出私钥的。另一方面,在计算上不可能发现碰撞(两个不同的私钥,其具有相同的密钥镜像)。使用任何公式,除了指定的公式,将导致无法验证的签名。所有考虑的事情,密钥镜像是不可避免的,明确的,而且是私钥的匿名标记。

所有用户保留所使用的密钥镜像(与所有有效交易的历史相比,它需要不大的存储量),并立即拒绝具有重复密钥映像的任何新的环签名。 它不会识别不正常行为的用户,但它不会阻止由于恶意的意图或软件错误导致的双重支出尝试。

[1] Eiichiro Fujisaki and Koutarou Suzuki. Traceable ring signature. In Public Key Cryptography, pages 181–200, 2007.

抵抗区块链交易数据分析 CryptoNote blockchain analysis resistance

有很多学术论文致力于分析比特币区块链。作者跟踪货币流动,识别硬币的所有者,确定钱包余额等。进行此类分析的能力是由于地址之间的所有交易都是透明的:交易中的每个输入都是唯一的输出。此外,用户经常重复使用旧地址,多次接收和发送货币,这简化了分析师的工作。它会无意中发生:如果您有公共地址(例如捐款),那么您一定会在许多输入和交易中使用这个地址。

CryptoNote 旨在减轻与密钥重用和单输入到单输出跟踪相关的风险。付款的每个地址都是唯一的一次性密钥,从发送方和收件人的数据派生。它可能出现两次256位哈希冲突的概率。一旦您在输入中使用环形签名,就会产生不确定性:哪个输出已经花费了?

尝试绘制边缘上的输出和交易中的地址的图形,将会获得一个树:没有任何周期的图形(因为没有使用键/地址两次)。此外,有数十亿可能的图形,因为每个环形签名都会产生歧义。因此,您不能确定哪个可能的发件人的交易路径来到地址。根据环的大小,您可以从“一分之二”到“一千”中猜到。每次下一次交易都会增加熵,并为分析师带来额外的障碍。

标准的 CryptoNote 交易(Standard CryptoNote transaction)

标准的 CryptoNote 交易是由白皮书中涵盖的以下顺序生成的。

鲍勃决定花费一个输出,发送到一次性公钥。 他需要 Extra(1),TxOutNumber(2)和他的账户私钥(3)来生成他的一次性私钥(4)。

当向 Carol 发送交易时,Bob 会随机生成其 Extra 值(5)。 他使用 Extra(6),TxOutNumber(7)和 Carol 的账户公钥(8)获取她的输出公钥(9)。

在输入Bob中,将外部键(10)中的链接隐藏到他的输出。 为了防止双重花销,他还包含从他的一次性私钥(11)派生的密钥镜像。

最后,Bob使用他的一次性私钥(12),所有的公钥(13)和密钥映像(14)来签署交易。 他将结果的环签名附加到交易结束(15)。

调整自适应 Adaptive limits

分散支付系统不能依赖于单个人的决策,即使这个人是核心开发者。代码中的硬常数和魔术数字阻止了系统的演变,因此应该被消除(或者至少被削减到最低限度)。每个关键限制(如最大块大小或最小费用金额)应根据系统以前的状态计算得出。因此,它总是自适应地自主地改变,允许网络自己开发。

CryptoNote具有以下参数,可自动为每个新块调整:

1)难度。我们的算法的总体思路是总结节点在最后720个块中执行的所有工作,并将其除以它们花费的时间来完成它。工作的度量是每个块的相应难度值。时间计算如下:将所有720个时间戳(排除和所有离群值的20%)排序。其余600个值的范围是对应于80%的相应块的时间。

2)最大块大小。令MN为最后N个块大小的中值。那么接受块大小的“限制”是2 * MN。它避免了块状膨胀,但仍然允许极限随时间缓慢增长。交易大小不需要明确限制,它被块的大小限制。

平缓释放 Smooth emission

所有数字硬币总量的上限也是数字:

MSupply = 2{64} − 1

这仅仅是基于实施限制的自然限制,而不是像“N币对每个人都应该足够”这样的直觉。 为了使排放过程更流畅 CryptoNote 使用以下公式来获得积分奖励:

BaseReward = (MSupply − A) >> 18

其中 A 是先前产生的货币量。 它给了货币供应的可预测的增长,没有任何断点。

平等的挖矿权利 Egalitarian proof of work

工作量证明机制实际上是一个投票制度。用户投票选择正确的交易顺序,以实现协议中的新功能和诚实的货币供应分配。因此,在表决过程中,所有参与者都有相同的投票权。 CryptoNote 使平等的平均工作定价功能完美适用于普通PC。它采用内置的CPU指令,这些指令在专用设备或具有低延迟的快速内存片上设备上实现非常困难且太昂贵。

我们提出了一个新的内存限制算法,用于工作定价功能。它依赖于随机访问缓慢的内存并强调延迟依赖性。与scrypt相反,每个新的块(长度为64个字节)取决于所有先前的块。因此,假设的“记忆保护”应该以指数级增加他的计算速度。

我们的算法需要大约2 Mb每个实例,原因如下:

1.它适合现代处理器的L3缓存(每核心),这几年应该成为主流;

一兆字节的内部存储器对现代ASIC管道来说几乎是不可接受的尺寸;

GPU可能会运行数百个并发实例,但是其他方面却受到限制:GDDR5 内存比 CPU L3 缓存慢,并且其带宽显着,而不是随机访问速度。

暂存器的显着扩展将需要迭代次数的增加,这又意味着总体时间增加。在无信任的p2p网络中的“重”呼叫可能会导致严重的漏洞,因为节点有义务检查每个新的块的工作证明。如果一个节点在每个哈希评估中花费相当多的时间,那么可以通过大量具有任意工作数据(随机数值)的假对象来轻易地DDoS。

符合我们命题的工作证明算法之一是 CryptoNight,由 Bytecoin 开发人员与我们的团队合作创建。它旨在使 CPU 和 GPU 挖掘大致相同的效率,并限制 ASIC 矿机挖矿。

共收到 1 条回复
bitcoin 将本帖设为了精华贴 08月16日 17:24
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册