导航:首页 > 以太坊区 > 以太坊rpc底层通讯原理

以太坊rpc底层通讯原理

发布时间:2024-10-16 22:24:11

1. 以太坊stratum协议原理

参照比特币的 stratum协议 和 NiceHash的stratum协议规范 编写了一版以太坊版本的stratum协议说明.

stratum协议是目前最常用的矿机矿池之间的TCP通讯协议。

以太坊是一个去中心化的网络架构,通过安装Mist客户端的节点来转发新交易和新区块。而矿机、矿池也同时形成了另一个网络,我们称之为矿工网络。

矿工网络分成矿机、矿池、钱包等几个主要部分,有时矿池软件与钱包安装在一起,可合称为矿池。

矿机与矿池软件之间的通讯协议是 stratum ,而矿池软件与钱包之间的通讯是 bitcoinrpc 接口。

stratum是 JSON 为数据格式.

矿机启动,首先以 mining.subscribe 方法向矿池连接,用来订阅工作。

矿池以 mining.notify 返回订阅号、ExtraNonce1和ExtraNonce2_size。

Client:

Server:

其中:

是 订阅号 ;

080c是 extranonce ,Extranonce可能最大3字节;

矿机以 mining.authorize 方法,用某个帐号和密码登录到矿池,密码可空,矿池返回 true 登录成功。该方法必须是在初始化连接之后马上进行,否则矿机得不到矿池任务。

Client:

Server:

难度调整由矿池下发给矿机,以 mining.set_difficulty 方法调整难度, params 中是难度值。
Server:

矿机会在下一个任务时采用新难度,矿池有时会马上下发一个新任务并且把清理任务设为true,以便矿机马上以新难度工作。

该命令由矿池定期发给矿机,当矿机以 mining.subscribe 方法登记后,矿池应该马上以 mining.notify 返回该任务。

Server:

任务ID : bf0488aa ;

seedhash : 。每一个任务都发送一个seedhash来支持尽可能多的矿池,这可能会很快地在货币之间交换。

headerhash : 。

boolean cleanjobs : true 。如果设为true,那么矿工需要清理任务队列,并立即开始从事新提供的任务,因为所有旧的任务分享都将导致陈旧的分享错误。如果是 false 则等当前任务结束才开始新任务。

矿工使用seedhash识别DAG,然后带着headerhash,extranonce和自己的minernonce寻找低于目标的share(这是由提供的难度而产生的)。

矿机找到合法share时,就以” mining.submit “方法向矿池提交任务。矿池返回true即提交成功,如果失败则error中有具体原因。

Client:

任务ID : bf0488aa

minernonce : 6a909d9bbc0f 。注意minernonce是6个字节,因为提供的extranonce是2个字节。如果矿池提供3字节的extranonce,那么minernonce必须是5字节

Server:

一般的矿机与矿池通讯过程就如下所示:

2. 区块链加密网络效应是什么(区块链加密解密)

【深度知识】区块链之加密原理图示(加密,签名)

先放一张以太坊的架构图:

在学习的过程中主要是采用单个模块了学习了解的,包括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算法-KeyAgreement)。然后利用该对称秘钥对数据进行加密,针对共享秘钥这里的流程如下:

对于B节点,当接收到传输过来的数据时,解析出其中A节点的随机公钥,之后利用A节点的随机公钥与B节点自身的私钥计算出对称秘钥(KA算法)。之后利用对称秘钥机密数据。

对于以上加密方式,其实仍然存在很多问题,比如如何避免重放攻击(在消息中加入Nonce),再比如彩虹表(参考KDF机制解决)之类的问题。由于时间及能力有限,故暂时忽略。

那么究竟应该采用何种加密呢?

主要还是基于要传输的数据的安全等级来考量。不重要的数据其实做好认证和签名就可以,但是很重要的数据就需要采用安全等级比较高的加密方案了。

密码套件是一个网络协议的概念。其中主要包括身份认证、加密、消息认证(MAC)、秘钥交换的算法组成。

在整个网络的传输过程中,根据密码套件主要分如下几大类算法:

秘钥交换算法:比如ECDHE、RSA。主要用于客户端和服务端握手时如何进行身份验证。

消息认证算法:比如SHA1、SHA2、SHA3。主要用于消息摘要。

批量加密算法:比如AES,主要用于加密信息流。

