比特币交易私钥生成
❶ 【猫说】打开比特币钱包的两把钥匙:私钥、公钥
如果不了解区块链,不知道公钥、私钥这些最基本的概念,拥有钱包对币圈新人来讲,就好像拿手指头去捅鳄鱼的脑袋,风险极高。此文谨献给币圈新朋友,帮助大家梳理比特币钱包的基本常识。
区块链观察网在 《区块链是什么》 一文中提到过,在区块链世界里,每个人都拥有两把独一无二的虚拟钥匙:公钥和私钥。
“公钥”,可以简单理解为银行卡,这是可以发给交易对方看的,银行卡号则相当于比特币转账中要用到的“地址”。
讲得专业一点,公钥就是一个65字节的字符串,多长呢?130个字母和数字堆在一起。公钥太长的话,第一交易起来忒麻烦,第二干嘛非得暴露公钥的真实内容呢,这就好像把自己的银行卡拿出来到处给人看。因此,我们现在看到的地址,就是经过摘要算法生成的、更短一点的公钥。
对方知道你的地址才能给你打钱;而且,任何人有了你的地址,都能在Blockchain.info官网查询这个钱包地址交易了多少次(No. Transactions),收过多少个比特币(Total Received),以及钱包里还剩下多少个比特币(Final Balance),如下图:
“私钥”,就像打死不能告诉别人的银行卡密码。它是一串256位的随机数。因为让非IT用户去记住这个满屏0 和 1的二进制私钥是特别不人道的事儿,所以对这一大串私钥进行了处理,最后私钥就以5 / K / L 开头的字符串呈现在我们面前。
公钥、私钥、地址之间的关系是:
1)私钥 → 公钥 → 地址
私钥生成唯一对应的公钥,公钥再生成唯一对应的地址;
2)私钥加密,公钥解密
也就是说,A使用私钥对交易信息进行加密(数字签名),B则使用A的公钥对这个数字签名进行解密。
其中,私钥是极度私密的东西。如果你把私钥发给别人,现在就开始写一部长篇小说吧,名字都帮你想好了,就叫《永别了,比特币》。
如果是李笑来老师(网传拥有数十万个BTC)这类币圈大佬,强烈建议使用冷钱包(离线钱包),分开储存;电视里的富豪在银行有自己的保险箱,有条件的话也可以参考。
当时,上述方法是安全系数最高的做法。但作为韭菜接班人,暂且假设我们最初只用闲置资金、持有少量的比特币,比如,小于5个。那么,动辄上千成本、操作复杂的冷钱包就有点杀鸡用牛刀了;因此,区块链观察网把选择范围限定在交易所和轻钱包2项:
在交易平台上买了(极少量)比特币,可以先不提出来,继续存在交易所。这种方式最适合币圈新手。在没有深入了解每种加密货币背后的故事之前,鲜嫩的我们总是充满了好奇,而放在交易所的比特币,可以直接进行币币交易,交易简单快捷,不用经数字钱包导来导去;另一方面,平台上币种齐全,可以满足我们的尝鲜心理,方便随时小试牛刀。
而且像火币、币安(已被墙)这些大型交易所,不仅安全等级比某些专为收割韭菜而生的小平台高很多,而且操作简单,很快就能上手,只需保管好自己的账号、密码就行了(再安全一级的话,开启谷歌二次验证),其他的就交给平台。
值得注意的是,存在交易所上的资产并不完全属于自己,更确切地说是借给平台的,我们在资产那一栏看到的数字,相当于平台向我们借钱而打的白条。此外,交易平台本身不是去中心化的,如果安全措施不到位,用户的账号密码有可能被黑客拿到。
轻钱包是相对于“全节点”钱包来说的。
全节点钱包,比如 Bitcoin-Core(核心钱包),运行时需要同步所有区块链数据,占用相当大内存空间(目前至少50GB以上),完全去中心化;
轻钱包虽然也依赖比特币网络上其他全节点,但其仅仅同步跟自己有关的交易数据,基本实现去中心化的同时,也提升了用户体验。
根据不同的设备类型,我们把轻钱包分为:
1)PC钱包:适用于电脑桌面操作系统(如Windows/MacOS/Linus);
2)手机钱包:适用于安卓、iOS智能手机,比如比太钱包(以太也有PC端);
3)网页钱包:通过浏览器访问,比如上文提过的blockchain网页版。
轻钱包操作比较简单,一般是免费获取。申请钱包的时候,系统会生成一个私钥。准备敲黑板!
1)不要截图、拍照存在手机里;
2)不要把私钥信息发给任何人;
3)最好手写(几份)抄下,藏在你觉得最安全的地方。
总之一句话,谁掌握了钱包的私钥,谁就拥有钱包的绝对控制权。私钥只要掌握在你的手里,比特币就绝不会丢。
最后多说几句,作为普通投资者,我们需要做的并不多:
1)走点心,不要把手机弄丢了,毕竟丢了对手机里的比特币钱包有风险;
2)不要手痒删掉设备上的钱包应用,除非你决定再也不用这个钱包了,否则后期很麻烦;
3)设置复杂的密码(原因见第1点),并用心去记牢,这是私钥弄丢以后留的一手。
对于记不住密码,又懒得科学备份私钥的朋友,咱还是把钱存在银行里吧。
❷ 比特币的地址、公钥、私钥,你都了解了吗
了解比特币,就不可避免地要掌握什么是比特币的地址、公钥、私钥,下面我们一个一个来解释。
地址,就好比是银行账(卡)号,在创建数字钱包后就会自动生成,简单来说,就是创建钱包的时候,先产生一对私钥和公钥,然后公钥通过一套算法生成地址,这个地址实质上是一串字符,比如。
像银行账(卡)号可以用来收款一样,比特币地址也可以用来接收比特币。
这个比特币地址不单单给你转币的人知道,连整个比特币网络的人都能查看,可以说,全球所有用户的地址都可以被任何人知道。为什么这样说呢?因为比特币本质就是一个大型的公开账本,所有交易对所有人都是可见的。而交易记录中包括了交易流水单号、发币人的发币地址、收币人地址、发币人的找零地址。
私钥,可以看作是银行密码,是一串很长的由钱包生成的随机数,比如, LBB9ZXMCJ。私钥是唯一能够证明你拥有的比特币是属于你的,也只有用私钥才能转账、交易和使用数字钱包里的比特币。
我们都知道了,银行密码绝对不能泄露给别人,私钥也一样,打死也不要告诉他人,否则你的比特币很容易就被转走。银行的钱被盗了,因为有国家监管和第三方信用,还有可能被追回,但比特币是去中心化的,没有第三方,自己的币只能自己负责看管,丢了,或被他人转走了,就永远拿不回来了。所以千万千万不要把私钥告诉他人,不要把私钥保存在手机或者电脑上,不要通过网络传输你的私钥,那怎么办?记住了,要用笔写在纸上,写两到三份分别放在不同的地方,保管好。
公钥,顾名思义,是可以公开的,也是像地址和私钥一样,是一串长长的字符。公钥由私钥通过椭圆曲线加密算法生成,通过私钥可以算出唯一一个公钥,但公钥不能逆向推导出私钥。
那到底比特币地址、公钥、私钥在交易中起什么作用的呢?
首先,钱包通过加密算法把私钥加密成字符串(也叫作签名),然后把这个字符串,和公钥一起写到交易信息里,再发给矿工。矿工收到信息后,就会将签名、公钥写入一个验证函数,如果得出的结果为“true”,那么这个交易会被确认为真实有效,就能被验证通过。而结果为“false”,则说明这笔交易存在问题,不能被验证通过。
通过以上浅显的文字,希望能帮到你对比特币的地址、公钥和私钥有一个初步的了解吧!感谢你的阅读!
❸ 4. 比特币的密钥、地址和钱包 - 精通比特币笔记
比特币的所有权是通过密钥、比特币地址和数字签名共同确定的。密钥不存在于比特币网络中,而是用户自己保存,或者利用管理私钥的软件-钱包来生成及管理。
比特币的交易必须有有效签名才会被存储在区块中,因此拥有密钥就拥有对应账户中的比特币。密钥都是成对出现的,由一个公钥和一个私钥组成。公钥相当于银行账号,私钥就相当于银行卡密码。通常情况下密钥由钱包软件管理,用户不直接使用密钥。
比特币地址通常是由公钥计算得来,也可以由比特币脚本得来。
比特币私钥通常是数字,由比特币系统随机( 因为算法的可靠性与随机性正相关,所以随机性必须是真随机,不是伪随机,因此比特币系统可以作为随机源来使用 )生成,然后将私钥作为输入,使用椭圆曲线算法这个单向加密函数生成对应的公钥,再将公钥作为输入,使用单向加密哈希函数生成地址。例如,通过公钥K得到地址A的计算方式为:
其中SHA256和PIPEMD160被称为双哈希或者HASH160,Base58Check是带有验证功能的Base58编码,验证方式为先计算原始数据(编码前)的验证码,再比较编码后数据的验证码,相同则地址有效,否则无效。而在使用Base58Check编码前,需要对数据做处理。
处理方式为: 版本前缀 + 双哈希后的数据 + 校验码
其中版本前缀是自定义的,如比特币私钥的前缀是0x80,校验码是把版本前缀和双哈希后的数据拼接起来,进行两次SHA256计算,取前4字节。得到处理的数据后,再进行Base58编码,得到最终的结果。
下图是Base58Check版本前缀和Base58编码后的结果
密钥可以采用不同的编码格式,得到的编码后结果虽然不同,但密钥本身没有任何变化,采用哪种编码格式,就看情况而论了,最终目的都是方便人们准确无误的使用和识别密钥。
下图是相同私钥采用不同编码方式的结果:
公钥也有很多种格式,不过最重要的是公钥被分为压缩格式和非压缩格式,带04前缀的公钥为非压缩格式的公钥,而03,02开头的标识压缩格式的公钥。
前面说过,公钥是椭圆曲线上的一个点,由一对坐标(x, y)表示,再加上前缀,公钥可以表示为:前缀 x y。
比如一个公钥的坐标为:
以非压缩格式为例,公钥为(略长):
压缩格式的公钥可以节省一定的存储,对于每天成千上万的比特币交易记录来说,这一点点的节省能起到很大效果。
因为椭圆曲线实际上是一个方程(y2 mod p = (x3 + 7)mod P, y2是y的平方,x3是x的立方),而公钥是椭圆曲线上的一个点,那么公钥即为方程的一个解,如果公钥中只保留x,那么可以通过解方程得到y,而压缩公钥格式有两个前缀是因为对y2开方,会得到正负两个解,在素数p阶的有限域上使用二进制算术计算椭圆曲线的时候,y坐标或奇或偶,所以用02表示y为奇数,03表示y为偶数。
所以压缩格式的公钥可以表示为:前缀x
以上述公钥的坐标为准,y为奇数为例,公钥K为:
不知道大家发现没有,这种压缩方式存在一个问题,即一个私钥可以得出两个公钥,压缩和非压缩公钥,而这两个公钥都对应同一个私钥,都合法,但生成的比特币地址却不相同,这就涉及到钱包软件的实现方式,是使用压缩公钥还是非压缩公钥,或者二者皆用,这个问题后面来介绍。
比特币钱包最主要的功能就是替用户保管比特币私钥,比特币钱包有很多种,比如非确定性(随机)钱包,确定性(种子)钱包。所谓的非确定性是指钱包运行时会生成足够的私钥(比如100个私钥),每个私钥仅会使用一次,这样私钥管理就很麻烦。确定性钱包拥有一个公共种子,单向离散方程使用种子生成私钥,种子足够回收所有私钥,所以在钱包创建时,简单备份下,就可以在钱包之间转移输入。
这里要特别介绍下助记码词汇。助记码词汇是英文单词序列,在BIP0039中提出。这些序列对应着钱包中的种子,种子可以生成随机数,随机数生成私钥,私钥生成公钥,便有了你需要的一切。所以单词的顺序就是钱包的备份,通过助记码词汇能重建钱包,这比记下一串随机数要强的多。
BIP0039定义助记码和种子的创建过程如下:
另外一种重要的钱包叫做HD钱包。HD钱包提供了随机(不确定性) 钥匙有两个主要的优势。
第一,树状结构可以被用来表达额外的组织含义。比如当一个特定分支的子密钥被用来接收交易收入并且有另一个分支的子密钥用来负责支付花费。不同分支的密钥都可以被用在企业环境中,这就可以支配不同的分支部门,子公司,具体功能以及会计类别。
第二,它可以允许让使用者去建立一个公共密钥的序列而不需要访问相对应的私钥。这可允许HD钱包在不安全的服务器中使用或者在每笔交易中发行不同的公共钥匙。公共钥匙不需要被预先加载或者提前衍生,但是在服务器中不具有可用来支付的私钥。
BIP0038提出了一个通用标准,使用一个口令加密私钥并使用Base58Check对加密的私钥进行编码,这样加密的私钥就可以安全地保存在备份介质里,安全地在钱包间传输,保持密钥在任何可能被暴露情况下的安全性。这个加密标准使用了AES,这个标准由NIST建立,并广泛应用于商业和军事应用的数据加密。
BIP0038加密方案是: 输入一个比特币私钥,通常使用WIF编码过,base58chek字符串的前缀“5”。此外BIP0038加密方案需要一个长密码作为口令,通常由多个单词或一段复杂的数字字母字符串组成。BIP0038加密方案的结果是一个由base58check编码过的加密私钥,前缀为6P。如果你看到一个6P开头的的密钥,这就意味着该密钥是被加密过,并需个口令来转换(解码) 该密钥回到可被用在任何钱包WIF格式的私钥(前缀为5)。许多钱包APP现在能够识别BIP0038加密过的私钥,会要求用户提供口令解码并导入密钥。
最通常使用BIP0038加密的密钥用例是纸钱包一一张纸张上备份私钥。只要用户选择了强口令,使用BIP0038加密的私钥的纸钱包就无比的安全,这也是一种很棒的比特币离线存储方式(也被称作“冷存储”)。
P2SH函数最常见的实现时用于多重签名地址脚本。顾名思义,底层脚本需要多个签名来证明所有权,然后才能消费资金。这类似在银行开设一个联合账户。
你可以通过计算,生成特殊的比特币地址,例如我需要一个Hello开头的地址,你可以通过脚本来生成这样一个地址。但是每增加一个字符,计算量会增加58倍,超过7个字符,需要专门的硬件或者矿机来生成,如果是8~10个字符,那么计算量将无法想象。
❹ 聊聊钱包、私匙、公匙和地址
自从比特币诞生伊始,与此相关的私钥、公钥、地址等名词概念就不断出现在大众眼前,那么这四个概念之间是什么样的关系呢?今天就给大家简单聊一些相关的专业名词和背后的逻辑。
1 这些名词的关系是什么样的?
如果用一句话说明这几个名词的关系,那就是: 钱包生成私钥 → 私钥生成公钥 → 公钥生成公钥哈希 → 公钥哈希生成地址 → 地址用来接受比特币 ,简单吧,能听懂吧。
2 这几个名词究竟是什么东西?
还是一句话概括, 除了钱包是软件以外,剩下的四个都是长度不一的字符串 ,比如私钥是52位的字符串,地址是34位的字符串。
3 这四个字符串分别从哪里来的?
私钥 由钱包软件随机生成,随后用密码算法生成公钥和地址,如果用等式表示的话,可写成如下形式:
公钥=算法1(私钥)
公钥哈希=算法2(公钥)
地址=算法3(公钥哈希)
所以, 地址 =算法3(算法2(算法1(私钥)))
其中,算法1,算法2,算法3都是公开的算法。
4 这几个字符串哪个必须保密,哪个可以公开?
私钥绝对不能公开 ,因为有了它本质上就取得了对应比特币的所有权。
地址可以公开 ,因为它是用来接受比特币的, 公钥和公钥哈希也可以公开 ,不过一般情况下你看不到。
5 为什么地址和公钥可以公开?
因为 即使被别人知道了地址和公钥,对方也推算不出你的私钥,也就掌握不了你的比特币 。
为什么推算不出?
举个例子。电影《模仿游戏》中,英军即使在得到了engima密码机(算法)后仍然无法破解德军的密码,原因就是德军每次发信息都会用一个新的口令(私钥)作为起始点。在不知道口令的前提下,进行反向暴力破解大概需要几千万年,不过最后因为刻板的德国人每次都用同一个口令作为起点,而这个口令还是自然语言,导致密码被破解。
所以,每次交易的时候才会要求生成一个新的私钥,然后得到一个新的地址,这样你的交易安全性就有了很大的保障。
6 做自己开心的事
从上面的描述我们可以推出,私钥的本质是一个复杂数学问题的解,当有人向公开地址发送比特币时,其实是在向全网所有比特币客户端发出了一道数学题,而这道题目的正确解,就是你的私钥。因为那道题是用你的私钥生成的呀,所以只有你能在第一时间回答出答案,于是比特币就归你了,因此 私钥千万不能告诉别人。
如何找到私钥并妥善保管?
在bitcoin-qt软件中,进入windows debug或者调试窗口,在命令行下输入 getaddressbyaccount 命令可以查看所有已经生成的钱包地址。选取其中一个地址,然后用 mpprivkey “地址”命令就能看到私钥了(54位字符串)。
下图是用getaddressbyaccount “”命令查看地址列表,用mpprivkey查看私钥的截图,注意第一张图中由于钱包是加密的,所以直接打mpprivkey命令是看不到私钥的。
输入钱包密码后才能用mpprivkey命令看到私钥。
刚已经说了私钥非常的重要,它是真正决定比特币归谁的证明。私钥在bitcoin-qt客户端里,实际上是存在于一个叫wallet.dat的文件里的,而且刚安装的bitcoin-qt客户端是不设密码的。万一电脑落入不法分子手中或被黑客攻击,导致私钥丢失,就狠尴尬了,所以一定要设置密码,且密码一定要遵守随机复杂大小写字符数字都有的规则。建议用专门的密码生成软件生成,关于密码软件,找机会专门说一下。
特别注意,千万千万千万记住了,一定不要把密码给忘了!因为你 忘了密码就打不开钱包 wallet.dat 文件了,也就找不到私钥了 ,然后,就没有然后了。
我就发生过刚开始倒腾钱包把密码搞错了,然后打不开钱包的尴尬,最后只好怒删wallet.dat文件,让系统再自己生成一个,这时候的感觉大约相当于把一笔钱埋在了宇宙某颗星球上,然后把坐标图搞丢了,因为比特世界只认私钥不认身份证,你掉了就是掉了,再也找不回来了。
不过正因为比特币的所有权是依靠私钥确认的,也就有个最狠的保存办法,老猫也提过,那就是,找到私钥后记在纸上,然后把纸锁在保险柜里,或者干脆记在脑子里,不过54位的字符串谁特么能记住?然后把电脑上的客户端连同钱包文件一起删除。
好了,关于钱包客户端,大概就说这些吧,相关知识我也是刚开始了解,随着了解信息的增加,可能会有更新的认识,到时候会再写出来。
千万注意,千万注意,千万注意不要搞丢了私钥。
❺ 【区块链】比特币私钥、公钥、签名
在 了解区块链的基础名词概念 提到地址由字符和数字组成,但没有说明怎样产生的。银行卡号由银行核心系统生成,那比特币地址是通过什么生成的呢?看下图:
对于刚接触比特币的小白来说,看到这张图就蒙圈了,究竟什么是私钥、公钥,为什么生成个地址要这么麻烦吗?
现在请大家记住这句话: 私钥通过椭圆曲线相乘生成公钥,使用公钥不能导推出私钥;公钥通过哈希函数生成比特币地址,地址也无法导推出公钥 。
通过这么复杂算法才算出地址,那私钥和公钥只是为了生成地址吗?不是的,他们还有其他用途,我们先了解下私钥和公钥。
现在已经讲解地址、挖矿、工作量证明、算力、区块、区块链等等的概念,不知大家还有印象吗?如果忘记请温习这些概念,因为后续很多地方都会用到这些概念。明天讲解下区块链有哪些特点。
参考书籍:《精通比特币》
区块链知识专题:
比特币记账方式(区块链知识2)
了解块链的基础名词概念(区块链知识1)
❻ 比特币的私钥怎么生成的
私钥是密文持有人设置的随机的数字。
私钥的生成是随机的数字,通过抛硬币将正面向上的计为0,反面向上计为1,连续抛256次,就随机得到一个256位的二进制数字。生成了私钥,就可以通过加密函数来生成一个地址。私钥是一个64个字符长的代码,包括字母a到f和数字1到9的任何混合。
❼ 比特币基础知识 你绝对想不到
椭圆曲线数字签名算法
椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线对数字签名算法(DSA)的模拟,该算法是构成比特币系统的基石。
私钥
非公开,拥有者需安全保管。通常是由随机算法生成的,说白了,就是一个巨大的随机整数,32字节,256位。
大小介于1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的数,都可以认为是一个合法的私钥。
于是,除了随机方法外,采用特定算法由固定的输入,得到32字节输出的算法就可以成为得到私钥的方法。于是,便有了迷你私钥(Mini Privkey),原理很简单,例如,采用SHA256的一种实现:
private key = SHA256()1
迷你私钥存在安全问题,因为输入集合太小,易被构造常见组合的彩虹表暴力破解,所以通常仿轮纳还是使用系统随机生成的比较好,无安全隐患。
公钥
公钥与私钥是相对应的,一把私钥可以推出唯一的公钥,但公钥却无法推导出私钥。公钥有两种形式:压缩与非压缩。
早期比特币均使用非压缩公钥,现大部分客户端已默认使用压缩公钥。
这个貌似是比特币系统一个长得像feature的bug,早期人少活多代码写得不够精细,openssl库的文档又不足够好,导致Satoshi以为必须使用非压缩的完整公钥,后来大家发现其实公钥的左右两个32字节是有关联的,左侧(X)可以推出右侧(Y)的平方值,有左侧(X)就可以了。
现在系统里两种方式共存,应该会一直共存下去。两种公钥的首个字节为标识位,压缩为33字节,非压缩为65字节。以0x04开头为非压缩,0x02/0x03开头为压缩公钥,0x02/0x03的选取由右侧Y开方后的奇偶决定。
压缩形式可以减小Tx/Block的体积,每个Tx Input减少32字节。
签名
使用私钥对数据进行签署(Sign)会得到签名(Signature)。通常会将数据先生成Hash值,然后对此Hash值进行签名。签名(signature)有两部分组成: R + S。由签名(signature)与Hash值,便可以推出一个公钥,验证此公钥,便可知道此签名是否由公钥对应的私钥签名。
通常,每个签名会有三个长度:73、72、71,符合校验的概率为25%、50%、25%。所以每次签署后,需要找出符合校验的签名长度,再提供给验证方。
地址
地址是为了人们交换方便而弄出来的一个方案,因为公钥太长了(130字符串或66字符串)。地址长度为25字节,转为base58编码后,为34或35个字符。base58是类似base64的编码,但去掉了易引起视觉混淆的字符,又在地址末尾添加了4个字节校验位,保障在人们交换个别字符错误时,也能够因地址校验失败而制止了误操作。
由于存在公钥有两种形式,那么一个公钥便对应两个地址。这两个地址都可由同一私钥签署交易。
公钥生成地址的算法:
Version = 1 byte of 0 (zero); on the test network, this is 1 byte of 111
Key hash = Version concatenated with RIPEMD-160(SHA-256(public key))
Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash))
Bitcoin Address = Base58Encode(Key hash concatenated with Checksum)1234
下图是非压缩公钥生成地址的过程:
对于压缩公钥生成地址时,则只取公钥的X部分即可。
推导关系
三者推导关系:私钥
公钥
两个地址。过程均不可逆。拥有私钥便拥有一切,但通常为了方便,会把对应的公钥、地址也存储起来。
交易
比特币的交易(Transation,缩写Tx),并不是通常意义的桐散交易,例如一手交钱一手交货,而是转账。交易由N个输入和M个输出两部分组成。交易的每个输入便是前向交易的某个输出,那么追踪到源头,必然出现一个没有输入的交易,此类交易称为CoinBase Tx。CoinBase类备没交易是奖励挖矿者而产生的交易,该交易总是位于Block块的第一笔。
拥有一个输入与输出的Tx数据:
Input:
Previous tx:
Index: 0
scriptSig:
241501
Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160
OP_EQUALVERIFY OP_CHECKSIG12345678910
一旦某个Tx的第N个输出成为另一个Tx的输入,那么该笔比特币即为已花费。每个交易有唯一Hash字符串来标识,通过对交易数据做两次SHA256哈希运算而来:
Tx Hash ID = SHA256(SHA256(Tx Data))1
矿工费
矿工费(Transaction Fee)是鼓励矿工将Tx打包进Block的激励报酬。计算一笔交易的矿工费:
Transaction Fee = SUM(Inputs amount) - SUM(Outputs amount)1
每笔Tx的矿工费必然大于等于零,否则该笔Tx即为非法,不会被网络接收。
数据块
数据块(Block)是存储Block Meta与Tx的地方。Block的第一笔Tx总是CoinBase Tx,因此Block中的交易数量总是大于等于1,随后是这段时间内网络广播出来的Tx。
找到合适的Block是一件非常困难的事情,需要通过大量的数学计算才能发现,该计算过程称为“挖矿”。首个发现者,会得到一些比特币作为奖励。
数据链
多个Block连接起来成为数据链(Block Chain)。
为了引入容错与竞争机制,比特币系统允许Block Chain出现分叉,但每个节点总是倾向于选择最高的、难度最大的链,并称之为Best Chain,节点只认可Best Chain上的数据。
首个Block称为Genesis Block,并设定高度为零,后续每新增一个Block,高度则递增一。目前是不允许花费Genesis Block中的比特币的。
每个Block中的Tx在此Block中均唯一
一个Tx通常只会在一个Block里,也可能会出现在多个Block中,但只会在Best Chain中的某一个Block出现一次
货币存储
比特币是密码货币、纯数字化货币,没有看得见摸得着的硬币或纸币。一个人持有比特币意味着:
其拥有一些地址的私钥
这些地址是数笔交易的输出,且未花费
所有货币记录均以交易形式存储在整个blockchain数据块中,无交易无货币。货币不会凭空产生,也不会凭空消失。遗失了某个地址的私钥,意味着该地址上的Tx无法签署,无法成为下一个Tx的输入,便认为该笔比特币永久消失了。
货币发行
既然所有交易的输入源头都是来自CoinBase,产生CoinBase时即意味着货币发行。比特币采用衰减发行,每四年产量减半,第一个四年每个block的coinbase奖励50BTC,随后是25btc, 12.5btc, 并最终于2140年为零,此时总量达到极限为2100万个btc。
减半周期,严格来说,并不是准确的四年,而是每生成210000个block。之所以俗称四年减半,是因为比特币系统会根据全网算力的大小自动调整难度系统,使得大约每两周产生2016个block,那么四年约21万块block。
该函数GetBlockValue()用于计算挖得Block的奖励值:
int64 static GetBlockValue(int nHeight, int64 nFees)
{
int64 nSubsidy = 50 * COIN;
// Subsidy is cut in half every 210000 blocks, which will occur approximately every 4 years
nSubsidy = (nHeight / 210000);
return nSubsidy + nFees;
}123456789
当达到2100万btc以后,不再有来自CoinBase的奖励了,矿工的收入来源仅剩下交易的矿工费。此时,每个block的收入绝对值btc很低,但此时比特币应当会非常繁荣,币值也会相当的高,使得矿工们依然有利可图。
杜绝多重支付
传统货币存在多重支付(Double Spending)问题,典型的比如非数字时代的支票诈骗、数字时代的信用卡诈骗等。在比特币系统里,每笔交易的确认均需要得到全网广播,并收录进Block后才能得到真正确认。每笔钱的花销,均需要检测上次输入交易的状态。数据是带时间戳的、公开的,BlockChain由巨大的算力保障其安全性。所以比特币系统将货币的多重支付的风险极大降低,几近于零。通过等待多个Block确认,更是从概率上降低至零。一般得到6个确认后,可认为非常安全。但对于能影响你人生的重大支付,建议等待20~30个确认。
匿名性
任何人均可以轻易生成大量的私钥、公钥、地址。地址本身是匿名的,通过多个地址交易可进一步提高匿名性。但该匿名性并不像媒体宣传的那样,是某种程度上的匿名。因为比特币的交易数据是公开的,所以任何一笔资金的流向均是可以追踪的。
不了解比特币的人为它的匿名性产生一些担忧,比如担心更利于从事非法业务;了解比特币的人却因为它的伪匿名性而苦恼。传统货币在消费中也是匿名的,且是法律保障的,大部分国家都不允许个人涂画纸币。
地址本身是匿名的,但你可以通过地址对应的私钥签名消息来向公众证明你拥有某个比特币地址。
其他名词
哈希
哈希(Hash)是一种函数,将一个数映射到另一个集合当中。不同的哈希函数映射的空间不同,反映到计算机上就是生成的值长度不一样。同一个哈希函数,相同的输入必然是相同的输出,但同一个输出却可能有不同的输入,这种情况称为哈希碰撞。
常见的哈希函数有CRC32, MD5, SHA1, SHA-256, SHA-512, RIPEMD-160等,哈希函数在计算中有着非常广泛的用途。比特币里主要采用的是SHA-256和RIPEMD-160。
脑钱包纸钱包
前面提到过的脑钱包与纸钱包,这其实不算是钱包的分类,只是生成、存储密钥的方式而已。脑钱包属于迷你私钥的产物。脑钱包就是记在脑袋里的密钥,纸钱包就是打印到纸上的密钥,仅此而已。
有同学提到过,以一个计算机文件作为输入,例如一个数MB大小的照片,通过某种Hash运算后得到私钥的方法。这个方案的安全性还是不错的,同时可以防止盗私钥木马根据特征扫描私钥。文本形式存储私钥是有特征的,而一个照片文件却难以察觉,即使放在云盘等第三方存储空间中都是安全的。
❽ 如何从交易所获取私钥
进入货币圈,买卖代币是不可避免的。交换是大多数人选择的对象。代币通常存储在交易所或钱包中。对于普通投资者来说,代币通常存储在交易所。在这里,Lone Bird简要介绍了存储在交易所中的代币是如何保存或转移的。
以比特币为例;交易平台每天都有巨大的比特币交易活动,用户在平台上拥有数万个比特币。为了保证比特币的安全性,交易所每天都会将比特币存储在主机服务器上,将比特币放入冷库钱包,只在服务器上保存少量比特币,以应对正常的取款请求。还有一件事。如果交易所将用户的比特币用于其他目的,用户将没有硬币可以提取。
为什么把它放在冰冷的钱包里是出于安全考虑。即使电脑被黑客入侵,黑客也无法获得比特币的私钥。私钥不会出现在其他在线终端或网络上;交换将生成大量的私钥。以及保存用户比特币的地址。
那么,交换机是如何执行冷库和取款的呢?首先是私钥的生成和备份,
1)在完全脱机的计算机上生成10000个私钥和对应的地址,使用AES加密私钥,然后删除原私钥。
2)将AES密码保存在属于不同地方的两个人手中。
3)使用加密私钥和明文地址生成QR码加密文件,并扫描一台完全脱机的电脑生成该地址文件的QR码供日常使用。
要将硬币从热钱包转移到冷钱包,每次必须是一个未使用的地址,且每个地址不能重复使用,然后将硬币在线转移到冷钱包,
1)从地址文件中取出对应的地址;
2)根据安全级别,每个地址不超过1000个比特币,每个地址使用一次,不使用。
最后,从冰冷的钱包里取出硬币。取币过程如下:
1)通过二维码将私钥密文扫描到一台完全离线的电脑中;
2)拥有AES密码的人在完全脱机的计算机上解密它,并获得私钥的明文。扫描二维码,将私钥导入另一台计算机,进行交易签名,并通过二维码将签名交易同步到所有网络计算机,并进行广播。