官术网_书友最值得收藏!

◇區塊鏈的加密技術

1.哈希函數

哈希函數不是指某種特定的函數,而是一類函數,有多種實現方式。

(1)定義。百度百科給出的定義是:“Hash,一般翻譯作‘散列’,也有直接音譯為‘哈希’的,就是把任意長度的輸入,通過散列算法,變換成固定長度的輸出,該輸出就是散列值。”

維基百科則直接將哈希函數的詞條定義到散列函數中:“散列函數(Hash Function)又稱散列算法、哈希函數,是一種從任何一種數據中創建小的數字‘指紋’的方法。該函數將數據打亂混合,重新創建一個叫作散列值的指紋。散列值通常由一個較短的隨機字母和數字組成的字符串來代表。”

百度百科與維基百科都提到了一個概念:哈希函數(散列函數)能夠將任意長度的輸入值轉變成固定長度的輸出值,該值稱為散列值,輸出值通常為字母與數字的組合。

(2)性質。所有的散列函數都有這樣一個基本特性:如果兩個散列值是不相同的(根據同一函數),那么這兩個散列值的原始輸入也是不相同的。該特性是散列函數具有確定性的結果。但是,散列函數的輸入和輸出不是一一對應的,如果兩個散列值相同,兩個輸入值很可能也是相同的,但不能肯定二者一定相同。輸入一些數據,計算出散列值,然后部分改變輸入值,一個具有強混淆特性的散列函數就會產生完全不同的散列值。

典型的散列函數都有無限定義域,比如,任意長度的字節字符串和有限的值域;固定長度的比特串。在某些情況下,散列函數可以設計成具有相同大小的定義域和值域間的一一對應。

(3)常用的Hash函數包括如下幾種:

①數字分析法。對一組數據進行分析,比如,一組員工的出生年月日,如果出生年月日的前幾位數字大體相同,出現沖突的概率就會很大;如果年月日的后幾位表示月份和具體日期的數字差別很大,用后面的數字來構成散列地址,沖突的概率就會明顯降低。因此,所謂數字分析法就是找出數字規律,盡可能地利用這些數據來構造沖突概率較低的散列地址。

②直接尋址法。取關鍵字或關鍵字的某個線性函數值為散列地址,即H(key)=key或H(key)=a·key+b,其中a和b為常數。這種散列函數,叫自身函數。

③折疊法。首先,將關鍵字分割成位數相同的幾部分,最后一部分位數可以不同;然后,取幾部分的疊加和(去除進位)作為散列地址。

④隨機數法。選擇一個隨機函數,取關鍵字作為隨機函數的種子,生成隨機值,作為散列地址。通常,用于關鍵字長度不同的場合。

⑤平方取中法。簡而言之,就是取關鍵字平方后的中間幾位作為散列地址。

2.非對稱加密

(1)該法是一種密鑰的保密方法。非對稱加密算法需要兩個密鑰:公鑰和私鑰。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法。

非對稱加密算法實現機密信息交換的基本過程是:甲方生成一對密鑰并將公鑰公開,向甲方發送信息的其他角色(乙方)使用該密鑰(甲方的公鑰)對機密信息進行加密,再發送給甲方;甲方用自己私鑰對加密后的信息進行解密。甲方想要回復乙方時,過程正好相反。

非對稱加密,算法強度復雜,安全性依賴于算法與密鑰。可是,由于算法復雜,使得加密、解密速度比對稱加密、解密速度慢一些。

與對稱加密算法相比,非對稱加密的安全性更好,對稱加密的通信雙方使用相同的密鑰,如果一方的密鑰遭泄露,那么整個通信就會被破解。而非對稱加密使用一對密鑰,一個用來加密,一個用來解密,且公鑰是公開的,密鑰是自己保存的,不需要像對稱加密那樣在通信之前要先同步密鑰。

(2)非對稱加密工作原理。下面是非對稱加密的工作原理:

①在傳輸過程中,即使攻擊者截獲了傳輸密文,并得到了乙方的公鑰,也無法破解密文,因為只有乙方的私鑰才能解密密文。同樣,如果乙方要回復加密信息給甲方,就需要甲方先給乙方公布甲方的公鑰用于加密,甲方自己保存自己的私鑰用于解密。

②乙方用自己保存的另一把專用密鑰(私鑰)對加密后的信息進行解密。乙方只能用其專用密鑰(私鑰)解密由對應的公鑰加密后的信息。

③甲方得到該公鑰,使用該密鑰對機密信息進行加密,再發送給乙方。

④乙方生成一對密鑰(公鑰和私鑰),將公鑰向其他方公開。

(3)非對稱加密方法。公鑰私鑰的使用原則如下:

①用其中一個密鑰能解密數據,則該數據必然是對應的那個密鑰進行的加密。

②在密鑰對中,能讓大家都知道的是公鑰;不告訴大家、只有自己知道的,是私鑰。

③用一個密鑰加密數據,只有對應的密鑰才可以解密。

④每一個公鑰對應一個私鑰。

主站蜘蛛池模板: 忻州市| 塘沽区| 佛山市| 北流市| 北京市| 荣成市| 若羌县| 海盐县| 资源县| 香格里拉县| 镇远县| 图木舒克市| 武乡县| 磐安县| 将乐县| 汕头市| 汉寿县| 邯郸市| 长岭县| 通许县| 虎林市| 中牟县| 石泉县| 灌阳县| 南康市| 珠海市| 高唐县| 遂昌县| 宜宾市| 宜兰县| 法库县| 莱芜市| 南开区| 阜新| 共和县| 大悟县| 营口市| 枝江市| 龙游县| 桐庐县| 花莲县|