伪随机数算法:例如TLS1.2的伪随机函数使用MAC算法的散列函数来创建一个主密钥——连接双方共享的一个48字节的私钥。主密钥在创建会话密钥(例如创建MAC)时作为一个熵来源。

在网络中,一次消息的传输一般需要在如下4个阶段分别进行加密,才能保证消息安全、可靠的传输。

握手/网络协商阶段:

在双方进行握手阶段,需要进行链接的协商。主要的加密算法包括RSA、DH、ECDH等

身份认证阶段:

身份认证阶段,需要确定发送的消息的来源来源。主要采用的加密方式包括RSA、DSA、ECDSA(ECC加密,DSA签名)等。

消息加密阶段:

消息加密指对发送的信息流进行加密。主要采用的加密方式包括DES、RC4、AES等。

消息身份认证阶段/防篡改阶段:

主要是保证消息在传输过程中确保没有被篡改过。主要的加密方式包括MD5、SHA1、SHA2、SHA3等。

ECC:EllipticCurvesCryptography,椭圆曲线密码编码学。是一种根据椭圆上点倍积生成公钥、私钥的算法。用于生成公私秘钥。

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算法提供的一套集成(混合)加密方案。其中包括了非对称加密,对称加密和签名的功能。

metacharset="utf-8"

这个先订条件是为了保证曲线不包含奇点。

所以,随着曲线参数a和b的不断变化,曲线也呈现出了不同的形状。比如:

所有的非对称加密的基本原理基本都是基于一个公式K=kG。其中K代表公钥,k代表私钥,G代表某一个选取的基点。非对称加密的算法就是要保证该公式不可进行逆运算(也就是说G/K是无法计算的)。*

ECC是如何计算出公私钥呢?这里我按照我自己的理解来描述。

我理解,ECC的核心思想就是:选择曲线上的一个基点G,之后随机在ECC曲线上取一个点k(作为私钥),然后根据kG计算出我们的公钥K。并且保证公钥K也要在曲线上。*

那么kG怎么计算呢?如何计算kG才能保证最后的结果不可逆呢?这就是ECC算法要解决的。

首先,我们先随便选择一条ECC曲线,a=-3,b=7得到如下曲线:

在这个曲线上,我随机选取两个点,这两个点的乘法怎么算呢?我们可以简化下问题,乘法是都可以用加法表示的,比如22=2+2,35=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

于是乎得到2P=-Q(是不是与我们非对称算法的公式K=kG越来越近了)。

于是我们得出一个结论,可以算乘法,不过只有在切点的时候才能算乘法,而且只能算2的乘法。

假若2可以变成任意个数进行想乘,那么就能代表在ECC曲线里可以进行乘法运算,那么ECC算法就能满足非对称加密算法的要求了。

那么我们是不是可以随机任何一个数的乘法都可以算呢?答案是肯定的。也就是点倍积计算方式。

选一个随机数k,那么k*P等于多少呢?

我们知道在计算机的世界里,所有的都是二进制的,ECC既然能算2的乘法,那么我们可以将随机数k描述成二进制然后计算。假若k=151=10010111

由于2P=-Q所以这样就计算出了kP。这就是点倍积算法。所以在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上的例子说明如何生成共享秘钥,也可以参考AliceAndBob的例子。

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=kaKB=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-.其模型如下:

在以太坊的UDP通信时(RPC通信加密方式不同),则采用了以上的实现方式,并扩展化了。

首先,以太坊的UDP通信的结构如下:

其中,sig是经过私钥加密的签名信息。mac是可以理解为整个消息的摘要,ptype是消息的事件类型,data则是经过RLP编码后的传输数据。

其UDP的整个的加密,认证,签名模型如下:

区块链以什么方式保证网络中数据的安全性

区块链保证网络中数据的安全性的方式:

在区块链技术中,数字加密技术是其关键之处,一般运用的是非对称加密算法,即加密时的密码与解锁时的密码是不一样的。简单来说,就是我们有专属的私钥,只要把自己的私钥保护好,把公钥给对方,对方用公钥加密文件生成密文,再将密文传给你,我们再用私钥解密得到明文,就能够保障传输内容不被别人看到,这样子,加密数据就传输完毕啦!

同时,还有数字签名为我们加多一重保障,用来证明文件发给对方过程中没有被篡改。由此可见区块链的加密技术能够有效解决数据流通共享过程中的安全问题,可谓是大有施展之处。

区块链是什么?有什么作用?

区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法。

