提示:以下内容只是个人在学习过程中记录的笔记,图片均是肖老师课程的截图,可供参考。如有错误或不足之处,请大家指正。
一、BTC-问答
1. 转账交易时如果接收者不在线(没有连接到比特币网络上)怎么办?
转账交易不需要接收者在线,这个交易只是在区块链上记录一下,把发送者账户上的比特币转到接收者账户上。接收者是否在转账交易时连接了比特币网络对交易无影响。
2. 假设某个全节点收到了一个转账交易,有没有可能转账交易中接收者的收款地址是这个节点从来没有监听过的?
有可能。比特币账户在创建时,是不需要通知其他节点,只需要在本地产生一个公私钥对即可,只有在以后产生的收款地址第一次收到币转入时,其他节点才知道这个账户的存在。
3. 如果账户的私钥丢失了,怎么办?
没有办法。这个账户上的币是无法交易的,永远无法取出。
在去中心化的系统中,如比特币,是没有任何人可以有权限给账户重置密码的。
有些加密货币交易所,一般来说,这些交易所是中心化的机构,在交易所开办账户时,一般是需要提供身份证明的,这种情况下,把比特币保存在交易所里,私钥是由交易所来保管,登录交易所,是类似登录网银的流程,除用户名和密码外,一般还需要二次验证,比如用谷歌身份验证器产生的一次性密码通过二次验证登录。这种情况下如果账户的密码丢失了,用户可以和交易所联系,通过身份验证后重置密码。交易所保管用户密码和比特币私钥丢失不一致,有的在线钱包也有保管私钥的功能,但是这些交易所和在线钱包比用户自己保管私钥更安全。
比特币的交易所或其他加密货币的交易所目前处于一种缺乏监管的状态,这和股票交易所很不一样,历史上曾经发生过很多次加密货币的交易所被黑了的情况,黑客从交易所中偷走了大量的加密货币,其中最著名的一个例子是Mt. Gox ,这个曾经是比特币最大的交易所,交易量占全球交易量的70%,设在日本,之后被黑客攻击了,丢失了大量的比特币,交易所后来破产了,CEO被判刑。各种加密货币发生问题的情况发生过很多次,也有的是交易所监守自盗,有的工作人员或管理层人员卷款跑路。
相比之下,冷钱包和硬钱包更安全。
4. 如果账户的私钥泄露了,怎么办?
如账户可能出现了一些可疑交易,应该尽快将账户上的钱转到另外一个安全的账户上。
和实际生活体验不太一样,比特币账户所谓的密码是账户的私钥,创建账户时生成的公私钥对,账户一旦生成后,就没有办法修改,也没有办法修改私钥,可以生成新的账户,但是原账户私钥无法修改,同时也无法阻止别人发布从这个账户转账的交易,任何有私钥的人都可以发布转账交易,账户无法冻结,所以只能在第一时间把自己账户上的钱转到一个安全账户上。
5. 如果转账时写错了地址,怎么办?
比特币中一旦交易被发布到区块链上,就没有办法取消已经发布的交易,没有一种机制来取消已经发布的交易,如果转账到别人的地址,如果知道接收者的地址是谁的,可以和对方联系,看对方是否愿意将钱退还给自己,但是这只能和对方商量,无法强迫对方;如果不知道接收者是谁的地址或者是一个不存在的地址,那就没有办法。
不存在的地址:地址是公钥的哈希得到的,有些地址不是公钥哈希得到的,如digital commitment,这种就是不存在的地址。
A账户转给B这个不存在的地址钱,可以把要发布的内容哈希值放到OP_RETURN后面,这个是标准的方法,但是有的人用哈希值生成类似比特币地址的东西,用A账户转给这个用哈希值生成的类似的比特币的假地址,这个地址是没有公私钥对的,比特币系统不知道地址是真是假,这样转账的钱就变成了死钱,这个转账永远不可能被取出,这种做法会牺牲一些比特币,然后换取往区块链写入的机会。
这个做法不提倡,因为这个转账输出会永久保存在UTXO,全节点收到这个交易,不知道交易的真假,只能永久保存,对全节点不友好。
6. Proof of Burn 和 OP_RETURN 实际是如何操作的?
如当全节点收到转账交易时,首先要检查交易的合法性,只有合法的交易才会被写入区块链中,OP_RETURN语句是要无条件返回错误,无法通过验证,无法被写入到区块链中。
验证的过程是把当前交易的输入脚本和和前一个交易的币的来源的输出脚本拼接在一起,看能不能执行成功,执行过程不可以抛出错误,如果抛出就不是合法交易, OP_RETURN语句是写在当前交易的输出脚本中,所以验证当前交易合法性时不会执行OP_RETURN语句,后面要花当前交易的这些币时的交易才会执行OP_RETURN语句。
7. 比特币挖矿在尝试大量的nonce,会不会有的矿工偷答案(收到其他矿工找到的nonce,验证是符合的后作为自己找到的nonce发布到区块链上)?(怎么知道是哪个矿工最先找到的nonce)
发布的区块有coinbase tx,里面有收款人的矿工地址A,如果要偷答案就要把地址换成自己的,如果地址一换,coinbase的内容会发生变化,会导致Merkel tree的根哈希值发生变化,因为这个交易和其他区块的交易内容是联系在一起构成的,nonce在块头,根哈希值发生变化,块头也发生变化,原来找到的nonce就会作废,因为每个矿工找到的nonce都是和自己的收款地址绑定在一起的。
8. 如何知道交易费该给哪个矿工?(怎么知道哪个矿工会挖到矿)
事先不需要知道哪个矿工会得到这个交易费。
交易费的计算:total inputs >= total outputs ,总输入-总输出的差值就是交易费,给谁不需要事先知道,哪个矿工先挖到矿就可以把这个区块里包含交易的差额收集起来,作为自己的交易费。
下图是2009年-2018年比特币区块大小的变化情况:
只能往里面添东西,区块链越来越长,size也越来越大。
目前size对当前硬盘容量完全没有问题,区块链的大部分内容可以保存在硬盘里。
下图是2012年-2018年UTXO集合的大小变化情况:
这个集合总趋势不断变大,有些波动,主要原因是比特币交易多,UTXO的集合也会随着变动,也会随历史原因变动,如账户私钥丢失。
下图是比特币矿池挖矿情况:
挖矿集中化趋势严重,大矿池占系统总算力很大一部分。
下图是2009年-2018年比特币市值变化情况:
和比特币价格变化情况基本一致,市值是绝对的市值,不是在加密货币中占的百分比。
下图是2009年-2018年比特币交易量变化情况:
2016-2018年波动很大,是按美元价格计算的交易量,波动有部分原因是比特币价格波动造成的。
下图是2009年-2018年比特币每天交易数变化情况:
总趋势是不断增长,2018年初比特币价格降低,交易数目也减少。
下图是2009年-2018年比特币每个区块的交易数量变化情况:
每天产生的区块数目是差不多的,交易数目的变化主要因为每个区块交易数目发生变化。真实区块链上很多区块上交易没有装满。
二、BTC-匿名性
1、匿名性
匿名性的定义:一般来说,匿名和隐私保护联系在一起。比特币中不要求用真名,可以用公钥产生的地址,有一定的匿名性。但是比特币用的是化名,不是完全匿名性,叫做pseudonymity。所以比特币中的匿名不是真正的匿名,是假的匿名。
和现实货币比较,匿名性没有现金好,没有关于任何人的信息,和银行存款相比,比特币不需要实名认证,更有匿名性。如果银行用化名,隐私性、匿名性和比特币相比,比特币也是要和实体世界联系,从某种意义上,如果银行允许用化名,隐私性、匿名性会比比特币好。
原因:比特币区块链这个账本是公开的,所有人都能查询,而银行的账本,是受控制的,工作人员和司法手段可以调取信息,普通人无法查到。
比特币系统中,什么情况有可能会破坏匿名性?
1、自己创建的多个账户被关联在一起。
关联账户在一起的操作:
如网上购物找零钱,一个交易有多个输入,这多个输入可能是同一个人的账户。
这种交易一般是比特币钱包生成的,很多钱包软件每次会自动生成一个新的找零的地址,是为了隐私保护。输出地址可能也会有找零钱的地址,不过可以通过分析交易分析出来哪个是找零钱的地址。这种找零交易都是通过钱包软件生成的。
2、地址账户和现实世界真实身份产生关联。
任何虚拟货币和现实世界发生联系时都有可能泄露真实身份,最明显的是资金的转入转出。通过交易所买比特币,交易所登陆注册需要身份信息,也可以通过场外交易。场外交易指两个人私下交易。
经验表明,凡是用比特币从事违法活动的,最后都会被抓起来。
很多国家有反洗钱法,防范用比特币洗钱的违法行为的方法:
1、监控资金的转入转出链。(常用手段)
2、用比特币支付。(延迟很大;交易费很贵)——容易引起隐私泄露
比特币的匿名性不是绝对的,没有想象中那么好。
实际中使用比特币的人的匿名性保持的有多好?
保持的最好的是中本聪,没有花过他的比特币,一旦花出去会暴露真实身份。 比特币项目走上正轨后,中本聪就消失了,直到现在也没有人知道他的身份,这也是他的匿名性保持这么好的原因之一。
比特币的匿名性有多好?
匿名和隐私保护相关联,做的事情不想暴露身份,问题在于不想向谁暴露身份(hide you identity from whom?)。
比特币现有机制在从事正常活动的情况下保护隐私是可以的,但是如果是从事非法活动,要想保护隐私就很难。
假设作为比特币用户,可以采取什么方法提高匿名性?
比特币协议运行在应用层,底层是P2P网络。IP地址和现实身份有很强关联性。
比特币要实现匿名性,首先要实现在网络层的匿名性,比特币交易发布在网络上,如果不保证网络的匿名性,那么很多节点发现这个节点都是从同一个地方发布出来的,从这个节点的IP地址就可以推算出他在物理世界的真实身份。
网络层的匿名性的解决方法:
普遍用多路径转发。多路径转发指不是由发送者直接发送给接收者,中间要经过很多转发,中间每一个节点只知道上一个下一个节点是哪个,不知道最开始发布的节点,中间有些节点可能是恶意节点,只要路径上有一个是诚实节点,就能把最初发送者的身份隐藏起来。如洋葱路由TOR
应用层实现匿名性的解决方法:
区块链是个公开的账本,交易的每一个币都可以追溯到币的源头,要起到匿名保护的作用有三种做法。
1、把各个不同人的币混在一起,这叫做coin mixing,这个是常用的做法。有一些专门提供coin mixing服务的网站,收取一定的服务费,所以想做coin mixing的人把币发给网站,内部进行一些重组,然后再把币取回来,取回来的币一般来说就不是当初发到网站上的币,是随机抽取的币。 coin mixing真正实施起来有一定复杂性。
现在区块链世界里,没有什么信誉度很高的coin mixing服务。
coin mixing服务本身也要保持匿名性,如果coin mixing服务把币卷款跑路,用户则毫无办法。
目前区块链世界的状态,法律是鞭长莫及的。
2、有些应用带有coin mixing性质,如在线钱包,需要很多人把钱存在钱包,可能会把钱混合起来,取出来的钱不一定能保证是最初存进去的钱。但是在线钱包没有一定要履行coin mixing的功能。
3、交易所。把钱存在交易所,经过多个提币存币等操作,存入本地的钱就不是当初存入的钱了。前提是交易所不会泄露相关记录。
保护隐私性难度大的本质原因:区块链是公开的,而且是不可篡改的。不可篡改性对隐私保护是灾难性。因为一旦某个交易不小心暴露身份,这个交易永久的写在区块链,是无法篡改的。
要小心账户之间的关联性,如果每个账户都是单独使用的,有一个账户被暴露,影响比较有限;如果账户是关联的,那么一个账户被暴露,其他账户也会被暴露。
2、零知识证明
零知识证明指一方(证明者)向另一方(验证者)证明一个陈述是正确的,而无需透露除该陈述是正确的外的任何信息。
零知识证明的数学基础是同态隐藏。以下是同态隐藏的三个性质。
第一个性质说明加密函数值不会出现碰撞,如果输入不相等,算出的加密值也不相等。反过来说明如果两个加密函数值相等,输入一定相等。
第二个性质说明加密函数不可逆。
第三个是同态运算,说明对加密后的函数值进行代数运算等价于对输入进行代数运算再进行加密。
证明者是Alice,验证者是Bob,要证明的陈述是X+Y=7,要隐藏X,Y的具体数值。证明方法如下:
Bob可以用蛮力算法猜出原始的X,Y的值。
盲签方法:在不知道具体内容的情况下进行签名。
虚拟货币的编号不能由央行产生,由自己产生,央行验证编号是自己的使用盲签方法。
A提供编号,银行签名不知道编号内容,token是银行对编号的签名。B知道编号的具体内容,SereialNum是明文,A把编号和Token给B,B把编号和Token(也是明文)给银行验证。
银行不知道B的币的来源。
比特币在一定程度上提供了匿名性,但是不能完全消除关联性。
零币和零钞
零币和零钞是专门为了匿名性设计的加密货币。
零币在花的时候只需要证明,用零知识证明证明花掉的币是系统中存在的某一个合法的币即可,不用透露花的是系统中的哪一个币。(和比特币的本质区别,比特币每一笔交易都要说明币是过去哪个交易产生的。)
零币和零钞与比特币不一样,零币零钞是说证明时从数学上可以保证花的币是以前区块链上某个合法存在的币,但是不知道具体是哪个,这样把关联性破坏了,无法追溯。文章来源:https://www.toymoban.com/news/detail-813739.html
专门为匿名性设计的加密货币现今不是很主流,因为这些加密货币为了匿名性在性能上有一定损失,而且在数学原理上对初始化有比较严格要求,初始时使用的随机元要能够销毁掉,如果没有很好地销毁掉,会有一定的安全漏洞。
更重要的原因是可能需要强匿名性的用户不多,大多数用户认为比特币现有的匿名性满足使用,还有个原因是虽然零币和零钞在数学原理上有很强的匿名性,但不是百分比绝对的匿名安全,与实体世界发生交互这个情况下仍然会暴露身份。文章来源地址https://www.toymoban.com/news/detail-813739.html
到了这里,关于《区块链技术与应用》北大肖臻老师——课程笔记【11-12】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!