zoukankan      html  css  js  c++  java
  • 保护隐私同时实施有效审计监管的区块链系统

    1.区块链与匿名隐私保护


    区块链本质并不具有匿名隐私保护特性
    区块链的本质是通过分布式共识形成不可篡改的链式账本,分布式、共识、链式账本均是区块链的本质属性,而很多学者直接宣称区块链具有匿名隐私保护特性,这是不严谨的,而在论证区块链在应用中的必要性时,也需要把区块链的必要性和匿名隐私保护性进行分开论证。

    区块链的应用必须进行一定程度的匿名隐私保护
    区块链的分布式共识在提高系统的可靠性和可信性的同时,增大了数据被发送和存储的范围,因此大大提升了数据泄露的风险,而数据的泄露将会对个人的隐私造成泄露,因此区块链的应用必须进行匿名隐私保护,但至于匿名隐私保护到何种程度,则需要根据实际的应用的需求进行决定。

    2.匿名隐私保护特性


    匿名隐私保护的主要特性包括匿名性、隐私保护性、可行性、监管性。

    匿名性:区块链的交易实现对发起者及接收者的匿名保护,确保参与者执行的交易不可关联,同时不能追踪到真实用户;

    隐私保护性:区块链交易的内容受到加密保护,只有获得许可的人员才可查看;

    可行性:匿名隐私保护方案不会为智能合约的共识执行造成负担;

    监管性:监管者可以对交易进行管理性分析和查看,但不能伪造用户的交易行为。

    3.主流匿名隐私保护解决方案


    cryptnote,基于椭圆曲线公钥密钥体制,通过双公钥派生实现可监管匿名保护,简单易行;

    交易公钥注册体制,用户单次的交易公钥派生后需要交易CA的签署,fabric提交安全方案中曾涉及;

    zksnark,基于零知识证明的匿名隐私保护方案,过于复杂,应用于智能合约对性能会有较大影响;

    还有很多匿名隐私保护解决方案,但这些解决方案均需要经过适当的设计才能与应用进行结合,匿名隐私保护方案就行鞋一样,没有最大的,也没有最小的,只有更适合应用的。

    4.发展趋势


    未来发展趋势可以概括为两个:(1)理论突破,零知识证明、同态密码等技术不断进行优化,提升算法的性能;(2)应用设计,利用现有一些实用的匿名隐私保护方案,与应用进行结合,解决应用中的痛点问题。
     

    5.案例:保护隐私同时实施有效审计监管的区块链系统

    解决的问题和挑战

    分布式账本(例如区块链)使金融机构能够有效地协调跨组织交易。例如,银行可能会使用分布式帐本作为数字资产的结算日志。但是这些帐本或者完全公开给所有参与者,揭示了敏感的策略和交易信息,或者是私有的,在不向审计员透露交易内容的情况下不支持第三方审计。如何在保护参与者隐私的情况下,向监管机构提供审计和财务监督能力,同时能高效的运行,成为分布式账本在金融领域遇到的主要挑战。

    创新点

    作者来自于MIT的Media Lab,论文中设计的zkLedger是世界上第一个能同时保护参与者隐私并提供快速的正确的审计和监管的系统。zkLedger主要有三个创新点:

    1)     同时支持隐私保护和审计支持。通过使用Schnorr型非交互式零知识证明的新证明方案提供快速,丰富的审计支持。与zk-SNARK不同,该技术不需要可信赖的设置,只依赖广泛使用的加密假设。

    2)     提供了完整性。通过使用多栏式总账账本结构,银行不能向审计员隐藏交易。

    3)     高效。设计了zkLedger的分布式版本,通过缓存“承诺”和审计令牌,该版本可以为账本上的审计查询产生可靠的正确答案,完成十万次交易审计耗时少于10毫秒。

    系统设计

    1)   ZkLedger系统设计

    ZkLedger系统设计整体架构如下图所示,包含系统参与者,交易,账本三部分。

    l  系统参与者

    作者假定有N个参与者Bank1,… BankN和一个审计师。银行之间进行数字资产的交易,审计师通过对交易数据进行一些查询操作来确认是否合规或是否存在风险。

    l  交易

    在zkLedger中,银行之间的每一条交易对应于在分布式账本中添加一条记录,但这个记录中会隐藏参与交易的参与者和交易的金额,只记录交易的时间和类型。

    l  仅可追加记录的账本

    参与交易的银行创建相关记录并添加到账本中,这个账本可以是可信任的第三方来维护,也可以建立在现有的公有区块链上,如比特币区块链或以太坊区块链上。

      系统设计主要有三点:

    a)     隐藏交易细节,每一条记录无法确认参与者和金额。

    b)     使用多栏式总账账本结构, 提供完整性支持,监管者可以验证每一条记录。

    多栏式总账账本结构如下图所示,每一条交易数据都包含了每个银行的交易金额的“承诺”( zkLedger使用的是Pedersen承诺算法),“承诺”是交易金额的函数,其中,转出金额的银行的交易金额为负数,转入金额的银行的交易金额为正数,为参与交易的银行的交易金额为0,。由于并不记录交易金额,而是记录的交易金额的“承诺”值,如comm(0), 无法根据“承诺”值确认该银行是否参与了交易。同时,每个银行的所有交易数据都在记帐本里面,要么是真正的参与了交易,要么是伪参与(交易额为0),当审计者向银行询问某种类型的交易时,银行如果隐藏了某种交易,comm验证就后验证失败。

    c)      零知识证明

    零知识证明的核心是在不提供交易内容的情况下,让审查人员验证银行答案的正确性。如下图所示,审查人员要调查巴克莱拥有的欧元情况,只需要找到巴克莱的那一列数据中和欧元有关的交易,找到对应的comm值(“承诺”值),以及巴克莱银行的答案,通过分布式账本提供的一系列线性的审查函数验证答案是否正确。如果巴克莱银行隐藏其中的某一条记录就会验证失败。

    特别地, ZkLedger中采用的是Schnorr型非交互性零知识证明,对各种机密的数据可以生成不同的“承诺”值。

    2)   系统效率

    zkLedger中使用了一种新颖的多栏式表格结构,交易是一个包含每个参与者的条目的行,空的条目与涉及资产转移的条目无法区分,所有参与者的转账都在分类账中的列中。审计员在审计参与者时审计所有的交易,这遇到了性能和效率方面的挑战。

    为了提高效率,作者通过使用“承诺“缓存和审计令牌来解决该问题。

    a)     缓存

    每个参与者和审计人员对”承诺“进行缓存,每个参与者列的”缓存“不断更新,这使得生成资产证明和回答审计变得很快。

    b)     审计令牌

    为了减少沟通成本,zkLedger的设计使参与者不必为交易构建证据,用户可以单独创建交易(这与其他区块链系统的工作方式类似),但是恶意的消费者可能会尝试在其他银行的承诺中编码不正确的值,为此,作者设计了一套每个人都可以公开验证的证明,含有不正确证据的交易将被忽略。每个参与者都有一个审计令牌,他们可以使用该令牌稍后为该行开放承诺,并确保所有证明和承诺是一致的。审计令牌和一致性证明可公开验证交易的有效性,同时不泄露任何交易信息。另外,令牌是针对特定银行编码的,因此一家银行的令牌不能被另一家银行用来骗取审计师。

    含有令牌的交易项如下图所示,其中Bank3下面的Token下标错了,不是token2,应该是Token3。

    参考链接:

    https://www.usenix.org/system/files/conference/nsdi18/nsdi18-narula.pdf

    https://www.usenix.org/conference/nsdi18/presentation/narula

    https://www.usenix.org/sites/default/files/conference/protected-files/nsdi18_slides_narula.pdf

     
  • 相关阅读:
    linux下gdb常用的调试命令 .
    Programming lessons I learned
    lvalue和rvalue、传值和传引用、木桶
    gnuplot的简明教程——英文版,很不错
    100 的阶乘末尾有多少个0?
    lvalue和rvalue、传值和传引用、木桶
    gnuplot的简明教程——英文版,很不错
    100 的阶乘末尾有多少个0?
    poj1728
    poj1809
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312598.html
Copyright © 2011-2022 走看看