网络效应/规模效应的影响力

引言

一年一度的劳动节又到了,各大热门景点一如既往的人气爆炸,这种人气聚集的效应是不是一种规模效应呢?身在币圈的我不由想到:规模效应和网络效应有什么关系?那么区块链的价值网络的网络效应如何呢?

一网络效应无处不在

网络效应指:某种产品(服务)给每位用户带来的价值,取决于使用该产品(服务)的用户数量。

网络效应在电话、传真、电子邮件、信用卡、社交网络等服务中广泛存在。比特币区块链经过数年的发展也被越来越多的大众熟知,网络效应在区块链中的影响力也越来越大。

这些产品存在用户彼此互联的刚需,生产和

使用这类产品目的就是为了更好地收集和交流信息。

举例说明:

电话服务:电话网络只有一个用户的价值是零,拥有两个用户就可以彼此联系,三个用户就可以两两联系了(两条连接),四个用户就可以有六条连接,N个人就可以N×(N-1)/2条连接。

货币:世界是创造出来的产品,刚开始推出的时候也没人认可,时间推移相信的人多了,就形成了货币。2017年有一项数据统计,比特币活跃钱包数为300万~600万,持有者约1000~1200万人,而这些数字在2009年之前都还是零,都是空气。股票、古玩、房子等所有物品和服务的价值,都是外部赋予的,取决于他人的价值观而不是自己的价值观。

三多种量化定律选择

关于如何量化网络效应的价值,常见的定律有

一、梅特卡夫定律:网络的价值与用户数的平方成正比。

二、里得定律:大型网络尤其是社交网络的价值与网络用户数的指数成正比。

三、贝克斯通定律:一个网络的价值取决于其所有用户交易价值的总和。

四、规模效应和网络效应叠加

现代信息业主要由硬件、软件和服务业组成。计算机硬件的制造更像传统工业品,受益于规模效应而受限于反向规模效应,因此行业会出现巨头但难以赢家通吃。

软件与硬件业不同,企业研发第一个版本的成本非常高,但从第二个版本开始成本就接近于零了,而不是像硬件那样缓慢下降的,因此可以说软件是“极限版”的规模效应。

同时软件用户为了兼容性和保持已有的使用习惯等,已经出现了明显的“网络效应”。

如微软公司,以Windows操作系统和Office办公软件为核心,构建了由众多应用软件开发者、硬件厂家、销售代理、出版商和培训机构等组成的庞大生态网络。到后来亿万名用户和开发者选择微软的产品,核心原因已不是产品本身,而是网络效应,因为其他用户也在使用微软的产品。极限版的规模效应与网络效应的叠加,使软件业赢家通吃的现象非常多。

五、弱连接转向强连接

软件业发展到以App和云计算为代表的互联网应用时代,软件不再是单机的和本地的,而是网络化和移动化的了。用户可以通过论坛、即时通信和社交网络等直接建立联系,依托互联网和该应用,用户之间形成了分布式对等网络。

如果说传统软件产品的网络效应还是离线版,虽然还很弱,但有总比没有强。那么App和云计算应用的网络效应就是在线版的,用户之间直接建立了强连接。

互联网应用符合“极限版”的规模效应,又有在线版网络效应的全面加持,使App和云服务市场赢家通吃的现象急剧增多。

结语

区块链以比特币为代表,经过数年的发展,既有规模效应,又有网络效应,双重叠加的效果不容忽视。

如何去判断比特币和区块链的网络效应

终于看到有人把区块链和比特币分开的。

其实比特币和区块链根本就不是一个东西,很多人只是侠义的理解了。

摘一篇36K的文章说的就是这一点,我觉得写的很客观。

在比特币和区块链中,“网络效应”是一个被误解的概念,因为它内在的要素很难被清晰地刻画出来。网络效应的内在因素是多维度的,并没有那么多人能够直接经历很大的网络效应。作为消费者,我们更多只是这种网络效应的用户,我们认为可以从外部去理解网络效应,但这并不足以去判断网络效应是否存在。

当我们讨论比特币及其他加密货币的生态系统时,总会触及“网络效应”这个话题。对此很多人都会有误解,甚至宣称比特币的网络效应是最强大的,因为它的流动性和一直进行的挖矿活动。所以,就让我们反过头来看看到底什么是“网络效应”。

就我所知,风投机构USV对“网络效应”的总结是最完整的:

规模:必须很大;

