七,比特币系统是否可以实现百分之百的匿名?

思考:
1, BTC 与 银行转账 哪一个的 anomity 更好?
BTC system 是一个 去中心化的系统,系统中 所有用户 均可以 查看 block(账本),而 银行 是一个 中心化系统,除了 国家单位 外,一般的普通大众 均没有 权限 查阅 转账交易。如果 BTC account 可以 100% 保证 无法 关联到 社会人,那么,无疑,BTC 具有更好的匿名性。但是,BTC system 并不能保证 100% 的anomity,只要 查出 BTC account 对应 的 社会实体 ,那么,该实体在 BTC system中的 transaction info 将一览无遗,从这个角度来说,中心化的银行系统 能够 更好的 保护 大众的隐私。

从理论上讲,如果 银行 允许 用户 匿名存取cash的话,其 隐私性保护 要比 BTC system 好,因为,银行账本 只有 通过司法手段
才能获取,普通大众 并没有 权力 查阅该账户。

2, BTC 与 现金 哪一个 的 anomity 更好?
BTC system中 交易使用的 BTC 都可以 进行 追踪溯源,这就相当于 在一张 纸币上 签上自己的 昵称 一样,只要 找到 昵称的主人,便可以将 该 实体 的 transaction info 全部揪出,相反,现金(如:RMB),不具备 任何 个人标识,具有完全的 anomity,也因此,大型的非法交易 往往 以 现金交易 的 方式实现。

3,BTC system,通过什么方式可以破坏其 anomity?
在BTC system中,clients 可以创建 n 个 BTC account 进行 transaction,保证自己的 private,这种方式 看似 很好的 保护了 自己的隐私,但是,在实际的操作中,others 仍然有可能通过一些手段,将 不同的 accounts 关联到 一个 client。
以 网上购物 为例(如下图 ),BTC system允许 transaction 有多个 inputs 和 多个 outputs:
由于 这2个 inputs 的 private key 均是 由 同一个node 所 控制,我们 可以 speculate:这两个 input account 均属于一个人。

在 shopping online时,一个 client的一个 account 可能没有足够的BTC 去支付 该笔transaction,因而,可能 同时利用 2给 account 进行 transaction。

相应的,该笔 交易的 outputs 中 也可能 有 一个 为 该 node 的 account。通过比较 outputs 中的 BTC金额,可以 粗略分析 出 哪个 output 有可能是 买家的 零钱 account。

在一些 transaction 中,有些 买家 会将 交易后的 余额 转到自已的 另一个 account。 判断 是否 outputs 中 有 该 node 的 account,可以通过 实现 2个 outputs 中的 BTC 额度 来实现,如果 一个 output BTC 金额 明显 大于 另外一个 output中的转账金额,则,后者 很有可能为 买家node 自己的account。

据此,可以将一笔transaction中的inputs 和 outputs 与 一个 client 关联到一起。

有时,为了 confuse others,一些transaction中会刻意 生成一些 meaningless outputs,以掩盖自己真正的 account。即便是使用这种方式,来 给自己的 private 更 powerful 的 保护,其也并不是万无一失的。因为,目前 BTC-based transaction 往往都是由 一些 BTC 钱包系统 生成,而市面上,常用的BTC 钱包系统 就那么几个,只要 弄清楚 这些 钱包系统 generate transaction 的 方式,便 有可能 将 transaction 中,client 使用的 real account 揪出来。

note that: 目前,市面上的 BTC 钱包系统,for the sake of clients private protect,可在一笔 transaction 中自动为买家 生成一个 新的 零钱account( output )。

1,可能 破坏 BTC anomity 的 几个方面:
1.0 BTC system账本的不可篡改性: transaction 一旦 被写入 block,便 永远无法抹去,所以 在BTC system中,在关联accounts(账户之间发生转账行为)时,一定要谨慎。如果 node 的every account是单独使用的,假使有一个 account 暴漏,其影响还是 有限 的,但是,如果 将 accounts 关联到一起 使用的话,只要一个 account被暴漏,则node的所有account均会 暴漏。
1.1 可以找到 多个 accounts 对应的 node: others 可以使用一定手段 将 一笔 transaction 中的 多个 inputs 与 一个 node 关联在一起(can even associate “many inputs and outputs” with one node)。
1.2 BTC account 实际持有人的 真实身份 可能 在现实世界中发生 泄露: the relationship between BTC account and corresponed real social identity maybe revealed in the situations where the two are associated in the real world,like buy coffee using BTC in the offline shop。( 在 二者发生关联 的 实际场景 中 暴露。)

