摘要:钥匙区块链A.区块链技术有哪些块链的概念可以说是非常受欢迎的.在网络金融峰会上,没有人说块链技术就out了.块链技术是什么?块链技术既可以是公开的分类(任何人...
钥匙区块链
A. 区块链技术有哪些
块链的概念可以说是非常受欢迎的.在网络金融峰会上,没有人说块链技术就out了.块链技术是什么?
块链技术既可以是公开的分类(任何人都可以看到),也可以是许可的网络(只有许可的人可以看到),解决了供应链的挑战.因为是不可改变的记录,所以在网络参加者之间分享并实时更新.
块链技术-数据层:设计帐簿的数据结构
核心技术1、块__;链:
技术上,块是记录交易的数据结构,反映了交易的资金流动.系统中已经扰裂手达成的交易块连接形成主链,所有参与计算的节点都记录了主链或主链的一部分.
各块由块头和块体构成,块体只负责记录前一段时间内的所有交易信息,主要包括交易数量和交易细节,块头包括现在的版本号、前一个块地址、时间戳(记录该块产生的时间,准确到秒)、随机数(记录解密该块相关数学问题的答案值)、现在块的目标哈希值、Merkle数源磨的根值等信息.从结构上看,块链的大部分功能都由块头实现.
核心技术2、哈希函数:
.
哈希函数可以将任意长度的资料从Hash算法转换为固定长度的代码,原理是基于密码学的单向哈希函数,这个函数容易被验证,但是很难解读.业界通常以y=hash(x)的方式表示,这个哈希函数实现了运算x的哈希值y.
常用的哈希算法有MD5、SHA-1、SHA-256、SHA-384、SHA-512等.以SHA256算法为例,将任何数据输入SHA256,将获得256位Hash值(散列值).其特点:同样的数据输入会得到同样的结果.输入数据有点变化(例如,1变为0)会得到完全不同的结果,结果测.正向计算(数据计算对应的Hash值)非常简单.逆向计算极其困难,在现在的科学技术条件下被视为不可能.
核心技术3、Merkle树:
Merkle树是哈希二叉树,可以快速验证大规模数据的完整性.在块链网络中,Merkle_皇髂居糜谧芙峥橹械乃薪灰仔畔_钪丈煽橹兴薪灰仔畔⒌耐骋还V担橹腥魏谓灰仔畔⒌谋浠蓟岣谋_erkle 树木.
核心技术4、非对称加密算法:
非对称加密算法是钥匙的保密方法,需要钥匙和钥匙.公钥和私钥是一对,如果用公钥加密数据,只能用对应的私钥解密,获得对应的数据价值,如果用私钥签字数据,只能用对应的公钥验证签字,验证信息的发出者是私钥的所有者.
由于加密和解密使用两种不同的密钥,该算法称为非对称加密算法,而对称加密在加密和解密过程中使用相同的密钥.
块链缓嫌技术-网络层:实现收费节点的集中化
核心技术5,P2P网络:
P2P网络(对等网络)也称为点对点技术,是没有中心服务器、用户群交换信息的互联网系统.与有中心服务器的中央网络系统不同,对等网络的每个用户端都是节点,也有服务器的功能.国内迅雷软件采用P2P技术.P2P网络具有集中化和强化等特点.
块链技术-共识层:调配收费节点的任务负荷
B. 一文读懂,XFS中你必须掌握的密码与区块链理论术语
人们对于事物的深刻认知,不是像“如何将大象放进冰箱?”那般,只回答“打开冰箱,把大象放进去,关上冰箱”那么简单。 任何事物都需要一个抽丝剥茧,化整为零的认知过程。 特别是一个新兴的概念和事物,更需要更加细致的了解。
XFS系统是一个分布式文件系统,但它并不是一个单一的框架结构,他 是密码学、区块链、互联网等多种技术手段结合的一个有机整体 ,因此,想要更详细的了解它,我们必须知道一些专业术语的概念。
1.加密网络
加密网络简单来说就是一个公共区块链。在区块链技术诞生之前,互联网网络中的数据传输其实是没有任何加密手段的,黑客一旦截取的其中的数据,那么除非那段数据本身就是密文,否则那些数据就直白地暴露在黑客眼前。
加密网络便是通过区块链技术,由区块链各个节点维护,任何人都可以无需许可加入,更重要的是,整个网络中运转的数据是加密的。XFS系统便是一个典型的加密网络。
2.哈希算法
哈希算法是区块链中用以确保数据完整性和安全性的一个特殊程序。哈希算法采用的是名为“哈希函数”数学关系,结果输出被称为“加密摘要”。加密摘要的特点是任意长度的数据输入后,返回的都是一个唯一且固定长度的值。
哈希函数具备:
基于这些特性,它在保证加密安全时也被用于防篡改,因为即使对散列函数的数据输入进行微小更改也会导致完全不同的输出。这也成为了现代密码学和区块链的主力。
3.分布式账本
区块链就是一个分布式账本,但这个账本不仅仅可以记录交易信息,还可以记录任何数据交互。每个分类帐交易都是一个加密摘要,因此无法在不被检测到的情况下更改条目。这样使得区块链使参与者能够以一种去中心化的方式相互审计。
4.私钥和公钥
私钥和公钥是区块链通过哈希算法形成加密后生成的一组用于解密的“钥匙”。通过对私钥加密,形成公钥,此时,原始信息只能通过私钥进行查看,由用户自己保存,公钥就如同一个房屋地址,用于进行数据交互,是可以公开的。反之,如果对公钥加密,形成私钥,那么就会形成不可篡改的数字签名,因为这个公钥上的签名只有私钥拥有者才能进行创建。
1.节点
节点是一个区块链网络的最基础建设,也是区块链网络和现实连接的物理设备。单个节点拥有许多的功能,例如缓存数据、验证信息或将消息转发到其他节点等。
2.点对点(P2P)网络
区块链所构建的便是去中心化后节点与节点之间的数据交互。传统的互联网数据传输是一种客户端—服务器—客户端的中心辐射模式。点对点网络则更符合“网”这个词,在这个网络中,每个节点都在单一通信协议下运行,以在它们之间传输数据,避免了因为服务器单点故障而引发的网络崩溃。
3.共识验证
区块链的共识验证解决了大量分散的节点意见不统一的问题,以“少数服从多数”的哲学依据,在区块链网络中,更多的节点认可便意味着“共识”,通常而言,区块链网络中超过51%的节点认可的便会被采用和认可。
4.复制证明和时空证明
这两个证明在XFS系统中都可以总称为存储证明。XFS系统的核心功能之一是数据存储,因此,为了证明存储的有效性,便通过复制证明验证数据是否存在节点存储空间中,并通过时空证明验证时间上的持续性。存储提供方如果在储存有效期内能持续提交存储证明,那么他便会获得由XFS系统提供的奖励。
5.冗余策略和纠删码
这是XFS用来平衡数据存储量的两个方式。冗余策略将数据通过多副本的方式备份,确保数据在损坏或丢失后能找回。
纠删码则是确保数据在复制、传输时不会产生过多备份,节省存储空间、提高传输效率。
6.文件分片协议
XFS将文件切分为N个细小的碎片存储在节点当中,这些碎片只要有任意 M个碎片即可恢复出数据,这样只要不同时有 N-M+1 个节点失效就能保证数据完整不丢失。
7.智能合约
XFS中的智能合约是一段程序代码,由于是基于区块链生成的,因此同样继承了区块链不可篡改、可追溯等特点,它能保证双方执行结果的确定性,这也使得XFS网络中的数据交互变得更加可信。
8.Dapp
即去中心化APP,同普通的APP一样具备更加方便快捷的网络接入端口,唯一不同的便是它抛弃了传统APP中心化的特点,这使得Dapp中的数据是归属于用户自身,不用担心隐私泄露、大数据杀熟等问题。
XFS系统是一个开放性平台,用户可以自由的在其中使用、设计、创作各种Dapp。
结语
关于XFS中的理论术语基于篇幅原因是很难详细展开细讲的,这其中涉及到了更多的互联网和区块链专业知识。但通过上面这些简单的解释,相信大家对XFS系统也有了一个比较立体的认知,那么,我们便期待打破传统中心化存储弊端,开船全新存储时代的XFS新一代分布式文件系统吧。
C. 区块链中的私钥和公钥
公开密钥(public key,简称公钥)、私有密钥(private key,简称私钥)是密码学里非对称加密算法的内容。顾名思义,公钥是可以公开的,而私钥则要进行安全保管。
私钥是由随机种子生成的,公钥是将私钥通过算法推导出来。 由于公钥太长,为了简便实用,就出现了“地址”,地址是公钥推导出来的。这些推导过程是单向不可逆的。也就是地址不能推出公钥,公钥不能推出私钥。
从中我们可以看出,公钥与私钥是成对存在的。它们的用处用16个字来概括: 公钥加密,私钥解密;私钥签名,公钥验签。
公钥加密,私钥解密。也就是用公钥加密原数据,只有对应的私钥才能解开原数据。这样能使得原数据在网络中传播不被窃取,保护隐私。
私钥签名,公钥验签。用私钥对原数据进行签名,只有对应的公钥才能验证签名串与原数据是匹配的。
可以用锁头,钥匙来比喻公钥,私钥。锁头用来锁定某物品,钥匙来解锁该物品。钥匙所有者是物品的所有者。事实上就是这样,公私钥对奠定了区块链的账户体系及资产(Token等)的所有权,区块链的资产是锁定在公钥上的,私钥是用来解锁该资产然后使用。比如说我要转让资产给你,就是我用我的私钥签名了一笔我转让资产给你的交易(含资产,数量等等)提交到区块链网络里,节点会验证该签名,正确则从我的公钥上解锁资产锁定到你的公钥上。
我们看到了私钥的作用了吧,跟中心化记账系统(支付宝、微信支付等)的密码一样重要,拥有私钥就拥有了资产所有权,所以我们千万要保管好私钥,不能泄露。
D. 【猫说】打开比特币钱包的两把钥匙:私钥、公钥
如果不了解区块链,不知道公钥、私钥这些最基本的概念,拥有钱包对币圈新人来讲,就好像拿手指头去捅鳄鱼的脑袋,风险极高。此文谨献给币圈新朋友,帮助大家梳理比特币钱包的基本常识。
区块链观察网在 《区块链是什么》 一文中提到过,在区块链世界里,每个人都拥有两把独一无二的虚拟钥匙:公钥和私钥。
“公钥”,可以简单理解为银行卡,这是可以发给交易对方看的,银行卡号则相当于比特币转账中要用到的“地址”。
讲得专业一点,公钥就是一个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点),并用心去记牢,这是私钥弄丢以后留的一手。
对于记不住密码,又懒得科学备份私钥的朋友,咱还是把钱存在银行里吧。
E. 区块链技术概念
区块链技术概念
区块链技术概念,现如今,区块链已经成为大部分人关注的领域,很多企业也早已深入其中研究该技术情况,但是还有人对于它不是很了解,下面我分享一篇关于区块链技术概念的相关信息。
区块链技术概念1区块链的基本概念和工作原理
1、基本概念
区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法。
区块链Blockchain、是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术。区块链是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一次比特币网络交易的信息,用于验证其信息的有效性防伪、和生成下一个区块。
狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。
广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
2、工作原理
区块链系统由数据层、网络层、共识层、激励层、合约层和应用层组成。 其中,数据层封装了底层数据区块以及相关的数据加密和时间戳等基础数据和基本算法;网络层则包括分布式组网机制、数据传播机制和数据验证机制等;共识层主要封装网络节点的各类共识算法;激励层将经济因素集成到区块链技术体系中来,主要包括经济激励的发行机制和分配机制等;合约层主要封装各类脚本、算法和智能合约,是区块链可编程特性的基础;应用层则封装了区块链的各种应用场景和案例。该模型中,基于时间戳的链式区块结构、分布式节点的共识机制、基于共识算力的经济激励和灵活可编程的智能合约是区块链技术最具代表性的创新点。
区块链主要解决的交易的信任和安全问题,因此它针对这个问题提出了四个技术创新:
1、分布式账本,就是交易记账由分布在不同地方的多个节点共同完成,而且每一个节点都记录的是完整的账目,因此它们都可以参与监督交易合法性,同时也可以共同为其作证。
跟传统的分布式存储有所不同,区块链的分布式存储的独特性主要体现在两个方面:一是区块链每个节点都按照块链式结构存储完整的数据,传统分布式存储一般是将数据按照一定的规则分成多份进行存储。二是区块链每个节点存储都是独立的、地位等同的,依靠共识机制保证存储的一致性,而传统分布式存储一般是通过中心节点往其他备份节点同步数据。 [8]
没有任何一个节点可以单独记录账本数据,从而避免了单一记账人被控制或者被贿赂而记假账的可能性。也由于记账节点足够多,理论上讲除非所有的节点被破坏,否则账目就不会丢失,从而保证了账目数据的安全性。
2、非对称加密和授权技术,存储在区块链上的交易信息是公开的,但是账户身份信息是高度加密的,只有在数据拥有者授权的情况下才能访问到,从而保证了数据的安全和个人的隐私。
3、共识机制,就是所有记账节点之间怎么达成共识,去认定一个记录的有效性,这既是认定的手段,也是防止篡改的手段。区块链提出了四种不同的共识机制,适用于不同的应用场景,在效率和安全性之间取得平衡。
区块链的共识机制具备“少数服从多数”以及“人人平等”的特点,其中“少数服从多数”并不完全指节点个数,也可以是计算能力、股权数或者其他的计算机可以比较的特征量。“人人平等”是当节点满足条件时,所有节点都有权优先提出共识结果、直接被其他节点认同后并最后有可能成为最终共识结果。以比特币为例,采用的是工作量证明,只有在控制了全网超过51%的记账节点的情况下,才有可能伪造出一条不存在的记录。当加入区块链的节点足够多的时候,这基本上不可能,从而杜绝了造假的可能.
4、智能合约,智能合约是基于这些可信的不可篡改的数据,可以自动化的执行一些预先定义好的规则和条款。以保险为例,如果说每个人的信息包括医疗信息和风险发生的信息、都是真实可信的,那就很容易的在一些标准化的保险产品中,去进行自动化的理赔.
3、其它
互联网交换的是信息,区块链交换的是价值。人类历史和互联网历史可以用八个字理解:分久必合合久必分,到了分久必合的时代,网络信息全部散在互联网上面,大家要挖掘信息非常不容易,这时会出现像谷歌和脸 书等的平台,它做的唯一的事情就是把我们所有的信息重新组合了一下。互联网时代垄断巨头们重组的就是信息,并不是产生自己的信息,产生的信息完全是我们个人。一旦信息重组,就会出现一个新的垄断巨人,所以就到了分久必合的时代。现在由于区块链技术产生又到了合久必分时代,又是新的多中心化,新的多中心化之后赋能产生新的价值,这些数据会在我们自己的手上,个人数据产生价值是归自己所有,这是这个时代最最激动人心的时代。
区块链的价值有哪些?低成本建立信任的机制,确立数权,解决数据的.产权。
目前区块链技术不断发展,包括现在的单链向多链发展,而且技术能够在进一步扩展,我想未来还是可能会出现,特别是在交易等方面出现颠覆性的,特别是对现有产业的很多颠覆性的场景。
区块链的本质是在不可信的网络建立可信的信息交换。
一带一路+一链。区块链更大的不是制造信任,而是让信任产生无损的传递,整个降低社会的摩擦成本,从而提高整个效益。
现在区块链本身还是初始阶段,所以包括区块链的信息传递、加密,这个过程中出现量子加密和其他加密,实际上对区块链本身所采用的加密算法攻击现象也时有发生。包括区块链也是作为一种资产的认定,数字资产的一个认定,但是现在我们很多都是用密码算法,或者是作为我们来解密的钥匙,但是如果密码忘记了,很可能你现在的资产就丢掉了,你不能够在得到你原来的这些资产,所以在资产管理,包括信息传递和一些安全这些方面,应该说都还是存在着一些隐患。当然那么从技术角度,现在我们区块链本身处理的速度,或者说本身的扩展性,因为从工作机理的角度来看,是要把整个账本要复制给所有的参与人员,所以在区块链本身的运作效率和扩展性方面还是比较受限的。这些我们觉得都还是需要进一步在技术方面有进一步的发展。
区块链平台这些底层技术,又形成包括区块链钱包、区块链浏览器、节点竞选、矿机、矿池、开发组件、开发模块、技术社区及项目社群等一系列的生态系统,这些生态系统的完善程度直接决定着区块链底层平台的使用效率和效果。
4、蒙代尔的不可能三角
去中心化、高效、安全,不可能实现三者全部同时达到极致。
区块链技术概念2区块链的本质是一种分布式记账技术,与之相对的是中心式记账技术,中心式记账技术在我们目前的生活中广泛存在。区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。
区块链Blockchain、,是比特币的一个重要概念,它本质上是一个去中心化的数据库,同时作为比特币的底层技术,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次比特币网络交易的信息,用于验证其信息的有效性防伪、和生成下一个区块。
狭义来讲,区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构, 并以密码学方式保证的不可篡改和不可伪造的分布式账本。
广义来讲,区块链技术是利用块链式数据结构来验证与存储数据、利用分布式节点共识算法来生成和更新数据、利用密码学的方式保证数据传输和访问的安全、利用由自动化脚本代码组成的智能合约来编程和操作数据的一种全新的分布式基础架构与计算方式。
区块链技术通俗的理解就是:把“物”的前、后、左、右区块用一种技术连接成一个链条,但每个区块的原始数据不可篡改,是一种物联网范畴的、可以让参与者信任的“各个模块链动”的技术。区块链技术的应用,离不开互联道网,也离不开物联网,是建立在二者融合互动基础上的、但又让参与者各自保持独回立的去中心化、、并共同拥有这套价值链共建共享、的技术。
区块链的特征:去中心化、开放性、自治性、信息不可篡改,匿名性。
区块链是一个能够传递价值的网络,对可以传递价值的网络的需求是推动区块链技术产生的重要原因。在对于保护带有所有权或者其他价值的信息需求的推动下,区块链出现了。区块链通过公私钥密码学、分布式存储等技术手段,一方面保证了带有价值的信息的高效传递,另一方面保证了这些信息在传递的过程中不会被轻易的复制篡改。
从区块链诞生的必然性来理解区块链的内涵,区块链是解决了中心化记账缺点、解决了分布式一致性问题的分布式记账技术,同时也是连接互联网升级为保证带有价值的信息安全高效传递的价值网络。
区块链技术概念3区块链: 区块链就像是一个全球唯一的帐簿,或者说是数据库,记录了网络中所有交易历史。
以太坊虚拟机(EVM): 它让你能在以太坊上写出更强大的程序比特币上也可以写脚本程序、。它有时也用来指以太坊区块链,负责执行智能合约以及一切。
节点:你可以运行节点,通过它读写以太坊区块链,也即使用以太坊虚拟机。完全节点需要下载整个区块链。轻节点仍在开发中。
矿工:挖矿,也就是处理区块链上的区块的节点。这个网页可以看到当前活跃的一部分以太坊矿工:stats.ethdev.com。
工作量证明:矿工们总是在竞争解决一些数学问题。第一个解出答案的(算出下一个区块)将获得以太币作为奖励。然后所有节点都更新自己的区块链。所有想要算出下一个区块的矿工都有与其他节点保持同步,并且维护同一个区块链的动力,因此整个网络总是能达成共识。(注意:以太坊正计划转向没有矿工的权益证明系统(POS),不过那不在本文讨论范围之内。)
以太币:缩写ETH。一种你可以购买和使用的真正的数字货币。这里是可以交易以太币的其中一家交易所的走势图。在写这篇文章的时候,1个以太币价值65美分。
Gas:在以太坊上执行程序以及保存数据都要消耗一定量的以太币,Gas是以太币转换而成。这个机制用来保证效率。
DApp: 以太坊社区把基于智能合约的应用称为去中心化的应用程序(Decentralized App)。DApp的目标是(或者应该是)让你的智能合约有一个友好的界面,外加一些额外的东西,例如IPFS可以存储和读取数据的去中心化网络,不是出自以太坊团队但有类似的精神)。DApp可以跑在一台能与以太坊节点交互的中心化服务器上,也可以跑在任意一个以太坊平等节点上。(花一分钟思考一下:与一般的网站不同,DApp不能跑在普通的服务器上。他们需要提交交易到区块链并且从区块链而不是中心化数据库读取重要数据。相对于典型的用户登录系统,用户有可能被表示成一个钱包地址而其它用户数据保存在本地。许多事情都会与目前的web应用有不同架构。)
以太坊客户端,智能合约语言
编写和部署智能合约并不要求你运行一个以太坊节点。下面有列出基于浏览器的IDE和API。但如果是为了学习的话,还是应该运行一个以太坊节点,以便理解其中的基本组件,何况运行节点也不难。
运行以太坊节点可用的客户端
以太坊有许多不同语言的客户端实现即多种与以太坊网络交互的方法、,包括C++, Go, Python, Java, Haskell等等。为什么需要这么多实现?不同的实现能满足不同的需求例如Haskell实现的目标是可以被数学验证、,能使以太坊更加安全,能丰富整个生态系统。
在写作本文时,我使用的是Go语言实现的客户端geth (go-ethereum),其他时候还会使用一个叫testrpc的工具, 它使用了Python客户端pyethereum。后面的例子会用到这些工具。
关于挖矿:挖矿很有趣,有点像精心照料你的室内盆栽,同时又是一种了解整个系统的方法。虽然以太币现在的价格可能连电费都补不齐,但以后谁知道呢。人们正在创造许多酷酷的DApp, 可能会让以太坊越来越流行。
交互式控制台:客户端运行起来后,你就可以同步区块链,建立钱包,收发以太币了。使用geth的一种方式是通过Javascript控制台。此外还可以使用类似cURL的命令通过JSON RPC来与客户端交互。本文的目标是带大家过一边DApp开发的流程,因此这块就不多说了。但是我们应该记住这些命令行工具是调试,配置节点,以及使用钱包的利器。
在测试网络运行节点: 如果你在正式网络运行geth客户端,下载整个区块链与网络同步会需要相当时间。你可以通过比较节点日志中打印的最后一个块号和stats.ethdev.com上列出的最新块来确定是否已经同步。) 另一个问题是在正式网络上跑智能合约需要实实在在的以太币。在测试网络上运行节点的话就没有这个问题。此时也不需要同步整个区块链,创建一个自己的私有链就勾了,对于开发来说更省时间。
Testrpc:用geth可以创建一个测试网络,另一种更快的创建测试网络的方法是使用testrpc. Testrpc可以在启动时帮你创建一堆存有资金的测试账户。它的运行速度也更快因此更适合开发和测试。你可以从testrpc起步,然后随着合约慢慢成型,转移到geth创建的测试网络上 - 启动方法很简单,只需要指定一个networkid:geth --networkid "12345"。这里是testrpc的代码仓库,下文我们还会再讲到它。
接下来我们来谈谈可用的编程语言,之后就可以开始真正的编程了。写智能合约用的编程语言用Solidity就好。
要写智能合约有好几种语言可选:有点类似Javascript的Solidity, 文件扩展名是.sol. 和Python接近的Serpent, 文件名以.se结尾。还有类似Lisp的LLL。Serpent曾经流行过一段时间,但现在最流行而且最稳定的要算是Solidity了,因此用Solidity就好。听说你喜欢Python? 用Solidity。
solc编译器: 用Solidity写好智能合约之后,需要用solc来编译。它是一个来自C++客户端实现的组件又一次,不同的实现产生互补、,这里是安装方法。如果你不想安装solc也可以直接使用基于浏览器的编译器,例如Solidity real-time compiler或者Cosmo。后文有关编程的部分会假设你安装了solc。
web3.js API. 当Solidity合约编译好并且发送到网络上之后,你可以使用以太坊的web3.js JavaScript API来调用它,构建能与之交互的web应用。
F. 区块链数字签名加密的私玥可以用原加密的私玥解吗
首先,你要了解一下什么是“私钥”和“公钥”以及它们是如何发挥作用的。
区块链系统为了保证用户的数据安全,通过一种密码算法来实现的,具体来说的话是通过一种公开的密码算法机制来实现的,我们都知道如何一种密码算法,有会有一个秘钥,而公开的秘钥算法是一对(也就是两个)秘钥,就跟虎符是一样的是彼此配合来使用的。一个叫作公钥,就是可以公开给别人,私钥自己要保管好的,在区块链系统中,公钥就是用来识别身份的,而私钥就是来相当于 钥匙来解密,但是不同的是,一个公钥仅对唯一的一个私钥,也是就说私钥如果忘记都是不会帮你找回的,在区块链系统中不会帮你找回私钥,所以要妥善保管好私钥。
在区块链系统结构中,用公钥加密的数据必需要用对应的私钥来解密,而用私钥加密的数据
就要用对应的公钥来解密,那么这里的私钥加密(通常称之为“签名”)的数据必需要对应的公钥来解密,这个特点可以发挥很大的一个作用。
举个简单的例子吧,如果张三要发送给李四一张支票,那么怎么传送呢?就这么发送过去,会被记账的人拿到,风险可就大了,于是张三想了一个办法,他在支票上用李四的公钥加了个密,然后再签上了自己的名字(用自己的私钥签名)这个时候其他的人就算那拿到支票也没有用,因为,只有李四才有自己的私钥,也就是只有李四才能解开这张支票来使用。这种功能设计在区块链系统称之为“脚本系统”
所以,区块链数字签名加密的私玥不可以用原加密的私玥解,必需要与之相对应的公钥来解密。
G. 什么是区块链加密算法
区块链加密算法(EncryptionAlgorithm)
非对称加密算法是一个函数,通过使用一个加密钥匙,将原来的明文文件或数据转化成一串不可读的密文代码。加密流程是不可逆的,只有持有对应的解密钥匙才能将该加密信息解密成可阅读的明文。加密使得私密数据可以在低风险的情况下,通过公共网络进行传输,并保护数据不被第三方窃取、阅读。
区块链技术的核心优势是去中心化,能够通过运用数据加密、时间戳、分布式共识和经济激励等手段,在节点无需互相信任的分布式系统中实现基于去中心化信用的点对点交易、协调与协作,从而为解决中心化机构普遍存在的高成本、低效率和数据存储不安全等问题提供了解决方案。
区块链的应用领域有数字货币、通证、金融、防伪溯源、隐私保护、供应链、娱乐等等,区块链、比特币的火爆,不少相关的top域名都被注册,对域名行业产生了比较大的影响。
H. 什么是区块链
大家在谈到区块链,数字货币时,都是听之色变,惶恐避之
区块链是什么?
数字货币又是什么?
让大众更加直观,清楚的认识到这就是区块链。
区块链是什么呢?很多人对于区块链还不是很清楚,下面就给大家通俗解释一下,大家一起来看看吧。
1.区块链概念
专业术语:区块链是分布式数据存储,点对点传输,
共识机制,加密算法等计算机技术的新型应用模式。
通俗讲义:引用影片中的解释,区块链就是把这些不透 明的杯子,全部换成透明的杯子,这样永远都可以知道自己的钱在哪里,永远属于你,不会被别人偷走。
2.区块链
基本特征
1.去中心化
在传统中心化网络系统中,黑客对一个中心节点进行攻击便可摧毁这个网络,而在去中心化的区块链网络中,无中心节点可攻击
而且在去中心化的交易方法便捷方便没有第三方介入,点对点直接交互,使得的大规模的信息交互方式成为现实
既保证了信息没有泄露,也保证了钥匙在你手中,还能快速便捷的交易。
2.开放性
系统是开放的,除了交易各方的私有信息被加密外,区块链的数据对所有人公开,任何人都可以通过公开的接口查询区块链数据和开发相关应用,因此整个系统信息就像一个透明的杯子,大家都能看得到里面的东西。
3.信息不可篡改
当区块经过验证并添加到区块链上,就会永久存储起来,并且不可更改,除非能够同时控制住系统中超过51%的节点,否则单个节点上对数据库的修改是无效的,因此区块链的数据稳定性和可靠性极高。
4.匿名性
由于区块链各节点之间的数据交换遵循固定且预知的算法因此区块链网络是无须信任,可以基于地址而非个人身份进行数据交换。区块链的匿名性是一把双刃剑,它既保护信息的保密性和交易的安全性,但也同时也造成了非法交易的猖獗。造成了执法部门的困难,也让用户产生了不信任感。
以上就是一部分区块链的基础介绍了,相信随着大众对区块链越来越多的了解,这项技术会被更多人认可和使用,
I. Thinkey是什么
Thinkey为世界构建一个区块链核心引擎,该引擎具有无限可扩展性,真正的去中心化且安全安全可信,能够支撑海量应用和用户的使用,并提供便捷友好、高效安全的开发部署环境,让万事万物都能够轻松上链,打造链接一切、协同世界的分布式商业新生态,用信用驱动世界。
J. 【深度知识】区块链之加密原理图示(加密,签名)
先放一张以太坊的架构图:
在学习的过程中主要是采用单个模块了学习了解的,包括P2P,密码学,网络,协议等。直接开始总结:
秘钥分配问题也就是秘钥的传输问题,如果对称秘钥,那么只能在线下进行秘钥的交换。如果在线上传输秘钥,那就有可能被拦截。所以采用非对称加密,两把钥匙,一把私钥自留,一把公钥公开。公钥可以在网上传输。不用线下交易。保证数据的安全性。
如上图,A节点发送数据到B节点,此时采用公钥加密。A节点从自己的公钥中获取到B节点的公钥对明文数据加密,得到密文发送给B节点。而B节点采用自己的私钥解密。
2、无法解决消息篡改。
如上图,A节点采用B的公钥进行加密,然后将密文传输给B节点。B节点拿A节点的公钥将密文解密。
1、由于A的公钥是公开的,一旦网上黑客拦截消息,密文形同虚设。说白了,这种加密方式,只要拦截消息,就都能解开。
2、同样存在无法确定消息来源的问题,和消息篡改的问题。
如上图,A节点在发送数据前,先用B的公钥加密,得到密文1,再用A的私钥对密文1加密得到密文2。而B节点得到密文后,先用A的公钥解密,得到密文1,之后用B的私钥解密得到明文。
1、当网络上拦截到数据密文2时, 由于A的公钥是公开的,故可以用A的公钥对密文2解密,就得到了密文1。所以这样看起来是双重加密,其实最后一层的私钥签名是无效的。一般来讲,我们都希望签名是签在最原始的数据上。如果签名放在后面,由于公钥是公开的,签名就缺乏安全性。
2、存在性能问题,非对称加密本身效率就很低下,还进行了两次加密过程。
如上图,A节点先用A的私钥加密,之后用B的公钥加密。B节点收到消息后,先采用B的私钥解密,然后再利用A的公钥解密。
1、当密文数据2被黑客拦截后,由于密文2只能采用B的私钥解密,而B的私钥只有B节点有,其他人无法机密。故安全性最高。
2、当B节点解密得到密文1后, 只能采用A的公钥来解密。而只有经过A的私钥加密的数据才能用A的公钥解密成功,A的私钥只有A节点有,所以可以确定数据是由A节点传输过来的。
经两次非对称加密,性能问题比较严重。
基于以上篡改数据的问题,我们引入了消息认证。经过消息认证后的加密流程如下:
当A节点发送消息前,先对明文数据做一次散列计算。得到一个摘要, 之后将照耀与原始数据同时发送给B节点。当B节点接收到消息后,对消息解密。解析出其中的散列摘要和原始数据,然后再对原始数据进行一次同样的散列计算得到摘要1, 比较摘要与摘要1。如果相同则未被篡改,如果不同则表示已经被篡改。
在传输过程中,密文2只要被篡改,最后导致的hash与hash1就会产生不同。
无法解决签名问题,也就是双方相互攻击。A对于自己发送的消息始终不承认。比如A对B发送了一条错误消息,导致B有损失。但A抵赖不是自己发送的。
在(三)的过程中,没有办法解决交互双方相互攻击。什么意思呢? 有可能是因为A发送的消息,对A节点不利,后来A就抵赖这消息不是它发送的。
为了解决这个问题,故引入了签名。这里我们将(二)-4中的加密方式,与消息签名合并设计在一起。
在上图中,我们利用A节点的私钥对其发送的摘要信息进行签名,然后将签名+原文,再利用B的公钥进行加密。而B得到密文后,先用B的私钥解密,然后 对摘要再用A的公钥解密,只有比较两次摘要的内容是否相同。这既避免了防篡改问题,有规避了双方攻击问题。因为A对信息进行了签名,故是无法抵赖的。
为了解决非对称加密数据时的性能问题,故往往采用混合加密。这里就需要引入对称加密,如下图:
在对数据加密时,我们采用了双方共享的对称秘钥来加密。而对称秘钥尽量不要在网络上传输,以免丢失。这里的共享对称秘钥是根据自己的私钥和对方的公钥计算出的,然后适用对称秘钥对数据加密。而对方接收到数据时,也计算出对称秘钥然后对密文解密。
以上这种对称秘钥是不安全的,因为A的私钥和B的公钥一般短期内固定,所以共享对称秘钥也是固定不变的。为了增强安全性,最好的方式是每次交互都生成一个临时的共享对称秘钥。那么如何才能在每次交互过程中生成一个随机的对称秘钥,且不需要传输呢?
那么如何生成随机的共享秘钥进行加密呢?
对于发送方A节点,在每次发送时,都生成一个临时非对称秘钥对,然后根据B节点的公钥 和 临时的非对称私钥 可以计算出一个对称秘钥(KA算法-Key Agreement)。然后利用该对称秘钥对数据进行加密,针对共享秘钥这里的流程如下:
对于B节点,当接收到传输过来的数据时,解析出其中A节点的随机公钥,之后利用A节点的随机公钥 与 B节点自身的私钥 计算出对称秘钥(KA算法)。之后利用对称秘钥机密数据。
对于以上加密方式,其实仍然存在很多问题,比如如何避免重放攻击(在消息中加入 Nonce ),再比如彩虹表(参考 KDF机制解决 )之类的问题。由于时间及能力有限,故暂时忽略。
那么究竟应该采用何种加密呢?
主要还是基于要传输的数据的安全等级来考量。不重要的数据其实做好认证和签名就可以,但是很重要的数据就需要采用安全等级比较高的加密方案了。
密码套件 是一个网络协议的概念。其中主要包括身份认证、加密、消息认证(MAC)、秘钥交换的算法组成。
在整个网络的传输过程中,根据密码套件主要分如下几大类算法:
秘钥交换算法:比如ECDHE、RSA。主要用于客户端和服务端握手时如何进行身份验证。
消息认证算法:比如SHA1、SHA2、SHA3。主要用于消息摘要。
批量加密算法:比如AES, 主要用于加密信息流。
伪随机数算法:例如TLS 1.2的伪随机函数使用MAC算法的散列函数来创建一个 主密钥 ——连接双方共享的一个48字节的私钥。主密钥在创建会话密钥(例如创建MAC)时作为一个熵来源。
在网络中,一次消息的传输一般需要在如下4个阶段分别进行加密,才能保证消息安全、可靠的传输。
握手/网络协商阶段:
在双方进行握手阶段,需要进行链接的协商。主要的加密算法包括RSA、DH、ECDH等
身份认证阶段:
身份认证阶段,需要确定发送的消息的来源来源。主要采用的加密方式包括RSA、DSA、ECDSA(ECC加密,DSA签名)等。
消息加密阶段:
消息加密指对发送的信息流进行加密。主要采用的加密方式包括DES、RC4、AES等。
消息身份认证阶段/防篡改阶段:
主要是保证消息在传输过程中确保没有被篡改过。主要的加密方式包括MD5、SHA1、SHA2、SHA3等。
ECC :Elliptic Curves Cryptography,椭圆曲线密码编码学。是一种根据椭圆上点倍积生成 公钥、私钥的算法。用于生成公私秘钥。
ECDSA :用于数字签名,是一种数字签名算法。一种有效的数字签名使接收者有理由相信消息是由已知的发送者创建的,从而发送者不能否认已经发送了消息(身份验证和不可否认),并且消息在运输过程中没有改变。ECDSA签名算法是ECC与DSA的结合,整个签名过程与DSA类似,所不一样的是签名中采取的算法为ECC,最后签名出来的值也是分为r,s。 主要用于身份认证阶段 。
ECDH :也是基于ECC算法的霍夫曼树秘钥,通过ECDH,双方可以在不共享任何秘密的前提下协商出一个共享秘密,并且是这种共享秘钥是为当前的通信暂时性的随机生成的,通信一旦中断秘钥就消失。 主要用于握手磋商阶段。
ECIES: 是一种集成加密方案,也可称为一种混合加密方案,它提供了对所选择的明文和选择的密码文本攻击的语义安全性。ECIES可以使用不同类型的函数:秘钥协商函数(KA),秘钥推导函数(KDF),对称加密方案(ENC),哈希函数(HASH), H-MAC函数(MAC)。
ECC 是椭圆加密算法,主要讲述了按照公私钥怎么在椭圆上产生,并且不可逆。 ECDSA 则主要是采用ECC算法怎么来做签名, ECDH 则是采用ECC算法怎么生成对称秘钥。以上三者都是对ECC加密算法的应用。而现实场景中,我们往往会采用混合加密(对称加密,非对称加密结合使用,签名技术等一起使用)。 ECIES 就是底层利用ECC算法提供的一套集成(混合)加密方案。其中包括了非对称加密,对称加密和签名的功能。
<meta charset="utf-8">
这个先订条件是为了保证曲线不包含奇点。
所以,随着曲线参数a和b的不断变化,曲线也呈现出了不同的形状。比如:
所有的非对称加密的基本原理基本都是基于一个公式 K = k G。其中K代表公钥,k代表私钥,G代表某一个选取的基点。非对称加密的算法 就是要保证 该公式 不可进行逆运算( 也就是说G/K是无法计算的 )。 *
ECC是如何计算出公私钥呢?这里我按照我自己的理解来描述。
我理解,ECC的核心思想就是:选择曲线上的一个基点G,之后随机在ECC曲线上取一个点k(作为私钥),然后根据k G计算出我们的公钥K。并且保证公钥K也要在曲线上。*
那么k G怎么计算呢?如何计算k G才能保证最后的结果不可逆呢?这就是ECC算法要解决的。
首先,我们先随便选择一条ECC曲线,a = -3, b = 7 得到如下曲线:
在这个曲线上,我随机选取两个点,这两个点的乘法怎么算呢?我们可以简化下问题,乘法是都可以用加法表示的,比如2 2 = 2+2,3 5 = 5+5+5。 那么我们只要能在曲线上计算出加法,理论上就能算乘法。所以,只要能在这个曲线上进行加法计算,理论上就可以来计算乘法,理论上也就可以计算k*G这种表达式的值。
曲线上两点的加法又怎么算呢?这里ECC为了保证不可逆性,在曲线上自定义了加法体系。
现实中,1+1=2,2+2=4,但在ECC算法里,我们理解的这种加法体系是不可能。故需要自定义一套适用于该曲线的加法体系。
ECC定义,在图形中随机找一条直线,与ECC曲线相交于三个点(也有可能是两个点),这三点分别是P、Q、R。
那么P+Q+R = 0。其中0 不是坐标轴上的0点,而是ECC中的无穷远点。也就是说定义了无穷远点为0点。
同样,我们就能得出 P+Q = -R。 由于R 与-R是关于X轴对称的,所以我们就能在曲线上找到其坐标。
P+R+Q = 0, 故P+R = -Q , 如上图。
以上就描述了ECC曲线的世界里是如何进行加法运算的。
从上图可看出,直线与曲线只有两个交点,也就是说 直线是曲线的切线。此时P,R 重合了。
也就是P = R, 根据上述ECC的加法体系,P+R+Q = 0, 就可以得出 P+R+Q = 2P+Q = 2R+Q=0
于是乎得到 2 P = -Q (是不是与我们非对称算法的公式 K = k G 越来越近了)。
于是我们得出一个结论,可以算乘法,不过只有在切点的时候才能算乘法,而且只能算2的乘法。
假若 2 可以变成任意个数进行想乘,那么就能代表在ECC曲线里可以进行乘法运算,那么ECC算法就能满足非对称加密算法的要求了。
那么我们是不是可以随机任何一个数的乘法都可以算呢? 答案是肯定的。 也就是点倍积 计算方式。
选一个随机数 k, 那么k * P等于多少呢?
我们知道在计算机的世界里,所有的都是二进制的,ECC既然能算2的乘法,那么我们可以将随机数k描 述成二进制然后计算。假若k = 151 = 10010111
由于2 P = -Q 所以 这样就计算出了k P。 这就是点倍积算法 。所以在ECC的曲线体系下是可以来计算乘法,那么以为这非对称加密的方式是可行的。
至于为什么这样计算 是不可逆的。这需要大量的推演,我也不了解。但是我觉得可以这样理解:
我们的手表上,一般都有时间刻度。现在如果把1990年01月01日0点0分0秒作为起始点,如果告诉你至起始点为止时间流逝了 整1年,那么我们是可以计算出现在的时间的,也就是能在手表上将时分秒指针应该指向00:00:00。但是反过来,我说现在手表上的时分秒指针指向了00:00:00,你能告诉我至起始点算过了有几年了么?
ECDSA签名算法和其他DSA、RSA基本相似,都是采用私钥签名,公钥验证。只不过算法体系采用的是ECC的算法。交互的双方要采用同一套参数体系。签名原理如下:
在曲线上选取一个无穷远点为基点 G = (x,y)。随机在曲线上取一点k 作为私钥, K = k*G 计算出公钥。
签名过程:
生成随机数R, 计算出RG.
根据随机数R,消息M的HASH值H,以及私钥k, 计算出签名S = (H+kx)/R.
将消息M,RG,S发送给接收方。
签名验证过程:
接收到消息M, RG,S
根据消息计算出HASH值H
根据发送方的公钥K,计算 HG/S + xK/S, 将计算的结果与 RG比较。如果相等则验证成功。
公式推论:
HG/S + xK/S = HG/S + x(kG)/S = (H+xk)/GS = RG
在介绍原理前,说明一下ECC是满足结合律和交换律的,也就是说A+B+C = A+C+B = (A+C)+B。
这里举一个WIKI上的例子说明如何生成共享秘钥,也可以参考 Alice And Bob 的例子。
Alice 与Bob 要进行通信,双方前提都是基于 同一参数体系的ECC生成的 公钥和私钥。所以有ECC有共同的基点G。
生成秘钥阶段:
Alice 采用公钥算法 KA = ka * G ,生成了公钥KA和私钥ka, 并公开公钥KA。
Bob 采用公钥算法 KB = kb * G ,生成了公钥KB和私钥 kb, 并公开公钥KB。
计算ECDH阶段:
Alice 利用计算公式 Q = ka * KB 计算出一个秘钥Q。
Bob 利用计算公式 Q' = kb * KA 计算出一个秘钥Q'。
共享秘钥验证:
Q = ka KB = ka * kb * G = ka * G * kb = KA * kb = kb * KA = Q'
故 双方分别计算出的共享秘钥不需要进行公开就可采用Q进行加密。我们将Q称为共享秘钥。
在以太坊中,采用的ECIEC的加密套件中的其他内容:
1、其中HASH算法采用的是最安全的SHA3算法 Keccak 。
2、签名算法采用的是 ECDSA
3、认证方式采用的是 H-MAC
4、ECC的参数体系采用了secp256k1, 其他参数体系 参考这里
H-MAC 全程叫做 Hash-based Message Authentication Code. 其模型如下:
在 以太坊 的 UDP通信时(RPC通信加密方式不同),则采用了以上的实现方式,并扩展化了。
首先,以太坊的UDP通信的结构如下:
其中,sig是 经过 私钥加密的签名信息。mac是可以理解为整个消息的摘要, ptype是消息的事件类型,data则是经过RLP编码后的传输数据。
其UDP的整个的加密,认证,签名模型如下: