主页 > imtokendapp授权 > btc计算难度 BTC 匿名 (8)

btc计算难度 BTC 匿名 (8)

imtokendapp授权 2023-01-16 22:45:37

转自北京大学肖震老师公开课《区块链技术与应用》

北京大学肖震老师《区块链技术与应用》公开课_哔哩哔哩_bilibili

比特币问答

如果在转账交易过程中收款人不在线(未连接到比特币网络)怎么办?

转账交易只需要记录在区块链上,将一个账户的比特币转入另一个账户,无论收款人是否在线。

假设一个全节点收到一笔转账交易,是否有可能转账交易中的收款人地址从未被全节点听到过。

可能是因为比特币账户只需要在本地生成。 只有当账户第一次收到钱时,其他节点才能知道该节点的存在。

账户私钥丢失怎么办?

没有办法。 因为比特币是去中心化的货币,没有第三方中心机构可以重置密码,所以账户里的钱就成了死钱。

通过加密货币交易所(中心化机构),一般需要身份证明。 如果您忘记了私钥,可以向交易所申请找回私钥。 但目前此类货币的兑换仍处于缺乏监管的状态,不一定可信。 而且,它只是起到了“中介”的作用,与“私钥丢失无法找回里面的比特币”问题的答案并不冲突。

历史上发生过多起交易所被黑、大量加密货币被盗的事件,其中最著名的就是Mt.GOX(中文译名:门头沟)事件。 该交易所曾是全球最大的比特币交易所,交易量约占全球比特币交易量的70%,位于日本。 后因比特币遭攻击损失大量比特币,交易所破产,CEO入狱。

此外,还有交易所自我防备,工作人员携款跑路(有点类似rm -rf */ 删库跑路)。

私钥泄露怎么办?

尽快将剩余的BTC转入其他安全账户。 没有第三方中央机构重置密码或冻结账户,您只能对自己负责。

BTC系统中的账户是公私钥对,密码是私钥,不可更改。

转账地址写错了怎么办?

没办法,只能承认自己倒霉,不能取消已经发出的交易。 如果转移到一个不存在的地址,这部分比特币就变成了死钱。 当然,比特币系统中的UTXO会永久保存交易记录不存在的地址。 因此对全节点不友好。

OP_RETURN命令之前在BTC脚本中介绍过。 我们提到过,这种方式为普通用户提供了一种方式,让他们可以在比特币网络中写入他们想要保留的内容。 但是OP_RETURN的执行结果是无条件返回错误,交易返回错误,block怎么包含呢? 区块链如何接收这个区块?

思路一:特殊机制,即使脚本返回错误,仍然写入区块链。 (其实并不是)

btc挖矿软件_btc-e_btc计算难度

思路二:即使返回失败,也会写入区块链,只是在具体处理时不会计算。 (恶意节点抛出大量失败交易,攻击区块链怎么办?上一篇文章提到平均每秒只能处理7笔交易)

其实这里有个细节需要搞清楚

明确一点,OP_RETURN 写在哪里。 OP_RETURN实际上是写在当前交易的输出脚本中,在验证交易的合法性时,使用当前交易的输入脚本和上一笔交易(币源的交易)的输出脚本进行验证。 也就是说,在验证当前交易的合法性时,不会执行这条语句。 这个语句只有在有人要花钱的时候才会执行。

BTC系统挖矿,会不会有矿工“窃取”答案? 例如:某矿工发现其他矿工发布了一个nonce,收到后验证该区块是否合法,将这个nonce作为自己找到的nonce发布。

实际上这是不可能的。 发布的区块包含铸币交易,其收款人地址为挖矿的矿工地址。 如果要窃取答案,需要修改接收地址。 如果地址发生变化,那么铸币交易的内容也会发生变化,从而触发 Merkle Tree Root 的哈希值发生变化。 结果,原始随机数无效。 也就是说,不可能“窃取”答案。

手续费是交易者为了自己的交易上链而给的“小费”,那么如何知道哪个矿工可以挖矿呢?

无需事先知道谁来挖矿,交易中总输入与总输出的差额就是交易手续费。 哪个矿工挖矿,打包交易的时候,可以收取这些交易手续费,作为自己拿到的交易手续费。

BTC 统计 BTC 匿名

一般来说,匿名多与隐私保护有关。 但实际上,比特币的匿名并不是真匿名,而是假匿名。 事实上,与纸币相比,比特币更具有匿名性,因为它没有任何个人信息标记。 正是因为它的匿名性,很多不法交易都是使用现金交易(了解银行的风控系统?)。 然而,现金在储存、运输等方面存在诸多不便。

事实上,比特币中的数据是完全公开的,网上交易是与物理世界进行交易,其匿名性被极大破坏。 如果银行允许使用假名(以前存折时代),由于银行数据不公开,银行系统的匿名性优于比特币。

BTC系统中的哪些条件会破坏其匿名性

用户可以生成多个地址账户,但这些地址账户可以关联

从表面上看,每笔交易都可以改变公私钥对,所以每次都是一个新账户,具有很强的匿名性。 但实际上,这些账户在特定情况下是可以关联的。

比如下图就是这样的一笔交易:

image-20210818105648237

从图中可以看出交易有2个输入和2个输出,所以addr1和addr2很可能是同一个人持有的账户,因为这个人同时拥有两个私钥的地址。 (一个账户的钱可能不够)

在输出中,很可能有一个地址属于找零地址,也就是花费后的剩余钱。 在某些情况下,它也可以被分析。

image-20210818105654385

如上图,本次交易,账户上的数字表示BTC,可以引导addr4显然是找零地址,不是addr3(支付了6个比特币,单个账户不够用,所以用了两个账户) .

btc挖矿软件_btc-e_btc计算难度

地址账户也可能与现实社会中的个人身份相关联。

任何将 BTC 与物理世界连接起来的操作都可能暴露用户的真实身份,其中最明显的就是资金的转入和转出。 要获得 BTC,如果你用钱购买它,你就会与物理世界互动。 如果你想将 BTC 转换成真实货币,你还需要与物理世界进行交互。

许多国家/地区都有反洗钱法。 如何防止不法分子利用比特币进行洗钱? 其实很简单,只需要关注链上和链外的资金转入即可。 对于大额资金转入BTC或将大额BTC兑换成现实货币,很难逃脱司法金融机构的监管。

使用比特币支付时

比如有些商户接受BTC支付,比如你可以用BTC买咖啡、蛋糕等(信用卡已经很好的解决了这个场景,使用BTC交易延迟高,手续费高,不一个好主意)

支付时与个人账户建立连接,会泄露个人信息。

换句话说,BTC 不是很匿名。 在实践中,很多人都保持着相对较好的匿名性。 保存最好的是它的开发者中本聪btc计算难度,他参与比特币时间最长,全世界都想知道他是谁。 但事实上,中本聪的比特币并没有被花掉,这也让我们很难得知他到底是谁。

以前美国有一个丝路网站,主要是匿名支付,用各种方法逃避监管(因为卖的都是违禁品)。 但是经营没几年就被查封了,当时老板赚了很多比特币。 理论上,小目标(一亿)已经实现。 但因为怕被发现,这笔钱他一分钱也不敢花,在美国过着非常简朴的生活(《以人民的名义》赵德汉:“我一分钱也不敢花。” ). 最后据说是因为他在同一台电脑上登录了真实的社交账号和非法网站的账号(具体原因未透露)。

技能路被封后,有人开了技能路2,经营了几年又被封了。

由此可见,互联网并不是法外之地。 想干坏事,基本都能被发现。

BTC的匿名性有多好,如何提高匿名性?

匿名的本质是不想暴露你的身份。 对于普通人来说,BTC现有的机制足以维护个人隐私。 但如果涉及违法,行政机关其实很容易获得真实身份。

