美文网首页Nervos Fans
速记式加密:原则

速记式加密:原则

作者: 526ba0512193 | 来源:发表于2019-03-22 16:57 被阅读3次

    为想创建项目的朋友搭建创业平台,请感兴趣的朋友加乐乐微信:sensus113

    NervosFans 微信公号:Nervosfans

    谢谢!


    前段时间我写了一篇有关利用当前网络协议中的随机性进行速记加密的技术要点帖子[1],貌似是写的太草了,后来我还开玩笑讲这篇其实是个“宣言”,因为意识到了技术方法背后的思想本身是有一定政治性的。

    尽管密码学的使用与PG13版本(“只在权限范围内保护那些明显敏感的数据”)的世界还是保持了协调一致的,但是也有很多东西,对其的保护完全符合道德标准而且“绝对”有必要保护。

    所以,问题就变成了:满足防御要求的算法(不管保护的是谁)有什么特性?

    当代密码学习惯使用Kerckhoff定律作为其公理之一,而速记式加密似乎有点离经叛道。这是因为‘传统’一般由业内人士制定,所以不介意别人知道他们在使用密码学。然而,在一个这种行径不能被接受的环境中,速记式加密就不再是备选了,倒更像是必要条件。

    区块链中的速记加密

    相信我们已经对区块链的“自由斗士”模型有所理解。这种自由是事物如何被创造、为何被创建的重要组成部分。对比特币的及其区块链的主要控诉主要有两个,两者或多或少都与隐私以及扩展性有关。

    隐私不难理解,假如我们不创建“速记加密”交易,那么政府或者其他人都会或多或少的对我们的交易有些了解;扩展性就没那么好理解了,但是若区块链不能扩展,就说明匿名集也不会很大。要知道,支付网络效应小、匿名集小势必会阻碍各位自由斗士对这类系统的使用。但是记住,扩展限制问题本来就是抗审查、独立验证系统所固有的。

    试图通过改变交易的方式来改善隐私的各种尝试则有可能使得扩展性变得更差,最明显的例子是CoinJoin[2],由于不会对金额做隐匿处理,难免会涉及大量输出,甚至是大量交易。

    另一个例子是机密交易[3];遮蔽输出意味着需要消耗更多空间来创建金额属性的必要保证,譬如范围证明这种东西,其中的Borromean环签名或Bulletproof需要大量的空间。其他专注隐私的手段,如环签名,亦存在类似的问题。

    有人说了,可以用(大量)计算来换取(较少的)空间嘛,好比zkSNARKs[4],空间相当的紧凑了,但是别忘了,zkSNARKs创建起来需要花费大量的CPU时间(而且某种程度上讲,zkSNARKs占的空间其实不小,比如创建证明时的内存使用)。

    信任本地化

    想要改善此情形,可以考虑在空间或时间中本地化信任。具体可以参见digicash的银行模型。或者参见Chaumian通证的概念。还有些专注创建此类事物的项目,譬如OpenTransactions、Loom[5]还有Truledger。

    信任也可以在时间中被本地化,前面提到的zkSnarks就是一个例子,使用了可信设置作为引导程序。这种信任可以通过多方计算协议得到改善,虽说最后变成了只有全部参与者都变节才能视最终结果失败,多少还是有点信任的影子,无论如何吧,人家已经很努力的在去信任了。

    隐私与安全

    对于任何完全(或计算上)隐藏的属性,都有相应的安全降级。假设协议P要求属性A必须满足条件C,且属性A被隐私机制M遮蔽变成A,使得C被A保证变成了事实,那么这个时候,就可以说P的安全性被M“降级”了,原因是对C的保证变成了对C的保证,显然对C的保证(不可避免地)没有(对C的)那么强,因为这里边存在多重假设,既有对M健全性的(假设),也有对C的。

    这就很麻烦的,因为M是种隐私机制,本就降低了公共可验证性,特别是条件C的可验证性,就是说如果对C*保证(可以公开验证)不能提供C,也不会有人知道的好咩。

    我们考虑下使用了Pedersen提交的比特币机密交易(先不讨论范围证明)。由于Pedersen提交是完全隐匿的只有计算约束,于是乎:

    P = 比特币

    A = 输出比特币金额

    C = 交易余额

    M = 带Pedersen提交的机密交易

    A* = 输出的Pedersen提交

    C* = 交易余额的Pedersen提交

    这里,安全性降级特指Pedersen提交的计算绑定。如果没有Pedersen/CT,就不存在任何关于金额余额的假设,因为整数本身就是“完全绑定的”,但是有了它,任何计算绑定失败的结果都是灾难性的,因为我们看不到。

    隐私与扩展

    对于任何由协议P中的隐私机制M进行模糊处理的属性A(注:这里用“模糊处理”来表示隐匿并不完美,可以对上部分作对比),都有一个相应的扩展失败。 M可以通过将可能的值/状态集合从A扩展到A[N]来混淆属性A。为了合理地提交此模糊处理,必须发布~N*size(A)级的数据。另外注意,如果多方可以协调各自的交易,则可以在不增加空间使用的情况下实现模糊处理的目标,但我们在此忽略这种可能性,原因是它要求各方同意除A之外的所有属性都相同(譬如:多个参与者必须接受自己新创建的输出值是相等的)。要知道,正常意义上的“交易”没有这样的。

    例子是大小一致的比特币Coinjoin:

    P = 比特币

    A = 交易的资金接收方

    A[N] = 一组大小相同的N个输出

    M = Coinjoin

    另一个不太明显的例子,但是套路相同的例子是基于ElGamal提交的机密交易(相对于基于Pedersen提交的CT)

    P = 比特币

    A = 交易的输出金额

    A[N] = 金额的ElGamal提交,有2个曲线点,N=2

    M = ElGamal 提交

    这里需要解释下N=2。ElGamal提交是完全绑定的,那么为了实现这一目标,提交必须有2个点,因为输入有两个值(标量),一个用于隐匿,另一个用于绑定金额。所以,在这种情况下可以看到实践中的扩展不仅仅是一个整数,而是从一个比特币编码的整数扩展到两个曲线点。这样一来,细节明显会变;一般的概念是不管模糊处理的程度为何,在不投入额外的安全性假设的情况下,都需要更多的数据。

    验证:公还是私

    上面说的这些其实是为了提出一个论点,(我认为这个论点还蛮非常强的),即这些想在区块链中寻求隐私的各种尝试,方向似乎不太对呢。

    假使我们试图将区块链本身私有化,不免背离其固有的属性。要知道区块链的一个关键特征就是公共可验证性,尽管这并意味着所有属性必须是“不隐匿”或“不模糊”的,上面也论述了各种人工隐匿手段的种种问题:要么是因为‘人工’引入了各种看不到的break,‘手动’降级安全性,要么就是降低了扩展性(譬如使用不需要压缩的完美绑定提交,或是占用大量空间或计算时间的零知识证明),再不就是直接影响去信任化(譬如可信设置)。不是说我有什么能团灭掉这些问题的办法,想表达的是这些问题每个都很棘手!

    或许‘速记式加密区块链’是个方向,比起手动隐匿交易的各种属性,不妨考虑让区块链无法理解交易的含义,但是区块链之外的任意参与方可以使用某种机制对交易内容达成一致。如此,允许人们以公共的方式利用区块链‘抗审查的状态变化证明’的主要特征,又避开了区块链‘缺乏隐私与扩展性’的bug,而且还不会降低链本身的安全性。

    具体可以参考以下例子:

    · 染色币

    · 原始示例:原子交换

    · 闪电与二层方案[6]

    · Chaumian通证

    · 客户端验证(一次性封印)

    · 无脚本脚本

    高带宽速记式加密

    加密式速记最大的问题始终是带宽;使用非随机数据时,譬如图像或视频(通常使用压缩算法来最大化信噪比),就会遇到在隐藏消息上获得足够“覆盖流量”的问题。

    注意,如果将隐藏消息嵌入到另一个随机消息中,则根本不会出现此问题。数字签名就是这种情况;譬如ECDSA和Schnorr都被作为两个随机值发布,每个值大约为32个字节。

    回到前面提到的无脚本脚本的例子,其实不难发现原子交换就是直接利用了这种方法(详见此blog post[7])。链上能看到带Schnorr签名的两笔(不是明显相关的)交易,这些交易对外部观察者来说,没有任何关联,对联系的隐藏可以说是完美的,但两笔支付的绑定/原子性仍然是安全的,不过也不是那么的无懈可击(因为它基于ECDLP硬度假设,但是普通支付亦如此)。

    注意,这是一种不同的隐藏/隐私哲学/方法:此种交换不会在链上留下任何指纹,因此模糊了匿名集的概念;该方法只用于交易(假设未来是Schnorr,或现在是ECDSA-2PC),即便多数人不会使用这项技术。为了获得与执行隐私覆盖机制M相同的效果,我们在这里牺牲了安全性或扩展性问题。

    “高带宽速记式加密”是有点标题党的意思啦,但是,由于比特币区块链的很大一部分都是随机的(问问那些试图压缩比特币的人就知道了),所以隐藏交易语义并不常见(理想状态是使用了无脚本脚本类型构造的内部签名),所以从某种意义上讲,是可以获得一种带宽非常高的、客户端到客户端的数据通信,无需占用额外的链上空间,而且不用引入“污染”区块链的其他什么安全性假设。

    相关链接:

    [1]https://gist.github.com/AdamISZ/83a17befd84992a7ad74

    [2]https://www.jianshu.com/p/db6e90c32bdb

    [3]https://www.jianshu.com/p/22664259dee3

    [4]https://www.jianshu.com/p/fc0883b0a7a7

    [5]https://www.jianshu.com/p/980a74af10da

    [6]https://www.jianshu.com/p/96568fd1eff8

    [7]https://joinmarket.me/blog/blog/flipping-the-scriptless-script-on-schnorr/

    https://joinmarket.me/blog/blog/the-steganographic-principle/

    相关文章

      网友评论

        本文标题:速记式加密:原则

        本文链接:https://www.haomeiwen.com/subject/knrcvqtx.html