比特币到底是怎么回事-V282

  ? 略微技术化,了解比特币背后的细节 ? 偏重概念和理解 ? 讲座大约3个小时

  2013年12月5日,人民银行等五部委发 布《通知》:“从性质上看,比特币是一种 特定的虚拟商品,不具有与货币等同的法律 地位。但是,作为一种互联网上的商品买卖 行为,普通民众在自担风险的前提下拥有参 与的自由。

  2017年9月4日,人民银行等七部委发布 《公告》说,“代币发行融资是指融资主体 通过代币的违规发售、流通,向投资者筹集 比特币、以太币等所谓‘虚拟货币’,本质 上是一种未经批准非法公开融资的行为。”

  有了区块链,互不相识的人们可以不经过独 立第三方机构进行合作,简单来讲,区块链 是信任之源。

  ? 设想发生战争、政变、灾难、银行倒闭等 情况。 ? 设想你的所有银行账户被冻结的情况。 ? 只要互联网还可用,你的财富就还在掌握 在你的手中。

  区块链是一个又一个数据块不断链 接起来的账本(数据库),该账本被网 络上的多个节点共同维护,由于密码学 的破解难度保证,其数据不可能被篡改。

  ? 无法修改前面的数据,可以添加新的数据。 ? 数据多点存储 ? 链上有可以执行的代码脚本。

  何谓数据库?数据库(Database)是按照数据结构来组织、存 储和管理数据的仓库。

  ? 也即所有传统记账、记录(交易、证书、 版权等等)的问题: ? 记录是可以人为修改的!

  ? 2013年11月12日,刘某因入侵高校网站篡改成绩 被抓获归案,后其协助公安机关将教给他如何入 侵的董某抓获。 ? 19周岁的刘某只有初中文化。董某为大学文化, 董某自行研发制作出正方教务系统漏洞的软件, 并数次侵入高校的正方教务系统进行测试。

  ? 2013年4月7日,董某以网名“北方狼”在乌云网 发布名为任意获取正方教务管理系统账号密码漏 洞的帖子,并对正方教务系统漏洞进行描述。 ? 刘某浏览乌云网发现董某的帖子后,通过QQ和董 某联系,董某告知刘某侵入方法并作侵入视频演 示,将其制作的软件EXP通过QQ传输给刘某。董 某获得报酬4950元。

  ? 刘某学会侵入教务系统的方法后,通过互联网查 找相关需修改成绩的帖子。此后,刘某侵入多所 大学网站,先后为20余名在校学生将不合格成绩 改为合格成绩,非法获利人民币18万余元。

  ? 天津市东丽区人民法院经认定刘某犯破坏计算机 信息系统罪,判处有期徒刑六年;董某犯传授犯 罪方法罪,判处拘役六个月,缓刑六个月。

  ? 区块链技术保证的是:没有任何人可以篡 改区块中的数据! ? 如何保证:

  – 历史记录都是耗费大量计算产生的。 – 修改某个时间点的历史,就要耗费那个时间点 到现在的所有计算。

  ? 先有比特币(2009),后有区块链(2014) ? 比特币背后的技术是区块链技术 ? 比特币是区块链目前最成功的一个实现

  ? 2010年5月21日,佛罗里达程序员Laszlo Hanyecz用1万BTC购买了价值25美元的披萨 优惠券。 ? 2010年12月,中本聪消失。 ? 2011年4月,比特币价格第一次达到了1美 元。

  ? 2013年,由于比特币的理念被人接受,价 格由十几美元涨到1000美元。 ? 2013年12月5日,人民银行联合五部委共同 发布《关于防范比特币风险的通知》。 ? 2015年1月,最低到900人民币,跌幅88%。

  ? ? ? ? ? 不想让你看的让你看不懂。 机密性 不想让你的改的让你改不了。 完整性 你做过的事你抵赖不了。 不可否认性 你无法假冒别人。 认证性 。。。

  ? 10进制用0123456789这10个字符。 ? 16进制用0123456789ABCDEF这16个字符。 ? 2进制用0和1。 一个字母占一个字节,是8位(2进制)的。 一个汉字可占2个字节,为16位(2进制)的。

  哈希算法:一种算法,把任意长度的输入做 复杂的变换后,输出固定长度的输出。 理想的特点:

  无法从输出推算出输入(不可逆) 对于不同的输入,产生完全不同的输出。 对于特定输出,想找到输入只能靠暴力尝试。

  ? Message-Digest Algorithm 5 ? 是使用最广泛的散列算法(Hash、哈希、杂凑), 虽然面临一些攻击。 ? MD5是由国际著名密码学家、“图灵奖”获得者兼 公钥加密算法RSA的创始人、麻省理工大学的 Ron Rivest教授于1991年设计的。 ? 输入为任意长度报文,输出为128bit(16字节)。

  对于不同的明文,输出应该平均分配在这8个输出上,那么对于输出 为000的明文,平均只需要试8次,就能找到碰撞。

  ? 给定一个hash值,让你找出明文。(只能暴 力破解。) ? 如果让你找出第1位是0的hash值,一般大概 需要两次。 ? 如果让你找出前2位是0的,大概需要4次。 ? 如果找出前3位是0的,几次?

  ? Kerckhoffs:密码系统应该做到这样:所有 运算步骤都是公开的,仍然安全。 ? 因为系统和源码终将落入敌手。 ? 一切秘密蕴含在密钥之中。

  ? 公开密钥算法(Public Key Cryptography) 的概念,是由Diffie和Hellman于1976年 在美国国家计算机会议上首先提出的。 几个月后,他们发表了论文“密码学 的新方向”(“New Directions in Cryptography”)进一步阐述他们的思 想,这篇开创性的论文,被公认为是 密码学发展中的里程碑。

  ? ? ? ? 公钥与私钥是通过一种算法得到的一个密钥对。 公钥可以公开,私钥要保密。 从私钥可以导出公钥,从公钥无法导出私钥。 RSA算法:

  ? 你可以用私钥加密一封信,其他所有人用 你的公钥可以解开它看。这保证肯定是你 写的。 ? 所有人都能用你的公钥加密写信给你,只 有你才能用私钥解开来看。这保证只有你 才能看信。

  – RSA源于整数因子分解问题。 – DSA源于离散对数问题。 – ECC椭圆曲线加密算法则基于和椭圆曲线相关 的数学难题,与离散对数相当。

  ? Ron Rivest、Adi Shamir和Leonard Adleman开发了 RSA算法(1977年)。在已提出的公开密钥算法中, RSA是最为流行,也最容易理解和实现的一个算法。 ? 密码分析者对其进行了多年深入的密码分析,但 仍然既不能否认也不能肯定RSA的安全性,RSA算 法的可信度由此可见一斑。

  – 表达了签名人对所签署文 件的认可。 – 隐含要求:文件不应该再 被改动。

  一种做法:明文,签名者用私钥对明文加密 验证方法:用签名者公钥解开密文,对比明文

  ? 常见做法: 明文,签名者用私钥对明文的哈希加密 ? 验证方法:用哈希算法计算明文的哈希。 用签名者公钥解开密文,对比哈希。

  ? 签名后的文件会被其他人用公钥验证,只 有私钥才能做出签名。(无法假冒) ? 如果文件在传播过程中被篡改,验证签名 时就会发现哈希不一样了。(无法修改)

  1.网络中若干个节点运行比特币软件。 2.每个节点可以转账比特币,然后在网络内广播该交易。 3.每隔一段时间,网内某个节点就会打包出一个数据块(区 块),里面是这段时间的所有交易包,区块会广播到全网。 4.很多节点都在抢着打包(像游戏),因为谁能正确打包谁 就能得到比特币奖励(所谓挖矿)。只有通过数据尝试,计 算出特定哈希值的节点才能打出大家认可的包。 5.每个节点收到区块后,如果验证无误后,就接受该区块, 将其附到到已有的区块链上。

  1.每个交易里面的主要信息是:花谁的钱(可以多份,即输 入),付给谁(可以是多人,即输出),付多少,签名。 2.计算hash的难度会每两周调整一次,保证平均每10分钟出 一个块,该难度值会写在区块中。 3.每个区块的大小不超过1M。 4.每成功打包一个区块,打包者将会被奖励12.5个比特币。 每4年,奖励就减半,到2140年就会无币可挖。

  5.所有块之间都有一个链接的关系。本区块中填写的hash值, 是由上区块中hash值和本区块通过哈希计算而得。所以,每 个人可以从头到尾检验每个块都没有改动过。 本区块hash值 = Hash(上区块hash+本区块+随机数)

  ? 每个块 = 头部+交易数据(含2000左右个交易) ? 头部(80个字节):

  – – – – – – 版本号 上一个区块的hash值(通过这个来保障上一个区块是对的) merkle根(可简单理解为对交易数据的hash) 时间戳 难度(bits,调节挖矿的难度) Nonce(挖矿时用来穷举的变量)

  1.交易时,你需要向收款方发送比特币,也就是向一个比特 币地址发送比特币(BTC)。 2.你要花的BTC,要么来自于以前别人发给你的BTC,要么是 你挖出来的,每一份这样的钱叫UTXO(Unspent Transaction Output)。 3. 一个交易包里,发送部分为输入,接收部分为输出。 4.在广播交易包时,节点会检查输入是否为真实有效的UTXO (各个节点监测着以百万为单位的所有UTXO)。

  4. 一旦使用一个UTXO,就必须全部花完,除了给接 收者外,把零钱给自己的另一个地址,也即产生两 个新的UTXO。 5.每个BTC地址都对应一个公钥和一个私钥。 6.每个UTXO都带有一个使用条件,也即提供了该地 址所对应的私钥所做的签名,才被认可。

  7.一次游戏结束,每个挖矿的节点在上一个区块产生后,在 内存中把上一个区块已经打包的交易剔除掉,把已经收到但 尚未打包的交易打包,并开始不停的计算,试图做出符合条 件的Hash。 8.也就是就是在打包时,对上一个区块的hash值、时间戳、 随机数等信息做hash计算,要求能够算出一个小于某个数 (前面若干位都是0)的hash值。 9.所有输入的BTC减去输出的BTC,就认为是给矿工的手续费。 手续费越高的交易,越优先被打包。

  – – – – – 交易的版本号 输入的个数 1个或多个输入(注意:每个输入都是以前交易的输出!) 输出的个数 1个或多个输出

  ? 每个输出(UTXO)的结构: ? 主要是里面有多少钱、花掉它的条件。

  – 比特币的数量,以10^-8个比特币(成为satoshi,聪) 为单位。 0.00000001BTC – 锁定脚本 (locking script,主要是公钥hash值+签名验 证脚本,只有提供解锁脚本(主要是公钥本身+签名值) 才能解锁,才能被花掉)

  – 含有要花掉的UTXO的那个交易的索引(tx id,每个交 易有一个hash值,用来索引交易) – 该UTXO在那个交易中的输出的顺序号 – 该UTXO的解锁脚本(unlocking-script,主要是签名和公 钥,使用ECDSA算法)

  ? 可以理解为:UTXO是被锁着的,只有用私钥做的 签名才能解开它,然后得以使用。 ? 也可以把签名理解为对UTXO这个支票签名,传送 方和接收方(也即每个节点)都会验证签名。 ? 所以拥有私钥的人才能花这个钱。

  ? 节点启动后,先找到其他节点(一般有一 个稳定节点列表,或者启动时给指定一个 节点),使用TCP协议,8333端口通信。 ? 每个节点通常和另外8个节点保持联系。

  Base58check是在Bsae58编码的基础上, 增加了错误校验功能,校验码占据4 个字节。 Base58使用在Bsae64的基础上,舍弃 了容易搞错的0(零),O(大写字母 o),l(小写字母L),I(大写字母 i),+,/。 (Base64使用26个大小字母,10个数 字以及+和/)

  ? 地址相同的概率非常低,比特币私钥是256 位的二进制随 机数,两个用户产生相同地址的概率只有约1/ 10^78。 ? 这个概率与连续8 次中六合彩头奖的概率相当( 每次中头 奖概率约 1/ 10^9),担心用户地址冲突实在是杞人忧天 了。

  ? 用户一旦用比特币和现实世界的事物发生联系,就可能被 关联,在商店用比特币购买一杯可乐,店员就可以把比特 币支付地址和该用户的相貌、性别等信息关联起来。 ? 国家法律要求,比特币交易所需要了解用户真实信息 (KnowYourCustomer,KYC),以符合反洗钱(AntiMoneyLaundering,AML)等一系列监管规定。

  ? 通过改变本区块头中的nonce以及其他可以 改动的地方,要让本区块头中记录的hash值 当前难度。

  注:还可以通过改变coinbase交易中的extraNonce区域(8字节)来改变 区块头中的merkle_root,还可以改变ntime。目的是做出满足要求的hash。

  ? 目前,有1PH/S算力的矿工,占全网算力的1/9000, 每天可以挖到的比特币是1/9000*6(每小时6次) *24(每天24小时)*12.5(每次12.5个比特币) =0.2个比特币。 ? 而ATI芯片的显卡7970这样的高端卡算力也就是 600MH/S。即便是个人的算力为1GH/s,也只是上 述算力的1/百万,也即每百万天才能挖到0.2个。

  ? 为了使收入更加平稳,矿工们可以组成矿 池(MiningPool),由矿池管理者统一分派 挖矿的计算任务,挖到的币都归矿池管理 者所有。

  ? 在一个完全去中心化的网络中,难度调整是如何做到的呢 ? 每2,016个区块中的所有节点都会调整难度。难度的调整公 式是由最新2,016个区块的花费时?与20,160分钟(两周, 即这些区块以10分钟一个速率所期望花费的时?)比较得 出的。 ? New Difficulty = Old Difficulty * (Actual Time of Last 2016 Blocks / 20160 minutes) ? 解释:如果网络发现区块产生速率比10分钟要快时会增加 难度。如果发现比10分钟慢时则降低难度。

  ? 考虑一个节点同时收到相同编号的两个区块, Hash都是正确的。先存着,再看看。

  ? 规定:BTC全网唯一的区块链是那支付出最大计算 力的分支,也即最长分支。

  – 1.不同高度的分支,总是接受最高的分支。 – 2.相同高度,接受难度最大的。 – 3.否则接受先收到的。

  ? 攻击者几乎唯一可以做的事,就是抹掉自己曾经发给别人 钱的记录。(所谓的双花)

  ? 这需要让自己成为最长的链,其他节点才会切到这个最长 链上来。 ? 仅仅算出比诚实链长出2,3个区块是不够的,因为接受者 通常会等6个确认。(否则接受者看不到区块中有自己的 内容就不会发货。) ? 这就意味着攻击者要能做出比诚实链长出7个区块,才能 让其他节点切到这个非诚实链上。

  ? 简化的支付验证(SPV)可以使节点在不必存储完整区块 链的情况下进行工作。 ? SPV节点只需下载区块头,而不用下载包含在每个区块中 的交易信息。 ? Block Header的大小始终不变,只有80字节。按照每小时6 个的出块速度,每年产出52560个区块。当只保存区块头 时,每年新增的存储需求约为4兆字节。

  若要证明数据K在区块中,只需要知道上图中蓝色的部分:HL、HIJ、HMNOP、 HABCDEFGH,最后可以算出来merkle根,对比merkle_root就可以完成证明

  ? SPV节点会通过请求merkle路径证明以及验证区块, 来证实交易的存在性。 ? 为了防范连到虚假的网络里,SPV节点需要随机连 接到多个节点,以增加与至少一个可靠节点相连 接的概率。

  1.合同,从本质上讲,是两个或多个当事人在并没 有充分信任的情况下,通过文字的约定和法律的支 持,对各自权利义务的约定。 2.将合同以程序脚本的方式放在了区块链系统中, 并按照约定的条件来自动执行。不需要人的参与。

  ? 比如有这样一个需求,某个账户,由多个 人所有,要求必须所有人都许可的情况下, 才能动用其中的资产。 ? 实现:

  ? Augur是一个去中心化的预测市场平台,基于以 太坊区块链技术。用户可以用数字货币进行预测 和下注。 ? 2个人打赌一场球赛,双方的筹码(类似UTXO) 会被会暂时锁定,球赛结束后,网络中预先设定 的智能合约会校验在线结果,然后把数字货币记 入赢家账户。

分享: