Hyperledger Fabric的一些密碼學(xué)常識(shí)
Hash
哈希(Hash)算法主要作用是將一段任意長(zhǎng)度的數(shù)據(jù),經(jīng)過計(jì)算轉(zhuǎn)換成一段定長(zhǎng)的數(shù)據(jù)。
這種算法的特性是:幾乎不能通過Hash的結(jié)果推導(dǎo)出原文。并且?guī)缀鯖]有可能找到兩個(gè)不同的信息,對(duì)兩個(gè)信息進(jìn)行Hash計(jì)算之后得到相同的哈希值。
Hash算法的一個(gè)重要特性就是:作驗(yàn)證的時(shí)候是快速的萤衰,但逆向推出明文是基本不可能的。例如:有兩條信息猜旬,可以很快速的計(jì)算出來它們各自的哈希值脆栋,并通過哈希值的比對(duì)倦卖,就可以判定出兩條信息是否內(nèi)容相同,但是幾乎不可能從過哈希值計(jì)算出信息的原文椿争。
注:哈希函數(shù)的另外一個(gè)特性怕膛,難題友好性在區(qū)塊鏈的工作量證明POW中起到很大作用。所謂難題友好性丘薛,是指沒有便捷的方法去產(chǎn)生一個(gè)滿足特殊要求的哈希值嘉竟。比如邦危,比特幣區(qū)塊洋侨,就是要求礦工計(jì)算到18個(gè)0開頭的哈希值,這通常需要一個(gè)非常大的計(jì)算量倦蚪。
非對(duì)稱密碼學(xué)的特征和用途
非對(duì)稱密碼學(xué)又稱公鑰密碼學(xué)希坚,是使用一對(duì)公鑰和私鑰的密碼學(xué),加密和解密用的不是同一把鑰匙陵且。
可以公開的鑰匙叫公鑰裁僧,需要保密的鑰匙叫私鑰。
公鑰由私鑰產(chǎn)生慕购,私鑰可以推導(dǎo)出公鑰聊疲,但從公鑰無法推導(dǎo)出私鑰。
非對(duì)稱密碼的主要用途是:加密和數(shù)字簽名
加密
加密沪悲,顧名思義就是對(duì)信息進(jìn)行加密获洲,在這種場(chǎng)景下,用公鑰加密殿如,用私鑰解密贡珊,
例如,小李要向小王發(fā)送保密信息時(shí)涉馁,首先小李使用小王的公鑰對(duì)信息加密门岔,然后把密文發(fā)送給小王,小王接收到密文之后烤送,用自己的私鑰解密獲得信息明文
數(shù)字簽名
數(shù)字簽名主要的目的就是讓簽名者無法抵賴寒随。和加密相反,在簽名的時(shí)候帮坚,用私鑰加密(簽名)妻往,用公鑰解密(驗(yàn)證)。
例如:乙方收到甲方傳過來的一串信息叶沛,怎么能夠確定是由甲方而不是其他人偽造的呢蒲讯?首先,需要甲方用自己的私鑰對(duì)信息加密灰署,然后把密文和明文發(fā)送給乙方判帮,乙方使用甲方的公鑰解密局嘁,如果能夠成功解密就可以證明信息確實(shí)是甲方發(fā)出的。但是晦墙,通常不需要對(duì)發(fā)送信息的整個(gè)內(nèi)容都加密悦昵,因?yàn)樘瑸榱颂岣咚俣壬纬梢岳肏ash算法的特性但指,首先用Hash算法計(jì)算出信息的唯一摘要,然后對(duì)信息摘要加密抗楔,乙方用甲方公鑰解密后得到的是信息的摘要棋凳,然后對(duì)信息作Hash計(jì)算得到摘要,將兩個(gè)摘要對(duì)比连躏,如果相同剩岳,可以認(rèn)為該信息是甲方發(fā)出的。
證書和證書鏈
證書
證書是由證書簽證機(jī)關(guān)(CA)簽發(fā)的對(duì)用戶的公鑰的認(rèn)證入热。
證書內(nèi)容主要包括:電子簽證機(jī)關(guān)的信息拍棕、公鑰用戶信息、公鑰勺良、權(quán)威機(jī)構(gòu)的簽字和有效期等绰播。(其實(shí)證書可以簡(jiǎn)單的看作一個(gè)公鑰)
證書鏈
CA是Certificate authority的縮寫,證書授權(quán)者尚困。就是頒發(fā)證書的機(jī)構(gòu)蠢箩。
根證書是頒發(fā)機(jī)構(gòu)頒發(fā)給自己的(自簽名,self-signed),這是信任的起點(diǎn)尾组。
其實(shí)CA簽發(fā)證書忙芒,就是用它自己的私鑰對(duì)證書的公鑰做數(shù)字簽名。
某機(jī)構(gòu)獲得頒發(fā)機(jī)構(gòu)頒發(fā)的證書及對(duì)應(yīng)的私鑰后讳侨,還可以用自己的私鑰再頒發(fā)新的證書(數(shù)字簽名)呵萨,這樣就形成了一個(gè)證書鏈。
對(duì)于一個(gè)證書鏈跨跨,如果頭一個(gè)證書是可信的潮峦,那么后續(xù)的證書就都是可信任的
TLS
Fabric通過使用TLS(Transport Layer Security)實(shí)現(xiàn)節(jié)點(diǎn)間安全通信。
一個(gè)Peer節(jié)點(diǎn)同時(shí)是TLS服務(wù)端和TLS客戶端:當(dāng)另外一個(gè)Peer節(jié)點(diǎn)勇婴、應(yīng)用或者CLI與當(dāng)前Peer節(jié)點(diǎn)建立連接的時(shí)候忱嘹,當(dāng)前Peer節(jié)點(diǎn)是TLS服務(wù)端;當(dāng)Peer節(jié)點(diǎn)與其它Peer節(jié)點(diǎn)或Orderer節(jié)點(diǎn)建立連接時(shí)耕渴,它是TLS客戶端拘悦。