在 该种 risk 中,最常见的几种场景:
situation 1,BTC 的 买入/卖出 过程,在这一 过程 中,势必 会 有 资金的转入转出 操作,可以 通过 盯紧 BTC system中 资金的转入转出链,而 揪出 BTC account 的 社会身份。如:在 反洗钱 行动中,司法部分可通过 这一手段 监测 可能的 洗钱行为。
situation 2,用 BTC 在 实体店 进行 支付,也会造成 身份泄露,besides,BTC transaction confirmation 需要 在 该交易 所在的 block 后,在跟 另外 6 个block,会造成很大的 支付延迟,且还需要支付 一定的 transaction fee 。
situation 2中,不光 与你直接进行transaction 的 社会实体 会 知道你的 身份信息,甚至于 你在消费时 不小心 遇到的 some acquaintance 也可能 通过 筛查 区块链中 当时的 交易 记录 而 揪出 你的 account info,从而 获得 你在 BTC system中的 所有 transaction info。

there is a funny thing:一家credit card company 为支持 accdemic research,便将其名下 所有 credit transaction account 取hash ,交给了 学者 做 研究,但是,有些学者 发现,尽管 在 研究之前,以将credit account 中 一些 具有 识别性的信息 给 去掉了,但是,仍然能够过 筛查 某一 credit card 的 transaction list,而 最终锁定 该 Hash(Creditcard) 的 真实社会身份。
在 去中心化的 BTC system 中,由于 所有 account的 transaction info 均可在 block 中自行查找,因而,others 很有可能 通过 某一 account的 offline 交易记录 追踪,而将该 account的真实社会身份揪出来,继而 通过 查找 其 在 BTC system中的 其他 关联 account的 transaction info,将 该 实体人 在 BTC system中的所有 交易记录 全部 罗列出来。

从上边的实例中,可以看出 BTC system 并不能保证 100% 的匿名性。if you hide your identity from your neigbours and friends, BTC system can satisfy your need。but if you wanna make illegal transaction in BTC system,its private protection level cannot fullfill your request。
2,how to improve the anomity level of BTC system in both application layer and network layer?
2.1 要实现 anomity,首先 需从 network layer 阻断 发信人的IP地址 被发现的可能:
IP 地址 与 个人身份 之间 有 强关联性,要实现 匿名性,首先 需要 实现 IP地址 发出 info 在 network 中的 不可查找性,目前学术界已经 给出很多的解决方案,其中一个 commonly used way 为:多路径转发:
洋葱路由(TOR)就是 利用 多路径转发,在 sender 和 receiver 之间 设立了 多个 转发info 的 节点,通过这种方式 隐藏 在网络中 发送Info 的IP地址,只要 sender -> receiver 这一条链上,有一个 转发节点 是 不存恶意的(不暴漏 发信人的 IP 地址,便可保证 IP地址不被人揪出)。

2.2 application layer 层面上,anomity 的 实现方式 :
由于 BTC system是一个 区中心话系统,others可以通过 对 不同 accounts transaction 进行 溯源,而将 同一 node 的 不同account 找出来。(coz:每个account 拥有的BTC,都可在 blockchain 中 trace 到其 最初 来源,通过 这种方式,可以 发现 不同accounts 的 潜在关联)。
为了 防止 对 BTC system 中 accounts 进行溯源,出现了一种 coin mixing 的 服务,它可将 不同 accounts 的BTC 混合到一个pool中,然后 该pool 将 BTC 通过一定的技术手段 去掉 包含个人信息 的部分,并将其重新发给 clients ,这样一来,就不能通过trace blockchain 追踪 到 这些 account 中 BTC 的出处。(这种方式 基于 如下假设:node 拥有的 accounts 不能通过 查找 node info 而 获取;coin mixing company (这些公司 本身也是 anomity的)能够 保证不泄露 用户account信息,且 保证不卷款跑路)。
如果 coin mixing system 设计不好,others 可能 通过 traffic analysis 或者 timing analysis 分析出 哪些coin 是 你存进去的。更重要的是,如果 兜售 coin mixing service 的 company 不遵守 职业道德,将 购买 coin mixing service的clients 泄露出来,那么,coin mixing 将 失去 效用。note that:目前,系统中 并没有 信誉度较高的 coin mixing companies。