相互联通性:在一个网络里,各个群体或系统之间必须拥有互通性(这是基本要求);

用户参与度:至少每天(或者每周),有一定比率(30%)的用户会回来重复使用;

用户体验:必须独特、原创,并且当用户使用时能够创造一些新的价值;

网络效应:当新增用户时,每一位原有用户获得的服务价值会增加,并且网络本身的价值能进一步增加;

防御性:随着服务本身的成长,新用户带来的价值增加,准入门槛也会逐渐加强;

可盈利化:当整个网络成熟运转起来的时候,某一个或几个部分能够变成可持续的经济基础。

网络效应的生态系统是什么?

为了正确地评估网络效应,我们须要从三个维度来看看这个生态系统:

1.网络效应的标准;

2.生态系统的构成要素;

3.参与者和行动者。

我总结的生态系统的构成要素有以下几点:

货币流动性,包括稳定性和低变化度;

能激发一致性(consensus),包括管理或支撑整个系统的基础协议;

区块链平台服务,包括软件工具和外部链接的能力;

终端用户应用,包括钱包、特别的浏览器、智能契约和挂钩服务等;

第三个维度是指有各种各样的“参与者和行动者”,你可以按照下面这个矩阵图来思考改善这个系统的机会,目前有很多方面正在建设中:

不过,如果你要创造更多的网络效应,你还须要考虑:

app和服务的数量

使用app的用户数量

市场的资本总额

开发者的数量

安全性

规模化的能力

可依赖性

市场营销

如果你正确地评价比特币的话,你就会发现,作为加密货币它还是领先的,它的一致性在稳步提升,区块链平台也在逐步发展。但是它的未来依然存在很多盲点,比如规模化的能力,日活跃用户数量还不够多。现在去判断比特币和区块链的网络效应还为时过早。

不要忘了:

没有用户,就没有网络效应。

什么是区块链加密算法?

区块链加密算法(EncryptionAlgorithm)

非对称加密算法是一个函数,通过使用一个加密钥匙,将原来的明文文件或数据转化成一串不可读的密文代码。加密流程是不可逆的,只有持有对应的解密钥匙才能将该加密信息解密成可阅读的明文。加密使得私密数据可以在低风险的情况下,通过公共网络进行传输,并保护数据不被第三方窃取、阅读。

区块链技术的核心优势是去中心化,能够通过运用数据加密、时间戳、分布式共识和经济激励等手段,在节点无需互相信任的分布式

3. 以太坊如何使用web3.js或者rpc接口获取交易数据交易时间与确认数

如果要查询主网上的交易记录,可以使用etherscan。但是,如果是你自己搭建的私链,应该如何查询交易记录呢?

答案是你需要自己监听链上的日志,存到数据库里,然后在这个数据库中查询。例如:

varaddr=""
varfilter=web3.eth.filter({fromBlock:0,toBlock:'latest',address:addr});
filter.get(function(err,transactions){
transactions.forEach(function(tx){
vartxInfo=web3.eth.getTransaction(tx.transactionHash);
//这时可以将交易信息txInfo存入数据库
});
});

web3.eth.filter()用来监听链上的日志,web3.eth.getTransaction()用来提取指定交易的信息,一旦获得交易信息,就可以存入数据库供查询用了。

推荐一个实战入门,你可以看看:以太坊教程

4. 加密区块链怎么设置,区块链的加密技术

【深度知识】区块链之加密原理图示(加密,签名)

先放一张以太坊的架构图:

在学习的过程中主要是采用单个模块了学习了解的,包括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算法-KeyAgreement)。然后利用该对称秘钥对数据进行加密,针对共享秘钥这里的流程如下:

对于B节点,当接收到传输过来的数据时,解析出其中A节点的随机公钥,之后利用A节点的随机公钥与B节点自身的私钥计算出对称秘钥(KA算法)。之后利用对称秘钥机密数据。

对于以上加密方式,其实仍然存在很多问题,比如如何避免重放攻击(在消息中加入Nonce),再比如彩虹表(参考KDF机制解决)之类的问题。由于时间及能力有限,故暂时忽略。

那么究竟应该采用何种加密呢?

主要还是基于要传输的数据的安全等级来考量。不重要的数据其实做好认证和签名就可以,但是很重要的数据就需要采用安全等级比较高的加密方案了。

密码套件是一个网络协议的概念。其中主要包括身份认证、加密、消息认证(MAC)、秘钥交换的算法组成。

