1 密碼學(xué)哈希函數(shù)
哈希函數(shù)是數(shù)據(jù)函數(shù),特征如下:
輸入可以為任意大小的字符串
產(chǎn)生固定大小的輸出,eg:輸出值為256位(可任意規(guī)模,紫瑤足夠大)
能進行有效的計算,對于特定的輸入字符串,在合理的時間內(nèi),算出hash Func的輸出,復(fù)雜度為O(n)
如果哈希哈數(shù)要達到密碼安全,就要附加一下3個特征:
碰撞阻力 collision - resistance
這里的碰撞指的是兩個不同的輸入,產(chǎn)生相同的輸出。如果對于哈希函數(shù)H()沒有人能找到碰撞,我們就稱碰撞阻力。 在輸入空間比輸出空間大的情況下,根據(jù)鴿巢原理(pigeonhole Principle)可以證明碰撞的存在。
2的256次方 + 1 的輸入對應(yīng) 256位的輸出,輸入多余輸出,在應(yīng)用哈希函數(shù)時,必將產(chǎn)生碰撞---- 概率學(xué)中的生日悖論(birthday paradox) 2的256次方 + 1 的碰撞概率比較小。應(yīng)用--信息摘要
隱秘性 hiding
我們只知道哈希函數(shù)的輸出,并不能通過輸出得到哈希哈數(shù)的輸入;哈希函數(shù)H具有隱秘性,如果:當其輸入r選自一個高階最小熵的概率分布,在給定H(r||x)條件下來確定x是不可行的。
最小熵是用于測試結(jié)果可預(yù)測行的手段,二高階最小熵這個概念比較直觀描述了分布(如隨機變量)的分散程度。應(yīng)用承諾
謎題友好 puzzle - friendliness
如果一個人想找到y(tǒng)對應(yīng)的輸入,假定在輸入集合中,有一部分是非常隨機的,那么他將非常難以求得y值得對應(yīng)輸入。
謎題友好 如果對于任意n位輸出值y,假定k選自高階最小熵分布,如果無法找到一個可行的方法,在此比2的n次方小很多時間內(nèi)找到x,保證H(k||x)=y成立,那么我們稱哈希函數(shù)H為謎題友好。
應(yīng)用:收索謎題
安全哈希算法 secure hash algorithm 256 sha-256
SHA-256 是一個主要被比特幣世界采用,并且效果還不錯的哈希函數(shù);只要能建立一個用于固定長度輸入的函數(shù),然后通過一個方法,就可以將接受固定長度的哈希函數(shù)轉(zhuǎn)化為可以接受任意長度輸入的哈希函數(shù),我們稱這個轉(zhuǎn)換過程為MD(Merkle-Damgard)變換,SHA-256是采用這種變換方法的常用哈希函數(shù)之一。這種基礎(chǔ)型,可用于固定長度,具備碰撞阻力的哈希函數(shù)被稱為壓縮函數(shù)。(compression function)
哈希指針一個指向數(shù)據(jù)存儲的位置及其位置數(shù)據(jù)的哈希值的指針。哈希指針可以告訴你數(shù)據(jù)的存儲的地址,還可以告訴你驗證數(shù)據(jù)有沒有被篡改。
通過哈希指針構(gòu)建的一個鏈表稱為區(qū)塊鏈blockchain 二在區(qū)塊鏈中,上一個區(qū)塊指針被置換為哈希指針。因此每個區(qū)塊包含了區(qū)塊的值地址,還包含了該值得摘要,使我們可以驗證那個值沒有改變。存儲鏈表頭部 the head of list 指向區(qū)塊最近使用的數(shù)據(jù),區(qū)塊的一個應(yīng)用就是防止篡改日志。鏈表頭部的哈希指針被稱為 創(chuàng)世區(qū)塊 genesis block
用哈希指針的二叉樹是梅克爾樹,特點就是簡潔的隸屬證明
數(shù)字簽名被認為是對紙上手寫簽名的數(shù)字建模。兩個特性要求
只有你可以制作你自己的簽名,任何看到他的人都可以驗證其有效性;
我們希望簽名只與某一個特定文件發(fā)生關(guān)系,因此改簽名不能用于表明你同意或支持另一份不同的文件。(確保別人不能將你的簽名從一份文件上剪下來,貼到另一份文件上)
由三個算法夠成:
(sk,pk):=generateKeys(keysize) generateKeys方法把keysize做為輸入,來產(chǎn)生一對公鑰和私鑰。sk被安全保存,并用來簽名一段消息;公鑰pk是人人都可以找到的,用于驗證你的信息。
sig:=sign(sk,message)簽名過程是把一段消息和私鑰作為一個輸入,對于消息輸出是簽名。
isVaild:=verify(pk,message, sig)驗證過程是通過一段消息和簽名消息和公鑰作為輸入,如果返回的結(jié)構(gòu)使true,證明簽名屬實;如果返回的結(jié)構(gòu)為假,證明簽名消息為false
簽名不可以偽造,并可以通過驗證
你的省份確實是pk的哈希;信息能經(jīng)過公鑰pk的驗證
sk和pk的體系--引入去中心化的身份管理的理念。不需要中央機構(gòu)。不需要告訴任何人你的注冊名字、隨時生成、數(shù)量不限。有了去中心化的管理,比特幣中的身份被稱為地址,地址就是公鑰的哈希值。 在比特幣中,你不需要明確的注冊或揭露你的身份,但的行為模式本身是可以識別的。這就是比特幣等加密貨幣的基本隱秘性問題。
唯一貨幣編號并建立字符串;秘密簽署秘鑰計算這個字符串的數(shù)字簽名,該字符串于高飛的簽名就構(gòu)成了一個單位幣,任何人都可以驗證高飛有效簽名。
高飛幣的兩個規(guī)則:
隨時創(chuàng)建新幣
可以轉(zhuǎn)給其他人
高飛幣沒有解決雙重支付 doublespending ---不安全
以高飛幣為基礎(chǔ)解決雙重支付問題但是沒有去中性化