coin mixing 相当于 截断了 others 在 blockchain 中 追踪溯源 的 路径,使其 无法 获知 account 中 BTC 的最初来源,进而,无法 将其 与 其他 accounts 关联在一起,从而无法获取 他们 背后 隐藏node 的 所有transaction info。

除专门从事 coin mixing service的 公司以外,一些 在线钱包 也 能达到 coin mixing 的效果:clients将 BTC 存入 在线钱包 以后,其 内部可能会执行某些操作 将 BTC 中 带有个人标识 的 部分 抹去,这样 clients 在次 取出的BTC 可能便不是 其原有BTC。尽管 在线钱包 可能达到 coin mixing 的效果,但 其 并不保证 会 履行 coin mixing操作。

besides,一些 带有加密性质 的 交易所 也可能 会实现 coin mixing effect,比如:client 将其 拥有的 BTC 存入 交易所,过一段时间后,由于BTC 市值下跌 等缘故,在将手中的BTC 卖出然后买进 ETH(或多次买入卖出),然后,在需要BTC时,再从 交易所 买入 BTC,此时到其手中的BTC 可能已经不是其 原来拥有的 BTC。

在这一情况中,要保证 coin mixing realize,需要 保证 交易所 不透漏 BTC 的 转入转出 记录。

3,零知识 证明
3.0 “零知识证明” 定义
一方(证明者)向 另一方(验证者)证明一个陈述是正确的,而无需透漏除该陈述是正确的 以外 的 其他信息。

在BTC system中,如果 我要向你证明,我是某account的拥有者,则我只需 用 对应的 private key 产生 一个 signature ,假设你知道 该publickey,那么你只需用 publickey 验证一下 该 signature 的正确性,既可验证我是否 持有该account的 private key(BTC script章节中,曾讲,将 inputscript , outputscript 拼接以后,即可验证 某input 提供的 某 publickey signature 是否 right,如果 right,则 证明 input 确实 为 该 account 的 持有者)。在这个例子中,证明者 是 我,验证者 是 你,但是,对于该 case 是否 为 “零知识证明”,存在争议,因为 “我 还是将 除 我拥有 该 account privatekey 以外的陈述 info 透漏了出来”,具体 还 应根据 实际应用场景 来决定 其 是否属于 零知识证明。如果,在实际应用场景中,泄露 signature 也没有问题,那么即可认为 此举 no problem。

“零知识证明” 是利用 数学中的“同台隐藏” 理论实现的,其具体内容如下:
在这里插入图片描述
about:
first property:我们也可以 claim that:if E(x) != E(y),x != y;
second property:can not infer x from E(x) :

hash function 同样具有 相关性质,即:can not infer x from H(x)。因为,从 H(x) 反推 x,往往会损失 x 的 一些值。

third property:
E(x+y) = E(x) + E(y);
E(x*y) = E(x) * E(y);
根据以上两个公式,可以将 同态理论 扩展到 多项式;

举例说明:

在这里插入图片描述
在该种解决方案中,Alice 用到了 同态理论 property first:与 Hash(x)不同,E(x) 不会出现 碰撞,这样 即 通过 E(x) + E(y) = E(7) 证明了 x+y = 7,同时 因为 E(x) != E(y),也证明了 x != y。
但是,这一solution 存在一个bug,即:Bob 可以 通过 蛮力算法 遍历 x 取值,从而找出 x’,使 E(x’) = E(x),从而可证明,x’ = x;
为了 防止 Bob 通过 蛮力算法 猜出 x,y 取值,Alice 可以 通过 将 x,y 加减 一个 nonce 值,防止 Bob 找到 x,y 的 真实取值。