在整个网络的传输过程中,根据密码套件主要分如下几大类算法:

秘钥交换算法:比如ECDHE、RSA。主要用于客户端和服务端握手时如何进行身份验证。

消息认证算法:比如SHA1、SHA2、SHA3。主要用于消息摘要。

批量加密算法:比如AES,主要用于加密信息流。

伪随机数算法:例如TLS1.2的伪随机函数使用MAC算法的散列函数来创建一个主密钥——连接双方共享的一个48字节的私钥。主密钥在创建会话密钥(例如创建MAC)时作为一个熵来源。

在网络中,一次消息的传输一般需要在如下4个阶段分别进行加密,才能保证消息安全、可靠的传输。

握手/网络协商阶段:

在双方进行握手阶段,需要进行链接的协商。主要的加密算法包括RSA、DH、ECDH等

身份认证阶段:

身份认证阶段,需要确定发送的消息的来源来源。主要采用的加密方式包括RSA、DSA、ECDSA(ECC加密,DSA签名)等。

消息加密阶段:

消息加密指对发送的信息流进行加密。主要采用的加密方式包括DES、RC4、AES等。

消息身份认证阶段/防篡改阶段:

主要是保证消息在传输过程中确保没有被篡改过。主要的加密方式包括MD5、SHA1、SHA2、SHA3等。

ECC:EllipticCurvesCryptography,椭圆曲线密码编码学。是一种根据椭圆上点倍积生成公钥、私钥的算法。用于生成公私秘钥。

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算法提供的一套集成(混合)加密方案。其中包括了非对称加密,对称加密和签名的功能。

metacharset="utf-8"

这个先订条件是为了保证曲线不包含奇点。

所以,随着曲线参数a和b的不断变化,曲线也呈现出了不同的形状。比如:

所有的非对称加密的基本原理基本都是基于一个公式K=kG。其中K代表公钥,k代表私钥,G代表某一个选取的基点。非对称加密的算法就是要保证该公式不可进行逆运算(也就是说G/K是无法计算的)。*

ECC是如何计算出公私钥呢?这里我按照我自己的理解来描述。

我理解,ECC的核心思想就是:选择曲线上的一个基点G,之后随机在ECC曲线上取一个点k(作为私钥),然后根据kG计算出我们的公钥K。并且保证公钥K也要在曲线上。*

那么kG怎么计算呢?如何计算kG才能保证最后的结果不可逆呢?这就是ECC算法要解决的。

首先,我们先随便选择一条ECC曲线,a=-3,b=7得到如下曲线:

在这个曲线上,我随机选取两个点,这两个点的乘法怎么算呢?我们可以简化下问题,乘法是都可以用加法表示的,比如22=2+2,35=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

于是乎得到2P=-Q(是不是与我们非对称算法的公式K=kG越来越近了)。

于是我们得出一个结论,可以算乘法,不过只有在切点的时候才能算乘法,而且只能算2的乘法。

假若2可以变成任意个数进行想乘,那么就能代表在ECC曲线里可以进行乘法运算,那么ECC算法就能满足非对称加密算法的要求了。

那么我们是不是可以随机任何一个数的乘法都可以算呢?答案是肯定的。也就是点倍积计算方式。

选一个随机数k,那么k*P等于多少呢?

我们知道在计算机的世界里,所有的都是二进制的,ECC既然能算2的乘法,那么我们可以将随机数k描述成二进制然后计算。假若k=151=10010111

由于2P=-Q所以这样就计算出了kP。这就是点倍积算法。所以在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上的例子说明如何生成共享秘钥,也可以参考AliceAndBob的例子。

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=kaKB=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-.其模型如下:

在以太坊的UDP通信时(RPC通信加密方式不同),则采用了以上的实现方式,并扩展化了。

首先,以太坊的UDP通信的结构如下:

其中,sig是经过私钥加密的签名信息。mac是可以理解为整个消息的摘要,ptype是消息的事件类型,data则是经过RLP编码后的传输数据。

其UDP的整个的加密,认证,签名模型如下:

利用区块链技术实现不记密码加密存储验证,解决离线安全存储问题

本文介绍一种利用区块链技术配合个人存储设备进行网络安全验证的方法

以微嘟为代表的不记密码快捷加密存储设备,已经完美做到了快捷安全存储,但美中不足的是无法通过网络查询设备何时被使用,以及无法预知极端情况下设备被离线破解等。

