北京大学肖臻老师《区块链技术与应用》P12(匿名)和P13(思考)

1️⃣ 参考

1️⃣2️⃣匿名

① 比特币的匿名性 (bitcoin and anonymity)

比特币并不是真的匿名,而是pseudonymity(笔名,化名)。

  • 比特币匿名性比较
    • 与现金
      • 现金更好,现金没有任何信息,连假名也没有
    • 与银行
      • 银行账户是实名制,你得提交身份信息,然后才能注册银行账户,而比特币不需要,从这点上看比特币匿名性要好。
    • 与银行(允许用化名)
      • 银行的匿名性更好,比特币可以追溯你的交易,虽然很麻烦但是可以做到,但是银行是有隐私协议的,尽可能保护用户隐私

有的人推荐每次收款都用一个新的地址,这样的话可以有不同的地址,谁也不知道哪些是属于你的,看起来好像匿名性很强,但实际上这些地址是可以被关联在一起的。

  • 比特币系统中什么情况下有可能破坏匿名性
    • 第一,一个人可以生成很多个地址账户但这些地址账户是有可能被关联起来的
      • 如下图,在输出中,很有可能有一个地址是属于找零钱的地址,即花掉之后剩余的钱。在某些情况下,也是可以分析出来的。
        在这里插入图片描述
    • 第二,地址账户跟现实世界中的身份也可能产生关联
      • 最明显的例子就是资金的转入和转出,盯住比特币的转入转出链是一个常用的手段。大笔的比特币和货币的交易想不引起司法部门的注意是很难的,转入转出也是比特币隐私容易被破坏的一个很重要的时机。
      • 社会工程。在实体世界中用比特币做支付,比如国外有的商家是接受比特币支付。

这样支付账户就跟你的真实身份建立联系了。这个账户可能跟个人的其他账户也是有联系的,所以这样很容易泄露个人隐私和身份。而且该交易不仅是该商家会知道,其他人也会知道。


  • 用比特币(线下)交易的缺点
    • 延迟很长。等到交易确认要等六个区块生成,即一个小时。
    • 交易费贵。如果买咖啡,交易费可能都跟咖啡差不多贵了。
      这样的话,

Satoshi Nakamoto 中本聪是匿名性最好的


  • 一个比特币用户能采用什么样的方法尽量提高个人的匿名性
    • 从两个方面入手
      • 比特币协议是运行于应用层 (application layer)
      • 底层是 (network layer)。

  • 网络层怎么提高匿名性?
    多路径转发。跟洋葱路由 (TOR) 是一样的原理。

  • 应用层怎么提高匿名性?
    • 1) 币混(coin mixing)

      • 把不同人的币混在一起
      • 即把你的身份跟别人的身份混在一起,让别人分不清楚谁是谁。不光是区块链,在其他各个需要匿名的领域都能用到。有一些专门做 coin mixing的网站,提供一定的服务收取一定的服务费。所有想做coin mixing的人把币发给网站,网站内部进行一些重组,然后你再把币取回来,这时取出的币就不是发布到网站上的币了,它是随机抽取一些币给你
      • 缺点
        • coin mixing真正实施起来有一定的复杂性,如果设计不好的话,别人可以根据你当初存进去币的数额,推断出来哪些币是你存进去的。而且,在当今的区块链的世界里,没有什么信誉度非常高的coin mixing的服务。很多coin mixing的服务它本身也是要保持匿名的,它匿名的后果是:有可能投进去的币被他卷款跑路了,投币者是一点办法都没有的。
    • 2) 在线钱包

      • 很多人会把钱存入在线钱包里,在线钱包就会把这些人的币混起来,再取回自己的币时可能就不是当初存进去的币了。但在线钱包并不保证要履行coin mixing的功能。
    • 3) 交易所

      • 还可以通过加密货币的交易所,交易所一般有天然的coin mixing的性质。前提是交易所不会泄露提币、存币的记录,否则也是不行的。

  • 为什么保护隐私性难度挺大?
    • 本质原因是区块链是公开的,而且是不可篡改的。不可篡改性对于隐私保护来说是灾难性的。

