㈠ 什麼是SHA256
SHA 家族
SHA (Secure Hash Algorithm,譯作安全散列演算法) 是美國國家安全局 (NSA) 設計,美國國家標准與技術研究院 (NIST) 發布的一系列密碼散列函數。正式名稱為 SHA 的家族第一個成員發布於 1993年。然而現在的人們給它取了一個非正式的名稱 SHA-0 以避免與它的後繼者混淆。兩年之後, SHA-1,第一個 SHA 的後繼者發布了。 另外還有四種變體,曾經發布以提升輸出的范圍和變更一些細微設計: SHA-224, SHA-256, SHA-384 和 SHA-512 (這些有時候也被稱做 SHA-2)。
SHA-0 和 SHA-1
最初載明的演算法於 1993年發布,稱做安全散列標准 (Secure Hash Standard),FIPS PUB 180。這個版本現在常被稱為 "SHA-0"。它在發布之後很快就被 NSA 撤回,並且以 1995年發布的修訂版本 FIPS PUB 180-1 (通常稱為 "SHA-1") 取代。根據 NSA 的說法,它修正了一個在原始演算法中會降低密碼安全性的錯誤。然而 NSA 並沒有提供任何進一步的解釋或證明該錯誤已被修正。1998年,在一次對 SHA-0 的攻擊中發現這次攻擊並不能適用於 SHA-1 — 我們不知道這是否就是 NSA 所發現的錯誤,但這或許暗示我們這次修正已經提升了安全性。SHA-1 已經被公眾密碼社群做了非常嚴密的檢驗而還沒發現到有不安全的地方,它現在被認為是安全的。
SHA-0 和 SHA-1 會從一個最大 2^64 位元的訊息中產生一串 160 位元的摘要然後以設計 MD4 及 MD5 訊息摘要演算法的 MIT 教授 Ronald L. Rivest 類似的原理為基礎來加密。
SHA-0 的密碼分析
在 CRYPTO 98 上,兩位法國研究者展示了一次對 SHA-0 的攻擊 (Chabaud and Joux, 1998): 散列碰撞可以復雜到 2^61 時被發現;小於 2^80 是理想的相同大小散列函數。
2004年時,Biham 和 Chen 發現了 SHA-0 的近似碰撞 — 兩個訊息可以散列出相同的數值;在這種情況之下,142 和 160 位元是一樣的。他們也發現了 SHA-0 在 80 次之後減少到 62 位元的完整碰撞。
2004年8月12日,Joux, Carribault, Lemuet 和 Jalby 宣布了完整 SHA-0 演算法的散列碰撞。這是歸納 Chabaud 和 Joux 的攻擊所完成的結果。發現這個碰撞要復雜到 2^51, 並且用一台有 256 顆 Itanium2 處理器的超級電腦耗時大約 80,000 CPU 工作時 。
2004年8月17日,在 CRYPTO 2004 的 Rump 會議上,Wang, Feng, Lai, 和 Yu 宣布了攻擊 MD5、SHA-0 和其他散列函數的初步結果。他們對 SHA-0 攻擊復雜到 2^40,這意味著他們攻擊的成果比 Joux 還有其他人所做的更好。該次 Rump 會議的簡短摘要可以在 這里找到,而他們在 sci.crypt 的討論,例如: 這些結果建議計劃使用 SHA-1 作為新的密碼系統的人需要重新考慮。
更長的變種
NIST 發布了三個額外的 SHA 變體,每個都有更長的訊息摘要。以它們的摘要長度 (以位元計算) 加在原名後面來命名:"SHA-256", "SHA-384" 和 "SHA-512"。它們發布於 2001年的 FIPS PUB 180-2 草稿中,隨即通過審查和評論。包含 SHA-1 的 FIPS PUB 180-2,於 2002年以官方標准發布。這些新的散列函數並沒有接受像 SHA-1 一樣的公眾密碼社群做詳細的檢驗,所以它們的密碼安全性還不被大家廣泛的信任。2004年2月,發布了一次 FIPS PUB 180-2 的變更通知,加入了一個額外的變種 "SHA-224",定義了符合雙金鑰 3DES 所需的金鑰長度。
Gilbert 和 Handschuh (2003) 研究了新的變種並且沒有發現弱點。
SHAd
SHAd 函數是一個簡單的相同 SHA 函數的重述:
SHAd-256(m)=SHA-256(SHA-256(m))。它會克服有關延伸長度攻擊的問題。
應用
SHA-1, SHA-224, SHA-256, SHA-384 和 SHA-512 都被需要安全散列演算法的美國聯邦政府所應用,他們也使用其他的密碼演算法和協定來保護敏感的未保密資料。FIPS PUB 180-1 也鼓勵私人或商業組織使用 SHA-1 加密。Fritz-chip 將很可能使用 SHA-1 散列函數來實現個人電腦上的數位版權管理。
首先推動安全散列演算法出版的是已合並的數位簽章標准。
SHA 散列函數已被做為 SHACAL 分組密碼演算法的基礎。
SHA-1 的描述
以下是 SHA-1 演算法的偽代碼:
(Initialize variables:)
a = h0 = 0x67452301
b = h1 = 0xEFCDAB89
c = h2 = 0x98BADCFE
d = h3 = 0x10325476
e = h4 = 0xC3D2E1F0
(Pre-processing:)
paddedmessage = (message) append 1
while length(paddedmessage) mod 512 > 448:
paddedmessage = paddedmessage append 0
paddedmessage = paddedmessage append (length(message) in 64-bit format)
(Process the message in successive 512-bit chunks:)
while 512-bit chunk(s) remain(s):
break the current chunk into sixteen 32-bit words w(i), 0 <= i <= 15
(Extend the sixteen 32-bit words into eighty 32-bit words:)
for i from 16 to 79:
w(i) = (w(i-3) xor w(i-8) xor w(i-14) xor w(i-16)) leftrotate 1
(Main loop:)
for i from 0 to 79:
temp = (a leftrotate 5) + f(b,c,d) + e + k + w(i) (note: all addition is mod 2^32)
where:
(0 <= i <= 19): f(b,c,d) = (b and c) or ((not b) and d), k = 0x5A827999
(20 <= i <= 39): f(b,c,d) = (b xor c xor d), k = 0x6ED9EBA1
(40 <= i <= 59): f(b,c,d) = (b and c) or (b and d) or (c and d), k = 0x8F1BBCDC
(60 <= i <= 79): f(b,c,d) = (b xor c xor d), k = 0xCA62C1D6
e = d
d = c
c = b leftrotate 30
b = a
a = temp
h0 = h0 + a
h1 = h1 + b
h2 = h2 + c
h3 = h3 + d
h4 = h4 + e
digest = hash = h0 append h1 append h2 append h3 append h4
注意:FIPS PUB 180-1 展示的構想,用以下的公式替代可以增進效能:
(0 <= i <= 19): f(b,c,d) = (d xor (b and (c xor d)))
(40 <= i <= 59): f(b,c,d) = (b and c) or (d and (b or c)))
㈡ 區塊鏈技術有哪些區塊鏈核心技術介紹
當下最火熱的互聯網話題是什麼,不用小編說也知道,那就是區塊鏈技術,不過不少朋友只是聽說過這個技術,對其並沒有過多的深入理解,那麼區塊鏈技術有哪些?下面我們將為大家帶來區塊鏈核心技術介紹,以作大家參考之用。
區塊鏈技術核心有哪些?
區塊鏈技術可以是一個公開的分類賬(任何人都可以看到),也可以是一個受許可的網路(只有那些被授權的人可以看到),它解決了供應鏈的挑戰,因為它是一個不可改變的記錄,在網路參與者之間共享並實時更新。
區塊鏈技術----數據層:設計賬本的數據結構
核心技術1、區塊+鏈:
從技術上來講,區塊是一種記錄交易的數據結構,反映了一筆交易的資金流向。系統中已經達成的交易的區塊連接在一起形成了一條主鏈,所有參與計算的節點都記錄了主鏈或主鏈的一部分。
每個區塊由區塊頭和區塊體組成,區塊體只負責記錄前一段時間內的所有交易信息,主要包括交易數量和交易詳情;區塊頭則封裝了當前的版本號、前一區塊地址、時間戳(記錄該區塊產生的時間,精確到秒)、隨機數(記錄解密該區塊相關數學題的答案的值)、當前區塊的目標哈希值、Merkle數的根值等信息。從結構來看,區塊鏈的大部分功能都由區塊頭實現。
核心技術2、哈希函數:
哈希函數可將任意長度的資料經由Hash演算法轉換為一組固定長度的代碼,原理是基於一種密碼學上的單向哈希函數,這種函數很容易被驗證,但是卻很難破解。通常業界使用y=hash(x)的方式進行表示,該哈希函數實現對x進行運算計算出一個哈希值y。
常使用的哈希演算法包括MD5、SHA-1、SHA-256、SHA-384及SHA-512等。以SHA256演算法為例,將任何一串數據輸入到SHA256將得到一個256位的Hash值(散列值)。其特點:相同的數據輸入將得到相同的結果。輸入數據只要稍有變化(比如一個1變成了0)則將得到一個完全不同的結果,且結果無法事先預知。正向計算(由數據計算其對應的Hash值)十分容易。逆向計算(破解)極其困難,在當前科技條件下被視作不可能。
核心技術3、Merkle樹:
Merkle樹是一種哈希二叉樹,使用它可以快速校驗大規模數據的完整性。在區塊鏈網路中,Merkle樹被用來歸納一個區塊中的所有交易信息,最終生成這個區塊所有交易信息的一個統一的哈希值,區塊中任何一筆交易信息的改變都會使得Merkle樹改變。
核心技術4、非對稱加密演算法:
非對稱加密演算法是一種密鑰的保密方法,需要兩個密鑰:公鑰和私鑰。公鑰與私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密,從而獲取對應的數據價值;如果用私鑰對數據進行簽名,那麼只有用對應的公鑰才能驗證簽名,驗證信息的發出者是私鑰持有者。
因為加密和解密使用敗裂仿的是兩個不同的密鑰,所以這種演算法叫做非對稱加密演算法,而對稱加密在加密與解密的過程中使用的是同一把密鑰。
區塊鏈技術----網路層:實現記賬節點的去中心化
核心技術5、P2P網路:
P2P網路(對等網路),又稱點對點技術,是沒有中心伺服器、依靠用戶群交換信息的互聯網體系。與有中心伺服器的中央網路系統不同,對等網路的每個用戶端既是一個節點,也有伺服器的功能。國內的迅雷軟體採用的就是P2P技術。P2P網路其具有去中心化與健壯性等特點。
區塊鏈技術----共識層:調配記賬節點的任務負載
核心技術6、共識機制:
共識機制,就是所有記賬節點之間如何達成共識,去認定一個記錄的有效性,這既是認定的手段,也是防止篡改的手段。目前主要有四大類共識機制:PoW、PoS、DPoS和分布式一致性演算法。
PoW(ProofofWork,工作量證明):PoW機制,也就是像比特幣的挖礦機制,礦工通過把網路尚未記錄的現有交易打包到一個區塊,然後不斷遍歷嘗試來尋找一個隨機數,使得新區塊加上隨機數的哈希值滿足一定的難度條件。找到滿足條件的隨機數,就相當於確定了區塊鏈最新的一個區塊,也相當於獲得了區塊鏈的本輪記賬權。礦工把滿足挖礦難度條件的區塊在源伏網路中廣播出去,全網其他節點在驗證該區塊滿足挖礦難度條件,同時區塊里的交易數據符合協議規范後,將各自把該區塊鏈接到自己版本的區塊鏈上,從而在全網形成對當前網路狀態的共識。
PoS(ProofofStake,權益證明):PoS機制,要求節點提供擁有一定數量的代幣證明來獲取競爭區塊鏈記賬權的一種分布式共識機制。如果單純依靠代幣余額來決定記賬者必然察纖使得富有者勝出,導致記賬權的中心化,降低共識的公正性,因此不同的PoS機制在權益證明的基礎上,採用不同方式來增加記賬權的隨機性來避免中心化。例如點點幣(PeerCoin)PoS機制中,擁有最多鏈齡長的比特幣獲得記賬權的幾率就越大。NXT和Blackcoin則採用一個公式來預測下一記賬的節點。擁有多的代幣被選為記賬節點的概率就會大。未來以太坊也會從目前的PoW機制轉換到PoS機制,從目前看到的資料看,以太坊的PoS機制將採用節點下賭注來賭下一個區塊,賭中者有額外以太幣獎,賭不中者會被扣以太幣的方式來達成下一區塊的共識。
DPoS(DelegatedProof-Of-Stake,股份授權證明):DPoS很容易理解,類似於現代企業董事會制度。比特股採用的DPoS機制是由持股者投票選出一定數量的見證人,每個見證人按序有兩秒的許可權時間生成區塊,若見證人在給定的時間片不能生成區塊,區塊生成許可權交給下一個時間片對應的見證人。持股人可以隨時通過投票更換這些見證人。DPoS的這種設計使得區塊的生成更為快速,也更加節能。
分布式一致性演算法:分布式一致性演算法是基於傳統的分布式一致性技術。其中有分為解決拜占庭將軍問題的拜占庭容錯演算法,如PBFT(拜占庭容錯演算法)。另外解決非拜占庭問題的分布式一致性演算法(Pasox、Raft),詳細演算法本文不做說明。該類演算法目前是聯盟鏈和私有鏈場景中常用的共識機制。
綜合來看,POW適合應用於公鏈,如果搭建私鏈,因為不存在驗證節點的信任問題,可以採用POS比較合適;而聯盟鏈由於存在不可信局部節點,採用DPOS比較合適。
區塊鏈技術----激勵層:制定記賬節點的"薪酬體系"
核心技術7、發行機制和激勵機制:
以比特幣為例。比特幣最開始由系統獎勵給那些創建新區塊的礦工,該獎勵大約每四年減半。剛開始每記錄一個新區塊,獎勵礦工50個比特幣,該獎勵大約每四年減半。依次類推,到公元2140年左右,新創建區塊就沒有系統所給予的獎勵了。屆時比特幣全量約為2100萬個,這就是比特幣的總量,所以不會無限增加下去。
另外一個激勵的來源則是交易費。新創建區塊沒有系統的獎勵時,礦工的收益會由系統獎勵變為收取交易手續費。例如,你在轉賬時可以指定其中1%作為手續費支付給記錄區塊的礦工。如果某筆交易的輸出值小於輸入值,那麼差額就是交易費,該交易費將被增加到該區塊的激勵中。只要既定數量的電子貨幣已經進入流通,那麼激勵機制就可以逐漸轉換為完全依靠交易費,那麼就不必再發行新的貨幣。
區塊鏈技術----合約層:賦予賬本可編程的特性
核心技術8、智能合約:
智能合約是一組情景應對型的程序化規則和邏輯,是通過部署在區塊鏈上的去中心化、可信共享的腳本代碼實現的。通常情況下,智能合約經各方簽署後,以程序代碼的形式附著在區塊鏈數據上,經P2P網路傳播和節點驗證後記入區塊鏈的特定區塊中。智能合約封裝了預定義的若干狀態及轉換規則、觸發合約執行的情景、特定情景下的應對行動等。區塊鏈可實時監控智能合約的狀態,並通過核查外部數據源、確認滿足特定觸發條件後激活並執行合約。
以上就是小編為您帶來的區塊鏈技術有哪些?區塊鏈核心技術介紹的全部內容。