BTC-匿名性-12

95 阅读3分钟
  • 比特币系统中什么情况下有可能破坏匿名性?

    • 有人推荐每次收款都用一个新的地址,这样的话可以有不同的地址,谁也不知道哪些是属于你的
      • 实际上这些地址是可以被关联在一起的。例:网上购物,分析比特币交易中的多个输入
      • 有没有可能把输入地址和输出地址也关联起来呢?例:分析比特币交易中的多个输入的大小,比如第一个地址账户上有4个比特币,第二个有5个。产生的两个输出第一个输出转入6个比特币,第二个输出转入3个比特币。那很明显转入3个比特币的输出是找零的,因为如果它是商家的地址,就用不着两个inputs,任意一个输入都比3大
    • 当这个地址账户跟现实世界中的身份产生关联的时候
      • 最明显的例子就是资金的转入和转出(根据时间戳和经营场所做筛选,即社会工程学,例:暗网silk road的两个版本)
  • 比特币用户能采用什么样的方法尽量提高个人的匿名性?

    • 网络层network layer
      • 多路径转发。例:洋葱路由(TOR)
    • 应用层application layer
      • 把不同人的币混在一起(coin mixing)
  • 零知识证明Zero Knowledge Proof (ZKP)

    • 概念:零知识证明是指一方(证明者)向另一方(验证者)证明一个陈述是正确的,而无需透露除该陈述是正确的外的任何信息
    • 数学基石:同态隐藏
      • 如果x,y不同,那么他们的加密函数值E(x)和E(y)也不相同
      • 给定E(x)的值,很难反推出x的值
      • 给定E(x)和E(y)的值,我们可以很容易计算出某些关于x,y的加密函数值
        • 同态加法:通过E(x)和E(y)计算出E(x+y)的值
        • 同台乘法:通过E(x)和E(y)计算出E(xy)的值
        • 扩展到多项式
    • 盲签,中心化记账检测double spending,并保护个人隐私(无法追踪交易具体个体,即银行无法把交易者A和B联系起来),可以由个体A自己提供serial number
      1. 用户A提供SerialNum,银行在不知道SerialNum的情况下返回签名Token,减少A的存款
      2. 用户A把SerialNum和Token交给B完成交易
      3. 用户B拿SerialNum和Token给银行验证银行验证通过,增加B的存款
    • 零币zerocoin、零钞zerocash,从一开始的结构设计上就用了密码学的原理保证了匿名性
      • 零币(zerocoin)系统中存在基础币和零币,通过基础币和零币的来回转换,消除旧地址和新地址的关联性,其原理类似于混币服务
      • 零钞(zerocash)系统使用zk-SNARKs协议,不依赖一种基础币,区块链中只记录交易的存在性和矿工用来验证系统正常运行所需要关键属性的证明。区块链上既不显示交易地址也不显示交易金额,所有交易通过零知识验证的方式进行
      • 但时还是无法消除与实体发生交互的时候个体信息的可能泄漏,即依然无法提供100%的匿名