区块链:比特币背后的技术卫剑钒1区块链的定义•狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可伪造的分布式账本。-百度百科2用麻将来比喻区块链?•所有的比喻都是错误的,部分比喻有一些用。就好比用水解释金融。•完全抓住一个概念需要自底而上的了解。3本次讲座•讲解比特币背后的技术细节(比特级)•把听众当零基础看•只是领进门•大约40~50分钟42013年12月5日,人民银行、工信部、三会等五部委发布《关于防范比特币风险的通知》,“从性质上看,比特币是一种特定的虚拟商品,不具有与货币等同的法律地位。但是,作为一种互联网上的商品买卖行为,普通民众在自担风险的前提下拥有参与的自由。”比特币的定性5比特币长什么样子67比特币长什么样子8怎么把比特币发给别人别人怎么发比特币给我9涉及的概念•比特币地址:–形如12usb4VU1UqHSn2QLRyfyNxT3VGgVGaCNo的一串数。•比特币地址是用公钥做哈希生成的。•比特币公钥使用私钥生成的。•比特币私钥是用户通过钱包生成的。•比特币钱包是一个客户端。10比特币归根到底是比特1160e31600000000001976a914ab68025513c3dbd2f7b92a94e0581f5d50f654e788ac01100000111000110001011000000000000000000000000000000000000000000001100101110110101010010001010010101011011010000000001001010101000100111100001111011011110100101111011110111001001010101001010011100000010110000001111101011101010100001111011001010100111001111000100010101100内含0.015比特币的UTXO:用16进制表示这个UTXO:只有提供了正确的公钥和签名才能把这笔钱花了16进制和2进制(零基础)•一个16进制(hex)字符可用4位(2进制)表示。012345670000000100100011010001010110011189abcdef1000100110101011110011011110111112所以:16进制的60e3就是2进制的011000001110001116进制:2进制:16进制:2进制:区块链长什么样子13仔细看一个区块14头部80字节交易存放区010000008a730974ac39042e95f82d719550e224c1a680a8dc9e8df9d007000000000000f50b20e8720a552dd36eb2ebdb7dceec9569e0395c990c1eb8a4292eeda05a931e1fce4e9a110e1a7a58aeb01601000000010000000000000000000000000000000000000000000000000000000000000000ffffffff5370736a049a110e1a04b099a417522cfabe6d6d4e6988c831bb48c551eea50f87b3c6461ade476fe15c98bed7c6a574aca4ff3501000000000000004d696e656420627920425443204775696c6420ac1eeeed88ffffffff0140ff082a010000001976a914ca975b00a8c203b8692f5a18d92dc5c2d2ebc57b88ac000000000100000001d81a8ff9114a09536c43b16003011a91bce5a2941d117e050c01ba1920181c72010000008c493046022100c7784a417a5780b922dd6385bd1cc07b530794c63d6b0584378fc6dfb79d35d50221008812fd23e25549fca2ea6273e0f609f8aa93e2e822ec9a4537d57cd4fb664165014104cfe9363f2c7213bde611e57a4e16b2fb90cf3db160276e5f9f12081c718ebb3821a485866585b3fe416d1b28d4fd993db339dd38bef48da7ec4db5b618a1ce09ffffffff02404b4c00000000001976a91499e8943edcd38645f4a99a7173c9c42ab3e2160c88ac440730ec010000001976a9142e61d7641959b2afcaae323186c239d65df1e58488ac00000000010000000171b250f62a6a5a17ab0a0d60592c39871ba2141a166a852c94cf4f00f0fcb88d010000008b48304502202e1f5fc8065c38a5d7471aa7d3f495048ea773049e6f30d939173dd553fa114f0221008fad13d287ead5c297589211ec0b687fe129f7ff61a344825b295a5c0eda06450141047ef7874043d8355b39ca58c4894ff937c9bce598ac01b325407694d8ddd2132......版本号、哈希、merkle根、时间戳、难度值、Nonce交易数量交易1数据(即输入、输出)交易2数据(即输入、输出)交易3数据(即输入、输出)......Block#15459515区块是怎么连接起来的版本号、上一区块头哈希、时间戳、难度值、Nonce本区块交易的merkle根、交易数量交易1数据交易2数据交易3数据......版本号、上一区块头哈希、时间戳、难度值、Nonce本区块交易的merkle根、交易数量交易1数据交易2数据交易3数据......哈希算法•一种算法,把任意长度的输入做复杂的变换后,输出固定长度的输出。–MD5输出的是128位,16字节。–SHA256输出的是256位,32字节。(BTC使用)–RIPEMD160输出的是160位,20字节。(BTC使用)•计算Hash很容易,逆向很难。倒推只能靠暴力尝试。•不同的输入,算法产生完全不同的输出。•尽可能等概率、均匀分布到整个地址空间,降低冲突(碰撞)发生几率。16md5–s“weijianfan”MD5(weijianfan)=c49262b1117b9fd1d6ebd74aaa016f3emd5–s“weijianfam”MD5(weijianfam)=83cc9391aaf8c955b67ecdbf249c5fbfmd5APT攻击9.10.mp4MD5(APT攻击9.10.mp4)=e9c2a884af7b7c6db7919f8cc8abc51b注:该视频362M。17MD5生成思考•给定输入data,然后不断变换Nonce,让你找出前面若干位是0的hash值。•MD5(fixeddata+Nonce)=0100110....011011•如果让你找出第1位是0的hash值,一般大概需要两次。•如果让你找出前2位是0的,大概需要4次。•如果找出前3位是0的,几次?18MD5(Thisisatest17)=b0fc7f1d91e9053995f707a90970001d1011....MD5(Thisisatest18)=2da096e2d33078719be1f71f19f3f10b0010....MD5(Thisisatest19)=32333b0fcb54a8c89e3de7d6c9ad4b5c0011....MD5(Thisisatest20)=bbe19f5c8edc2de5e19e7e374ba5e7ff1011....MD5(Thisisatest21)=95090ec4bc9582eeed1ffa5190ed6e7d1001....MD5(Thisisatest22)=2192d2e7b31a0ef78f2292631d5dd95d0010....MD5(Thisisatest23)=de2e3710ec0fa7fb59d5e28dffce88c91101....MD5(Thisisatest24)=6cb7aaf335f7db96aff76568c7c528c90110....MD5(Thisisatest25)=c7ca696058808f0185b68398bc59ab321100....MD5(Thisisatest26)=162f09dd9c4d8f612f710fe54e5e585b0001....MD5(Thisisatest27)=0daa804de33f7f8559bdb33b3e2d6f5c0000....MD5(Thisisatest28)=b484f277e80c304751f00d670db98fb31011....MD5(Thisisatest29)=aa1cd22cc75b4b0eed9d48c639d3832d1010....MD5(Thisisatest30)=c11afafbbffecd4d558c5069f27ad1031100....MD5(Thisisatest31)=4f09394865cc6094e7a618a0a152e30c0100....MD5(Thisisatest32)=6907ecb0a7d7887e338315331559383b0110....16进制2进制19想找出前面30bit都为0的哈希值,平均需要2^30次尝试。2000000003fc7f1d91e9053995f707a909简要理解公钥算法•公钥与私钥是通过一种算法得到的一个密钥对。–公钥可以公开,私钥要保密。–从私钥可以导出公钥,从公钥无法导出私钥。•公钥算法:–用公钥加密,用私钥解开。–用私钥加密,用公钥解开。21如何理解•你把信件用私钥加密,所有人都可以用你的公钥解开它看。(密码学保证是你写的)•别人用你的公钥加密一封信,只有你才能用私钥解开来看。(密码学保证只有你才能看)22数字签名•现实生活中的签名:–表达了签名人对所签署文件的认可。–隐含要求:文件不应该再被改动。23数字签名一种做法:明文,签名者用私钥对明文加密验证方法:用签名者公钥解开密文,对比明文明文签名24数字签名•常见做法:明文,签名者用私钥对明文的哈希加密•验证方法:用哈希算法计算明文的哈希。用签名者公钥解开密文,对比哈希。明文签名25公私钥的模样(ECDSA算法)•私钥是随机生成的,比如一个256位私钥(64个hex,32个字节):1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD•公钥为520位(130个hex,65个字节)04F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB•压缩格式的公钥为264位(66个hex,33个字节)03F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A•签名为576位(144个hex,72个字节)3045022100884d142d86652a3f47ba4746ec719bbfbd040a57