A. 小白如何秒懂区块链中的哈希计算
小白如何秒懂区块链中的哈希计算
当我在区块链的学习过程中,发现有一个词像幽灵一样反复出现,“哈希”,英文写作“HASH”。
那位说“拉稀”同学你给我出去!!
这个“哈希”据说是来源于密码学的一个函数,尝试搜一搜,论文出来一堆一堆的,不是横式就是竖式,不是表格就是图片,还有一堆看不懂得xyzabc。大哥,我就是想了解一下区块链的基础知识,给我弄那么难干啥呀?!我最长的密码就是123456,复杂一点的就是654321,最复杂的时候在最后加个a,你给我写的那么复杂明显感觉脑力被榨干,仅有的脑细胞成批成批的死亡!为了让和我一样的小白同学了解这点,我就勉为其难,努力用傻瓜式的语言讲解一下哈希计算,不求最准确但求最简单最易懂。下面我们开始:
# 一、什么是哈希算法
## 1、定义:哈希算法是将任意长度的字符串变换为固定长度的字符串。
从这里可以看出,可以理解为给**“哈希运算”输入一串数字,它会输出一串数字**。
如果我们自己定义 “增一算法”,那么输入1,就输出2;输入100就输出101。
如果我我们自己定义“变大写算法”,那么输入“abc”输出“ABC”。
呵呵,先别打我啊!这确实就只是一个函数的概念。
## 2、特点:
这个哈希算法和我的“增一算法”和“变大写算法”相比有什么特点呢?
1)**确定性,算得快**:咋算结果都一样,算起来效率高。
2)**不可逆**:就是知道输出推不出输入的值。
3)**结果不可测**:就是输入变一点,结果天翻地覆毫无规律。
总之,这个哈希运算就是个黑箱,是加密的好帮手!你说“11111”,它给你加密成“”,你说“11112”它给你弄成“”。反正输入和输出一个天上一个地下,即使输入相关但两个输出毫不相关。
# 二、哈希运算在区块链中的使用
## 1、数据加密
**交易数据是通过哈希运算进行加密,并把相应的哈希值写入区块头**。如下图所示,一个区块头包含了上一个区块的hash值,还包含下一个区块的hash值。
1)、**识别区块数据是否被篡改**:区块链的哈希值能够唯一而精准地标识一个区块,区块链中任意节点通过简单的哈希计算都可以获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块链中的信息没有被篡改。
2)、**把各个区块串联成区块链**:每个区块都包含上一个区块的哈希值和下一个区块的值,就相当于通过上一个区块的哈希值挂钩到上一个区块尾,通过下一个区块的哈希值挂钩到下一个区块链的头,就自然而然形成一个链式结构的区块链。
## 2、加密交易地址及哈希
在上图的区块头中,有一个Merkle root(默克尔根)的哈希值,它是用来做什么的呢?
首先了解啥叫Merkle root? 它就是个二叉树结构的根。啥叫二叉树?啥叫根?看看下面的图就知道了。一分二,二分四,四分八可以一直分下去就叫二叉树。根就是最上面的节点就叫 根。
这个根的数据是怎么来的呢?是把一个区块中的每笔交易的哈希值得出后,再两两哈希值再哈希,再哈希,再哈希,直到最顶层的数值。
这么哈希了半天,搞什么事情?有啥作用呢?
1)、**快速定位每笔交易**:由于交易在存储上是线性存储,定位到某笔交易会需要遍历,效率低时间慢,通过这样的二叉树可以快速定位到想要找的交易。
举个不恰当的例子:怎么找到0-100之间的一个任意整数?(假设答案是88)那比较好的一个方法就是问:1、比50大还是小?2、比75大还是小?3、比88大还是小? 仅仅通过几个问题就可以快速定位到答案。
2)、**核实交易数据是否被篡改**:从交易到每个二叉树的哈希值,有任何一个数字有变化都会导致Merkle root值的变化。同时,如果有错误发生的情况,也可以快速定位错误的地方。
## 3、挖矿
在我们的区块头中有个参数叫**随机数Nonce,寻找这个随机数的过程就叫做“挖矿”**!网络上任何一台机器只要找到一个合适的数字填到自己的这个区块的Nonce位置,使得区块头这6个字段(80个字节)的数据的哈希值的哈希值以18个以上的0开头,谁就找到了“挖到了那个金子”!既然我们没有办法事先写好一个满足18个0的数字然后反推Nounce,唯一的做法就是从0开始一个一个的尝试,看结果是不是满足要求,不满足就再试下一个,直到找到。
找这个数字是弄啥呢?做这个有什么作用呢?
1)、**公平的找到计算能力最强的计算机**:这个有点像我这里有个沙子,再告诉你它也那一个沙滩的中的一粒相同,你把相同的那粒找出来一样。那可行的办法就是把每一粒都拿起来都比较一下!那么比较速度最快的那个人是最有可能先早到那个沙子。这就是所谓的“工作量证明pow”,你先找到这个沙子,我就认为你比较的次数最多,干的工作最多。
2)、**动态调整难度**:比特币为了保证10分钟出一个区块,就会每2016个块(2周)的时间计算一下找到这个nonce数字的难度,如果这2016个块平均时间低于10分钟则调高难度,如高于十分钟则调低难度。这样,不管全网的挖矿算力是怎么变化,都可以保证10分钟的算出这个随机数nonce。
# 三、哈希运算有哪些?
说了这么多哈希运算,好像哈希运算就是一种似的,其实不是!作为密码学中的哈希运算在不断的发展中衍生出很多流派。我看了”满头包”还是觉得内在机理也太复杂了,暂时罗列如下,小白们有印象知道是怎么回事就好。
从下表中也可以看得出,哈希运算也在不断的发展中,有着各种各样的算法,各种不同的应用也在灵活应用着单个或者多个算法。比特币系统中,哈希运算基本都是使用的SHA256算法,而莱特币是使用SCRYPT算法,夸克币(Quark)达世币(DASH)是把很多算法一层层串联上使用,Heavycoin(HAV)却又是把一下算法并联起来,各取部分混起来使用。以太坊的POW阶段使用ETHASH算法,ZCASH使用EQUIHASH。
需要说明的是,哈希运算的各种算法都是在不断升级完善中,而各种币种使用的算法也并非一成不变,也在不断地优化中。
**总结**:哈希运算在区块链的各个项目中都有着广泛的应用,我们以比特币为例就能看到在**数据加密、交易数据定位、挖矿等等各个方面都有着极其重要的作用**。而哈希运算作为加密学的一门方向不断的发展和延伸,身为普通小白的我们,想理解区块链的一些基础概念,了解到这个层面也已经足够。
B. 浠ュお鍧婃妧鏈绯诲垪-浠ュお鍧婂叡璇嗘満鍒
涓銆佷互澶鍧婃妧鏈绯诲垪-浠ュお鍧婂叡璇嗘満鍒
鍖哄潡閾剧殑鐗圭偣涔嬩竴鏄鍘讳腑蹇冨寲銆備篃灏辨槸鑺傜偣浼氬垎甯冨湪鍚勪釜鍦版柟缁勬垚鍒嗗竷寮忕郴缁熴傚悇涓鑺傜偣闇瑕佸1涓闂棰樿揪鎴愪竴鑷达紝鐞嗘兂鎯呭喌涓嬶紝鍙闇瑕佸悓姝ョ姸鎬佸嵆鍙銆
濡備笂鍥炬墍绀 B鑺傜偣灏哸=1=> a=2鐨勭姸鎬佸悓姝ョ粰? ACDE鍥涗釜鑺傜偣锛岃繖鏃剁郴缁熶腑鐘舵佸彉涓篴=2, 浣嗗傛灉鍏朵腑鏈夋伓鎰忚妭鐐 AE 鏀跺埌閫氱煡鍚庢妸a=1=>a=3淇鏀逛负閿欒鐨勮妭鐐癸紝杩欎釜鏃跺欏ぇ瀹剁殑鐘舵佸氨涓嶄竴鑷翠簡锛屾ゆ椂闇瑕佸叡璇嗘満鍒朵娇绯荤粺涓寰楀埌1涓鍞涓姝g‘鐨勭姸鎬併
濡備笂闈㈣村埌鍒嗗竷寮忕郴缁熷瓨鍦ㄦ伓鎰忚妭鐐瑰艰嚧绯荤粺涓鐘舵佷笉涓鑷寸殑鎯呭喌鏈1涓姣旇緝钁楀悕鐨勮櫄鎷熼棶棰-鎷滃崰搴灏嗗啗闂棰樸
鎷滃崰搴灏嗗啗闂棰樻槸鎸囷紝N涓灏嗗啗鍘绘敾鎵撲竴搴у煄鍫★紝濡傛灉澶т簬涓瀹氭暟閲忕殑灏嗗啗鍚屾椂杩涙敾鍒欏彲浠ユ敾鎵撴垚鍔燂紝濡傛灉灏忎簬鍒欒繘鏀诲け璐ャ傚皢鍐涗腑鍙鑳藉瓨鍦ㄥ彌寰掋
杩欎釜鏃跺欐湁2绉嶆儏鍐
1.濡傛灉2涓鍙涘緬閮藉湪BCDE涓锛岄偅涔堝叡璇嗙畻娉曢渶瑕佽╁叾浣2涓灏嗗啗鍚浠嶢鐨勬g‘鍐崇瓥杩涙敾鍩庡牎銆
2.濡傛灉A鏄1涓鍙涘緬锛屽叡璇嗙畻娉曢渶瑕佽〣CDE涓鍓╀綑鐨3涓蹇犺瘹灏嗗啗淇濇寔涓鑷淬
杩欎釜闂棰樻湁寰堝氱嶈В娉曪紝澶у舵湁鍏磋叮鍙浠ヨ嚜琛屾煡闃(鎺ㄨ崘瀛︿範PBFT)锛屾垜浠閲嶇偣鏉ョ湅鐪嬩互澶鍧婁腑鐩鍓嶆e湪浣跨敤鐨凬akamoto?鍏辫瘑鍜屽皢瑕佷娇鐢ㄧ殑?Casper Friendly Finality Gadget鍏辫瘑鏄濡備綍瑙e喅鎷滃崰搴灏嗗啗闂棰樼殑銆
璇村埌Nakamoto鍏辫瘑鍜孋asper Friendly Finality Gadget鍏辫瘑鍙鑳藉ぇ瀹朵笉澶鐔熸倝锛屼絾浠栦滑鐨勯儴鍒嗙粍鎴愬簲璇ラ兘姣旇緝鐔熸倝-POW(宸ヤ綔閲忚瘉鏄)鍜孭OS(鏉冪泭璇佹槑)銆
POW鎴朠OS绉颁箣涓篠ybil鎶楁ф満鍒讹紝涓轰粈涔堥渶瑕丼ybil鎶楁ф満鍒跺憿锛屽垰鍒氭垜浠璇村埌鎷滃崰搴灏嗗啗闂棰橈紝搴旇ュ緢瀹规槗鐪嬪嚭鎭舵剰鑺傜偣瓒婂氾紝杈炬垚姝g‘鍏辫瘑鐨勯毦搴︿篃灏辫秺澶э紝Sybil鏀诲嚮灏辨槸鎸1涓鏀诲嚮鑰呭彲浠ヤ吉瑁呭嚭澶ч噺鑺傜偣鏉ヨ繘琛屾敾鍑伙紝Sybil鎶楁ф槸鎸囨姷寰¤繖绉嶆敾鍑昏兘鍔涖
POW閫氳繃璁╃熆宸ユ垨楠岃瘉鑰呮姇鍏ョ畻鍔涳紝POS閫氳繃璁╅獙璇佽呰川鎶间互澶鍧婏紝濡傛灉鏀诲嚮鑰呰佷吉瑁呭氫釜鑺傜偣鏀诲嚮鍒欏繀灏嗘姇鍏ュぇ閲忕殑绠楀姏鎴栬祫浜э紝浼氬艰嚧鏀诲嚮鎴愭湰楂樹簬鏀剁泭銆傚湪浠ュお鍧婁腑淇濋殰鐨勫畨鍏ㄦф槸闄ら潪鏀诲嚮鑰呮嬁鍒版暣涓绯荤粺51%绠楀姏鎴栬祫浜у惁鍒欎笉鍙鑳借繘鏀绘垚鍔熴
鍦ㄨВ鍐冲畬Sybil鏀诲嚮鍚庯紝閫氳繃閫夊彇绯荤粺涓鐨勬渶闀块摼浣滀负澶у惰揪鎴愬叡璇嗙殑閾俱
寰堝氫汉骞虫椂涓轰簡绠鍖栧皢pow鍜宲os璁や负鏄鍏辫瘑鏈哄埗锛岃繖涓嶅熷噯纭锛屼絾涔熻存槑浜嗗叾閲嶈佷綔鐢锛屾垜浠鎺ヤ笅鏉ュ垎鏋恜ow鍜宲os銆
閫氳繃hash涓嶅彲閫嗙殑鐗规э紝瑕佹眰鍚勪釜鐭垮伐涓嶅仠鍦拌$畻鍑烘煇涓鍊肩殑hash绗﹀悎鏌愪竴鐗瑰緛锛屾瘮濡傚墠澶氬皯浣嶆槸000000锛岀敱浜庤繖涓杩囩▼鍙鑳戒緷璧栦笉鍋滅殑璇曢敊璁$畻hash,鎵浠ユ槸宸ヤ綔閲忚瘉鏄庛傝$畻瀹屾垚鍚庡叾浠栬妭鐐归獙璇佺殑鍊肩﹀悎hash鐗瑰緛闈炲父瀹规槗楠岃瘉銆傞獙璇侀氳繃鍒欐垚涓烘垚涓哄悎娉曞尯鍧(涓嶄竴瀹氭槸鍏辫瘑鍖哄潡锛岄渶瑕佸湪鏈闀块摼涓)銆
浠ュお鍧婁腑鐨勬寲鐭跨畻娉曠敤鍒2涓鏁版嵁闆嗭紝1涓灏忔暟鎹闆哻ache,1涓澶ф暟鎹闆咲AG銆傝繖2涓鏁版嵁闅忕潃鍖哄潡閾句腑鍖哄潡澧炲氭參鎱㈠彉澶э紝鍒濆嬪ぇ灏廲ache涓16M DAG涓1G銆
鎴戜滑鍏堟潵鐪嬭繖2涓鏁版嵁闆嗙殑鐢熸垚杩囩▼
cache鐢熸垚瑙勫垯涓烘湁1涓绉嶅瓙闅忔満鏁皊eed锛宑ache涓绗1涓鍏冪礌瀵箂eed鍙杊ash锛屽悗闈㈡暟缁勪腑姣忎釜鍏冪礌閮芥槸鍓1涓鍏冪礌鍙杊ash鑾峰緱銆
DAG鐢熸垚瑙勫垯涓?鎵惧埌cache涓瀵瑰簲鐨勫厓绱犲悗?鏍规嵁鍏冪礌涓鐨勫艰$畻鍑轰笅娆¤佸绘壘鐨勪笅鏍囷紝寰鐜256娆″悗鑾峰緱cache涓鏈缁堥渶瑕佺殑鍏冪礌鍊艰繘琛宧ash璁$畻寰楀埌DAG涓鍏冪礌鐨勫笺
鐒跺悗鎴戜滑鍐嶇湅鐪嬬熆宸ュ備綍杩涜屾寲鐭夸互鍙婅交鑺傜偣濡備綍楠岃瘉
鐭垮伐鎸栫熆鐨勮繃绋嬩负锛岄夋嫨Nonce鍊兼槧灏勫埌DAG涓鐨1涓猧tem锛岄氳繃item涓鐨勫艰$畻鍑轰笅娆¤佹壘鐨勪笅鏍囷紝寰鐜64娆★紝寰楀埌鏈缁坕tem锛屽皢item涓鐨勫糷ash璁$畻寰楀埌缁撴灉锛岀粨鏋滃拰target姣旇緝锛岀﹀悎鏉′欢
鍒欒瘉鏄庢寲鍒板尯鍧楋紝濡傛灉涓嶇﹀悎鍒欐洿鎹nonce缁х画鎸栫熆銆傜熆宸ュ湪鎸栫熆杩囩▼涓闇瑕佸皢1G鐨凞AG璇诲彇鍒板唴瀛樹腑銆
杞昏妭鐐归獙璇佽繃绋嬪拰鐭垮伐鎸栫熆杩囩▼鍩烘湰涓鑷达紝
灏嗗潡澶撮噷闈㈢殑Nonce鍊兼槧灏勫埌DAG涓鐨1涓猧tem锛岀劧鍚庨氳繃cache鏁扮粍璁$畻鍑鸿item鐨勫硷紝閫氳繃item涓鐨勫艰$畻鍑轰笅娆¤佹壘鐨勪笅鏍囷紝寰鐜64娆★紝寰楀埌鏈缁坕tem锛屽皢item涓鐨勫糷ash璁$畻寰楀埌缁撴灉锛岀粨鏋滃拰target姣旇緝锛岀﹀悎鏉′欢鍒欓獙璇侀氳繃銆傝交鑺傜偣鍦ㄩ獙璇佽繃绋嬩腑涓嶉渶瑕佸皢1G鐨凞AG璇诲彇鍒板唴瀛樹腑銆傛瘡娆$敤鍒癉AG鐨刬tem鍊奸兘浣跨敤cache杩涜岃$畻銆
浠ュお鍧婁负浠涔堥渶瑕佽繖2涓涓嶅悓澶у皬鐨勬暟缁勮繘琛岃緟鍔﹉ash杩愮畻鍛锛岀洿鎺ヨ繘琛宧ash杩愮畻浼氭湁浠涔堥棶棰橈紵
濡傛灉鍙鏄杩涜岄噸澶嶈$畻浼氬艰嚧鎸栫熆璁惧囦笓涓氬寲锛屽噺灏戝幓涓蹇冨寲绋嬪害銆傚洜涓烘垜浠鏃ュ父浣跨敤鐨勮$畻鏈哄唴瀛樺拰璁$畻鍔涙槸閮介渶瑕佺殑锛屽傛灉鎸栫熆鍙闇瑕乭ash杩愮畻锛屾寲鐭胯惧囧垯浼氳捐″湴鎷ユ湁瓒呴珮绠楀姏锛屼絾瀵瑰唴瀛樺彲浠ョ缉灏忓埌寰堝皬鐢氳嚦娌℃湁銆傛墍浠ユ垜浠閫夌敤1G鐨勫ぇ鍐呭瓨澧炲姞瀵瑰唴瀛樿块棶鐨勯戠巼锛屽炲姞鎸栫熆璁惧囧瑰唴瀛樿块棶闇姹傦紝浠庤屾洿鎺ヨ繎浜庢垜浠鏃ュ父浣跨敤鐨勮$畻鏈恒
鎴戜滑鐪嬬湅鍦∟akamoto鍏辫瘑鏄濡備綍瑙e喅鎷滃崰搴灏嗗啗闂棰樼殑銆傞栧厛鐪嬬湅鍖哄潡閾句腑鐨勬嫓鍗犲涵灏嗗啗闂棰樻槸浠涔堬紵
鍖哄潡閾句腑闇瑕佽揪鎴愪竴鑷寸殑鏄鍝鏉¢摼涓轰富閾撅紝铏界劧閲囩敤浜嗘渶闀块摼鍘熷垯锛屼絾鐢变簬鍒嗗弶闂棰橈紝杩樻槸浼氬甫鏉ユ嫓鍗犲涵灏嗗啗闂棰樸
鏈鏉ヤ互澶鍧妏ow鐩鏍囨槸鎶垫姉51%浠ヤ笅鐨勬敾鍑伙紝浣嗗備笂鍥惧傛灉鎭舵剰鑺傜偣娌跨潃鑷宸辨寲鍑虹殑鍖哄潡涓嶆柇鎸栫熆锛岀敱浜庝富閾句笂鏈夊垎鍙夊瓨鍦锛屾伓鎰忚妭鐐逛笉闇瑕佽揪鍒51%绠楀姏灏卞彲浠ヨ秴杩囦富閾捐繘鑰屾垚涓烘柊鐨勪富閾撅紝涓烘や互澶鍧婁娇鐢ㄤ簡ghost鍗忚缁欎笂鍥句腑鐨凚1鍜孋1涔熷垎閰嶅嚭鍧楀栧姳锛屽敖蹇鍚堝苟鍒颁富閾句腑锛岃繖鏍蜂富閾鹃暱搴(鎸夌収鍚堝苟鍚庣殑鎬婚暱搴︾畻锛岄暱搴﹀彧鏄鎶借薄姒傚康锛屼互澶鍧婁腑鎸夌収鍖哄潡鏉冮噸绱鍔)杩樻槸澶т簬鎭舵剰鑺傜偣鑷宸辨寲鐭跨殑銆
缃戠粶涓鐨勭敤鎴烽氳繃璐ㄦ娂涓瀹氭暟閲忕殑浠ュお鍧婃垚涓洪獙璇佽呫傛瘡娆$郴缁熶粠杩欎簺楠岃瘉鑰呬粠闅忔満閫夋嫨鍑哄尯鍧楀垱寤鸿咃紝鍏朵綑楠岃瘉鑰呭幓楠岃瘉鍒涘缓鍑虹殑鍖哄潡鏄鍚﹀悎娉曘傞獙璇佽呬細鑾峰緱鍑哄潡濂栧姳锛屾病鏈夎閫変腑鐨勫尯鍧椾笉杩涜岄獙璇佸垯浼氳鎵i櫎涓瀹氳川鎶煎竵锛屽傛灉杩涜岄敊璇楠岃瘉鍒欎細琚鎵i櫎鍏ㄩ儴璐ㄦ娂甯併
濡備笂鍥撅紝鏉冪泭璇佹槑鍦ㄦ瘡闅斾竴瀹氬尯鍧楃殑鍦版柟璁剧疆涓涓妫鏌ョ偣锛屽瑰墠闈㈢殑鍖哄潡杩涜岄獙璇侊紝2/3楠岃瘉鑰呴氳繃鍒欓獙璇侀氳繃锛岄獙璇侀氳繃鍒欒ュ尯鍧楁墍鍦ㄩ摼鎴愪负鏈闀垮悎娉曢摼(涓嶈兘琚鍥炴粴)銆
鎴戜滑绠鍖栧湴鍙鍒嗘瀽浜嗘潈鐩婅瘉鏄庢湰韬锛屽湪浠ュお鍧婁腑鏉冪泭璇佹槑杈冧负澶嶆潅鐨勭偣鍦ㄤ簬鍜屽垎鐗囨満鍒剁粨鍚堝湪涓璧锋椂鐨勮繍琛屾祦绋嬶紝杩欓儴鍒嗕細鍦ㄥ悗闈㈠崟鐙灏嗗垎鐗囨満鍒剁殑涓绡囨枃绔犱腑璇﹁堪銆
鏈绡囨枃绔犱富瑕佽ㄨ轰簡鍏辫瘑鏈哄埗鏄瑙e喅鍒嗗竷寮忕郴缁熶腑鐨勬嫓鍗犲涵灏嗗啗闂棰橈紝浠ュ強鍒嗘瀽浜嗕互澶鍧婁腑鐨勫叡璇嗘満鍒朵竴鑸鍖呮嫭鏈闀块摼閫夋嫨鍜屼竴绉峴ybil鎶楁ф満鍒(pow鎴杙os)銆傞噸鐐瑰垎鏋愪簡pow鍜宲os鐨勬祦绋嬩互鍙婅捐℃濇兂銆傚悗缁灏嗗紑濮嬮噸鐐硅ㄨ烘櫤鑳藉悎绾︾殑閮ㄥ垎銆
浜屻佷粈涔堟槸浠ュお鍧婄殑鍏辫瘑鏈哄埗锛
鍖哄潡閾炬妧鏈鐨勬牳蹇冧紭鍔夸箣涓锛屽氨鏄鑳藉熷湪鍐崇瓥鏉冮珮搴﹀垎鏁g殑鍘讳腑蹇冨寲绯荤粺涓锛屼娇寰楀悇鑺傜偣楂樻晥鍦伴拡瀵瑰尯鍧楁暟鎹鐨勬湁鏁堟у拰涓鑷存ц揪鎴愬叡璇嗐傜敱浜庣偣瀵圭偣缃戠粶涓嬪瓨鍦ㄨ緝楂樼殑缃戠粶寤惰繜锛屽悇涓鑺傜偣鎵瑙傚療鍒扮殑浜嬪姟鍏堝悗椤哄簭涓嶅彲鑳藉畬鍏ㄤ竴鑷淬傚洜姝ゅ尯鍧楅摼绯荤粺闇瑕佽捐′竴绉嶆満鍒讹紝瀵瑰湪宸涓嶅氭椂闂村唴鍙戠敓鐨勪簨鍔$殑鍏堝悗椤哄簭杩涜屽叡璇嗭紝杩欑嶅逛竴涓鏃堕棿绐楀彛鍐呯殑浜嬪姟鐨勫厛鍚庨『搴忚揪鎴愬叡璇嗙殑绠楁硶琚绉颁负鈥滃叡璇嗘満鍒垛濆叡璇嗘満鍒惰鐢ㄦ潵鍐冲畾鍖哄潡閾剧綉缁滀腑鐨勮拌处鑺傜偣锛屽苟瀵逛氦鏄撲俊鎭杩涜岀‘璁ゅ拰涓鑷存у悓姝ャ備互澶鍧婂叡璇嗘満鍒跺叡鏈夊洓涓闃舵碉紝鍗矲rontier锛堝墠娌匡級銆丠omestead锛堝跺洯锛夈丮etropolis锛堝ぇ閮戒細锛夈丼erenity锛堝畞闈欙級銆備互澶鍧婂墠涓変釜闃舵甸噰鐢ㄧ殑鏄疨OW鍏辫瘑鏈恒傜鍥涗釜闃舵靛皢閲囩敤鑷宸卞垱寤虹殑POS鏈哄埗锛屽悕涓篊asper鎶曟敞鍏辫瘑锛岃繖绉嶆満鍒跺炲姞浜嗘儵缃氭満鍒讹紝骞跺熀浜嶱OS鐨勬濇兂鍦ㄨ拌处鑺傜偣涓閫夊彇楠岃瘉浜恒侾OW鍗冲伐浣滈噺璇佹槑锛屾槸姣旂壒甯佺郴缁熶腑閲囩敤鐨勫叡璇嗘満鍒躲傦紙鏈鏂囦富瑕佽茶В浠ュお鍧婄殑鍏辫瘑鏈哄埗锛夎皥璧稢asper鎶曟敞鍏辫瘑锛岃佸厛璇碢OS銆侾OS鍗虫潈鐩婅瘉鏄庯紝涓昏佺壒鐐逛互鏉冪泭璇佹槑浠f浛宸ヤ綔閲忚瘉鏄庯紝鐢卞叿鏈夋渶楂樻潈鐩婄殑鑺傜偣瀹炵幇鏂板潡鍔犲叆鍜岃幏寰楁縺鍔辨敹鐩娿侾OS鍏辫瘑鏄涓鸿В鍐砅OW鍏辫瘑鏈哄埗鐨勮祫婧愭氮璐瑰拰瀹夊叏鎬х己闄疯屾彁鍑虹殑鏇夸唬鏂规堛傚畠鐨勬湰璐ㄦ槸閲囩敤鏉冪泭璇佹槑鏉ヤ唬鏇縋OW涓鐨勫熀浜庡搱甯岀畻鍔涚殑宸ヤ綔閲忚瘉鏄庯紝鏄鐢辩郴缁熶腑鍏锋湁鏈楂樻潈鐩婅岄潪鏈楂樼畻鍔涚殑鑺傜偣鑾峰緱鍖哄潡璁拌处鏉冦傛潈鐩婁綋鐜颁负鑺傜偣瀵圭壒瀹氭暟閲忚揣甯佺殑鎵鏈夋潈锛岀О涓哄竵榫勬垨甯佸ぉ鏁帮紙Coindays锛夈傚竵榫勬槸鐗瑰畾鏁伴噺鐨勫竵涓庡叾鏈鍚庝竴娆′氦鏄撶殑鏃堕棿闀垮害鐨勪箻绉锛屾瘡娆′氦鏄撻兘灏嗕細娑堣楁帀鐗瑰畾鏁伴噺鐨勫竵榫勩備緥濡傛煇浜哄湪涓绗斾氦鏄撲腑鏀跺埌10涓甯佸悗骞舵寔鏈10澶╋紝鍒欒幏寰100甯侀緞锛涜屽悗鍏惰姳鎺5涓甯佸悗鍒欐秷鑰楁帀50甯侀緞锛屾樉鐒堕噰鐢≒OS鍏辫瘑鏈哄埗鐨勭郴缁熷湪鐗瑰畾鏃堕棿鐐逛笂鐨勫竵榫勬绘暟鏄鏈夐檺鐨勶紝闀挎湡鎸佸竵鑰呮洿鍊惧悜浜庢嫢鏈夋洿澶氬竵榫勶紝鍥犳ゅ竵榫勫彲瑙嗕负鍏跺湪POS绯荤粺涓鐨勬潈鐩娿傛姇娉ㄥ叡璇嗘槸浠ュお鍧婁笅涓浠g殑鍏辫瘑鏈哄埗Casper锛堥奸┈灏忕簿鐏碉級寮曞叆鐨勪竴涓鍏ㄦ柊姒傚康锛屽睘浜嶱OS銆侰asper鐨勫叡璇嗘槸鎸夊尯鍧楄揪鎴愮殑锛岃屼笉鍍廝OS閭f牱鎸夐摼杈炬垚銆備负浜嗛槻姝㈤獙璇佷汉鍦ㄤ笉鍚岀殑涓栫晫涓鎻愪緵涓嶅悓鐨勬姇娉锛岃繕鏈変竴涓绠鍗曚弗鏍肩殑鏉℃撅細濡傛灉浣犱袱娆$殑鎶曟敞搴忓彿涓鏍凤紝鎴栬呰翠綘鎻愪氦浜嗕竴涓鏃犳硶璁〤asper渚濈収鍚堢害澶勭悊鐨勬姇娉锛屼綘灏嗗け鍘绘墍鏈変繚璇侀噾銆備粠杩欎竴鐐瑰彲浠ョ湅鍑猴紝Casper涓庝紶缁熺殑POS涓嶅悓鐨勬槸锛孋asper鏈夋儵缃氭満鍒讹紝杩欐牱闈炴硶鑺傜偣閫氳繃鎭舵剰鏀诲嚮缃戠粶涓嶄粎寰椾笉鍒颁氦鏄撹垂锛岃屼笖杩橀潰涓寸潃淇濊瘉閲戣娌℃敹鐨勯庨櫓銆侰asper鍗忚涓嬬殑楠岃瘉浜洪渶瑕佸畬鎴愬嚭鍧楀拰鎶曟敞涓や釜娲诲姩銆傚叿浣撳備笅锛氬嚭鍧楁槸涓涓鐙绔嬩簬鍏朵粬鎵鏈夋椂闂磋屽彂鐢熺殑杩囩▼锛岄獙璇佷汉鏀堕泦浜ゆ槗锛屽綋杞鍒颁粬浠鐨勫嚭鍧楁椂闂存椂锛屼粬浠灏卞埗閫犱竴涓鍖哄潡锛屽苟绛惧悕锛岀劧鍚庡彂閫佸埌缃戠粶涓娿傛姇娉ㄧ殑杩囩▼鏇翠负澶嶆潅涓浜涳紝鐩鍓岰asper榛樿ょ殑楠岃瘉浜虹瓥鐣ヨ璁捐′负妯′豢浼犵粺鐨勬嫓鍗犲涵瀹归敊鍏辫瘑锛氳傚療鍏朵粬鐨勯獙璇佷汉濡備綍鎶曟敞锛屽彇33%澶勭殑鍊硷紝鍚0鎴1杩涗竴姝ョЩ鍔ㄣ傝屽㈡埛绔纭璁ゅ綋鍓嶇姸鎬佺殑杩囩▼鏄杩欐牱鐨勶細涓寮濮嬪厛涓嬭浇鎵鏈夌殑鍖哄潡鍜屾姇娉锛岀劧鍚庣敤涓婇潰鐨勭畻娉曟潵褰㈡垚鑷宸辩殑鎰忚侊紝浣嗘槸涓嶅叕甯冩剰瑙侊紱瀹冨彧鏄绠鍗曞湴鎸夐『搴忓湪姣忎釜楂樺害杩涜岃傚療锛屽傛灉涓涓鍖哄潡鐨勬傜巼楂樹簬0.5灏卞勭悊瀹冿紝鍚﹀垯灏辫烦杩囧畠銆傚湪澶勭悊鎵鏈夌殑鍖哄潡涔嬪悗锛屾墍寰楀埌鐨勭姸鎬佸氨鍙浠ユ樉绀轰负鍖哄潡閾剧殑鈥滃綋鍓嶇姸鎬佲濄傚㈡埛绔杩樺彲浠ョ粰鍑哄逛簬鈥滄渶缁堢‘瀹氣濈殑涓昏傜湅娉曪細濡傛灉楂樺害k涔嬪墠鐨勬瘡涓鍖哄潡褰㈡垚鐨勬剰瑙侀珮浜99.999%鎴栬呬綆浜0.001%锛岄偅涔堝㈡埛绔鍙浠ヨや负鍓峩涓鍖哄潡宸茬粡鏈缁堢‘瀹氥
涓夈佷粈涔堟槸浠ュお鍧?
閲嶅嶉棶棰樿佺櫨搴︾煡閬撶殑涓涓鍥炵瓟锛岀櫨搴︾煡閬撶瓟妗
C. 区块链协议如何验证
区块链常见的三大共识机制区块链是建立在P2P网络,由节点参与的分布式账本系统,最大的特点是“去中心化”。也就是说在区块链系统中,用户与用户之间、用户与机构之间、机构与机构之间,无需建立彼此之间的信任,只需依靠区块链协议系统就能实现交易。
可是,要如何保证账本的准确性,权威性,以及可靠性?区块链网络上的节点为什么要参与记账?节点如果造假怎么办?如何防止账本被篡改?如何保证节点间的数据一致性?……这些都是区块链在建立“去中心化”交易时需要解决的问题,由此产生了共识机制。
所谓“共识机制”,就是通过特殊节点的投票,在很短的时间内完成对交易的验证和确认;当出现意见不一致时,在没有中心控制的情况下,若干个节点参与决策达成共识,即在互相没有信任基础的个体之间如何建立信任关系。
区块链技术正是运用一套基于共识的数学算法,在机器之间建立“信任”网络,从而通过技术背书而非中心化信用机构来进行全新的信用创造。
不同的区块链种类需要不同的共识算法来确保区块链上最后的区块能够在任何时候都反应出全网的状态。
目前为止,区块链共识机制主要有以下几种:POW工作量证明、POS股权证明、DPOS授权股权证明、Paxos、PBFT(实用拜占庭容错算法)、dBFT、DAG(有向无环图)
接下来我们主要说说常见的POW、POS、DPOS共识机制的原理及应用场景
概念:
工作量证明机制(Proofofwork),最早是一个经济学名词,指系统为达到某一目标而设置的度量方法。简单理解就是一份证明,用来确认你做过一定量的工作,通过对工作的结果进行认证来证明完成了相应的工作量。
工作量证明机制具有完全去中心化的优点,在以工作量证明机制为共识的区块链中,节点可以自由进出,并通过计算随机哈希散列的数值解争夺记账权,求得正确的数值解以生成区块的能力是节点算力的具体表现。
应用:
POW最著名的应用当属比特币。在比特币网络中,在Block的生成过程中,矿工需要解决复杂的密码数学难题,寻找到一个符合要求的BlockHash由N个前导零构成,零的个数取决于网络的难度值。这期间需要经过大量尝试计算(工作量),计算时间取决于机器的哈希运算速度。
而寻找合理hash是一个概率事件,当节点拥有占全网n%的算力时,该节点即有n/100的概率找到BlockHash。在节点成功找到满足的Hash值之后,会马上对全网进行广播打包区块,网络的节点收到广播打包区块,会立刻对其进行验证。
如果验证通过,则表明已经有节点成功解迷,自己就不再竞争当前区块,而是选择接受这个区块,记录到自己的账本中,然后进行下一个区块的竞争猜谜。网络中只有最快解谜的区块,才会添加的账本中,其他的节点进行复制,以此保证了整个账本的唯一性。
假如节点有任何的作弊行为,都会导致网络的节点验证不通过,直接丢弃其打包的区块,这个区块就无法记录到总账本中,作弊的节点耗费的成本就白费了,因此在巨大的挖矿成本下,也使得矿工自觉自愿的遵守比特币系统的共识协议,也就确保了整个系统的安全。
优缺点
优点:结果能被快速验证,系统承担的节点量大,作恶成本高进而保证矿工的自觉遵守性。
缺点:需要消耗大量的算法,达成共识的周期较长
概念:
权益证明机制(ProofofStake),要求证明人提供一定数量加密货币的所有权。
权益证明机制的运作方式是,当创造一个新区块时,矿工需要创建一个“币权”交易,交易会按照预先设定的比例把一些币发送给矿工本身。权益证明机制根据每个节点拥有代币的比例和时间,依据算法等比例地降低节点的挖矿难度,从而加快了寻找随机数的速度。
应用:
2012年,化名SunnyKing的网友推出了Peercoin(点点币),是权益证明机制在加密电子货币中的首次应用。PPC最大创新是其采矿方式混合了POW及POS两种方式,采用工作量证明机制发行新币,采用权益证明机制维护网络安全。
为了实现POS,SunnyKing借鉴于中本聪的Coinbase,专门设计了一种特殊类型交易,叫Coinstake。
上图为Coinstake工作原理,其中币龄指的是货币的持有时间段,假如你拥有10个币,并且持有10天,那你就收集到了100天的币龄。如果你使用了这10个币,币龄被消耗(销毁)了。
优缺点:
优点:缩短达成共识所需的时间,比工作量证明更加节约能源。
缺点:本质上仍然需要网络中的节点进行挖矿运算,转账真实性较难保证
概念:
授权股权证明机制(DelegatedProofofStake),与董事会投票类似,该机制拥有一个内置的实时股权人投票系统,就像系统随时都在召开一个永不散场的股东大会,所有股东都在这里投票决定公司决策。
授权股权证明在尝试解决传统的PoW机制和PoS机制问题的同时,还能通过实施科技式的民主抵消中心化所带来的负面效应。基于DPoS机制建立的区块链的去中心化依赖于一定数量的代表,而非全体用户。在这样的区块链中,全体节点投票选举出一定数量的节点代表,由他们来代理全体节点确认区块、维持系统有序运行。
同时,区块链中的全体节点具有随时罢免和任命代表的权力。如果必要,全体节点可以通过投票让现任节点代表失去代表资格,重新选举新的代表,实现实时的民主。
应用:
比特股(Bitshare)是一类采用DPOS机制的密码货币。通过引入了见证人这个概念,见证人可以生成区块,每一个持有比特股的人都可以投票选举见证人。得到总同意票数中的前N个(N通常定义为101)候选者可以当选为见证人,当选见证人的个数(N)需满足:至少一半的参与投票者相信N已经充分地去中心化。
见证人的候选名单每个维护周期(1天)更新一次。见证人然后随机排列,每个见证人按序有2秒的权限时间生成区块,若见证人在给定的时间片不能生成区块,区块生成权限交给下一个时间片对应的见证人。DPoS的这种设计使得区块的生成更为快速,也更加节能。
DPOS充分利用了持股人的投票,以公平民主的方式达成共识,他们投票选出的N个见证人,可以视为N个矿池,而这N个矿池彼此的权利是完全相等的。持股人可以随时通过投票更换这些见证人(矿池),只要他们提供的算力不稳定,计算机宕机,或者试图利用手中的权力作恶。
优缺点:
优点:缩小参与验证和记账节点的数量,从而达到秒级的共识验证
缺点:中心程度较弱,安全性相比POW较弱,同时节点代理是人为选出的,公平性相比POS较低,同时整个共识机制还是依赖于代币的增发来维持代理节点的稳定性。
区块链中的每个区块中记录要经历哪些验证环节?
会经历三个验证环节,分别是:
1.账本验证问题实际上对于第一个问题,很容易想到解决方法,那就是少数服从多数,如果某个节点的账本数据被篡改了,那么只需要和全网其他节点的数据比对,就必然能发现异常。但问题在于,随着时间的推移,记录的累积,数据量会越来越庞大,记得在13年的时候,笔者下载的比特币钱包,从网络同步下载下来的交易账本数据就已经多达几十GB,如果说要对这么大的数据进行逐一传输、比对,可以说是不现实的。
2.账户所有权的证明如果我要通过某个账户给另一个账户转账,必然需要证明我对此账户的所有权。对于中心化的货币系统,我们只需要向银行出示密码即可,但是对于去中心化的系统,如果我们也通过出示密码给其他节点,来证明我们对账户的所有权,那么我们的密码也就泄露给了其他节点(即用户)。
3.事实上这是一个现代密码学中比较基础的问题,说白了就是如何在不暴露自己私钥的前提下,自证身份,也有很成熟的解决方法:利用非对称加密算法。关于算法的细节,计划在后面单独说说现代密码学的一些基础算法,这里我们就用类比的方法描述一下。
4.记账问题:去中心化的前提就是,时刻需要有节点在线,否则就没有人处理记账、验证交易等工作,那么,比特币有什么机制,让人们心甘情愿的时刻保持在线呢?我们之前说过,比特币_10分钟,会将这10分钟内的交易数据打包记录成一个区块,也就是记账。但是不是所有人都有权利去记账的,全网的每个节点,都会去计算一个问题,只有第一个解出符合要求的答案的节点,才有记账权,而作为奖励,该节点会得到一定数量的比特币。
5.随着比特币的价格越来越高,越来越多的人参与到这种解题竞赛中去,并将这一过程戏称为“挖矿”,也正是这些“矿工”,维持着整个比特币网络的运转。而这也就是比特币的发行过程:_10分钟,通过奖励矿工的形式,产生新的比特币。
如何检测区块链智能合约的风险等级高低随着上海城市数字化转型脚步的加快,区块链技术在政务、金融、物流、司法等众多领域得到深入应用。在应用过程中,不仅催生了新的业务形态和商业模式,也产生了很多安全问题,因而安全监管显得尤为重要。安全测评作为监管重要手段之一,成为很多区块链研发厂商和应用企业的关注热点。本文就大家关心的区块链合规性安全测评谈谈我们做的一点探索和实践。
一、区块链技术测评
区块链技术测评一般分为功能测试、性能测试和安全测评。
1、功能测试
功能测试是对底层区块链系统支持的基础功能的测试,目的是衡量底层区块链系统的能力范围。
区块链功能测试主要依据GB/T25000.10-2016《系统与软件质量要求和评价(SQuaRE)第10部分:系统与软件质量模型》、GB/T25000.51-2016《系统与软件质量要求和评价(SQuaRE)第51部分:就绪可用软件产品(RUSP)的质量要求和测试细则》等标准,验证被测软件是否满足相关测试标准要求。
区块链功能测试具体包括组网方式和通信、数据存储和传输、加密模块可用性、共识功能和容错、智能合约功能、系统管理稳定性、链稳定性、隐私保护、互操作能力、账户和交易类型、私钥管理方案、审计管理等模块。
2、性能测试
性能测试是为描述测试对象与性能相关的特征并对其进行评价而实施和执行的一类测试,大多在项目验收测评中,用来验证既定的技术指标是否完成。
区块链性能测试具体包括高并发压力测试场景、尖峰冲击测试场景、长时间稳定运行测试场景、查询测试场景等模块。
3、安全测评
区块链安全测评主要是对账户数据、密码学机制、共识机制、智能合约等进行安全测试和评价。
区块链安全测评的主要依据是《DB31/T1331-2021区块链技术安全通用要求》。也可根据实际测试需求参考《JR/T0193-2020区块链技术金融应用评估规则》、《JR/T0184—2020金融分布式账本技术安全规范》等标准。
区块链安全测评具体包括存储、网络、计算、共识机制、密码学机制、时序机制、个人信息保护、组网机制、智能合约、服务与访问等内容。
二、区块链合规性安全测评
区块链合规性安全测评一般包括“区块链信息服务安全评估”、“网络安全等级保护测评”和“专项资金项目验收测评”三类。
1、区块链信息服务安全评估
区块链信息服务安全评估主要依据国家互联网信息办公室2019年1月10日发布的《区块链信息服务管理规定》(以下简称“《规定》”)和参考区块链国家标准《区块链信息服务安全规范(征求意见稿)》进行。
《规定》旨在明确区块链信息服务提供者的信息安全管理责任,规范和促进区块链技术及相关服务的健康发展,规避区块链信息服务安全风险,为区块链信息服务的提供、使用、管理等提供有效的法律依据。《规定》第九条指出:区块链信息服务提供者开发上线新产品、新应用、新功能的,应当按照有关规定报国家和省、自治区、直辖市互联网信息办公室进行安全评估。
《区块链信息服务安全规范》是由中国科学院信息工程研究所牵头,浙江大学、中国电子技术标准化研究院、上海市信息安全测评认证中心等单位共同参与编写的一项建设和评估区块链信息服务安全能力的国家标准。《区块链信息服务安全规范》规定了联盟链和私有链的区块链信息服务提供者应满足的安全要求,包括安全技术要求和安全保障要求以及相应的测试评估方法,适用于指导区块链信息服务安全评估和区块链信息服务安全建设。标准提出的安全技术要求、保障要求框架如下:
图1区块链信息服务安全要求模型
2、网络安全等级保护测评
网络安全等级保护测评的主要依据包括《GB/T22239-2019网络安全等级保护基本要求》、《GB/T28448-2019网络安全等级保护测评要求》。
区块链作为一种新兴信息技术,构建的应用系统同样属于等级保护对象,需要按照规定开展等级保护测评。等级保护安全测评通用要求适用于评估区块链的基础设施部分,但目前并没有提出区块链特有的安全要求。因此,区块链安全测评扩展要求还有待进一步探索和研究。
3、专项资金项目验收测评
根据市经信委有关规定,信息化专项资金项目在项目验收时需出具安全测评报告。区块链应用项目的验收测评将依据上海市最新发布的区块链地方标准《DB31/T1331-2021区块链技术安全通用要求》开展。
三、区块链安全测评探索与实践
1、标准编制
上海测评中心积极参与区块链标准编制工作。由上海测评中心牵头,苏州同济区块链研究院有限公司、上海七印信息科技有限公司、上海墨珩网络科技有限公司、电信科学技术第一研究所等单位参加编写的区块链地方标准《DB31/T1331-2021区块链技术安全通用要求》已于2021年12月正式发布,今年3月1日起正式实施。上海测评中心参与编写的区块链国标《区块链信息服务安全规范》正处于征求意见阶段。
同时,测评中心还参与编写了国家人力资源和社会保障部组织,同济大学牵头编写的区块链工程技术人员初级和中级教材,负责编制“测试区块链系统”章节内容。
2、项目实践
近年来,上海测评中心依据相关技术标准进行了大量的区块链安全测评实践,包括等级保护测评、信息服务安全评估、项目安全测评等。在测评实践中,发现的主要安全问题如下:
表1区块链主要是安全问题
序号
测评项
问题描述
1
共识算法
共识算法采用Kafka或Raft共识,不支持拜占庭容错,不支持容忍节点恶意行为。
2
上链数据
上链敏感信息未进行加密处理,通过查询接口或区块链浏览器可访问链上所有数据。
3
密码算法
密码算法中使用的随机数不符合GB/T32915-2016对随机性的要求。
4
节点防护
对于联盟链,未能对节点服务器所在区域配置安全防护措施。
5
通信传输
节点间通信、区块链与上层应用之间通信时,未建立安全的信息传输通道。
6
共识算法
系统部署节点数量较少,有时甚至没有达到共识算法要求的容错数量。
7
智能合约
未对智能合约的运行进行监测,无法及时发现、处置智能合约运行过程中出现的问题。
8
服务与访问
上层应用存在未授权、越权等访问控制缺陷,导致业务错乱、数据泄露。
9
智能合约
智能合约编码不规范,当智能合约出现错误时,不提供智能合约冻结功能。
10
智能合约
智能合约的运行环境没有与外部隔离,存在外部攻击的风险。
3、工具应用
测评中心在组织编制《DB31/T1331-2021区块链技术安全通用要求》时,已考虑与等级保护测评的衔接需求。DB31/T1331中的“基础设施层”安全与等级保护的安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心等相关要求保持一致,“协议层安全”、“扩展层安全”则更多体现区块链特有的安全保护要求。
测评中心依据DB31/T1331相关安全要求,正在组织编写区块链测评扩展要求,相关成果将应用于网络安全等级保护测评工具——测评能手。届时,使用“测评能手”软件的测评机构就能准确、规范、高效地开展区块链安全测评,发现区块链安全风险,并提出对应的整改建议
区块链如何更好的保证电子合同效力电子合同本身就是一种电子数据,具有易篡改与易删除等安全缺陷,不利于该服务的长期发展。为了保证用户在电子合同平台上签署的电子文件与电子合同的法律效力,需要对电子合同签署的全过程进行存证。
在根据区块链存证技术实现的“法链”应用中,平台将对电子合同签署的关键环节进行存档,并将关键信息与数据分布存储到整个区块链当中,从而实现电子合同的全流程存证。
深究其实现原理,区块链通过深度使用密码学算法、特别设计的数据结构和多方参与的共识算法,由机器算法来解决多方交易记录的一致性、可靠存储和防篡改问题,与电子数据存证有着天然的强关联。
首先,电子合同签约记录存储在由多方共同维护的共享账本上,不可篡改,不可抵赖,当然也不会丢失。
其次,电子合同文本、电子合同要素加密存储,包括电子合同参与人也采取加密存储,只有参与人才可以解密查看,在数据上保护签约方隐私。
再次,机器按照预定义的规则(智能合约)严格执行,不再仅靠与第三方一纸协议保证。基于区块链的KYC服务自动检查验证证书有效性和身份,在保证隐私的基础上确保参与人身份有效真实。
目前,我们的电子合同平台上所签的电子合同都通过区块链技术实现了电子文件数字指纹的分布式存证,进一步强化了平台电子合同的法律效力。
区块链使用安全如何来保证呢区块链本身解决的就是陌生人之间大规模协作问题,即陌生人在不需要彼此信任的情况下就可以相互协作。那么如何保证陌生人之间的信任来实现彼此的共识机制呢?中心化的系统利用的是可信的第三方背书,比如银行,银行在老百姓看来是可靠的值得信任的机构,老百姓可以信赖银行,由银行解决现实中的纠纷问题。但是,去中心化的区块链是如何保证信任的呢?
实际上,区块链是利用现代密码学的基础原理来确保其安全机制的。密码学和安全领域所涉及的知识体系十分繁杂,我这里只介绍与区块链相关的密码学基础知识,包括Hash算法、加密算法、信息摘要和数字签名、零知识证明、量子密码学等。您可以通过这节课来了解运用密码学技术下的区块链如何保证其机密性、完整性、认证性和不可抵赖性。
基础课程第七课区块链安全基础知识
一、哈希算法(Hash算法)
哈希函数(Hash),又称为散列函数。哈希函数:Hash(原始信息)=摘要信息,哈希函数能将任意长度的二进制明文串映射为较短的(一般是固定长度的)二进制串(Hash值)。
一个好的哈希算法具备以下4个特点:
1、一一对应:同样的明文输入和哈希算法,总能得到相同的摘要信息输出。
2、输入敏感:明文输入哪怕发生任何最微小的变化,新产生的摘要信息都会发生较大变化,与原来的输出差异巨大。
3、易于验证:明文输入和哈希算法都是公开的,任何人都可以自行计算,输出的哈希值是否正确。
4、不可逆:如果只有输出的哈希值,由哈希算法是绝对无法反推出明文的。
5、冲突避免:很难找到两段内容不同的明文,而它们的Hash值一致(发生碰撞)。
举例说明:
Hash(张三借给李四10万,借期6个月)=123456789012
账本上记录了123456789012这样一条记录。
可以看出哈希函数有4个作用:
简化信息
很好理解,哈希后的信息变短了。
标识信息
可以使用123456789012来标识原始信息,摘要信息也称为原始信息的id。
隐匿信息
账本是123456789012这样一条记录,原始信息被隐匿。
验证信息
假如李四在还款时欺骗说,张三只借给李四5万,双方可以用哈希取值后与之前记录的哈希值123456789012来验证原始信息
Hash(张三借给李四5万,借期6个月)=987654321098
987654321098与123456789012完全不同,则证明李四说谎了,则成功的保证了信息的不可篡改性。
常见的Hash算法包括MD4、MD5、SHA系列算法,现在主流领域使用的基本都是SHA系列算法。SHA(SecureHashAlgorithm)并非一个算法,而是一组hash算法。最初是SHA-1系列,现在主流应用的是SHA-224、SHA-256、SHA-384、SHA-512算法(通称SHA-2),最近也提出了SHA-3相关算法,如以太坊所使用的KECCAK-256就是属于这种算法。
MD5是一个非常经典的Hash算法,不过可惜的是它和SHA-1算法都已经被破解,被业内认为其安全性不足以应用于商业场景,一般推荐至少是SHA2-256或者更安全的算法。
哈希算法在区块链中得到广泛使用,例如区块中,后一个区块均会包含前一个区块的哈希值,并且以后一个区块的内容+前一个区块的哈希值共同计算后一个区块的哈希值,保证了链的连续性和不可篡改性。
二、加解密算法
加解密算法是密码学的核心技术,从设计理念上可以分为两大基础类型:对称加密算法与非对称加密算法。根据加解密过程中所使用的密钥是否相同来加以区分,两种模式适用于不同的需求,恰好形成互补关系,有时也可以组合使用,形成混合加密机制。
对称加密算法(symmetriccryptography,又称公共密钥加密,common-keycryptography),加解密的密钥都是相同的,其优势是计算效率高,加密强度高;其缺点是需要提前共享密钥,容易泄露丢失密钥。常见的算法有DES、3DES、AES等。
非对称加密算法(asymmetriccryptography,又称公钥加密,public-keycryptography),与加解密的密钥是不同的,其优势是无需提前共享密钥;其缺点在于计算效率低,只能加密篇幅较短的内容。常见的算法有RSA、SM2、ElGamal和椭圆曲线系列算法等。对称加密算法,适用于大量数据的加解密过程;不能用于签名场景:并且往往需要提前分发好密钥。非对称加密算法一般适用于签名场景或密钥协商,但是不适于大量数据的加解密。
三、信息摘要和数字签名
顾名思义,信息摘要是对信息内容进行Hash运算,获取唯一的摘要值来替代原始完整的信息内容。信息摘要是Hash算法最重要的一个用途。利用Hash函数的抗碰撞性特点,信息摘要可以解决内容未被篡改过的问题。
数字签名与在纸质合同上签名确认合同内容和证明身份类似,数字签名基于非对称加密,既可以用于证明某数字内容的完整性,同时又可以确认来源(或不可抵赖)。
我们对数字签名有两个特性要求,使其与我们对手写签名的预期一致。第一,只有你自己可以制作本人的签名,但是任何看到它的人都可以验证其有效性;第二,我们希望签名只与某一特定文件有关,而不支持其他文件。这些都
D. 以太坊区块链之Bug --2020/05/19
为了防止交易重播,ETH(ETC)节点要求每笔交易必须有一个nonce数值。每一个账户从同一个节点发起交易时,这个nonce值从0开始计数,发送一笔nonce对应加1。当前面的nonce处理完成之后才会处理后面的nonce。注意这里的前提条件是相同的地址在相同的节点发送交易。
以下是nonce使用的几条规则:
● 当nonce太小(小于之前已经有交易使用的nonce值),交易会被直接拒绝。
● 当nonce太大,交易会一直处于队列之中,这也就是导致我们上面描述的问题的原因;
● 当发送一个比较大的nonce值,然后补齐开始nonce到那个值之间的nonce,那么交易依旧可以被执行。
● 当交易处于queue中时停止geth客户端,那么交易queue中的交易会被清除掉。
第一个字段 AccountNonce ,直译就是账户随机数。它是以太坊中很小但也很重要的一个细节。以太坊为每个账户和交易都创建了一个Nonce,当从账户发起交易的时候,当前账户的Nonce值就被作为交易的Nonce。这里,如果是普通账户那么Nonce就是它发出的交易数,如果是合约账户就是从它的创建合约数。
为什么要使用这个Nonce呢?其主要目的就是为了防止重复攻击(Replay Attack)。因为交易都是需要签名的,假定没有Nonce,那么只要交易数据和发起人是确定的,签名就一定是相同的,这样攻击者就能在收到一个交易数据后,重新生成一个完全相同的交易并再次提交,比如A给B发了个交易,因为交易是有签名的,B虽然不能改动这个交易数据,但只要反复提交一模一样的交易数据,就能把A账户的所有资金都转到B手里。
当使用账户Nonce之后,每次发起一个交易,A账户的Nonce值就会增加,当B重新提交时,因为Nonce对不上了,交易就会被拒绝。这样就可以防止重复攻击。当然,事情还没有完,因为还能跨链实施攻击,直到EIP-155引入了chainID,才实现了不同链之间的交易数据不兼容。事实上,Nonce并不能真正防止重复攻击,比如A向B买东西,发起交易T1给B,紧接着又提交另一个交易T2,T2的Gas价格更高、优先级更高将被优先处理,如果恰好T2处理完成后剩余资金已经不足以支付T1,那么T1就会被拒绝。这时如果B已经把东西给了A,那A也就攻击成功了。所以说,就算交易被处理了也还要再等待一定时间,确保生成足够深度的区块,才能保证交易的不可逆。
Price 指的是单位Gas的价格,所谓Gas就是交易的消耗,Price就是单位Gas要消耗多少以太币(Ether),Gas * Price就是处理交易需要消耗多少以太币,它就相当于比特币中的交易手续费。
GasLimit 限定了本次交易允许消耗资源的最高上限,换句话说,以太坊中的交易不可能无限制地消耗资源,这也是以太坊的安全策略之一,防止攻击者恶意占用资源。
Recipient 是交易接收者,它是common.Address指针类型,代表一个地址。这个值也可以是空的,这时在交易执行时,会通过智能合约创建一个地址来完成交易。
Amount 是交易额。这个简单,不用解释。
Payload 比较重要,它是一个字节数组,可以用来作为创建合约的指令数组,这时每个字节都是一个单独的指令;也可以作为数据数组,由合约指令来进行操作。合约由以太坊虚拟机(Ethereum Virtual Machine,EVM)创建并执行。
V、R、S 是交易的签名数据。以太坊当中,交易经过数字签名之后,生成的signature是一个长度65的字节数组,它被截成三段,前32字节被放进R,再32字节放进S,最后1个字节放进V。那么为什么要被截成3段呢?以太坊用的是ECDSA算法,R和S就是ECSDA签名输出,V则是Recovery ID。
R,S,V是交易签名后的值,它们可以被用来生成签名者的公钥;R,S是ECDSA椭圆加密算法的输出值,V是用于恢复结果的ID
E. luno发送ETH对方还没确认可以取消吗
luno发送ETH,对方还没确认是可以取消的。如果交易提交了但还没被确认则可以取消。以太坊是一个基于区块链的开源软件平台,拥有数以千计的去中心化应用程序 (DApp),为其原生加密货币以太 (ETH) 提供支持,可以在全球范围内发送和接收,而不受任何第三方干扰。
取消的操作:
取消待处理的以太坊交易有两种主要方法:应用程序内取消和设置自定义随机数。通常,当用户以较低的 gas 价格提交时,以太坊交易会挂起数小时或卡住。 因此,用户经常发现有必要更改以太坊交易。
在解决这个问题时,用户需要记住只有当交易仍在网络上未决时才能尝试取消。 他们需要采取的第一步是在区块浏览器中验证交易是否仍在等待中。 主要是粘贴交易哈希,也称为以太坊交易 ID,如果区块浏览器显示“待处理”,用户仍然可以尝试取消它。
取消卡住的以太坊交易的最简单方法是应用程序内取消,这需要用户退出以太坊钱包应用程序并关闭浏览器,重新打开并重新登录应用程序。
F. 濡備綍鍙栨秷鍙戦佽鍗′綇鐨勪互澶鍧婁氦鏄撳叿浣撴搷浣滄槸浠涔
鍦ㄧ綉缁滄瘮杈冩嫢鍫电殑鏃跺欙紝涓绗斾氦鏄撳氨浼氭湁鍙鑳借鍗″湪浠ュお鍧婄殑鏈鍐充簨鍔℃睜涓銆傞栧厛鐭垮伐瑕佽冭檻Gas璐归珮鐨勪氦鏄擄紝濡傛灉浣犵殑Gas璐规湁鐐逛綆鐨勮瘽锛屽彲鑳藉氨瑕佹帓闃熴備絾鏄鍙栨秷鍗′綇鐨勪氦鏄撳苟涓嶉毦鐨勩傚彧瑕佷綘鎰挎剰锛屽氨鑳藉熼噸鏂伴夋嫨涓涓鏇撮珮鐨凣as璐规潵瀹屾垚鍘熷厛鐨勪氦鏄撱備笅鍒楁槸鍏蜂綋杩囩▼锛
1.棣栧厛瑕佸艰埅鍒颁互澶鍧婃祻瑙堝櫒etherscan.io銆
2.鐒跺悗灏辫佹妸浣犵殑浜ゆ槗鍝堝笇鍊肩矘璐村埌浠ュお鍧婃祻瑙堝櫒鐨勬悳绱㈡爮銆
3.鎺ヤ笅鏉ヨ繘鍏ュ湪浜ゆ槗椤甸潰涓鐐瑰嚮鈥滅偣鍑绘煡鐪嬫洿澶氣濇寜閽銆
4.鐒跺悗灏变細鍑虹幇nonce锛堥殢鏈烘暟锛夛紝闇瑕佹妸杩欎釜鍙风爜璁颁笅鏉ャ
5.鎺ヤ笅鏉ュ氨瑕佸湪浣犵殑閽卞寘閲屽噯澶囦竴绗旀柊鐨勪氦鏄撱
6.鐒跺悗杩涘叆閽卞寘锛岀偣鍑烩滈珮绾р濋夐」锛岃緭鍏ュ拰浣犵殑鍗′綇鐨勪氦鏄撳搱甯屽肩浉鍚岀殑nonce(闇瑕佹敞鎰忕殑鏄:浣犲湪閽卞寘璁剧疆涓鍙浠ヨ佹縺娲昏嚜瀹氫箟nonce鍔熻兘)銆
7.鍙戦佹柊鐨勪氦鏄擄紝鐒跺悗鐐瑰嚮鈥滃揩閫熲滸as璐广
8.鍙瑕佺‘璁や簡锛岄偅涔堜氦鏄撳氨浼氳琚瑙i櫎鏉ユ簮锛氬尯鍧楀嵃璞
鎴戜滑閫氳繃浠ヤ笂鍏充簬濡備綍鍙栨秷鍙戦佽鍗′綇鐨勪互澶鍧婁氦鏄撳叿浣撴搷浣滄槸浠涔堝唴瀹逛粙缁嶅悗,鐩镐俊澶у朵細瀵瑰備綍鍙栨秷鍙戦佽鍗′綇鐨勪互澶鍧婁氦鏄撳叿浣撴搷浣滄槸浠涔堟湁涓瀹氱殑浜嗚В,鏇村笇鏈涘彲浠ュ逛綘鏈夋墍甯鍔┿