文章目录
1.比特币的匿名性不是真的匿名,相当于化名,现金是真的匿名,
2.如果银行用化名的话和比特币的匿名哪个匿名性更好?
银行匿名性比比特币好,因为比特币的区块链的账本是完全公开的,所有人都可以查,银行的账本是受控制的,银行的有权限的工作人员可以查看,有些司法手段可以调取银行的信息,但是普通老百姓是查不到别人的账本的。这方面控制的比比特币好。
3.比特币什么时候有可能破坏匿名性?
第一:为了比特币的匿名性有的人故意生成很多账户,但是这些地址账户有可能被关联起来。根据交易中的inputs和outputs分析哪些账户是一个人的。Inputs中的交易都是一个人的,outputs中有可能有找零钱的账户,找零的地址也是这个人的。为了更强的隐私保护可以人为的产生一些没必要的输出,为了迷惑别人。但是这些交易都是用钱包软件生成的,现在很少有人手工生成这些比特币转账交易,常用的比特币钱包就那几种,所有如果把常用的比特币钱包生成交易的方式搞清楚那么区块链上很大一部分转账交易都可以分析出来。常用的钱包到现在为止没有故意生成这些不必要的输出地址的。
第二:这些地址账户和你在现实社会中的真实身份也可能产生关联。任何让比特币系统中的虚拟币和实体世界发生联系的时候都有可能泄漏身份。最明显的就是资金的转入和转出。用比特币支付的时候。
比特币的匿名性不是绝对的,没有想象中的那么好。
4.采用什么手段尽量提高匿名性?
比特币协议是运行在应用层,网络层是一个P2P 的overlay network,所以要提高匿名性要从两个方面入手,(1)网络层:网络层的匿名性是比较好解决的,有很多的方法,已经有了很好的解决方案,比较普遍的就是用一种多路径转发的方法,像洋葱路由。
(2)应用层:把各个不同人的币混在一起(Coin mixing),Coin mixing真正实施起来有一定的复杂性,如果设计不好的话可以根据当初存进去币的数额推出来哪些币是你存进去的,还有更重要的一点是在区块链没有信誉度特别高的Coin mixing的服务,很多Coin mixing服务本身也是要保持匿名性的,Coin mixing服务匿名造成的结果是投进去的币可能被卷款跑路。
在线钱包本身有可能带着Coin mixing的特性,但是在线钱包不保证要履行Coin mixing的功能。加密货币的交易所一般来说有种天然的Coin mixing的性质。
5.为什么保护隐私性难度挺大?
本质是区块链是公开的而且是不可篡改的。
6.零知识证明是什么?
答:零知识证明是指一方(证明者)向另一方(验证者)证明一个陈述是正确的,而无需透漏除该陈述是正确的外的任何信息。
7.比特币相关内容中零知识证明的例子
比如某人说某个比特币账户是他的。要证明这点怎么证明?如果这个比特币账户是我的说明我应该知道这个比特币账户的私钥。就是证明我知道这个比特币账户的私钥,但是我不能把私钥告诉你,可以产生一个用这个私钥产生的签名。假设你是知道这个账户的公钥的。那么可以验证一下这个签名的正确性。
这个例子是不是零知识证明是有争议的。这个证明过程中我没有把私钥泄漏给你,但是我泄漏了用这个私钥产生的签名,这个和零知识证明中的”而无需透漏除该陈述是正确的外的任何信息。”还是有一定差距的。这个在实际中要看应用场景。你透漏的额外信息有没有问题要看你的应用场景。
8.零知识证明的数学基础是同态隐藏。
9.同态隐藏:
- 如果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)的值。
-扩展到多项式
同态隐藏的三个性质中第一个性质说的是这个加密函数值不会出现碰撞,和哈希函数不一样,哈希函数有可能出现碰撞。这个性质反过来说明如果两个加密函数值是相等的那么它原来的输入也是相等的(这个是它的逆否命题)。
第二个性质说明加密函数是不可逆的。有hiding property特性。第三个性质是最重要的这叫同态运算。说的是对这些加密之后的函数值进行某些代数运算等价于对这些输入直接进行代数运算然后再加密。比如第一个同态加法加密值的和等于和的加密或者不一定相等,可以通过和的加密算出来。同态乘法也是类似的。
10.例子:Alice想要向Bob证明她知道一组数x和y使得x+y=7,同时不让Bob知道x和y的具体数值。
答:简单版本
- Alice把E(x)和E(y)的数值发给Bob
- Bob通过收到的E(x)和E(y)计算出E(x+y)的值(利用了性质3)
- Bob同时计算E(7)的值,如果E(x+y)=E(7),那么验证通过。否则验证失败。
这个证明的方法为什么满足要求,第一条Alice把E(x)和E(y)的数值发给Bob利用同态隐藏第二条不可逆的性质有E(x)和E(y)没办法反推出x和y。Bob同时计算E(7)的值,如果E(x+y)=E(7),那么验证通过第三条利用同态隐藏第一条性质的逆否命题(两个加密函数值是相等的那么它原来的输入也是相等的)。
这个简单版本的例子有些缺陷,Bob可以遍历x的一个个取值用蛮力算法去猜出原始x和y是多少。所以在更复杂的这种解法中Alice把输入送给Bob之前要对x和y的值做一些随机化处理,随机化处理的方法是保证x和y加起来还是不变的。
11.盲签方法
- 用户A提供SerialNum,银行在不知道SerialNum的情况下返回签名Token,减少A的存款
- 用户A把SerialNum和Token交给B完成交易
- 用户B拿SerialNum和Token给银行验证,银行验证通过,增加B的存款
- 银行无法把A和B联系起来
- 中心化
之前讲的中心化的央行数字货币除了央行要参与每次交易之外,还有一个问题隐私保护性央行什么都知道。你做的每笔交易给每个人的交易央行都知道央行知道你的所有交易信息。
有没有什么办法我们既让央行做这种中心化的记账检测双花攻击,又不让他知道呢?
虚拟货币的编号不能是央行产生的,改成用户产生的。比如我在央行存了100个央币,我要取1个央币出来,每个币也得有个编号,用户A在本地产生一个编号(SerialNum),提供给银行SerialNum,银行在不知道SerialNum内容的情况下进行签名返回签名Token。同时减少A的存款。用户A给用户B做转账交易的时候,用户A把SerialNum的明文和Token交给B完成交易。用户B拿SerialNum的明文和Token给银行验证。银行验证通过后增加B的存款。这样银行无法把A和B联系起来。
12.零币和零钞
- 零币和零钞在协议层就融合了匿名化处理,其匿名属性来自密码学保证。
- 零币(zerocoin)系统中存在基础币和零币,通过基础币和零币的来回转换,消除旧地址和新地址的关联性,其原理类似于混币服务。
- 零钞(zerocash)系统使用zk-SNARKs协议,不依赖一种基础币,区块链中只记录交易的存在性和矿工用来验证系统正常运行所需要关键属性的证明。区块链上既不显示交易地址也不显示交易金额,所有交易通过零知识验证的方式进行。
比特币在很大程度上提供了匿名性,但是他不能完全消除关联性。
那么我们能不能设计一种新的加密货币,这种加密货币从一开始体系结构设计上就用了密码学的原理保证匿名性。零币和零钞是专门为了匿名性设计的货币。
零币是存在一种基础币(可以是比特币),本来是有这个基础币的,你把基础币搞的不能花了然后换取了零币,零币在花的时候只需要证明你花掉的币是系统中存在的某一个合法的币就行了。不用透漏你花的是具体哪个币。这是和比特币的本质区别,比特币是每笔转账交易都要说明币的来源。零币和零钞是说证明的时候从数学上可以保证你花的币是以前区块链上某个合法存在的币但是不知道是哪个,这样关联性就破坏了。
1.这些专门为匿名性设计的加密货币到现在也不是很主流,因为这些加密货币为了匿名性付出了一定的代价,它在性能上是有一定的损失的。2.而且在数学原理上对初始化有比较严格的要求。初始时用的随机源要能够销毁掉,如果没有很好的销毁掉的话那么会有一定的安全漏洞。3.需要强匿名性的用户不是很多,比特币的匿名性已经够用了。4.与实体进行交互时匿名性也得不到保证。