比特币的匿名性
比特币的匿名并非真的匿名,而是假的匿名,匿名性不如现金。
什么情况下有可能破坏匿名性
比特币地址和交易都是在区块链中公开的,且不可篡改的。
- 输入地址和输出地址有可能可以通过交易分析关联起来。
- 跟现实身份产生关联的时候:
- 如法币购买或提现的时候
- 电商支付的时候
- 社会工程学
如何提高匿名性
- network layer use tor
- application layer use coin mixing
零知识证明
零知识证明:一方(证明者)向另一方(验证者)证明一个陈述是正确的,而无需透露该陈述是正确的外的任何信息。
同态隐藏的性质:
- 如果
x
,y
不同,那么它们的加密函数值E(x)
和E(y)
也不相同。- 逆否命题:如果
E(x)
和E(y)
相同,那么x
,y
也相同。
- 逆否命题:如果
- 给定
E(x)
的值,很难反推出x
的值。 - 给定
E(x), E(y)
的值,我们可以很容易的计算出某些关于x, y
的加密函数值- 同态加法:通过
E(x), E(y)
计算出E(x + y)
的值 - 同态乘法:通过
E(x), E(y)
计算出E(x*y)
的值 - 扩展到多项式
- 同态加法:通过
例子
Alice
想要向Bob
证明她知道一组数x
和y
使得x + y = 7
,同时不想要Bob
知道x
和y
的具体值。
Alice
把E(x)
和E(y)
的值发给Bob:利用了性质2Bob
通过E(x)
和E(y)
计算出E(x + y)
的值:利用了性质3Bob
同时计算E(7)
的值,如果E(x + y) = E(7)
,那么验证通过,否则验证失败:利用了性质1
盲签方法
盲签的特点是 签名的人不知道签名内容的情况下进行签名。
- 用户A提供
SerialNum
,银行在不知道SerialNum
的情况下返回签名token
,减少A的存款 - 用户A把
SerialNum
和token
交给B - 用户B把
SerialNum
和token
给银行验证,银行验证通过,增加B的存款 - 银行无法把A和B联系起来
- 中心化
零币和零钞
- 零币和零钞在协议层就融合了匿名化处理,其匿名属性来自密码学保证。
- 零币(ZeroCoin)系统中存在基础币和零币,通过基础币和零币的来回转换,消除旧地址和新地址的关联性,其原理类似于混币服务
- 零钞(ZeroCash)系统使用
zk-SNARKS
协议,不依赖一种基础币,区块链中只记录交易的存在性和矿工用来验证系统正常运行所需要关键属性的证明。区块链上既不显示交易地址也不显示交易余额,所有交易通过零知识证明验证的方式进行。