利用区块链技术可以解决此问题,具体工作原理:

在设备连接PC端,并检测到射频ID验证通过后,接入设备内的特定硬件,此时自动通过安装在PC端的程序向特定的区块链网络上广播设备打开时间的等信息。在得到区块链网络确认后,才授权设备后级存储用户重要数据的存储颗粒接入。因为每次设备打开都需要网络授权及相关的信息都存储在区块链网络上了,所以有效的避免了不明目的的人在用户不知情的情况下偷偷地打开设备。

多了一层区块链的网络验证是不是发现设备的安全性提高了好多?

下面以微嘟链安全验证为示意:

区块链:防篡改的哈希加密算法

同学A和B在教室里抛硬币,赌谁打扫卫生,正面朝上,则A打扫,反面朝上,则B打扫,这个策略没有什么问题。

然而,如果把情景迁移到网络聊天室,A和B同样进行抛硬币的游戏,估计B就不会答应了,因为当A抛了硬币,B不论是猜

正面还是反面,A都可以说B猜错了。

怎么解决这个问题呢?要不先给抛硬币的结果加密,B再猜?这个方法可以试一下。

假设任意奇数代表硬币正面,任意偶数代表反面。A想一个数375,然后乘以一个258,把其结果告诉B为96750,并声明A想的375为密钥,由他保管。

在接下来验证结果时,A可以谎称258为他想的数,375为密钥,A还是立于不败之地。那如果A事先把密钥告诉B呢?B可以直接算出原始数字,失去了保密作用。

这种知道加密方法就知道了解密方法显然行不通,那有没有一种方法,知道了加密方法仍然无法恢复原文呢?

显然是有的,在加密过程中加入不可逆运算就OK了。A设计新的加密方式:

假设A想的数是375,进行加密:

B拿到结果120943,但他几乎不能根据120943反算出密匙375。

如果B想要验证A是否说谎:

终于可以抛硬币了……

这种丢掉一部分信息的加密方式称为“单向加密”,也叫哈希算法。

有个问题:

这个是有可能的,但可以解决,就是增加上述算法的难度,以致于A很难很难找到。

根据以上表述,一个可靠的哈希算法,应该满足:

密码学中的哈希函数有3个重要的性质,即抗碰撞性、原像不可逆、难题友好性。

碰撞性,就是指A同学事先找出一奇一偶使得哈希结果一致,在计算上是不可行的。

首先,把大空间桑拿的消息压缩到小空间上,碰撞肯定是存在的。假设哈希值长度固定为256位,如果顺序取1,2,…2256+1,这2256+1个输入值,逐一计算其哈希值,肯定能找到两个输入值使得其哈希值相同。

A同学,看到这里时,请不要高兴的太早。因为你得有时间把它算出来,才是你的。为什么这么说呢?

根据生日悖论,如果随机挑选其中的2130+1输入,则有99.8%的概率发现至少一对碰撞输入。那么对于哈希值长度为256为的哈希函数,平均需要完成2128次哈希计算,才能找到碰撞对。如果计算机每秒进行10000次哈希计算,需要约1027年才能完成2128次哈希计算。

A同学,不要想着作弊了,估计你活不了这么久。当然如果计算机运算能力大幅提升,倒是有可能。

那么完整性还用其他什么用途呢?

用来验证信息的完整性,因为如果信息在传递过程中别篡改,那么运行哈希计算得到的哈希值与原来的哈希值不一样。

所以,在区块链中,哈希函数的抗碰撞性可以用来做区块和交易的完整性验证。

因为一个哈希值对应无数个明文,理论上你并不知道哪个是。就如,4+5=9和2+7=9的结果一样,知道我输入的结果是9,但能知道我输入的是什么数字吗?

如果,对消息m进行哈希计算时,在引入一个随机的前缀r,依据哈希值H(r||m),难以恢复出消息m,这代表该哈希函数值隐藏了消息m。

所以,B同学,根据结果想反推出原数据,这是不大可能的事,就犹如大海里捞针。

难题好友性,指没有便捷的方法去产生一满足特殊要求的哈希值。是什么意思呢,通俗的讲,就是没有捷径,需要一步一步算出来。假如要求得到的哈希结果以若干个0开头,那么计算找到前3位均为0的哈希值和找到前6位均为0的哈希值,其所需的哈希计算次数是呈一定数量关系。

