先放一张以太坊的架构图:
在学习的过程中主要是采用单个模块了学习了解的,包括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算法提供的一套集成(混合)加密方案。其中包括了非对称加密,对称加密和签名的功能。
ECC 是 Elliptic Curve Cryptography的简称。那么什么是椭圆加密曲线呢?Wolfram MathWorld 给出了很标准的定义: 一条椭圆曲线就是一组被 定义的且满足 的点集。
这个先订条件是为了保证曲线不包含奇点。
所以,随着曲线参数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的整个的加密,认证,签名模型如下:
区块链的原理:去中心化的分布式记账系统
区块链技术的核心是所有当前参与的节点共同维护交易及数据库,它使交易基于密码学原理而不基于信任,使得任何达成一致的双方,能够直接进行支付交易,不需第三方的参与。
?
从技术上来讲,区块是一种记录交易的数据结构,反映了一笔交易的资金流向。系统中已经达成的交易的区块连接在一起形成了一条主链,所有参与计算的节点都记录了主链或主链的一部分。一个区块包含以下三部分:交易信息、前一个区块形成的哈希散列、随机数。交易信息是区块所承载的任务数据,具体包括交易双方的私钥、交易的数量、电子货币的数字签名等;前一个区块形成的哈希散列用来将区块连接起来,实现过往交易的顺序排列;随机数是交易达成的核心,所有矿工节点竞争计算随机数的答案,最快得到答案的节点生成一个新的区块,并广播到所有节点进行更新,如此完成一笔交易。
1.1 什么是区块链
区块链(BlockChain)是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案。该技术方案主要让参与系统中的任意多个节点,通过一串使用密码学方法相关联产生的数据块(block),每个数据块中包含了一定时间内的系统全部信息交流数据,并且生成数据指纹用于验证其信息的有效性和链接(chain)下一个数据库块。
?
通俗一点说,区块链技术就指一种全民参与记账的方式。所有的系统背后都有一个数据库,也就是一个大账本。那么谁来记这个账本就变得很重要。目前就是谁的系统谁来记账,各个银行的账本就是各个银行在记,的账本就是阿里在记。但现在区块链系统中,系统中的每个人都可以有机会参与记账。在一定时间段内如果有新的交易数据变化,系统中每个人都可以来进行记账,系统会评判这段时间内记账最快最好的人,将其记录的内容写到账本,并将这段时间内账本内容发给系统内所有的其他人进行备份。这样系统中的每个人都了一本完整的账本。因此,这些数据就会变得非常安全。篡改者需要同时修改超过半数的系统节点数据才能真正的篡改数据。这种篡改的代价极高,导致几乎不可能。例如,比特币运行已经超过7年,全球无数的黑客尝试攻击比特币,但是至今为止没有出现过交易错误,可以认为比特币区块链被证明是一个安全可靠的系统。
?
1.2 为什么会有区块链创新
人类在活动的过程中需要交流,而交流是以信息为基础的,以前信息流通不够便利,无法满足市场参与者对信息的需求,因此中介、中心随之诞生。这种中心化体系存在高成本、低效率、价值分散、“信息孤岛”以及数据存储不安全的问题。但由于技术和环境因素导致这种体系仍然持续运营多年,直到互联网的出现。第一代互联网的起点是TCP/IP协议,就是执行一个网络上所有节点统一格式对等传输信息的开放代码,把全球统一市场所需要的自由、平等的基本价值观给程序化、协议化、可执行化。互联网消灭了价值低、成本高的中间链条,去中心化的实现了全球信息传递的低成本高效率。
?
但是,第一代互联网没有解决信息的信用问题。互联网上能去中心化的活动一定是无需信用背书的活动,需要信用做保证的一定是中心化的、第三方中介参与的活动。因此,无法建立全球信用的互联网技术就在前进中遇到了很大的阻碍——人们无法在互联网上通过去中心化的方式参与任何价值交换活动。人们要实现价值交换,还是需要基于信用而存在的第三方中介(如银行、清算、交易所)。全球中心化信用体系仍然存在运营成本高、效率低、易受攻击破坏等问题。例如各国法币,信用价值不同,清算体系也各不兼容,给全球贸易增加了很大成本。
?
因此,第二代互联网必须突破的是:怎样去中心化的建立全球信用?让价值传递也低成本高效率进行。我们需要在互联网中创造一种技术,这种技术在无法保证人们互相信任的前提下,还可以从事价值交换的活动,从而做到真正的去中心化、去第三方中介,实现从信息互联网到价值互联网的转变。
1.3 区块链应用
布比区块链已经应用于股权、供应链、积分等领域,并正在与交易所、银行开展试验和应用测试。
数贝荷包做为布比区块链上的一款积分应用已于近期上线,对区块链技术在各行业中的落地应用是一个很好示范作用。
1.4 为什么金融行业需要区块链
信任是金融业的基础。为维护信任,金融业的发展催生了大量的高成本、低效率、单点故障的中介,包括托管、第三方支付、公证人、银行、交易所等。区块链技术使用全新的加密认证技术和去中心化共识机制去维护一个完整的、分布式的、不可篡改的账本,让参与者在无需相互认知和建立信任关系的前提下,通过一个统一的账本系统确保资金和信息安全。这对金融来说具有重大的意义。所以全球金融巨头纷纷探索区块链应用,这一方面是为了防范被颠覆的风险,另一方面也是“为我所用”,提高效率、降低成本,从而巩固、优化并扩大既有势力。
?
第一,区块链能够降低信任风险。区块链技术具有开源、透明的特性,系统的参与者能够知晓系统的运行规则,验证账本内容和账本构造历史的真实性和完整性,确保交易历史是可靠的、没有被篡改的,相当于提高了系统的可追责性,降低了系统的信任风险。例如,区块链可以规避当前互联网金融P2P的跑路、欺诈等事件。
?
第二,区块链能够提高支付、交易、结算效率。在区块链上,交易被确认的过程就是清算、交收和审计的过程。区块链使用分布式核算,所有交易都实时显示在类似于全球共享的电子表格上,实时清算,效率大大提升。例如,美国证券结算制度为T+3,区块链却能将效率提升到分钟级别,这能让结算风险降低99%,从而有效降低资金成本和系统性风险。
?
第三,区块链能够降低经营成本。金融各个业务系统与后台工作,往往面临长流程多环节。现今无论Visa、Master还是都是中心化运营,货币转移要通过第三方,这使得跨境交易、货币汇率、内部核算、时间花费的成本过高,并给资本带来了风险。区块链能够简化、自动化冗长的金融服务流程,减少前台和后台交互,节省大量的人力和物力,这对优化金融业务流程、提高金融的竞争力具有重要意义。西班牙银行认为,到2022年,区块链技术帮助金融行业降低200亿美元的记账成本。
?
第四,区块链能够有效预防故障与攻击。传统金融模型以交易所或银行等金融为中心,一旦中心出现故障或被攻击,就可能导致整体网络瘫痪,交易暂停。区块链在点对点网络上有许多分布式节点和计算机服务器来支撑,任何一部分出现问题都不会影响整体运作,而且每个节点都保存了区块链数据副本。所以区块链内置业务连续性,有着极高的可靠性、容错性。
?
第五,区块链能够提升自动化水平。由于所有文件或资产都能够以代码或分类账的形式体现,通过对区块链上的数据处理程序进行设置,智能合约及自动交易就可能在区块链上实现。例如,智能合约可以把一组金融条款写入协议,保证合约的自动执行和违约偿付。
?
第六,区块链能够满足监管和审计要求。区块链上储存的记录具有透明性、可追踪性、不可改变性的特征。任何记录,一旦写入到区块链,都是永久保存且无法篡改的。任何交易双方之间的交易都是可以被追踪和查询。
?
除了以上对现有系统和商业模式的积极作用外,区块链还能够驱动新型商业模式的诞生。一方面区块链技术的特点让它能够实现一些在中心化模式下难以实现的商业模式,另一方面区块链通过源代码的开放和协作极大地鼓励了全社会的创新和协作。当然,区块链在金融应用中会存在很多问题和挑战,文中在具体应用中也进行了思考。
区块链技术的工作原理并不难去理解,我们着力于具体的区块链技术的应用研究就可以发现这种区块链技术的工作原理无所不在。
区块链有哪些安全软肋
区块链是比特币中的核心技术,在无法建立信任关系的互联网上,区块链技术依靠密码学和巧妙的分布式算法,无需借助任何第三方中心机构的介入,用数学的方法使参与者达成共识,保证交易记录的存在性、合约的有效性以及身份的不可抵赖性。
区块链技术常被人们提及的特性是去中心化、共识机制等,由区块链引申出来的虚拟数字货币是目前全球最火爆的项目之一,正在成就出新的一批亿万级富豪。像币安交易平台,成立短短几个月,就被国际知名机构评级市值达400亿美金,成为了最富有的一批数字货币创业先驱者。但是自从有数字货币交易所至今,交易所被攻击、资金被盗事件层出不穷,且部分数字货币交易所被黑客攻击损失惨重,甚至倒闭。
一、 令人震惊的数字货币交易所被攻击事件
从最早的比特币,到后来的莱特币、以太币,目前已有几百种数字货币。随着价格的攀升,各种数字货币系统被攻击、数字货币被盗事件不断增加,被盗金额也是一路飙升。让我们来回顾一下令人震惊的数字货币被攻击、被盗事件。
2014年2月24日,当时世界最大的比特币交易所运营商Mt.Gox宣布其交易平台的85万个比特币已经被盗一空,承担着超过80%的比特币交易所的Mt.Gox由于无法弥补客户损失而申请破产保护。
经分析,原因大致为Mt.Gox存在单点故障结构这种严重的错误,被黑客用于发起DDoS攻击:
比特币提现环节的签名被黑客篡改并先于正常的请求进入比特币网络,结果伪造的请求可以提现成功,而正常的提现请求在交易平台中出现异常并显示为失败,此时黑客实际上已经拿到提现的比特币了,但是他继续在Mt.Gox平台请求重复提现,Mt.Gox在没有进行事务一致性校验(对账)的情况下,重复支付了等额的比特币,导致交易平台的比特币被窃取。
2016年8月4日,最大的美元比特币交易平台Bitfinex发布公告称,网站发现安全漏洞,导致近12万枚比特币被盗,总价值约为7500万美元。
2018年1月26日,日本的一家大型数字货币交易平台Coincheck系统遭遇黑客攻击,导致时价580亿日元、约合5.3亿美元的数字货币“新经币”被盗,这是史上最大的数字货币盗窃案。
2018年3月7日,世界第二大数字货币交易所币安(Binance)被黑客攻击的消息让币圈彻夜难眠,黑客竟然玩起了经济学,买空卖空“炒币”割韭菜。根据币安公告,黑客的攻击过程包括:
1) 在长时间里,利用第三方钓鱼网站偷盗用户的账号登录信息。黑客通过使用Unicode字符冒充正规Binance网址域名里的部分字母对用户实施网页钓鱼攻击。
2) 黑客获得账号后,自动创建交易API,之后便静默潜伏。
3) 3月7日黑客通过盗取的API Key,利用买空卖空的方式,将VIA币值直接拉暴100多倍,比特币大跌10%,以全球总计1700万个比特币计算,比特币一夜丢了170亿美元。
二、黑客攻击为什么能屡屡得手
基于区块链的数字货币其火热行情让黑客们垂涎不已,被盗金额不断刷新纪录,盗窃事件的发生也引发了人们对数字货币安全的担忧,人们不禁要问:区块链技术安全吗?
随着人们对区块链技术的研究与应用,区块链系统除了其所属信息系统会面临病毒、木马等恶意程序威胁及大规模DDoS攻击外,还将由于其特性而面临独有的安全挑战。
1. 算法实现安全
由于区块链大量应用了各种密码学技术,属于算法高度密集工程,在实现上比较容易出现问题。历史上有过此类先例,比如NSA对RSA算法实现埋入缺陷,使其能够轻松破解别人的加密信息。一旦爆发这种级别的漏洞,可以说构成区块链整个大厦的地基将不再安全,后果极其可怕。之前就发生过由于比特币随机数产生器出现问题所导致的比特币被盗事件,理论上,在签名过程中两次使用同一个随机数,就能推导出私钥。
2. 共识机制安全
当前的区块链技术中已经出现了多种共识算法机制,最常见的有PoW、PoS、DPos。但这些共识机制是否能实现并保障真正的安全,需要更严格的证明和时间的考验。
3. 区块链使用安全
区块链技术一大特点就是不可逆、不可伪造,但前提是私钥是安全的。私钥是用户生成并保管的,理论上没有第三方参与。私钥一旦丢失,便无法对账户的资产做任何操作。一旦被黑客拿到,就能转移数字货币。
4. 系统设计安全
像Mt.Gox平台由于在业务设计上存在单点故障,所以其系统容易遭受DoS攻击。目前区块链是去中心化的,而交易所是中心化的。中心化的交易所,除了要防止技术盗窃外,还得管理好人,防止人为盗窃。
总体来说,从安全性分析的角度,区块链面临着算法实现、共识机制、使用及设计上挑战,同时黑客通过利用系统安全漏洞、业务设计缺陷也可达成攻击目的。目前,黑客攻击已经在对区块链系统安全性造成越来越大的影响。
三、如何保证区块链的安全
为了保证区块链系统安全,建议参照NIST的网络安全框架,从战略层面、一个企业或者组织的网络安全风险管理的整个生命周期的角度出发构建识别、保护、检测、响应和恢复5个核心组成部分,来感知、阻断区块链风险和威胁。
除此之外,根据区块链技术自身特点重点关注算法、共识机制、使用及设计上的安全。
针对算法实现安全性:一方面选择采用新的、本身经得起考验的密码技术,如国密公钥算法SM2等。另一方面对核心算法代码进行严格、完整测试的同时进行源码混淆,增加黑客逆向攻击的难度和成本。
针对共识算法安全性:PoW中使用防ASIC杂凑函数,使用更有效的共识算法和策略。
针对使用安全性:对私钥的生成、存储进行保护,敏感数据加密存储。
针对设计安全性:一方面要保证设计的功能尽量完善,如采用私钥白盒签名技术,防止病毒、木马在系统运行过程中提取私钥;设计私钥泄露追踪功能,尽可能减少私钥泄露后的损失。另一方面,应对某些关键业务设计去中心化,防止单点故障攻击。
虚拟机设计
零钱整理
慢雾科技介绍
01| The Dao事件
以太坊第一个安全大事件
智能合约的取款
新建一个Bank,存入一部分钱,用Dao框架不停取钱。
取款-判断余额-取款操作框架-转空该账户下的所有钱。
简单的例子就是,你的银行卡有余额100万,你需要买一个10块钱的饮料,但是支付的过程有漏洞,所以你银行卡的所有钱都被转走。
一、外部调用
02| 以太坊黑色情人节
起源:第一转账时间是2.14
ETH节点统计
客户端、客户端版本、OS系统。整个系统的庞杂
蜜罐检测 (部署陷阱能检测出黑客的点来)
net_version
判断是主网还是测试网,只攻击主网
3000+主网节点完全暴露
eth_accounts
获取钱包账号,涉及钱包账号
eth_getBanlance
获取有多少钱,被盗46000+ETH
why?
unlockAccount 函数介绍
该函数将使用密码从本地的keystore 里提取private key 并存储在内存中,函数第三个参数duration 表示解密后private key 在内存中保存默认是300 秒; 如果设置为0,则表的时间,示永久存留在内存,直至Geth/Parity 退出。
详见:
节点存用户的keystore信息(严重危险)
eth_getBlockByNumber
墨子扫描引擎,扫描有问题的节点,慢雾的以太坊安全事件的披露
被盗ETH,市值,被盗钱包数
具体内容可以查看慢雾发布的 以太坊黑色情人节专题
生态相关
ETH:矿池、钱包、web3、smart contract、dapp
BTC:矿池、钱包、Lightning Network
BTC RPC
防御建议
管理数十万用户安全的接近百万的比特币
华人世界唯一被bitcoin.org网站展示的钱包
比特派多种区块链资产(BTC、ETH、Token、分叉)
冷热结合,确保安全
比特派-热钱包
比特护盾-冷钱包/硬件钱包
区块链安全事件
私钥决定了区块链资产的所有权,丢了私钥也就相当于丢了一切。私钥就是一个随机数,这个随机数的概率空间很大(256 位,即2^256)
钱包=生态入口
需要在安全的同时做到尽可能的开放
玩法的开放,技术的开放,通用的技术接口,生态的开放,把自己的资源进行导入。合作伙伴计划:技术咨询、区块链技术支持、开放平台、入口支持、生态支持、海外市场合作。帮助伙伴实现区块链转型或区块链项目孵化,安全、便捷实现真正落地的区块链应用场景。
联系方式 B@bitpie.com
用户风控系统,数百万的数字货币用户。
最大可能保持我们的数字资产
骗子故事:抢数字货币份额,钱没到账,冒充官方,交出助记词
恶意钱包地址库
诈骗钱包、黑客钱包、羊毛党钱包
恶意网站库
钓鱼网站、空投网站、交易所、众筹
风险合约库
重名币、空格币、风险合约
安全事件库
历史安全事件提醒
最新事件提醒
盗币风险监控
安全意识教育
可能出现被盗的情况
游戏即资产,稀缺资源,成为游戏运营者。最后大BOSS死于暴露了自己的密钥。
通过社工(社会工程学)【欺骗的艺术】黑客攻击手法,虚拟景象做出错误判断让自己陷入危机。
人始终是系统中最薄弱的环节,币安背锅的黑客事件。大客户泄露自己的账户,调用API接口,自动交易。虽然没丢币但是黑客在期货市场盈利。
关于安全钱包的帖子(来自小白愤怒控诉,实际没有理解整个机制):
1、我没私钥和交易密码,东西都在你们那我不知道安全在哪里
2、密语算个毛,你告诉我拿着你们的密语能做什么。
汽车和自行车事件,出了问题之后,弱势的一方被原谅。负责的是更大的一方。平台替没有安全意识的用户背锅。
对于大部分用户来说,交易所的安全性比普通用户自己管理的安全性要高,用户的安全意识没有提高,交给交易所帮助、协助你来管理你的钱包提示很多风险操作。
为什么要随机生成256位的密钥,为什么不能用户自己去设置,如果自己设置会处于一个集中的区域,随机值不够,私钥生成时就处于危险的状态。
自己的安全认识不够,所以自己造成的损失,先怼交易所先怼钱包。先想到得是你们的问题和漏洞造成的,不是我的操作失误和密钥泄露造成的。
币派做的是大神和小白的交流之间的翻译,做画漫画,写段子的逗比。
币小宝防骗指南漫画,贡献题材和内容。
二 二淘特周年庆年夜 促运动 去袭,报名未于 三月 五日邪式开端 ,请列位 淘特商野们踊跃介入 ,邪式运动 将于 三月 一 九日邪式开端 ,上面是具体 的招商规矩 ,一路 去看看吧!1、运动 节拍 一、报名空儿: 二0 二 二年 三月 五日00:00:00- 二0 二 二年 三月 三 一日 一 ...
// 检测MySQL办事 function getMysqlVersion(){if (extension_loaded( 三 九;PDO_MYSQL 三 九;)) {try {$dbh = new PDO( 三 九;mysql:host= 一 九 二. 一 六 八. 二. 一0 三;port= 三...
跟着 人们的松凑生涯 ,进行互联网止业的人年夜 多皆把一地的空儿支配 的谦谦的,那用户劳碌 的时刻 ,基本 无意来存眷 您的拉广,只要捉住 了用户整零星 碎的空儿 对于其入止拉广,异时他也能挨领无聊赖的空儿,如许 的后果 便异常 沉紧,上面,尔联合 案例去为年夜 野分享一高,若何 捉住 用户碎片空儿...
相应 空儿是指体系 对于要求 做没相应 的空儿。曲不雅 上看,那个指标取人 对于硬件机能 的客观感触感染 长短 常一致的,由于 它完全 天记载 了零个计较 机体系 处置 要求 的空儿。因为 一个体系 平日 会提求很多 功效 ,而分歧 功效 的处置 逻辑也千差万别,果而分歧 功效 的相应 空儿也没有...
远期要为 二0 一 六年应届熟制造 经营圆里的训练资料 ,正在进修 服装论坛t.vhao.net列位 年夜 神的文章后,深有感想 ,经营的世界让人入神 战神往,但也有让人捉摸没有透之处,是以 尔正在起笔制造 训练资料 的时刻 ,准则是让每个应届卒业 熟能普通 难懂地舆 解经营的观点 战常识 系统...
一、带去流质网站的流质。二、否以提下原站的无名度。三、提下各年夜 搜刮 引擎 对于原站的权重。以上 三点是胜利 的友情链交否以到达 的后果 。作甚 胜利 ,作甚 掉 败呢?1、链交的网站取原站内容出有所有接洽 ,起到感化 也便没有年夜 。2、链交的网站未被搜刮 引擎增除了,则 对于原站会有很年夜 的...