② 零知识证明(Zero-Knowledge Proof)

  • 概念(From 维基百科
    • 一方(证明者)向另一方(检验者)证明某命题的方法,特点是过程中除“该命题为真”之事外,不泄露任何资讯。因此,可理解成“零泄密证明”。

②① 同态隐藏(零知识证明的数学基础)

在这里插入图片描述

  • 第一个性质

    • 说明如果有E(X)=E(y),则必然有x=y。(无碰撞,这跟哈希函数有所不同,哈希函数是可能出现碰撞的)。反过来逆否命题说明如果 E (x) 和 E (y) 是相等的,那么 x、y 也是相等的
  • 第二个性质

    • 说明加密函数是不可逆的,知道加密后的值,没办法推出加密前的值。(hiding property
  • 第三个性质是最重要的,叫作同态运算

    • 它说的是对加密之后的函数值进行某些代数运算,等价于对这些输入直接进行代数运算然后再加密
    • 同态加法:加密值的和等于和的加密。
    • 同态乘法:加密值的乘积等于积的加密。

②② 举栗子

在这里插入图片描述
在这里插入图片描述

②③ 简单的答案

在这里插入图片描述

  • 说明
    • Alice将E(x)、E(y)发给Bob。(性质2,不可逆)
    • Bob通过收到的E(x)、E(y)计算得到E(X+Y)。(性质3,同态加法)
    • Bob进行验证E(x+y)和E(7)是否相等。若相等则验证通过,否则验证失败。(性质1的逆否)
    • 缺陷:Bob可以暴力获取x与y的值。因此 Alice 要对 x 和 y 的值做一些随机化处理,保证 x 和 y 加起来还是不变的。

补充

  • 为什么计算机科学如密码学喜欢用 Alice 和 Bob 举栗子?(源于知乎问题)

②④ 盲签

正如其名,签名的人看不到所签署文件的具体内容就签

  • 特点
    • 签名者对消息的内容是不可见
    • 签名被公开后,签名者不能追踪签名

为什么要这么做呢?
例如电子交易中,我们的交易信息依赖于银行等第三方机构。第三方机构需要防范双花攻击等,就需要对电子货币进行签名。而签名的过程中,必然会导致其了解到交易内容。如果想要银行等第三方机构负责相应工作,但不知道交易具体内容,就可以采用盲签的方法。

我举一个例子:
A从汉堡店得到了一个薯条券,A把券给B,B去汉堡店兑换薯条,商家是不知道B的券是哪来的,但知道这个券是合法的

②⑤ 零币和零钞(专门为匿名性设计的加密货币)

比特币在很大程度上提供了匿名性,但它不能完全消除关联性,那么我们能不能设计一种新的加密货币,这个货币从一开始的结构设计上就用了密码学的原理保证了匿名性,所以就有了零币和零钞
在这里插入图片描述

  • 与比特币的本质区别

    • 用的时候要证明本来是有一个基础币,让基础币变得不能花费 (unspendable),然后换取一个零币,零币在花的时候只需要用零知识证明你花掉的币是系统中存在的某一个合法的币就行了,但是不用透露你花的是系统中具体的哪一个币。这样的话就把关联性破坏掉了,就没法追溯了
    • 而比特币是每一笔转账交易都要说明币的来源
  • 零币和零钞的不足

    • 因为其为了设计匿名性,付出了一定性能代价
    • 并未解决与系统外部实体发生交互时对匿名性的破坏

1️⃣3️⃣思考

① 哈希指针

问题

  • 指针保存的是本地内存的地址,那么只是在本地这台计算机上才有意义,发送到其他计算机上就没有意义了。那么在发布区块的时候哈希指针是怎么能够通过网络进行传输呢

在这里插入图片描述
所谓的哈希指针只是一种形象的说法,实际系统中用的时候只有哈希,没有指针。回顾一下之前看到的block header的数据结构,如上图。block header里只有哈希值,没有指针,也可以认为哈希值的本身就是指针

  • 那么怎么才能找到前一个区块的内容呢?

全节点一般是把这些区块存储在一个 (key哈希,value区块内容) 数据库里面,一个常用的 key value 数据库是 level DB。所谓的区块链这种链表结构实际上是在level DB里面用哈希值串起来的。
只要你掌握了最后一个区块的哈希值,那么你通过level DB的查找,可以把最后一个区块的内容取出来。然后这个区块块头里面,又有指向前一个区块的哈希值,可以找到前一个区块的内容,以此类推,一步一步往前找,最终能够把整个区块链都找出来。

有一些节点没有保存完整的区块链的信息,只保存了最近的几千个区块,如果需要用到前面的区块的信息可以问其他的全节点要。哈希指针的性质保证了整个区块链的内容是不可篡改的。

② 区块恋

就是指,把一个私钥截断,分成几份,有几个人各自保管,只有最终大家都拿出自己的部分私钥,才能拼成完整的私钥。

  • 这样存在的问题
    • 这些人中任何一个人把私钥丢了钱就取不出来了。
      • 这对矿工UTXO不友好,造成这个UTXO集合的膨胀
    • 因为比特币系统中每个账户的安全性跟所用的私钥的长度是相关的。这种截断私钥的做法会降低账户的安全性。因为分一半的话难度就从 2 256 = > 2 128 2^{256} => 2^{128} 2256=>2128,如果是四个人的话,其中三个串通,难度就变成 2 256 = > 2 64 2^{256} => 2^{64} 2256=>264

③ 分布式共识

前面已经讲过,从理论上实现分布式系统的共识是不可能的

  • 为什么比特币系统能够绕过分布式共识中的那些不可能结论?
    • 严格来说,比特币并没有取得真正意义上的共识,因为取得的共识随时有可能被推翻,比如出现了分叉攻击。(可能回滚,甚至是回滚到创世纪块)

按照分布式系统理论的要求,共识一旦达成之后,就不应该再改了,所以从这方面来说比特币并没有绕过分布式系统那些不可能的结论,因为它并没有达到真正意义上的共识。这说明理论和实际往往是有区别的

④ 比特币的稀缺性

  • 早期如何吸引人来挖矿?

    • 要么增加挖矿的收益
    • 要么降低挖矿开销
    • 给早期的矿工高收益是合理的,因为他们也承担了风险
  • 比特币的做法是

    • 早期难度设置的比较低
    • 早期的出块奖励比较高

比特币这种总量恒定的性质是不适合用来做货币的。一个好的货币其实是要有通货膨胀的功能的。

⑤ 量子计算

随着量子计算的发展,量子计算机计算力变得越来越强大,加密货币会不会变得不安全了?

  • 这种担心是没必要
    • 第一,量子计算技术离实用还有很长一段距离,如果量子计算在将来能强大到破坏加密体系的话,首先会冲击的是传统金融业(网上银行)。
    • 第二,比特币当中没有把账户的公钥直接暴露出来,而是用公钥取哈希之后得到一个地址。比特币当中用的非对称加密体系,从私钥是可以推导出公钥的

  • 假设将来量子计算技术发达了,能够从公钥中推出私钥,那怎么办呢?
    • 首先,收款是用公钥的哈希地址
    • 其次,哈希是不可逆的

  • 加密和取哈希是两个不同性质的操作
    • 加密的是为了将来能够解密,所以加密算法要保证信息的完整性
    • 哈希是不可逆的,取哈希的过程一般是会造成信息的损失

试想,如果哈希可逆,那可就变成了一个超级压缩算法。(所有数据岂不是都可以压缩成256位)


  • 自己收款:公钥哈希生成的地址
  • 自己取款:公钥和私钥产生的签名

  • 安全的做法
    • 一个地址用过之后就不要再用了,每次取钱最好把钱一次取走,即使取不完,也最好把钱转给另一个安全的账户
    • 公钥不随便泄露

升华

  • 很多理论上的不可能结论对于实际当中是并不适用的,因为这种不可能结论只是对某种特定的模型下是不可能的,实际当中把模型稍微改一改不可能结论就不成立了。

  • 不要被学术界的思维限制了头脑,不要被程序员的思维限制了想象力

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-23 07:04:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-23 07:04:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-23 07:04:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-23 07:04:05       18 阅读

热门阅读

  1. FPGA ——Verilog语法示例

    2024-04-23 07:04:05       16 阅读
  2. 【Leetcode】并查集/DFS/BFS多解

    2024-04-23 07:04:05       12 阅读
  3. Hive进阶(5)----yarn的资源调度策略

    2024-04-23 07:04:05       12 阅读
  4. OSPF的防止环路的机制

    2024-04-23 07:04:05       12 阅读
  5. 从C到Py:Python的字符串及正则表达式

    2024-04-23 07:04:05       12 阅读