如果 央行 通过 signature 发行其 digital coin,则 网上用户 可以 通过copy digital coin(coz:digital coin is actually a digital document),来进行 double spending。
为了防止 用户 进行 double spending,央行 可以 做一个账本,记录 每个 client 拥有的 digital coin number,但是这一方案存在一个问题,即,央行 会被 involve 到 所有 transaction中,使得 该 digital coin 变为一个 中心化 系统。在此系统中,央行 将 掌握 所有 用户 的 transaction info。
为了实现 交易系统 的 去中心化,用户 可以 通过 “盲签(如下图示)” 的方式,保护其 transaction info,使得 央行 无法 窥探 用户 隐私:
在 盲签 中,digital coin 上面的 token 并非 由 央行产生,而由 用户 自己 产生。
step1:用户 向 银行提供一个 SerialNum,银行具此 generate 一个 由 用户 编号 的 digital coin,并对其 签名,此番操作后,A 将拥有 银行 发行的合法 digital coin(相当于 A 向 银行 withdraw 一定 数额的 digital coin,银行 则 通过 这种方式 将 digital coin发放给 用户),同时,银行 会减少 A account 的 存款。
在上述过程中,由于 银行 并不知道 SerialNum 的 具体数值,因此,即便日后,带有 该 SerialNum 的 digital coin 在 系统 中 流通,银行 也 无法 知道 该 digital coin 曾经的 持有者 身份。从而很好的保护了 A 的 transaction info。
用户提供 SerialNum 给 银行系统,经过 同态处理的SerialNum,由于具有 second property:由E(x) 无法反推出 x,因此,银行即便知道 E,以及 E(x),也无法得出 确切的x值。

但是,有一个问题:如果银行将E(x)记录在案,当有人持 含有SerialNum 和 Token 的digital coin进行 topup 时,银行可以 E(x‘), 并与 database 中 存储 的 E(x) 记录 进行对比,从而 找出 最初 拥有 SerialNum digital coin 的 持有者。 only if 银行不知 同台函数,才能 确保 A的信息 不被揪出。可是,如果 银行 没有 同态函数,那么,当B 拿着SerialNum and Token 去 银行 topup 时,银行如何 辨别 该 digital coin
并不是一个copy coin???除非,银行将 回收的 digital coin 上的 SerialNum 做 无差别存储,in this case,就需要保证 银行 拥有 很高的 credit score。
step 3:B 向 银行提供 这些info,主要目的是 为了 让 银行 验证,该 coin 在 系统中没有被花过,即 不存在 double spending(银行 要 完成 verification ,必须 知道:该SerialNum 在 transaction system 是否 曾 流通?如果 该 SerialNum 曾在 online 流通,其会被 银行 记录 在案,以防 doublespending),如在 online 中 没有 该 coin 的 流通记录,则可 在 B account 中,增加相应数额 的coin。而 B 向 银行 withdraw coin时,只需执行step1 操作,即可保证其 private info 被保护。
还是老问题:唯一能确保 银行 确实无法得知SerialNum的 方法 是 其 不具有 同态函数,但是,如果银行 没有 同态函数,如果 验证 一个 SerialNum确实为 其 发行过的 coin。除非,同态函数 对 银行 是 隐藏的,其 x的verification 对银行来说 也是不可见的,可是 How?在一个 中心化的系统实现这些?
maybe to know the magic,need to gain the knowledge of 盲签!

在这里插入图片描述
3.1 零币和零钞
零币 和 零钞:为达到 100% 匿名性 而 专门设计的 加密货币,下图为 其 具体 definition。

BTC 只能实现 pseudo-anomity,但是 其 无法 清除 accounts 之间的 link-ability。

在BTC system中,每一笔transaction 都需要 追踪 其 BTC 的来源,但是,在 零币 中,通过密码学原理,使得系统 只能证明 被花的币 是 系统中 存在 的 一个币,但是 无法获知 该币 的 流通路径。利用这种方式,零币 消除了 accounts 之间的 link-ability。

**零币 和 零钞 的 实现 涉及 到了 密码学中比较复杂的数学原理。**其在市面上 比较小众,原因有3:
1,其 对 强anomity 的 实现,是以牺牲 系统性能 为代价的;
2,其 对 初始化要求较高,初始化时 使用的 随机源 要能够完全销毁掉,否则,会出现 安全漏洞;
3,需要 强匿名性 的 用户 不是很多,BTC anomity 已经 能够满足 应用需求;
4,其 在 与 实体世界 进行 交互时,仍然 存在 暴漏身份 的 风险;

猜你喜欢

转载自blog.csdn.net/u014765410/article/details/122707490