區(qū)塊鏈中主要用到了哈希算法和非對(duì)稱加密。
1擅笔、哈希算法(hash)
哈希算法是一種數(shù)學(xué)函數(shù)算法。又叫散列算法屯援,他是一種數(shù)據(jù)的映射關(guān)系猛们。今天是6月6號(hào),明天高考狞洋,先回憶一下什么是函數(shù)弯淘。
函數(shù)的定義:給定一個(gè)數(shù)集A,假設(shè)其中的元素為x〖茫現(xiàn)對(duì)A中的元素x施加對(duì)應(yīng)法則f庐橙,記作f(x),得到另一數(shù)集B借嗽。假設(shè)B中的元素為y态鳖。則y與x之間的等量關(guān)系可以用y=f(x)表示。我們把這個(gè)關(guān)系式就叫函數(shù)關(guān)系式恶导,簡(jiǎn)稱函數(shù)(摘自百度百科)
哈希就是把任意長(zhǎng)度的輸入(又叫做預(yù)映射pre-image)通過散列算法變換成固定長(zhǎng)度的輸出浆竭,該輸出就是散列值。假設(shè)固定長(zhǎng)度是兩位數(shù)惨寿,你不管給定什么值邦泄,經(jīng)過哈希函數(shù)(哈希函數(shù)也是函數(shù))的計(jì)算,結(jié)果也就是y只是10-99中的一個(gè)裂垦。這個(gè)y就是散列值顺囊。可以這么記h=HASH(X|z)蕉拢,z叫原像特碳,h是哈希值,也叫數(shù)據(jù)指紋企量〔馕可以用作摘要。z的可選數(shù)據(jù)集合構(gòu)成X届巩。
哈希算法有4個(gè)特性:
(1)原像不可逆硅瞧。可以通過z推導(dǎo)出h恕汇,但是不能根據(jù)h推導(dǎo)z腕唧。他是單向的或辖。
(2)難題友好型。如果要得到難題的答案枣接,只有通過暴力枚舉颂暇,沒有更好的方法。假設(shè)我們知道h的值但惶,我們不能根據(jù)h得到z耳鸯,我們只能不斷的用不同的z去hash,得到的結(jié)果和z比較膀曾。假設(shè)有多個(gè)原像的結(jié)果都是同一個(gè)哈希值县爬,這多個(gè)原像就組成了X,
X的大小哈希算法的安全因子之一添谊。
(3)發(fā)散性财喳。對(duì)于任意的z,我們稍微改動(dòng)一下z斩狱,例如z1耳高,兩者的哈希值完全不同。
(4)抗碰撞性所踊。對(duì)于任意兩個(gè)不同的z泌枪,那么他們對(duì)應(yīng)的哈希值也不同。強(qiáng)抗碰撞性(Strong Collision-Resistant )找出任意兩個(gè)不同的x,x' 污筷,使得h(x)=h(x')是困難的(計(jì)算不可行)工闺;也有弱抗碰撞性(Weak Collision-Resistant )給你一個(gè)x,你無法找到另一個(gè)x'瓣蛀。x'的哈希值也是x的哈希值陆蟆。
弱抗碰撞性:當(dāng)給定某條消息的散列值時(shí),單向散列函數(shù)必須確保要找到和該條消息具有相同散列值的另外一條消息是非常困難的惋增。
強(qiáng)抗碰撞性:是指要找到散列值相同的兩條不同的消息是非常困難的叠殷。
如果一個(gè)Hash函數(shù)是抗強(qiáng)碰撞的,那么同時(shí)也是抗弱碰撞的诈皿。
目前流行的hash算法有md5 sha-1和sha-2林束。MD5不具備強(qiáng)的抗碰撞性。目前使用較多的是sha-2.
區(qū)塊鏈中的hash
2稽亏、非對(duì)稱加密
對(duì)稱加密在加密和解密時(shí)使用的是同一個(gè)秘鑰壶冒;而非對(duì)稱加密算法需要兩個(gè)密鑰來進(jìn)行加密和解密,這兩個(gè)秘鑰是公開密鑰(public key截歉,簡(jiǎn)稱公鑰)和私有密鑰(private key胖腾,簡(jiǎn)稱私鑰)。私鑰是自己要保存好的,公鑰是要公開的咸作。常見的非對(duì)稱加密有RSA锨阿、ECC等。
私鑰都是由錢包來生成的记罚,而不是人設(shè)定的墅诡。
根據(jù)私鑰利用橢圓曲線加密算法生成公鑰,公鑰不能倒推得出私鑰桐智,不然相當(dāng)于把私鑰告訴別人末早。他倆具有一一對(duì)應(yīng)的關(guān)系,通過公鑰來求出私鑰是非常困難的酵使。
地址可由公鑰經(jīng)過哈希算法得到荐吉。公鑰可以很容易生成地址,且一一對(duì)應(yīng)口渔。但是通過地址來求出公鑰是非常困難的。地址相當(dāng)于銀行卡穿撮,用來發(fā)送和接收數(shù)字資產(chǎn)缺脉,可以隨意公開出去的。