玩客猴,蜜罐玩客,迅雷玩客云,玩客日记

首款基于迅雷玩客云区块链技术的养成小游戏

以太猫太复杂,操作太繁琐?

拥有手机即可参与游戏,随时随地便捷操作

==========

官方网址:

http://h.miguan.in

———-

官方微信公众号,搜索:

蜜罐玩客

注:在公众号中就可以直接打开网页,直接玩

==========

欢迎加入玩客猴QQ讨论群:

674831425

区块链基础:散列法 (Hashing)

灯泡,比特(bits)与字节(bytes)

你可能知道计算机中所有的数据都是由0或1组成的,最小的数据单位就是一个比特(bit,或位),它也是0或者1。想象一下,一台计算机拥有着很多的灯泡,而这个灯泡的状态有两种,亮(1)或者灭(0)。而不同的数据,由灯泡显示的图案也是不同的。大数据如视频,就使用了相当多的灯泡,而一个简短的电子邮件,其所需要的灯泡就较少。一个单一的灯泡代表着一个比特。另外,你可能听说过一个词叫字节,一个字节就相当于8个灯泡的组合。而1MB的数据约为100万个字节,也就相当于800万个灯泡。

如今,家用的电脑就拥有了数十亿甚至万亿级数量的灯泡。但我们发现,即使只是由256个灯泡组成的集合,也足以代表宇宙中能够观察到的任何颗粒。想象一下256个灯泡组能够产生的所有图案,那将是一个天文数字:也就是2^256种可能性。

加密散列函数(或加密哈希函数)

一个散列函数(hash function),即取任何的输入,就可以产出一个特定大小的输出。这个运用散列函数,然后产出某些数据的过程,我们称之为散列法(hashing)或音译为哈希法。而散列函数的输出,我们称之为一个散列(hash)。一个特定散列函数的基本特征,就是它产出输出的大小。比方说本文中的示例,我们使用一个产出输出为256 bits(32字节)的散列函数。当然也有散列函数能够产出较小的输出,或者也可以产出较大的输出,也存在另外一些能够产出256 bits的散列函数,但这个例子中,我们并不关心具体所使用的散列函数。

使用这个例子的散列函数,当一部N兆(MB)的视频被散列运算时,那它的输出结果为:256个灯泡中有一些灯泡是点亮的。当一个简短的电子邮件被散列运算时,这256个灯泡的输出显示,则是另外的一种图案。在某些方面,散列法看起来就像是压缩。简单地解释下这两者之间的区别,散列法总是会产生相同数量的灯泡,而压缩一部N兆(MB)视频的结果,仍然会产生数以百万计灯泡的一个输出。一个压缩过的视频,可被解压缩然后获得原始的视频。而当一个视频被散列到仅仅只有256个灯泡时,从这个散列来重新构建原始视频的可能性就很小了。这可能听起来并不是理想的,但实际上这正是散列函数的一个强大功能。

一个安全的加密散列函数,它的一个关键特征就是,它是单向的。这意味着,从数学和计算机学角度上来看讲,从输出来反推输入,这几乎是不可能的。也就是说,给定一个散列,想要了解或查到提供给这个散列函数的输入数据,它应该是不可行的。技术术语上来讲,我们称它为逆原像阻力(pre-image resistance)。

结果是,无论是散列法运算一个较大或者一个较小的输入,散列函数应消耗大约相同的时间量。另一个理想中的结果是,这个散列,也就是由散列函数而产生的灯泡图案,似乎应是随机的,对数据“password1”进行散列法运算,其产生的灯泡图案,与对数据“password2”进行散列法运算而产生的灯泡图案,两者是有很大不同的。否则,如果图案是相似的,那对方就可以推断出输入也是类似的,而如果相关的词(如“pass”,“word”)被发现时,那密码也很容易被找到。安全的散列函数,即使输入仅相差一个bit,也会产生显著不同的输出。

安全的理想行为,是给定一个散列,而唯一找到输入数据的方法,就是通过对所有输入的组合进行散列法运算,直到正确的输入是被散列运算了。如果输入是随机的,那找到它的时间既是不确定的。

虽然找到一个散列的输入应该是非常困难的,它需要花费很长的时间,但计算一个散列却是很快就能完成的。一个带有大量输入的散列函数,可能在不到一秒的时间内,就能得到输出。考虑到今天智能手机,每秒能够进行数十亿次的计算,1秒对于计算而言,就相当于很长的时间了。

加密散列函数也应该是抗碰撞的(collision resistant)。一个碰撞过程,意指当一个散列函数为超过1个输入进行运算,而产出相同输出的结果。如果用散列法运算数据1(可能是一份电子表格),而用散列法运算数据2(可能是一张图片),这两者产生了相同的输出,那么这个碰撞冲突就发生了。

加密散列函数,其安全性的重要性,在我们描述区块链和散列法部分时,会显得更为清楚。

区块链和散列法

散列法(Hashing)广泛地应用于区块链,这里也有一些例子。

区块链上的地址,是由散列法运算公钥而得到的。一个以太坊的账户地址,是以Keccak-256(开发者应该阅读下它与SHA3-256的关键区别)散列法运算一个公钥而得出的。而一个比特币地址,则是通过SHA2–256和RIPEMD160来散列法运算一个公钥而得出的。

散列函数的抗碰撞性是重要的,因为如果2个人产生了相同的地址(发生了冲突),那任何一方都可以花费这个地址上的钱。

签名也是区块链的基本组成部分。类似于签署一张支票,加密签名决定哪些交易是有效的。签名是由私钥和需要被签名的数据散列而生成的。

交易散列在区块链中是非常明显的。比方说描述一笔交易:“Alice在D日T时,向Bob发送了X单位的货币”,那么交易就会被提交为他们的散列,例如5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060 是以太坊区块链中的一笔交易。交易散列也是更为直接可用的,例如“在1337个区块中的第1024笔交易”这样的描述,你只需要复制这个散列,并粘贴到一个区块链浏览器中,然后就可以查看这笔交易的细节。

形而上学地讲,区块链中的区块是由它们的散列来确定的,其充当了鉴别和完整验证的双重角色。一个识别字符串还会提供它自有的完整性,被称为自认证标识符。

对于使用挖矿机制的区块链来说,工作量证明(Proof-of-Work)就是一个数字,我们称它为随机数(nonce),当它和其他散列过的数据进行合并时,会产生一个比规定目标值更小的值。挖矿使得散列法成为一种快速运算、单向不可逆的算法。找到一个有效的随机数需要时间,因为(矿工)没有可用的线索来帮助它们找到一个足够小的散列,而唯一找到一个小于目标值的方法,就是计算很多的散列:在比特币中,目前存在了超过10^25(10 septillion)数量级的散列。当一个(nonce)随机数被找到时,验证它的时间就需要1秒,然后这个新区块会在网络中广播,形成最新的共识和区块链。

在区块链上的存储数据是永久性的,但把大量的数据存储在区块链上则是不明智的,而实用的区块链存储方法,是将固定大小(通常是小的)的数据代表存储在区块链上,我们称之为“数据的散列”。区块链的一个应用是作为一个时间戳服务。假设你想要证明一张当前存在的图片,保证在未来时它不是编造出来的。你可以将图片的散列存储在区块链上,一年以后,当法官问起这张图片是否在一年前真实存在时,你可以提供这个图片,然后法官就可以散列运算这张图片,并与你存储在区块链上的散列进行对比。

散列法还涉及到更多高级的例子,例如区块链、可扩展性、轻钱包创新的根本 —— 梅克尔树(Merkle tree)。

用于安全识别的散列

安全加密散列函数是单向、快速计算,并且抗碰撞的。结合这些特点后,它们会处理任何类型的输入,然后产生一个固定大小的输出,称之为散列,散列作为任何数据的标识而言,是非常有用的。长度256 bits的散列,代表了一个天文数字的组合,将它们用于全球物联网的唯一标识符,那也是绰绰有余的,即使是在纳米技术规模下,这些散列也可以被写为64个字符(十六进制),这使得它们足以作为标识符来使用。在区块链中,散列是作为区块、交易和地址的标识符。