那么可以做些什么来最大化匿名性呢?

从应用层的角度来看,可以将不同用户的BTC混在一起,造成溯源混乱(Coin mixing); 从网络层的角度来看,可以采用多路径转发的方式,数据不是直接发送,而是经过很多跳(洋葱路由的基本思想)。

事实上,用户隐私的暴露是由于区块链的开放性和不可篡改性。 不变性对于隐私保护来说其实是灾难性的。

零知识证明

零知识证明:一方(证明者)向另一方(验证者)证明某一陈述是正确的,但不需要透露除该陈述正确以外的任何信息。

例如:A想向B证明

证明一个账户属于A,也就是说A知道这个账户的私钥。 但无法通过A公布私钥的方式证明该账户确实属于A。 因此,A可以生成一个账户签名,B可以通过公钥验证签名。 (其实这个证明是不是零知识证明是有争议的,因为用私钥生成的签名被泄露了)

btc计算难度_btc-e_btc挖矿软件

同态隐藏

image-20210818105703019

零知识证明的数学基础是同态隐藏。 上图展示了同态隐藏的三个性质。

第一个性质表明,如果存在 E(X)=E(y),则必须存在 x=y。 (无碰撞)

第二个性质表明加密函数是不可逆的。 知道加密后的值,就无法推导出密码值。

第三个性质,也是最重要的,称为同态运算。 说明对加密后的函数值进行一定的代数运算,相当于直接对输入进行代数运算,然后再进行加密。

例子:

image-20210818105710610

证明者是 Alice,验证者是 Bob。 证明的最简单版本如下:

1. Alice 将 E(x) 和 E(y) 发送给 Bob。 (性质2,不可逆)

2. Bob 根据收到的 E(x) 和 E(y) 计算 E(X+Y)。 (性质3,同态加法)

3. Bob 验证 E(x+y) 和 E(7) 是否相等。 如果相等则验证通过,否则验证失败。 (自然1,无碰撞)

*错误*:Bob 可以暴力破解 x 和 y 的值。

盲注

盲签名是一种特殊的数字签名技术。 盲签名以签名者看不到签名文件的具体内容而闻名。 它有两个显着特点:第一,签名者对消息内容是不可见的; 二是签名公开后,签名人无法追溯。

你为什么这样做?

例如,在电子交易中,我们的交易信息依赖于银行等第三方机构。 第三方机构需要防止双花攻击等,需要对电子货币进行签名。 在签约的过程中,难免会导致对交易内容的了解。 如果想让银行等第三方机构负责相应的工作,但又不知道交易的具体内容,可以采用盲签的方式。

例如,A 向 B 汇款。

image-20210818105718843

btc-e_btc挖矿软件_btc计算难度

既然我们明白 BTC 提供了更好的匿名性,但它不能完全消除相关性,如果我们想要这样的货币怎么办? 这涉及 zerocoins 和 zeronotes。

Zcash 和 Zcash — 为匿名而设计的货币

image-20210818105725264

花费zerocoin时,只需要使用零知识证明证明花费的币是系统中存在的合法币,而无需公开花费了系统中的哪个币。 这打破了关联性。

当然,这类币种并不是主流的加密货币,因为它在匿名性的设计上付出了一定的代价,需要强匿名性的用户并不多。

Zerocoins 和 zeronotes 在数学上是安全的。 但它不是100%匿名的,也没有解决与系统外实体交互时破坏匿名性的问题。

BTC 考虑的是哈希指针。

BTC系统中很多地方都用到了哈希指针。 指针保存的本地内存地址只在本机有意义,发送到其他计算机就没有意义。 那么当区块被释放时,哈希指针是如何通过网络传播的呢?

所谓哈希指针只是系统中的一种可视化方法。 在实际应用中,只有散列,没有指针。 回顾前面提到的Block header数据结构:

image-20210818105733124

如图所示,这是上一个区块的哈希值。

因此可以看出,区块头中只有哈希值,并没有指针。 那么如何找到上一个区块的内容呢?

全节点一般将区块存储在一个key-value数据库中,key是hash,value是区块内容。 常用的key-value数据库是levelDB。 只要知道最后一个区块的哈希值,就可以根据哈希值找到区块链的所有内容。

有些节点只保存部分区块链信息。 如果需要使用之前的区块,可以向其他节点索取。 哈希指针的性质保证了整个区块链的内容不可篡改。

阻止“爱”

一对夫妇一起购买 BTC,从中截断私钥,每人保留一部分。 如果两个人以后关系还不错,可以把钱退掉; 如果他们分手,这部分钱将被永久锁定,任何人都无法提取。 区块链的不可篡改性将作为两人爱情的见证。 这样做有什么问题?

这样,N个人呢?

如果按照这个方法,把私钥分成N份。 但是这样会产生一系列的问题。

1.N个人中任何一个人忘记了私钥,这笔钱就不能提现。

btc计算难度_btc挖矿软件_btc-e

2、截断私钥的长度会降低安全性,因为私钥的长度会直接影响破解的难度(2256远大于2128),两者的难度相差远不止一倍。 [可见,对于多个个人账户,应该使用多重签名,而不是截断私钥的方法。 】

3、如果分手,钱会变成死钱,一直存放在UTXO集合中,对矿工不友好。

分布式共识

如前所述,理论上,分布式系统不可能达成共识。

为什么比特币系统能够绕过分布式共识中那些不可能的结论呢?

严格来说,BTC并没有真正意义上的公式,因为达成的共识随时可能被推翻,比如分叉攻击导致系统回滚。

此外,理论与现实之间存在差异。 不可能的结论是针对特定的模型,在实践中,可以通过对模型稍作修改或增加离线方法使不可能变为可能。

知识改变命运这句话没有错,但是一知半解的知识可能会让你的命运变得更糟。 搞科研是很有意义的,但是不要把自己的思维局限在学术界的思维上,也不要为程序员的思维限制自己的想象力。

BTC的稀缺性

为什么要挖矿? 因为有好处,而且好处大于成本。 早期的 BTC 难度低,区块奖励高,吸引了矿工。

之前说过btc计算难度,BTC的总量是固定的,有人认为这是一个巧妙的设计。 但实际上,总量固定的东西并不适合作为货币,这也决定了BTC未来无法彻底颠覆现有的货币体系。 在以太坊中,BTC 的区块奖励没有定期减半。 此外,一些新货币将具有自己的通货膨胀功能。

对个人来说,通货膨胀不是好事,因为钱一文不值。 但是人类每年创造的价值,如果把固定的东西全部当成货币,只会越来越值钱,这会导致拥有者继续看着它升值,而其他没有的人再努力也赶不上(房地产市场也是这样,炒房让一些人靠着租金赚了很多钱,却很难通过个人斗争。这也是我国目前存在的一大问题,社会财富分配不公,最终会导致各种社会矛盾,需要政府来解决)。

量子计算

BTC这种基于密码学的加密货币在量子计算之后会变得不安全吗?

1. 量子计算离被使用还有很长的路要走(人工智能也是,目前还处于弱人工智能阶段,其实很多技术都是这样的,炒作的情况很严重,但是还远从实际出发。但如果没有投机,就不会有资金流入的研究,这也是一个很矛盾的地方)。

2、如果真的用量子计算来破坏现有的加密算法,对传统金融行业的伤害还是最大的。

3、实际用到的不是公钥,而是可以用公钥哈希。 哈希函数一般是不可逆的,所以即使是量子计算也无法逆向私钥。

BTC使用的SHA-256,无论输入多大,最终结果都是256位,必然会导致信息丢失,原始数据不可逆。

总结:加密是可逆的,哈希是不可逆的; 加密不丢失信息,散列破坏信息(加密和散列的区别)