这个可以怎么用呢?在区块链中,可以作为共识算法中的工作量证明。

主要描述了哈希函数的3个重要性质:抗碰撞性、原像不可逆、难题友好性。

因为这些重要性质,区块链中的区块和交易的完整性验证、共识算法的工作量证明等功能用哈希函数来实现。

[1].邹均,张海宁.区块链技术指南[M].北京:机械出版社,2016.11

[2].长铗,韩锋.区块链从数字货币到信用社会[M].北京:中信出版社,2016.7

[3].张健.区块链定义未来金融与经济新格局[M].北京:机械工业出版社,2016.6

币安交易密码在哪里设置

电脑端电脑端:macbookpromos14打开google版本92.0.4515.131,打开其官网,使用验证器扫描二维码/手动输入密钥,建议备份密钥输入登录密码和6位谷歌验证码,点击提交即可。

一、区块链资产的特点

区块链资产的第一大特点就是全球流通。即便是在月球上、火星上,只要有互联网,就可以进行区块链资产转账。相对于传统转账来说,区块链资产到账也非常快,一般几分钟到一小时内就能到账。

区块链资产的第二大特点是匿名性。区块链资产的匿名性是分不同程度的,谁也无法知道某人的区块链资产有多少,以及和谁进行了转账。区块链采用基于协商一致的规范和协议(比如一套公开透明的算法)使得整个系统中的所有节点能够在去信任的环境自由安全的交换数据,使得对人”的信任改成了对机器的信任,任何人为的干预不起作用。

区块链资产的第三大特点是记账去中心化。因为区块链资产的记账方式是全网共同进行,给别人转账记录的账本,不会因为转账人或者对方的账本数据丢失而无法统一,因为这个账本是全网共同维护,每个全节点都存有备份,十分透明,十分公正。

区块链资产的第四大特点就是不可复制。区块链资产的传递是通过加密技术而不是拷贝,比如一份价值1000元的区块链资产,甲转给乙,这1000元资产就从甲的账户转移到乙的账户里,甲就不再拥有这些资产。

二、区块链面临的挑战

受到现行观念、制度、法律制约。区块链去中心化、自我管理、集体维护的特性颠覆了人们生产生活方式,淡化了国家、监管概念,冲击了现行法律安排。对于这些,整个世界完全缺少理论准备和制度探讨。即使是区块链应用最成熟的比特币,不同国家持有态度也不相同,不可避免阻碍了区块链技术的应用与发展。解决这类问题,显然还有很长的路要走。

区块链中的数据是的加密的那其他节点如何访问?

“龙龘网络”很高兴能够为您解答。

首先,区块链技术当中的这个加密所指的是,数据在传输的时候以一种加密技术进行编译,而不是说对显示的数据进行加密,因为区块链还有一个特点,那就是信息公开透明化,所有的储存在区块链上的交易记录、资产数量等信息都是可追溯查询的,当区块链中,每完成一笔交易,都会以发起方为原点向四周进行广播,将信息同步给周围的节点,这些收到信息的节点将继续对四周进行广播,继续将信息发送给周围的节点。最终,这笔交易信息将会扩散至全网,实现全网共同记账。

因此,这个数据所有人都可见,但是无法修改,也就是相当于“只读”状态,这就是区块链的另外一大特点“防篡改”。

区块链当中所使用的是“非对称加密技术”,就是加密和解密所使用的不是同一个密钥,通常有两个密钥,称为“公钥”和“私钥”,它们两个

阅读全文

与以太坊rpc底层通讯原理相关的资料

热点内容
虚拟货币看盘软件APP 浏览:123
btc挖矿机最新消息 浏览:41
dnf骨戒的攻击力怎么算的 浏览:654
区块链股票在哪里找 浏览:260
比特币是消耗性币吗 浏览:188
以太坊为什么不能提币 浏览:493
以太坊关了吗 浏览:995
比特币钱德勒郭 浏览:963
百度算力服务器 浏览:532
麦子钱包以太坊 浏览:918
数字银行与数字货币 浏览:292
捣毁虚拟货币赌场 浏览:899
区块链照明行业 浏览:633
模仿比特币病毒窗口 浏览:920
2017年一月比特币历史价格 浏览:734
2017年比特币行情走势图 浏览:13
以太坊空投作弊 浏览:293
以太坊最高历史价 浏览:652
以太坊私有链交易平台官网 浏览:454
LON是以太坊代币吗 浏览:304