散列还享有安全与隐私的优势。如果一首歌是以数字格式被记录的,并且这首歌的散列是被记录在区块链之上的,那任何他人都无法声称是他们是第一个创造了这首歌,并生成了这个散列,他们也不会知道歌曲本身:某人不能写歌,也没法篡改这个散列。同样地,除非歌曲或其他数字化财产或数据被表明了,展示在区块链上的仅仅是散列本身而已。 所有权记录也可以存储在区块链上,举个简单的例子,车辆登记处可以将汽车数据散列(照片,VIN, 车牌)存储在区块链上,只有车辆所有者,保险公司以及政府会知道这个车辆的实际细节。

深入理论,广泛应用

设计加密散列函数,需要艺术与科学的结合。为了证明它们的安全性,就需要用到先进的数学与计算机科学。区块链是为广大人群提供的,第一个充满散列的用户界面。好的用户体验,其背后隐藏着很多的散列,但正如我们今天看到的各种 id和序列号,有时候散列会是替代长篇大论的最佳标识符。随着加密技术与物联网技术变得更加普及化,希望在未来能够看到更多64字符的散列!

原文:https://medium.com/@ConsenSys/blockchain-underpinnings-hashing-7f4746cbd66b#.94m1n6n3b
作者:Joseph Chow(ConsenSys).
图片:Bogdan Burcea
翻译:洒脱喜
稿源(译):巴比特资讯(http://www.8btc.com/blockchain-undnnings-hashing)

3分钟读懂“高大上”——深入浅出的讲解比特币钱包

对于一个新进入比特币世界的人来说,了解比特币的基本原理、甚至读懂中本聪的白皮书可能都算不上“难”,但要搞明白比特币钱包,那可就真难了。官方比特币钱包、轻钱包、手机钱包、在线钱包、纸钱包、脑钱包、硬件钱包、多重签名钱包、HD钱包……这一大堆乱七八糟的到底都是些什么?再加上这段时间被业内人士经常提及的ON-CHAIN钱包、OFF-CHAIN钱包,OMG,还能再复杂点儿不?

那么,到底什么是比特币钱包呢?顾名思义,比特币钱包就是存储和使用比特币的工具,定义本身清晰而简单,只不过是被大家搞复杂了而已。今天,我将通过这篇文章,尽可能的让“比特币钱包”回归简单。

 

三个基本概念:私钥、公钥和地址

继续本文之前,我们需要了解比特币的三个最为基本的概念:私钥、公钥和地址。关于这三个概念,已经有很多文章专业的从密码学等领域进行过剖析,在这里我就不再赘述了,我将尽可能的用通俗易懂的语言给大家说说。

私钥(private key)

听起来很高端,其实就是个随机数(概率空间为2^256,注:私钥的范围其实要小于这个数),我们一般会用计算机来生成这个随机数(生成过程被称为“密码学安全的伪随机数生成器PRNG”)。你可以想象着比特币世界里有2^256个抽屉,随便抽出一个抽屉来存放比特币,抽屉的编号就是私钥,因为只有你知道这个编号,所以也就只有你才能花费这个抽屉里的比特币,这很简单。

公钥(public key)

公钥与私钥一一对应,是由私钥推算出来的(通过椭圆曲线算法),我们花费比特币的过程其实就是“使用私钥来签名比特币交易,其他人则可以使用公钥来验证签名,验证通过,花费也就完成了”。私钥能推算出公钥,但公钥不能反推出私钥,该过程是不可逆的,这就是比特币的密码学根基。

地址(bitcoin address)

地址是由公钥转换而来(摘要+校验),地址被用于接收比特币(公钥其实也可以收币,只不过大部分人不这么做而已),一个地址上收到比特币后,只有使用该地址所对应的私钥才能花费这个地址上的钱。

好了,从上面的论述中,你就能看出,对于比特币来说,最重要的就是私钥,私钥决定了比特币的产权归属,公钥和地址均能通过私钥推算出来,因此通常意义上的比特币安全其实就是私钥的安全,一个比特币钱包是不是安全的也要看它能否安全的管理私钥。

比特币钱包的分类

现在,在了解了这些内容之后,我们终于可以开始对比特币钱包分类了(我们应该进行正确的分类,而不是本文最开始的那种含混不清的分类方式),分类的依据就是根据私钥的管理方式。

按私钥生成的方式分,我们可以将比特币钱包分为两类:

1、使用密码学安全的伪随机数生成器(PRNG)生成私钥的钱包:由于真随机数生成器需要采集环境中的熵,需要额外的“成本”,主要的比特币钱包都采用了密码学安全的伪随机数生成器来产生私钥,无论是电脑端的Bitcoin-core(之前被称为Bitcoin-qt)、MultiBit、Armory,手机端的Bitcoin-Wallet,还是诸如Blockchain.info这样的在线钱包,都要依赖于内核态或应用态的伪随机数生成器,这些随机数生成器被确认为密码学安全的,我们基本上可以放心使用。由于应用态随机数生成器通常要基于内核态的进行更高级别的封装,而这种封装往往有可能会引入新的问题,总体来讲,内核态的要更安全一些。历史上很多次随机数问题(比特币相关的、无关的)基本上都发生在应用态的随机数生成器上,因此,安全专家通常会建议开发者使用内核态的随机数生成器。(这部分内容可参阅我之前写过的一篇关于随机的文章 http://blog.sina.com.cn/s/blog_12ce70a430102uxhx.html )

2、使用真随机数生成器(TRNG)生成私钥的钱包:受“成本”和用户体验方面的限制,当前我只见过两种采用真随机数生成私钥的钱包解决方案,一种就是在电脑端采集用户鼠标和键盘操作的BitAddress网页程序(可离线运行生成私钥),另一种则是比太钱包的极随机(XRANDOM)解决方案。由于智能手机的感应设备非常多(如:相机、麦克风、重力感应、地磁感应、光线感应等),能够采集丰富的、高品质的环境噪声(熵),这使得廉价的、方便的真随机数解决方案成为可能,在这一点上,我们必须得感谢移动互联网的高速发展。

毫无疑问,以随机的角度来看比特币安全性,“真随机”优于“内核态伪随机”,更优于“应用态伪随机”。

按私钥的存储方式来划分,我们同样也可以将比特币钱包分为两类:

1、冷钱包:冷即离线、断网,也就是说私钥存储的位置不能被网络所访问(无论是否对私钥进行了加密),既有在“冷”电脑上存储私钥的钱包如Armory,也有在“冷”手机上存放私钥的钱包如比太冷钱包,还有将私钥打印或手抄在纸张上的纸钱包,以及设计专门硬件来单独存储私钥的硬件钱包(这里要特别说明一下,Trezor的私钥备份好像是存储在专门的网站上,如果真是这样,那它从严格意义上讲其实并不能算是冷钱包)。

冷钱包通常意味着私钥与交易的分离(因为交易是在比特币P2P网络上传播的,不分离则无法做到私钥和网络的隔离),如果需要监控和花费上面的比特币资产,则需要额外的辅助手段,无论这种手段是去中心化的、还是中心化的,都不影响“冷”这个本质。比如说,如果要花费Armory冷钱包上的比特币,需要通过U盘复制文件的方式来在冷热钱包间进行通讯;如果要花费比太冷钱包上的比特币,则需要在比太冷热钱包间通过扫描二维码来完成交易的签名和发布;对于纸钱包来说,可能需要将私钥导入到其它钱包中,再开始使用,不过在完成私钥导入之后,该私钥就可能不能再算是“冷”的了。

2、热钱包:热即联网,也就是私钥存储在能被网络访问的位置(无论是否对私钥进行了加密),比如在“热”电脑上存储私钥的Bitcoin-core、MultiBit等(私钥与交易在一起),在“热”手机上存储私钥的Bitcoin-Wallet(私钥与交易在一起)和比太热钱包,以及在网站上存储加密后私钥的Blockchain.info等在线钱包。虽然这些钱包从技术的实现方式有很大差别,比如Bitcoin-core是完整节点的钱包,需要同步全部的区块链数据;MultiBit、Bitcoin-Wallet和比太热钱包则是SPV轻钱包,只需缓存部分区块链的头,并且只存储与本钱包相关的交易;Blockchain.info则是中心化的在线钱包网站,由于钱包内的相关交易可直接从网站获得,无需进行区块链同步。虽然有着实现方式上的不同,而且会导致安全性和易用性上的差异,但从私钥的存储方式上来看,它们都属于热钱包的类别。

从安全的角度,冷优于热,但从易用的角度,热显然优于冷,到底该如何选择钱包,就需要用户自己在易用与安全之间寻找平衡,挑选满足自己需求的比特币钱包了。

通过上面的讨论,我们可以给挑选比特币钱包的用户提出如下建议(这些建议对于个人和企业均有效):

1、随机数很重要,甚至可以说,随机数是比特币密码学安全之本,短短几年的比特币历史中,有过多次因随机数问题导致的损失,切不可掉以轻心;

2、用于日常支付的小额比特币可以存储在热钱包地址上,热钱包的安全要依赖于其运行的环境,比如电脑钱包要依赖于电脑操作系统(Windows、Linux、MacOS等)的安全,手机钱包要依赖于移动操作系统(iOS、Android等)的安全,在线钱包除依赖于操作系统的安全外,还要依赖于浏览器的安全。保护热钱包,其实就是保护其运行环境,防止木马、病毒、黑客入侵和钓鱼邮件,用户可综合考虑选择满足自己需求的热钱包;

3、大额比特币应存储在冷钱包地址上,确保安全,并且应考虑适当的监控和验证方案;

4、私钥应该进行合理的备份,对于冷钱包来说,如果存储的币量大,甚至还应考虑异地灾备,以确保即便是在特殊情况发生时,比特币资产仍然安全(当看到有比特币矿工因火灾或其它灾难丢失大额比特币资产的新闻时,您就知道备份和灾备的意义了);

说完了比特币钱包的冷热分类,我再补充说一说近来“大热”的两个概念:多重签名(MultiSig)和确定性钱包(HD-Wallet)。这两个概念虽然经常被称为钱包,其实它们只是钱包软件需要考虑是否予以支持的两个功能而已。Bitcointalk论坛上经常会有国外的用户询问比太钱包何时支持这两个功能,其实它们从技术的角度上来讲并不复杂,但由于很难找到一种简单明了的方式让用户使用,而且过于复杂的逻辑反而容易导致用户的误操作甚至资产损失,因此过去我们一直未予以考虑。

ON-CHAIN和OFF-CHAIN

最后再说说ON-CHAIN和OFF-CHAIN,业内人士经常一开口就问“你这个钱包是ON-CHAIN的还是OFF-CHAIN的?”,或者还会有人说“大额比特币交易由ON-CHAIN来解决,小额支付由OFF-CHAIN来实现”,听起来就好像这世上有两种比特币交易,一种叫ON-CHAIN、另一种叫OFF-CHAIN,这毫无疑问也是很多新人一开始接触比特币是搞不懂的地方。

既然我们说的是比特币交易,那当然是ON-CHAIN的,对应的存储和管理比特币的钱包当然也必须是ON-CHAIN的。对于OFF-CHAIN的解决方案,我们可以称之为比特币银行或比特币托管平台,对应的OFF-CHAIN“交易”,也不应称为比特币交易,而可以称为银行内部账户间转账或平台内用户间转账,因为它的确不是比特币交易,它的产权不由比特币去中心化网络确定,它的产权转移也不由比特币网络负责。

总之,过于复杂和混淆的分类方式反而成了新用户开始接触比特币的最大门槛,我们应更努力让比特币更简单、更容易理解的同时更安全、更易用,而不是用那些更复杂的、更含混不清的概念来把新用户吓跑,这才是比特币未来的希望之所在。

比特币应该简单,比特币钱包也应该简单!

特别鸣谢比太钱包CEO 文浩先生先生的帮助。

 

数字现货购买

大家开发时需要用到数字现货

比如:以太网应用开发时,将应用发布到公有链时,需要用到以太币

如果业务不熟,会减慢开发速度。

现在我们可以帮助:

1:数字钱包的新建(BTC,LTC,ETH)

2:数字货币现货充值(BTC,LTC,ETH)

详情情况,请加我微信: