发布网友 发布时间:2024-09-28 08:30
共1个回答
热心网友 时间:2024-10-05 13:27
【深度知识】区块链之加密原理图示(加密,签名)先放一张以太坊的架构图:
在学习的过程中主要是采用单个模块了学习了解的,包括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-basedMessageAuthenticationCode.其模型如下:
在以太坊的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)
非对称加密算法是一个函数,通过使用一个加密钥匙,将原来的明文文件或数据转化成一串不可读的密文代码。加密流程是不可逆的,只有持有对应的解密钥匙才能将该加密信息解密成可阅读的明文。加密使得私密数据可以在低风险的情况下,通过公共网络进行传输,并保护数据不被第三方窃取、阅读。
区块链技术的核心优势是去中心化,能够通过运用数据加密、时间戳、分布式共识和经济激励等手段,在节点无需互相信任的分布式